- #ifdef UART_MQTT_SUPPORT
-
- // -----------------------------------------------------------------------------
- // GLOBALS TO THE MODULE
- // -----------------------------------------------------------------------------
- const byte numChars = 100;
- char receivedChars[numChars]; // an array to store the received data
- boolean newData = false;
-
- void _recvWithEndMarker() {
- static byte ndx = 0;
- char endMarker = '\n';
- char rc;
-
- while (Serial.available() > 0 && newData == false) {
- rc = Serial.read();
-
- if (rc != endMarker) {
- receivedChars[ndx] = rc;
- ndx++;
- if (ndx >= numChars) {
- ndx = numChars - 1;
- }
- }
- else {
- receivedChars[ndx] = '\0'; // terminate the string
- ndx = 0;
- newData = true;
- }
- }
- }
-
- void _uartSendUART_MQTT() {
- if (newData == true && MQTT_SUPPORT) {
- DEBUG_MSG_P(PSTR("[UART_MQTT] Send data over MQTT: %s\n"), receivedChars);
- mqttSend(MQTT_TOPIC_UARTIN, receivedChars); // publish: UART -> mqtt bus
- newData = false;
- }
- }
-
- void _uartSendMQTT_UART(const char * message) {
- DEBUG_MSG_P(PSTR("[UART_MQTT] Send data over UART: %s\n"), message);
- Serial.print(message);
- Serial.println();
- }
-
- #if MQTT_SUPPORT
- void _UART_MQTTMqttCallback(unsigned int type, const char * topic, const char * payload) {
- if (type == MQTT_CONNECT_EVENT) {
- mqttSubscribe(MQTT_TOPIC_UARTOUT);
- }
-
- if (type == MQTT_MESSAGE_EVENT) {
-
- // Match topic
- String t = mqttTopicKey((char *) topic);
- bool isUARTOut = t.equals(MQTT_TOPIC_UARTOUT);
-
- if (isUARTOut) {
- _uartSendMQTT_UART(payload);
- }
- }
- }
- #endif
-
- // -----------------------------------------------------------------------------
- // SETUP & LOOP
- // -----------------------------------------------------------------------------
-
- void uart_mqttSetup() {
-
- #if MQTT_SUPPORT
- mqttRegister(_UART_MQTTMqttCallback);
- #endif
-
- // Register oop
- espurnaRegisterLoop(UART_MQTTLoop);
-
- }
-
- void UART_MQTTLoop() {
- _recvWithEndMarker();
- _uartSendUART_MQTT();
- }
-
- #endif
|