mirror of https://github.com/arendst/Tasmota.git
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 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 Domoticz Battery and RSSI Quality (#1604)
|
||||
* Add Home Assistant MQTT Discovery for Buttons and change SetOption19 response (#2277)
|
||||
* 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)
|
||||
|
|
|
@ -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>";
|
||||
#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 };
|
||||
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;
|
||||
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)
|
||||
{
|
||||
char sdimmer[8];
|
||||
|
@ -66,8 +94,8 @@ void MqttPublishDomoticzPowerState(byte device)
|
|||
}
|
||||
if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[device -1]) {
|
||||
snprintf_P(sdimmer, sizeof(sdimmer), PSTR("%d"), Settings.light_dimmer);
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\"}"),
|
||||
Settings.domoticz_relay_idx[device -1], (power & (1 << (device -1))) ? 1 : 0, (light_type) ? sdimmer : "");
|
||||
snprintf_P(mqtt_data, sizeof(mqtt_data), DOMOTICZ_MESSAGE,
|
||||
Settings.domoticz_relay_idx[device -1], (power & (1 << (device -1))) ? 1 : 0, (light_type) ? sdimmer : "", DomoticzBatteryQuality(), DomoticzRssiQuality());
|
||||
MqttPublish(domoticz_in_topic);
|
||||
}
|
||||
}
|
||||
|
@ -275,13 +303,15 @@ uint8_t DomoticzHumidityState(char *hum)
|
|||
void DomoticzSensor(byte idx, char *data)
|
||||
{
|
||||
if (Settings.domoticz_sensor_idx[idx]) {
|
||||
char dmess[64];
|
||||
char dmess[90];
|
||||
|
||||
memcpy(dmess, mqtt_data, sizeof(dmess));
|
||||
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 {
|
||||
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);
|
||||
memcpy(mqtt_data, dmess, sizeof(dmess));
|
||||
|
|
Loading…
Reference in New Issue