mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-23 02:36:35 +00:00
Merge pull request #21 from arendst/development
Add Domoticz Battery and RSSI Quality
This commit is contained in:
commit
1dcab57181
@ -2,6 +2,7 @@
|
|||||||
* Add 16 timers using commands Timer and Timers (#1091)
|
* Add 16 timers using commands Timer and Timers (#1091)
|
||||||
* Add commands Timer 0 to clear timer and Timer 1..16 to copy timer
|
* Add commands Timer 0 to clear timer and Timer 1..16 to copy timer
|
||||||
* Add optional Timer configuration webpage to be enabled in user_config.h with define USE_TIMERS_WEB
|
* Add optional Timer configuration webpage to be enabled in user_config.h with define USE_TIMERS_WEB
|
||||||
|
* Add Domoticz Battery and RSSI Quality (#1604)
|
||||||
* Add Home Assistant MQTT Discovery for Buttons and change SetOption19 response (#2277)
|
* Add Home Assistant MQTT Discovery for Buttons and change SetOption19 response (#2277)
|
||||||
* Add support for SGP30 gas and air quality sensor (#2307)
|
* Add support for SGP30 gas and air quality sensor (#2307)
|
||||||
* Add multiple color entry support for command Led like Led2 120000 001200 000012 setting led2 as Red, Led3 as Green and Led4 as Blue (#2303)
|
* Add multiple color entry support for command Led like Led2 120000 001200 000012 setting led2 as Red, Led3 as Green and Led4 as Blue (#2303)
|
||||||
|
@ -35,6 +35,8 @@ const char HTTP_FORM_DOMOTICZ_TIMER[] PROGMEM =
|
|||||||
"<tr><td style='width:260px'><b>" D_DOMOTICZ_UPDATE_TIMER "</b> (" STR(DOMOTICZ_UPDATE_TIMER) ")</td><td style='width:70px'><input id='ut' name='ut' placeholder='" STR(DOMOTICZ_UPDATE_TIMER) "' value='{6'</td></tr>";
|
"<tr><td style='width:260px'><b>" D_DOMOTICZ_UPDATE_TIMER "</b> (" STR(DOMOTICZ_UPDATE_TIMER) ")</td><td style='width:70px'><input id='ut' name='ut' placeholder='" STR(DOMOTICZ_UPDATE_TIMER) "' value='{6'</td></tr>";
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
|
const char DOMOTICZ_MESSAGE[] PROGMEM = "{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\",\"Battery\":%d,\"RSSI\":%d}";
|
||||||
|
|
||||||
enum DomoticzCommands { CMND_IDX, CMND_KEYIDX, CMND_SWITCHIDX, CMND_SENSORIDX, CMND_UPDATETIMER };
|
enum DomoticzCommands { CMND_IDX, CMND_KEYIDX, CMND_SWITCHIDX, CMND_SENSORIDX, CMND_UPDATETIMER };
|
||||||
const char kDomoticzCommands[] PROGMEM = D_CMND_IDX "|" D_CMND_KEYIDX "|" D_CMND_SWITCHIDX "|" D_CMND_SENSORIDX "|" D_CMND_UPDATETIMER ;
|
const char kDomoticzCommands[] PROGMEM = D_CMND_IDX "|" D_CMND_KEYIDX "|" D_CMND_SWITCHIDX "|" D_CMND_SENSORIDX "|" D_CMND_UPDATETIMER ;
|
||||||
|
|
||||||
@ -57,6 +59,32 @@ boolean domoticz_subscribe = false;
|
|||||||
int domoticz_update_timer = 0;
|
int domoticz_update_timer = 0;
|
||||||
byte domoticz_update_flag = 1;
|
byte domoticz_update_flag = 1;
|
||||||
|
|
||||||
|
int DomoticzBatteryQuality()
|
||||||
|
{
|
||||||
|
// Battery 0%: ESP 2.6V (minimum operating voltage is 2.5)
|
||||||
|
// Battery 100%: ESP 3.6V (maximum operating voltage is 3.6)
|
||||||
|
// Battery 101% to 200%: ESP over 3.6V (means over maximum operating voltage)
|
||||||
|
|
||||||
|
int quality = 0; // Voltage range from 2,6V > 0% to 3,6V > 100%
|
||||||
|
|
||||||
|
uint16_t voltage = ESP.getVcc();
|
||||||
|
if (voltage <= 2600) {
|
||||||
|
quality = 0;
|
||||||
|
} else if (voltage >= 4600) {
|
||||||
|
quality = 200;
|
||||||
|
} else {
|
||||||
|
quality = (voltage - 2600) / 10;
|
||||||
|
}
|
||||||
|
return quality;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DomoticzRssiQuality()
|
||||||
|
{
|
||||||
|
// RSSI range: 0% to 10% (12 means disable RSSI in Domoticz)
|
||||||
|
|
||||||
|
return WifiGetRssiAsQuality(WiFi.RSSI()) / 10;
|
||||||
|
}
|
||||||
|
|
||||||
void MqttPublishDomoticzPowerState(byte device)
|
void MqttPublishDomoticzPowerState(byte device)
|
||||||
{
|
{
|
||||||
char sdimmer[8];
|
char sdimmer[8];
|
||||||
@ -66,8 +94,8 @@ void MqttPublishDomoticzPowerState(byte device)
|
|||||||
}
|
}
|
||||||
if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[device -1]) {
|
if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[device -1]) {
|
||||||
snprintf_P(sdimmer, sizeof(sdimmer), PSTR("%d"), Settings.light_dimmer);
|
snprintf_P(sdimmer, sizeof(sdimmer), PSTR("%d"), Settings.light_dimmer);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\"}"),
|
snprintf_P(mqtt_data, sizeof(mqtt_data), DOMOTICZ_MESSAGE,
|
||||||
Settings.domoticz_relay_idx[device -1], (power & (1 << (device -1))) ? 1 : 0, (light_type) ? sdimmer : "");
|
Settings.domoticz_relay_idx[device -1], (power & (1 << (device -1))) ? 1 : 0, (light_type) ? sdimmer : "", DomoticzBatteryQuality(), DomoticzRssiQuality());
|
||||||
MqttPublish(domoticz_in_topic);
|
MqttPublish(domoticz_in_topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -275,13 +303,15 @@ uint8_t DomoticzHumidityState(char *hum)
|
|||||||
void DomoticzSensor(byte idx, char *data)
|
void DomoticzSensor(byte idx, char *data)
|
||||||
{
|
{
|
||||||
if (Settings.domoticz_sensor_idx[idx]) {
|
if (Settings.domoticz_sensor_idx[idx]) {
|
||||||
char dmess[64];
|
char dmess[90];
|
||||||
|
|
||||||
memcpy(dmess, mqtt_data, sizeof(dmess));
|
memcpy(dmess, mqtt_data, sizeof(dmess));
|
||||||
if (DZ_AIRQUALITY == idx) {
|
if (DZ_AIRQUALITY == idx) {
|
||||||
snprintf_P(mqtt_data, sizeof(dmess), PSTR("{\"idx\":%d,\"nvalue\":%s}"), Settings.domoticz_sensor_idx[idx], data);
|
snprintf_P(mqtt_data, sizeof(dmess), PSTR("{\"idx\":%d,\"nvalue\":%s,\"Battery\":%d,\"RSSI\":%d}"),
|
||||||
|
Settings.domoticz_sensor_idx[idx], data, DomoticzBatteryQuality(), DomoticzRssiQuality());
|
||||||
} else {
|
} else {
|
||||||
snprintf_P(mqtt_data, sizeof(dmess), PSTR("{\"idx\":%d,\"nvalue\":0,\"svalue\":\"%s\"}"), Settings.domoticz_sensor_idx[idx], data);
|
snprintf_P(mqtt_data, sizeof(dmess), DOMOTICZ_MESSAGE,
|
||||||
|
Settings.domoticz_sensor_idx[idx], 0, data, DomoticzBatteryQuality(), DomoticzRssiQuality());
|
||||||
}
|
}
|
||||||
MqttPublish(domoticz_in_topic);
|
MqttPublish(domoticz_in_topic);
|
||||||
memcpy(mqtt_data, dmess, sizeof(dmess));
|
memcpy(mqtt_data, dmess, sizeof(dmess));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user