#include #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #define ARB_SERVER "192.168.xxx.xxx" #define ARB_CLIENT "MESWifi" #define ARB_SERVERPORT 1883 #define ARB_USERNAME "xxx" #define ARB_PW "xxx" WiFiClient client; PubSubClient mqtt(client); extern uint32_t lon_rx_count; extern uint32_t lon_crc_errors; int mqtt_last_publish_time = 0; int mqtt_lastConnect = 0; int mqtt_retries = 0; bool mqtt_fail = false; void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i=0;i= nextTime) { bool do_publish = false; if((time - mqtt_last_publish_time) > 5000) { do_publish = true; } if(do_publish) { mqtt_last_publish_time = time; /* debug */ mqtt_publish_int("feeds/integer/heizung/burning-minutes", lon_stat.burning_minutes); mqtt_publish_int("feeds/integer/heizung/last-error-minutes", lon_stat.last_error_minutes); if(lon_stat.burning_minutes != 0x7FFFFFFF && lon_stat.last_error_minutes != 0x7FFFFFFF) { mqtt_publish_int("feeds/integer/heizung/last-error-delta", lon_stat.burning_minutes - lon_stat.last_error_minutes); } mqtt_publish_int("feeds/integer/heizung/time-hour", timeStruct.tm_hour); mqtt_publish_int("feeds/integer/heizung/time-minute", timeStruct.tm_min); mqtt_publish_int("feeds/integer/heizung/ignite-stat-pos", lon_stat.igniteStatPos); /* debug */ mqtt_publish_int("feeds/integer/heizung/anheiz-stat", lon_stat.ignites_24h); mqtt_publish_int("feeds/integer/heizung/rx-count", lon_stat.rx_count); mqtt_publish_int("feeds/integer/heizung/rx-crc", lon_stat.crc_errors); mqtt_publish_int("feeds/integer/heizung/fehlercode", lon_stat.error); mqtt_publish_int("feeds/integer/heizung/drehzahl", lon_stat.var_nv_12); mqtt_publish_int("feeds/integer/heizung/betriebsstunden", lon_stat.var_nv_2A); mqtt_publish_int("feeds/integer/heizung/anheiz-count", lon_stat.var_nv_2B); mqtt_publish_int("feeds/integer/heizung/zustand", lon_stat.var_nv_10_state); mqtt_publish_int("feeds/integer/heizung/pumpe-holzherd", lon_stat.var_nv_02_2C); mqtt.publish("feeds/string/heizung/display", (const char*)lon_stat.var_nv_10); mqtt_publish_float("feeds/float/heizung/temp-pcb", tempsens_value); if(lon_stat.var_nv_2F != 0x7FFFFFFF) { mqtt_publish_float("feeds/float/heizung/temp-kammer", (lon_stat.var_nv_2F / 10.0f) - 273.15f); } if(lon_stat.var_nv_31 != 0x7FFFFFFF) { mqtt_publish_float("feeds/float/heizung/temp-abgas", (lon_stat.var_nv_31 / 10.0f) - 273.15f); } if(lon_stat.var_sel_110 != 0x7FFFFFFF) { mqtt_publish_float("feeds/float/heizung/temp-kessel", lon_stat.var_sel_110 / 100.0f); } if(lon_stat.var_sel_00 != 0x7FFFFFFF) { mqtt_publish_float("feeds/float/heizung/temp-aussen", lon_stat.var_sel_00 / 100.0f); } if(lon_stat.var_nv_1B != 0x7FFFFFFF) { mqtt_publish_float("feeds/float/heizung/temp-speicher", lon_stat.var_nv_1B / 100.0f); } if(lon_stat.var_nv_02_0C != 0x7FFFFFFF) { mqtt_publish_float("feeds/float/heizung/temp-holzherd", lon_stat.var_nv_02_0C / 100.0f); } if(lon_stat.var_nv_02_13 != 0x7FFFFFFF) { mqtt_publish_float("feeds/float/heizung/temp-puffer-unten", lon_stat.var_nv_02_13 / 100.0f); } if(lon_stat.var_nv_02_2C != 0x7FFFFFFF && lon_stat.var_nv_02_2C != 0xFF) { mqtt_publish_float("feeds/float/heizung/pumpe-holzherd", lon_stat.var_nv_02_2C / 2.0f); } /* ML MQTT */ mqtt_publish_int("home/heizung/time-hour", timeStruct.tm_hour); mqtt_publish_int("home/heizung/time-minute", timeStruct.tm_min); if(lon_stat.rx_count > 0) { mqtt_publish_int("home/heizung/rx-count", lon_stat.rx_count); mqtt_publish_int("home/heizung/rx-crc", lon_stat.crc_errors); } mqtt_publish_int("home/heizung/pumpe-holzherd-raw", lon_stat.var_nv_02_2C); if(lon_stat.var_nv_02_2C != 0x7FFFFFFF && lon_stat.var_nv_02_2C != 0xFF) { mqtt_publish_float("home/heizung/pumpe-holzherd", lon_stat.var_nv_02_2C / 2.0f); } if(lon_stat.var_sel_00 != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/temp-aussen", lon_stat.var_sel_00 / 100.0f); } if(lon_stat.var_nv_1B != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/temp-puffer-oben", lon_stat.var_nv_1B / 100.0f); } if(lon_stat.var_nv_02_0C != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/temp-holzherd", lon_stat.var_nv_02_0C / 100.0f); } if(lon_stat.var_nv_02_13 != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/temp-puffer-unten", lon_stat.var_nv_02_13 / 100.0f); } if(lon_stat.var_nv_10_2C != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/temp-bedienteil", lon_stat.var_nv_10_2C / 100.0f); } if(lon_stat.var_nv_10_22 != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/temp-vorlauf-soll", lon_stat.var_nv_10_22 / 100.0f); } if(lon_stat.var_nv_10_23 != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/temp-vorlauf-ist", lon_stat.var_nv_10_23 / 100.0f); } mqtt_publish_int("home/heizung/mischventil-raw", lon_stat.var_nv_10_25); if(lon_stat.var_nv_10_25 != 0x7FFFFFFF) { mqtt_publish_float("home/heizung/mischventil", lon_stat.var_nv_10_25 / 200.0f); } mqtt_publish_int("home/heizung/pumpe-heizung-raw", lon_stat.var_nv_10_24); mqtt_publish_int("home/heizung/pumpe-speicherladung-raw", lon_stat.var_nv_10_1D); mqtt_publish_int("home/heizung/ventil-speicherladung-raw", lon_stat.var_nv_10_1E); mqtt_publish_int("home/heizung/WVF-NVO-Mode", lon_stat.var_nv_02_2D); mqtt_publish_int("home/heizung/WVF_nviMod", lon_stat.var_nv_02_0D); mqtt_publish_int("home/heizung/WVF_nviFbStat", lon_stat.var_nv_02_15); mqtt_publish_int("home/heizung/WVF_nvoWE_ModeGp1", lon_stat.var_nv_02_16); mqtt_publish_float("home/heizung/WVF_nvoWE_ModeGp2", lon_stat.var_nv_02_17); mqtt_publish_int("home/heizung/WVF_nvoWE_ModeGp3", lon_stat.var_nv_02_18); mqtt_publish_float("home/heizung/WVF_nvoWE_ModeGp4", lon_stat.var_nv_02_19); mqtt_publish_float("home/heizung/WVF_nvoPKsoll ", lon_stat.var_nv_02_1A); mqtt_publish_float("home/heizung/WVF_nvoEngyHldHk ", lon_stat.var_nv_02_1B); mqtt_publish_float("home/heizung/WVF_nvoEngyHldBw ", lon_stat.var_nv_02_1C / 100.0f); mqtt_publish_int("home/heizung/WVF_nvoModOgWe ", lon_stat.var_nv_02_26); mqtt_publish_float("home/heizung/WVF_nvoValve ", lon_stat.var_nv_02_2A); mqtt_publish_int("home/heizung/UML_nviWE_ModeGp1 ", lon_stat.var_nv_10_0F); mqtt_publish_int("home/heizung/UML_EH_m ", lon_stat.var_nv_10_10); mqtt_publish_float("home/heizung/UML_nviWET_T_Soll_HK ", lon_stat.var_nv_10_11 / 100.0f); mqtt_publish_float("home/heizung/UML_nviWET_T_Soll_WW ", lon_stat.var_nv_10_12 / 100.0f); mqtt_publish_float("home/heizung/UML_nvoWET_T_Soll_HK ", lon_stat.var_nv_10_13 / 100.0f); mqtt_publish_float("home/heizung/UML_nvoWET_T_Soll_WW ", lon_stat.var_nv_10_14 / 100.0f); mqtt_publish_float("home/heizung/UML_nvi_WE_T_Kessel ", lon_stat.var_nv_10_15 / 100.0f); mqtt_publish_float("home/heizung/UML_nvo_WET_T_Kessel ", lon_stat.var_nv_10_16 / 100.0f); mqtt_publish_float("home/heizung/UML_L_T_Boiler1_Soll ", lon_stat.var_nv_10_1C / 100.0f); mqtt_publish_float("home/heizung/UML_RC_nvoHeatSetPt ", lon_stat.var_nv_10_2D / 100.0f); mqtt_publish_float("home/heizung/UML_FA_T_Kessel_Soll ", lon_stat.var_nv_10_33 / 100.0f); mqtt_publish_float("home/heizung/UML_FA_T_Kessel_VL ", lon_stat.var_nv_10_34 / 100.0f); mqtt_publish_float("home/heizung/UML_FA_T_Kessel_RL ", lon_stat.var_nv_10_35 / 100.0f); mqtt_publish_float("home/heizung/UML_FA_nviExtTsoll ", lon_stat.var_nv_10_36); mqtt_publish_int("home/heizung/UML_RC_nviMode", lon_stat.var_nv_10_27); mqtt_publish_int("home/heizung/UML_RC_nvoMode", lon_stat.var_nv_10_28); } nextTime = time + 1000; } return false; } void MQTT_connect() { int curTime = millis(); int8_t ret; if(WiFi.status() != WL_CONNECTED) { return; } if(mqtt.connected()) { return; } if((mqtt_lastConnect != 0) && (curTime - mqtt_lastConnect < (1000 << mqtt_retries))) { return; } mqtt_lastConnect = curTime; Serial.print("MQTT: Connecting to MQTT... "); ret = mqtt.connect(ARB_CLIENT, ARB_USERNAME, ARB_PW); if(ret == 0) { mqtt_retries++; if(mqtt_retries > 8) { mqtt_retries = 8; } Serial.printf("MQTT: (%d) ", mqtt.state()); Serial.println("MQTT: Retrying MQTT connection"); mqtt.disconnect(); } else { Serial.println("MQTT Connected!"); //mqtt.subscribe("feeds/integer/heizung/relay1"); //mqtt.subscribe("feeds/integer/heizung/relay2"); } }