mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-25 07:17:16 +00:00
improve HA auto discovery
This commit is contained in:
parent
47f1b2fcd0
commit
9842573ee5
@ -20,6 +20,8 @@
|
|||||||
--------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------
|
||||||
Version yyyymmdd Action Description
|
Version yyyymmdd Action Description
|
||||||
--------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------
|
||||||
|
0.9.1.3 20200926 changed - Improve HA discovery, make key+MAC case insensitive
|
||||||
|
-------
|
||||||
0.9.1.3 20200916 changed - add ATC (custom FW for LYWSD03MMC), API adaption for NimBLE-Arduino 1.0.2
|
0.9.1.3 20200916 changed - add ATC (custom FW for LYWSD03MMC), API adaption for NimBLE-Arduino 1.0.2
|
||||||
-------
|
-------
|
||||||
0.9.1.2 20200802 changed - add MHO-C303
|
0.9.1.2 20200802 changed - add MHO-C303
|
||||||
@ -421,6 +423,7 @@ void MI32_ReverseMAC(uint8_t _mac[]){
|
|||||||
void MI32AddKey(char* payload){
|
void MI32AddKey(char* payload){
|
||||||
mi_bindKey_t keyMAC;
|
mi_bindKey_t keyMAC;
|
||||||
memset(keyMAC.buf,0,sizeof(keyMAC));
|
memset(keyMAC.buf,0,sizeof(keyMAC));
|
||||||
|
UpperCase(payload,payload);
|
||||||
MI32KeyMACStringToBytes(payload,keyMAC.buf);
|
MI32KeyMACStringToBytes(payload,keyMAC.buf);
|
||||||
bool unknownKey = true;
|
bool unknownKey = true;
|
||||||
for(uint32_t i=0; i<MIBLEbindKeys.size(); i++){
|
for(uint32_t i=0; i<MIBLEbindKeys.size(); i++){
|
||||||
@ -1604,7 +1607,7 @@ bool MI32Cmd(void) {
|
|||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
const char HTTP_MI32[] PROGMEM = "{s}MI ESP32 {m}%u%s / %u{e}";
|
const char HTTP_MI32[] PROGMEM = "{s}MI ESP32 {m}%u%s / %u{e}";
|
||||||
const char HTTP_MI32_SERIAL[] PROGMEM = "{s}%s %s{m}%02x:%02x:%02x:%02x:%02x:%02x%{e}";
|
const char HTTP_MI32_MAC[] PROGMEM = "{s}%s %s{m}%s{e}";
|
||||||
const char HTTP_RSSI[] PROGMEM = "{s}%s " D_RSSI "{m}%d dBm{e}";
|
const char HTTP_RSSI[] PROGMEM = "{s}%s " D_RSSI "{m}%d dBm{e}";
|
||||||
const char HTTP_BATTERY[] PROGMEM = "{s}%s" " Battery" "{m}%u %%{e}";
|
const char HTTP_BATTERY[] PROGMEM = "{s}%s" " Battery" "{m}%u %%{e}";
|
||||||
const char HTTP_LASTBUTTON[] PROGMEM = "{s}%s Last Button{m}%u {e}";
|
const char HTTP_LASTBUTTON[] PROGMEM = "{s}%s Last Button{m}%u {e}";
|
||||||
@ -1616,6 +1619,15 @@ const char HTTP_MI32_HL[] PROGMEM = "{s}<hr>{m}<hr>{e}";
|
|||||||
void MI32Show(bool json)
|
void MI32Show(bool json)
|
||||||
{
|
{
|
||||||
if (json) {
|
if (json) {
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
bool _noSummarySave = MI32.option.noSummary;
|
||||||
|
bool _minimalSummarySave = MI32.option.minimalSummary;
|
||||||
|
if(hass_mode==2){
|
||||||
|
MI32.option.noSummary = false;
|
||||||
|
MI32.option.minimalSummary = false;
|
||||||
|
}
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
|
||||||
if(!MI32.mode.triggeredTele){
|
if(!MI32.mode.triggeredTele){
|
||||||
MI32.mode.shallClearResults=1;
|
MI32.mode.shallClearResults=1;
|
||||||
if(MI32.option.noSummary) return; // no message at TELEPERIOD
|
if(MI32.option.noSummary) return; // no message at TELEPERIOD
|
||||||
@ -1635,7 +1647,11 @@ void MI32Show(bool json)
|
|||||||
bool tempHumSended = false;
|
bool tempHumSended = false;
|
||||||
if(MIBLEsensors[i].feature.tempHum){
|
if(MIBLEsensors[i].feature.tempHum){
|
||||||
if(MIBLEsensors[i].eventType.tempHum || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.tempHum || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (!isnan(MIBLEsensors[i].hum) && !isnan(MIBLEsensors[i].temp)) {
|
if (!isnan(MIBLEsensors[i].hum) && !isnan(MIBLEsensors[i].temp)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
ResponseAppend_P(PSTR(","));
|
ResponseAppend_P(PSTR(","));
|
||||||
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
||||||
tempHumSended = true;
|
tempHumSended = true;
|
||||||
@ -1644,7 +1660,11 @@ void MI32Show(bool json)
|
|||||||
}
|
}
|
||||||
if(MIBLEsensors[i].feature.temp && !tempHumSended){
|
if(MIBLEsensors[i].feature.temp && !tempHumSended){
|
||||||
if(MIBLEsensors[i].eventType.temp || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate) {
|
if(MIBLEsensors[i].eventType.temp || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate) {
|
||||||
if (!isnan(MIBLEsensors[i].temp)) {
|
if (!isnan(MIBLEsensors[i].temp)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
char temperature[FLOATSZ];
|
char temperature[FLOATSZ];
|
||||||
dtostrfd(MIBLEsensors[i].temp, Settings.flag2.temperature_resolution, temperature);
|
dtostrfd(MIBLEsensors[i].temp, Settings.flag2.temperature_resolution, temperature);
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%s"), temperature);
|
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%s"), temperature);
|
||||||
@ -1653,7 +1673,11 @@ void MI32Show(bool json)
|
|||||||
}
|
}
|
||||||
if(MIBLEsensors[i].feature.hum && !tempHumSended){
|
if(MIBLEsensors[i].feature.hum && !tempHumSended){
|
||||||
if(MIBLEsensors[i].eventType.hum || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate) {
|
if(MIBLEsensors[i].eventType.hum || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate) {
|
||||||
if (!isnan(MIBLEsensors[i].hum)) {
|
if (!isnan(MIBLEsensors[i].hum)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
char hum[FLOATSZ];
|
char hum[FLOATSZ];
|
||||||
dtostrfd(MIBLEsensors[i].hum, Settings.flag2.humidity_resolution, hum);
|
dtostrfd(MIBLEsensors[i].hum, Settings.flag2.humidity_resolution, hum);
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_HUMIDITY "\":%s"), hum);
|
ResponseAppend_P(PSTR(",\"" D_JSON_HUMIDITY "\":%s"), hum);
|
||||||
@ -1662,27 +1686,43 @@ void MI32Show(bool json)
|
|||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.lux){
|
if (MIBLEsensors[i].feature.lux){
|
||||||
if(MIBLEsensors[i].eventType.lux || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.lux || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].lux!=0x0ffffff) { // this is the error code -> no lux
|
if (MIBLEsensors[i].lux!=0x0ffffff
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) { // this is the error code -> no lux
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.moist){
|
if (MIBLEsensors[i].feature.moist){
|
||||||
if(MIBLEsensors[i].eventType.moist || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.moist || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].moisture!=0xff) {
|
if (MIBLEsensors[i].moisture!=0xff
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.fert){
|
if (MIBLEsensors[i].feature.fert){
|
||||||
if(MIBLEsensors[i].eventType.fert || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.fert || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].fertility!=0xffff) {
|
if (MIBLEsensors[i].fertility!=0xffff
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"Fertility\":%u"), MIBLEsensors[i].fertility);
|
ResponseAppend_P(PSTR(",\"Fertility\":%u"), MIBLEsensors[i].fertility);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.Btn){
|
if (MIBLEsensors[i].feature.Btn){
|
||||||
if(MIBLEsensors[i].eventType.Btn){
|
if(MIBLEsensors[i].eventType.Btn
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
){
|
||||||
ResponseAppend_P(PSTR(",\"Btn\":%u"),MIBLEsensors[i].Btn);
|
ResponseAppend_P(PSTR(",\"Btn\":%u"),MIBLEsensors[i].Btn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1710,7 +1750,11 @@ void MI32Show(bool json)
|
|||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.bat){
|
if (MIBLEsensors[i].feature.bat){
|
||||||
if(MIBLEsensors[i].eventType.bat || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.bat || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].bat != 0x00) { // this is the error code -> no battery
|
if (MIBLEsensors[i].bat != 0x00
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
||(hass_mode==2)
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) { // this is the error code -> no battery
|
||||||
ResponseAppend_P(PSTR(",\"Battery\":%u"), MIBLEsensors[i].bat);
|
ResponseAppend_P(PSTR(",\"Battery\":%u"), MIBLEsensors[i].bat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1724,11 +1768,16 @@ void MI32Show(bool json)
|
|||||||
MIBLEsensors[i].eventType.raw = 0;
|
MIBLEsensors[i].eventType.raw = 0;
|
||||||
if(MIBLEsensors[i].shallSendMQTT==1){
|
if(MIBLEsensors[i].shallSendMQTT==1){
|
||||||
MIBLEsensors[i].shallSendMQTT = 0;
|
MIBLEsensors[i].shallSendMQTT = 0;
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MI32.mode.triggeredTele = 0;
|
MI32.mode.triggeredTele = 0;
|
||||||
// ResponseAppend_P(PSTR("}"));
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
if(hass_mode==2){
|
||||||
|
MI32.option.noSummary = _noSummarySave;
|
||||||
|
MI32.option.minimalSummary = _minimalSummarySave;
|
||||||
|
}
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
} else {
|
} else {
|
||||||
static uint16_t _page = 0;
|
static uint16_t _page = 0;
|
||||||
@ -1747,7 +1796,9 @@ void MI32Show(bool json)
|
|||||||
WSContentSend_PD(HTTP_MI32, i+1,stemp,MIBLEsensors.size());
|
WSContentSend_PD(HTTP_MI32, i+1,stemp,MIBLEsensors.size());
|
||||||
for (i; i<j; i++) {
|
for (i; i<j; i++) {
|
||||||
WSContentSend_PD(HTTP_MI32_HL);
|
WSContentSend_PD(HTTP_MI32_HL);
|
||||||
WSContentSend_PD(HTTP_MI32_SERIAL, kMI32DeviceType[MIBLEsensors[i].type-1], D_MAC_ADDRESS, MIBLEsensors[i].MAC[0], MIBLEsensors[i].MAC[1],MIBLEsensors[i].MAC[2],MIBLEsensors[i].MAC[3],MIBLEsensors[i].MAC[4],MIBLEsensors[i].MAC[5]);
|
char _MAC[18];
|
||||||
|
ToHex_P(MIBLEsensors[i].MAC,6,_MAC,18,':');
|
||||||
|
WSContentSend_PD(HTTP_MI32_MAC, kMI32DeviceType[MIBLEsensors[i].type-1], D_MAC_ADDRESS, _MAC);
|
||||||
WSContentSend_PD(HTTP_RSSI, kMI32DeviceType[MIBLEsensors[i].type-1], MIBLEsensors[i].rssi);
|
WSContentSend_PD(HTTP_RSSI, kMI32DeviceType[MIBLEsensors[i].type-1], MIBLEsensors[i].rssi);
|
||||||
if (MIBLEsensors[i].type==FLORA) {
|
if (MIBLEsensors[i].type==FLORA) {
|
||||||
if (!isnan(MIBLEsensors[i].temp)) {
|
if (!isnan(MIBLEsensors[i].temp)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user