diff --git a/tasmota/tasmota.ino b/tasmota/tasmota.ino index f31845bee..61528bd80 100644 --- a/tasmota/tasmota.ino +++ b/tasmota/tasmota.ino @@ -851,7 +851,14 @@ void PerformEverySecond(void) tele_period = 0; MqttPublishTeleState(); - MqttPublishSensor(); + + mqtt_data[0] = '\0'; + if (MqttShowSensor()) { + MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN +#if defined(USE_RULES) || defined(USE_SCRIPT) + RulesTeleperiod(); // Allow rule based HA messages +#endif // USE_RULES + } XdrvCall(FUNC_AFTER_TELEPERIOD); } diff --git a/tasmota/xdrv_02_mqtt.ino b/tasmota/xdrv_02_mqtt.ino index ca5f639ab..3663ed497 100644 --- a/tasmota/xdrv_02_mqtt.ino +++ b/tasmota/xdrv_02_mqtt.ino @@ -432,9 +432,7 @@ void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic) void MqttPublishTeleSensor(void) { MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN -#if defined(USE_RULES) || defined(USE_SCRIPT) - RulesTeleperiod(); // Allow rule based HA messages -#endif // USE_RULES + XdrvRulesProcess(); } void MqttPublishPowerState(uint32_t device) diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index 0aae2cbdd..743fc82fc 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -425,7 +425,7 @@ void EnergyMqttShow(void) EnergyShow(true); tele_period = tele_period_save; ResponseJsonEnd(); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); Energy.power_delta = false; } #endif // USE_ENERGY_MARGIN_DETECTION diff --git a/tasmota/xdrv_15_pca9685.ino b/tasmota/xdrv_15_pca9685.ino index 00c2c4cdf..b1f87c2ea 100644 --- a/tasmota/xdrv_15_pca9685.ino +++ b/tasmota/xdrv_15_pca9685.ino @@ -181,7 +181,7 @@ void PCA9685_OutputTelemetry(bool telemetry) { } ResponseAppend_P(PSTR("\"END\":1}}")); if (telemetry) { - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } } diff --git a/tasmota/xdsp_08_ILI9488.ino b/tasmota/xdsp_08_ILI9488.ino index cba8137da..b37e0fa15 100644 --- a/tasmota/xdsp_08_ILI9488.ino +++ b/tasmota/xdsp_08_ILI9488.ino @@ -126,7 +126,7 @@ void ILI9488_InitDriver() #ifdef USE_TOUCH_BUTTONS void ILI9488_MQTT(uint8_t count,const char *cp) { ResponseTime_P(PSTR(",\"RA8876\":{\"%s%d\":\"%d\"}}"), cp,count+1,(buttons[count]->vpower&0x80)>>7); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } void ILI9488_RDW_BUTT(uint32_t count,uint32_t pwr) { diff --git a/tasmota/xdsp_10_RA8876.ino b/tasmota/xdsp_10_RA8876.ino index 47d48725d..205d91253 100644 --- a/tasmota/xdsp_10_RA8876.ino +++ b/tasmota/xdsp_10_RA8876.ino @@ -111,7 +111,7 @@ void RA8876_InitDriver() #ifdef USE_TOUCH_BUTTONS void RA8876_MQTT(uint8_t count,const char *cp) { ResponseTime_P(PSTR(",\"RA8876\":{\"%s%d\":\"%d\"}}"), cp,count+1,(buttons[count]->vpower&0x80)>>7); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } void RA8876_RDW_BUTT(uint32_t count,uint32_t pwr) { diff --git a/tasmota/xsns_29_mcp230xx.ino b/tasmota/xsns_29_mcp230xx.ino index c7313fcd0..693336dcf 100644 --- a/tasmota/xsns_29_mcp230xx.ino +++ b/tasmota/xsns_29_mcp230xx.ino @@ -742,7 +742,7 @@ void MCP230xx_OutputTelemetry(void) { } } ResponseAppend_P(PSTR("\"END\":1}}")); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } } @@ -757,7 +757,7 @@ void MCP230xx_Interrupt_Counter_Report(void) { } } ResponseAppend_P(PSTR("\"END\":1}}")); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); mcp230xx_int_sec_counter = 0; } @@ -772,7 +772,7 @@ void MCP230xx_Interrupt_Retain_Report(void) { } } ResponseAppend_P(PSTR("\"Value\":%u}}"),retainresult); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } /*********************************************************************************************\ diff --git a/tasmota/xsns_34_hx711.ino b/tasmota/xsns_34_hx711.ino index e3ea64e18..6065ad719 100644 --- a/tasmota/xsns_34_hx711.ino +++ b/tasmota/xsns_34_hx711.ino @@ -360,7 +360,7 @@ void HxEvery100mSecond(void) ResponseAppendTime(); HxShow(true); ResponseJsonEnd(); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); Hx.weight_changed = false; } } diff --git a/tasmota/xsns_40_pn532.ino b/tasmota/xsns_40_pn532.ino index 7b96662e8..8f6c8382e 100644 --- a/tasmota/xsns_40_pn532.ino +++ b/tasmota/xsns_40_pn532.ino @@ -500,7 +500,7 @@ void PN532_ScanForTag(void) ResponseTime_P(PSTR(",\"PN532\":{\"UID\":\"%s\"}}"), uids); #endif // USE_PN532_DATA_FUNCTION - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); #ifdef USE_PN532_CAUSE_EVENTS diff --git a/tasmota/xsns_44_sps30.ino b/tasmota/xsns_44_sps30.ino index 655f30a69..bb4fcebc9 100644 --- a/tasmota/xsns_44_sps30.ino +++ b/tasmota/xsns_44_sps30.ino @@ -254,7 +254,7 @@ void SPS30_Show(bool json) { void CmdClean(void) { sps30_cmd(SPS_CMD_CLEAN); ResponseTime_P(PSTR(",\"SPS30\":{\"CFAN\":\"true\"}}")); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } bool SPS30_cmd(void) { diff --git a/tasmota/xsns_51_rdm6300.ino b/tasmota/xsns_51_rdm6300.ino index a3678a5b1..31d39a44e 100644 --- a/tasmota/xsns_51_rdm6300.ino +++ b/tasmota/xsns_51_rdm6300.ino @@ -107,7 +107,7 @@ void RDM6300_ScanForTag() { rdm_uid_str[9]=0; ResponseTime_P(PSTR(",\"RDM6300\":{\"UID\":\"%s\"}}"), rdm_uid_str); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); /* char command[24]; sprintf(command,"event RDM6300=%s",rdm_uid_str); diff --git a/tasmota/xsns_52_ibeacon.ino b/tasmota/xsns_52_ibeacon.ino index 070510bbb..f61bdf97d 100644 --- a/tasmota/xsns_52_ibeacon.ino +++ b/tasmota/xsns_52_ibeacon.ino @@ -548,7 +548,7 @@ void ibeacon_mqtt(const char *mac,const char *rssi) { s_rssi[4]=0; int16_t n_rssi=atoi(s_rssi); ResponseTime_P(PSTR(",\"" D_CMND_IBEACON "_%s\":{\"RSSI\":%d}}"),s_mac,n_rssi); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino index bdfb7abff..4fa8875e2 100644 --- a/tasmota/xsns_53_sml.ino +++ b/tasmota/xsns_53_sml.ino @@ -1621,7 +1621,7 @@ void SML_Immediate_MQTT(const char *mp,uint8_t index,uint8_t mindex) { // immediate mqtt dtostrfd(meter_vars[index],dp&0xf,tpowstr); ResponseTime_P(PSTR(",\"%s\":{\"%s\":%s}}"),meter_desc_p[mindex].prefix,jname,tpowstr); - MqttPublishPrefixTopic_P(TELE, PSTR(D_RSLT_SENSOR), Settings.flag.mqtt_sensor_retain); // CMND_SENSORRETAIN + MqttPublishTeleSensor(); } } }