From cffae2bfe545ddf02d52f552b4342821a2fde20c Mon Sep 17 00:00:00 2001 From: Matt Way Date: Wed, 13 Dec 2023 20:59:03 +1100 Subject: [PATCH] Publish blind position to MQTT when packet is received --- platformio.ini | 2 ++ src/main.cpp | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 9021c97..56b5d87 100644 --- a/platformio.ini +++ b/platformio.ini @@ -29,3 +29,5 @@ lib_deps = PacketCRC=symlink://..\PowerViewSniffer\lib\PacketCRC PacketBuilder + + PacketParser=symlink://..\PowerViewSniffer\lib\PacketParser diff --git a/src/main.cpp b/src/main.cpp index 44cdb9c..a72f364 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "secrets.h" #define SER_BAUDRATE (115200) @@ -22,6 +23,7 @@ static const uint8_t rfID[2] = { 0xC8, 0x2E }; // 0x2EC8 PacketReceiver packetReceiver(&radio); PacketBuilder remotePacketBuilder(0x369E, 0xAC, 0x82, 0x06); PacketBuilder hubPacketBuilder(0x0000, 0x3D, 0x96, 0x05); +PacketParser packetParser; EspMQTTClient client( SECRET_WIFI_SSID, // Wifi SSID @@ -115,7 +117,24 @@ void radioTransmitSetup() { } void processPacket(const uint8_t *buffer) { - Serial.println("Got packet"); + Message message; + bool result = packetParser.parsePacket(buffer, message); + if (result) { + if (message.type == PacketType::PUBLISH_FIELDS) { + PublishFieldsParameters parameters = std::get(message.parameters); + for (size_t i = 0; i < parameters.fields.size(); i++) { + Field field = parameters.fields[i]; + if (field.identifier == 0x50) { + if (message.source == 0x4EF1) { + uint16_t value = std::get(field.value); + uint8_t position = (uint8_t)std::round(((float)value / 0xFFFF) * 100); + String payload = String(position); + client.publish("hotdog/test_mqtt_blind/position", payload, true); + } + } + } + } + } } void sendCommand(uint8_t *buffer) //transmit a command