|
@@ -31,6 +31,8 @@
|
|
|
#include "mqtt_client.h"
|
|
|
|
|
|
#include "wifi.h"
|
|
|
+#include "receiver.h"
|
|
|
+#include "toshiba_ir.h"
|
|
|
|
|
|
static const char *TAG = "MQTT";
|
|
|
|
|
@@ -52,7 +54,7 @@ static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
|
|
|
case MQTT_EVENT_CONNECTED:
|
|
|
connected = true;
|
|
|
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
|
|
|
- msg_id = esp_mqtt_client_subscribe(client, "#", 0);
|
|
|
+ msg_id = esp_mqtt_client_subscribe(client, "hall/ac/ir_cmd_tx", 0);
|
|
|
ESP_LOGI(TAG, "Sent subscribe successful, msg_id=%d", msg_id);
|
|
|
break;
|
|
|
case MQTT_EVENT_DISCONNECTED:
|
|
@@ -70,9 +72,42 @@ static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
|
|
|
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
|
|
|
break;
|
|
|
case MQTT_EVENT_DATA:
|
|
|
- ESP_LOGI(TAG, "MQTT_EVENT_DATA");
|
|
|
- printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
|
|
|
- printf("DATA=%.*s\r\n", event->data_len, event->data);
|
|
|
+ ESP_LOGI(TAG, "MQTT_EVENT_DATA Topic: <%.*s>", event->topic_len, event->topic);
|
|
|
+ //printf("DATA=%.*s\r\n", event->data_len, event->data);
|
|
|
+ if( strncmp(event->topic,"hall/ac/ir_cmd_tx",event->topic_len) == 0 ) {
|
|
|
+
|
|
|
+ uint8_t data[kToshibaNumberOfBytes];
|
|
|
+
|
|
|
+ if( event->data_len != kToshibaNumberOfBytes*2 ) {
|
|
|
+ ESP_LOGE("MQTT","Wrong length in MQTT-data %u",event->data_len);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ bool exitRx = false;
|
|
|
+ for(uint8_t i=0;i<kToshibaNumberOfBytes*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<kToshibaNumberOfBytes;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 );
|
|
|
+ }
|
|
|
break;
|
|
|
case MQTT_EVENT_ERROR:
|
|
|
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
|