|
@@ -39,10 +39,38 @@ static const char *TAG = "MQTT";
|
|
|
|
|
|
#ifdef MQTT_ENABLED
|
|
#ifdef MQTT_ENABLED
|
|
|
|
|
|
|
|
+static const char *TAG_RX = "MQTT_RX";
|
|
|
|
|
|
static esp_mqtt_client_handle_t client;
|
|
static esp_mqtt_client_handle_t client;
|
|
static bool connected = false;
|
|
static bool connected = false;
|
|
|
|
|
|
|
|
+int getJsonProp(const char *str,const char *prop) {
|
|
|
|
+ int propValue = -1;
|
|
|
|
+ const size_t propLen = strlen(prop);
|
|
|
|
+ char sStr[propLen+4];
|
|
|
|
+ strcpy(&sStr[1],prop);
|
|
|
|
+ sStr[0] = sStr[propLen+1] = '\"';
|
|
|
|
+ sStr[propLen+2] = ':';
|
|
|
|
+ sStr[propLen+3] = '\0';
|
|
|
|
+ char *ptr = strstr(str,sStr);
|
|
|
|
+ if( ptr != NULL ) {
|
|
|
|
+ ptr += strlen(sStr);
|
|
|
|
+ int retVal = sscanf(ptr,"%d",&propValue);
|
|
|
|
+ if( retVal == 1 ) {
|
|
|
|
+ return propValue;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return -1;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void remove_spaces(char* s) {
|
|
|
|
+ char* d = s;
|
|
|
|
+ do {
|
|
|
|
+ while (*d == ' ') {
|
|
|
|
+ ++d;
|
|
|
|
+ }
|
|
|
|
+ } while ( (*s++ = *d++) );
|
|
|
|
+}
|
|
|
|
|
|
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
|
|
static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
|
|
{
|
|
{
|
|
@@ -76,39 +104,36 @@ static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
|
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA Topic: <%.*s>", event->topic_len, event->topic);
|
|
ESP_LOGI(TAG, "MQTT_EVENT_DATA Topic: <%.*s>", event->topic_len, event->topic);
|
|
#ifdef IR_TRANSMIT
|
|
#ifdef IR_TRANSMIT
|
|
//printf("DATA=%.*s\r\n", event->data_len, event->data);
|
|
//printf("DATA=%.*s\r\n", event->data_len, event->data);
|
|
|
|
+ // {"fan":0,"power":1,"temp":245}
|
|
if( strncmp(event->topic,"hall/ac/ir_cmd_tx",event->topic_len) == 0 ) {
|
|
if( strncmp(event->topic,"hall/ac/ir_cmd_tx",event->topic_len) == 0 ) {
|
|
|
|
|
|
- uint8_t data[kPanasonicNumberOfBytes];
|
|
|
|
-
|
|
|
|
- if( event->data_len != kPanasonicNumberOfBytes*2 ) {
|
|
|
|
- ESP_LOGE("MQTT","Wrong length in MQTT-data %u",event->data_len);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- bool exitRx = false;
|
|
|
|
- for(uint8_t i=0;i<kPanasonicNumberOfBytes*2;i++) {
|
|
|
|
- const unsigned char c = event->data[i];
|
|
|
|
- if( c<'0' || c>'F' || (c>'9' && c<'A') ) {
|
|
|
|
- ESP_LOGE("MQTT","Wrong chars in MQTT-data");
|
|
|
|
- exitRx = true;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if( exitRx ) break;
|
|
|
|
-
|
|
|
|
- char *cp = event->data;
|
|
|
|
- for(uint8_t i=0;i<kPanasonicNumberOfBytes;i++) {
|
|
|
|
- int n = sscanf(cp, "%02X", (unsigned int*)&data[i]);
|
|
|
|
- if( n != 1 ) {
|
|
|
|
- ESP_LOGE("MQTT","Wrong chars (sscanf) in MQTT-data");
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- cp+=2;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ESP_LOGI("MQTT","Received a Toshiba IR Code for transmit");
|
|
|
|
-
|
|
|
|
- xQueueSend( toshibaTxQueue, &data, 0 );
|
|
|
|
|
|
+ int v1,v2,v3;
|
|
|
|
+ v1=v2=v3=0;
|
|
|
|
+ remove_spaces(event->data);
|
|
|
|
+
|
|
|
|
+ ESP_LOGI(TAG_RX, "Temp: %d", v1 = getJsonProp(event->data, "temp"));
|
|
|
|
+ ESP_LOGI(TAG_RX, "Fan: %d", v2 = getJsonProp(event->data, "fan"));
|
|
|
|
+ ESP_LOGI(TAG_RX, "Power: %d", v3 = getJsonProp(event->data, "power"));
|
|
|
|
+
|
|
|
|
+ if( v1 < 160 || v1 > 300 ) { ESP_LOGE(TAG_RX,"Error in temp data %d",v1); return 0; }
|
|
|
|
+
|
|
|
|
+ //const uint8_t addExtraTemp = (v1%10 == 5) ? 1 : 0;
|
|
|
|
+ //const uint8_t tempData = ((v1/10) - 16) * 2 + addExtraTemp;
|
|
|
|
+ //ESP_LOGI(TAG_RX,"TempData: %d", tempData);
|
|
|
|
+
|
|
|
|
+ // Fan: 0-5 -> 10, 3-7
|
|
|
|
+ if( v2 < 0 || v2 > 5 ) { ESP_LOGE(TAG_RX,"Error in fan data %d",v2); return 0; }
|
|
|
|
+ //const uint8_t fanData = (v2==0)? 10 : v2+2;
|
|
|
|
+
|
|
|
|
+ if( v3 != 0 && v3 != 1 ) { ESP_LOGE(TAG_RX,"Error in power data %d",v3); return 0; }
|
|
|
|
+ //const uint8_t powerData = v3;
|
|
|
|
+
|
|
|
|
+ IR_TX_DATA txData;
|
|
|
|
+ txData.temp = v1;
|
|
|
|
+ txData.fan = v2;
|
|
|
|
+ txData.power = v3;
|
|
|
|
+
|
|
|
|
+ xQueueSend( toshibaTxQueue, &txData, 0 );
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
break;
|
|
break;
|