mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 11:46:31 +00:00
Prep mqtt_data from char to String (prt.1)
This commit is contained in:
parent
644a35c323
commit
aa64428c2f
@ -1259,8 +1259,11 @@ void postAdvertismentDetails(){
|
|||||||
|
|
||||||
TasAutoMutex localmutex(&BLEOperationsRecursiveMutex, "BLEPostAdd");
|
TasAutoMutex localmutex(&BLEOperationsRecursiveMutex, "BLEPostAdd");
|
||||||
if (BLEAdvertismentDetailsJsonSet){
|
if (BLEAdvertismentDetailsJsonSet){
|
||||||
strncpy(TasmotaGlobal.mqtt_data, BLEAdvertismentDetailsJson, sizeof(TasmotaGlobal.mqtt_data));
|
|
||||||
TasmotaGlobal.mqtt_data[sizeof(TasmotaGlobal.mqtt_data)-1] = 0;
|
// strncpy(TasmotaGlobal.mqtt_data, BLEAdvertismentDetailsJson, sizeof(TasmotaGlobal.mqtt_data));
|
||||||
|
// TasmotaGlobal.mqtt_data[sizeof(TasmotaGlobal.mqtt_data)-1] = 0;
|
||||||
|
Response_P(BLEAdvertismentDetailsJson);
|
||||||
|
|
||||||
BLEAdvertismentDetailsJsonSet = 0;
|
BLEAdvertismentDetailsJsonSet = 0;
|
||||||
// we got the data, give before MQTT call.
|
// we got the data, give before MQTT call.
|
||||||
localmutex.give();
|
localmutex.give();
|
||||||
@ -3142,6 +3145,7 @@ void CmndBLEOperation(void){
|
|||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
static void BLEPostMQTTSeenDevices(int type) {
|
static void BLEPostMQTTSeenDevices(int type) {
|
||||||
int remains = 0;
|
int remains = 0;
|
||||||
|
/*
|
||||||
nextSeenDev = 0;
|
nextSeenDev = 0;
|
||||||
|
|
||||||
memset(TasmotaGlobal.mqtt_data, 0, sizeof(TasmotaGlobal.mqtt_data));
|
memset(TasmotaGlobal.mqtt_data, 0, sizeof(TasmotaGlobal.mqtt_data));
|
||||||
@ -3156,6 +3160,19 @@ static void BLEPostMQTTSeenDevices(int type) {
|
|||||||
MqttPublishPrefixTopicRulesProcess_P((1== type) ? TELE : STAT, PSTR("BLE"));
|
MqttPublishPrefixTopicRulesProcess_P((1== type) ? TELE : STAT, PSTR("BLE"));
|
||||||
} while (remains);
|
} while (remains);
|
||||||
// }
|
// }
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Once TasmotaGlobal.mqtt_data is changed from (limited by MESSZ) char array to (unlimited) String the below code can be simplified
|
||||||
|
char dest[ResponseSize()];
|
||||||
|
int maxlen = ResponseSize() -64;
|
||||||
|
|
||||||
|
do {
|
||||||
|
remains = getSeenDevicesToJson(dest, maxlen);
|
||||||
|
ResponseTime_P(dest);
|
||||||
|
// no retain - this is present devices, not historic
|
||||||
|
MqttPublishPrefixTopicRulesProcess_P((1== type) ? TELE : STAT, PSTR("BLE"));
|
||||||
|
} while (remains);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BLEPostMQTT(bool onlycompleted) {
|
static void BLEPostMQTT(bool onlycompleted) {
|
||||||
|
@ -1784,7 +1784,7 @@ void APDS9960_loop(void) {
|
|||||||
enableGestureSensor();
|
enableGestureSensor();
|
||||||
APDS9960_overload = false;
|
APDS9960_overload = false;
|
||||||
Response_P(PSTR("{\"Gesture\":\"On\"}"));
|
Response_P(PSTR("{\"Gesture\":\"On\"}"));
|
||||||
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_TELE, TasmotaGlobal.mqtt_data); // only after the long break we report, that we are online again
|
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_TELE, APDS9960_TAG); // only after the long break we report, that we are online again
|
||||||
gesture_mode = 1;
|
gesture_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1796,7 +1796,7 @@ void APDS9960_loop(void) {
|
|||||||
disableGestureSensor();
|
disableGestureSensor();
|
||||||
recovery_loop_counter = APDS9960_LONG_RECOVERY; // long pause after overload/long press - number of stateloops
|
recovery_loop_counter = APDS9960_LONG_RECOVERY; // long pause after overload/long press - number of stateloops
|
||||||
Response_P(PSTR("{\"Gesture\":\"Off\"}"));
|
Response_P(PSTR("{\"Gesture\":\"Off\"}"));
|
||||||
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_TELE, TasmotaGlobal.mqtt_data);
|
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_TELE, APDS9960_TAG);
|
||||||
gesture_mode = 0;
|
gesture_mode = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1682,6 +1682,14 @@ const char HTTP_MINRF_FLORA_DATA[] PROGMEM = "{s}%s" " Fertility" "{m}%dus/cm{e
|
|||||||
const char HTTP_MINRF_HL[] PROGMEM = "{s}<hr>{m}<hr>{e}";
|
const char HTTP_MINRF_HL[] PROGMEM = "{s}<hr>{m}<hr>{e}";
|
||||||
const char HTTP_NRF24NEW[] PROGMEM = "{s}%sL01%c{m}%u%s / %u{e}";
|
const char HTTP_NRF24NEW[] PROGMEM = "{s}%sL01%c{m}%u%s / %u{e}";
|
||||||
|
|
||||||
|
void MINRFShowContinuation(bool *commaflg) {
|
||||||
|
if (*commaflg) {
|
||||||
|
ResponseAppend_P(PSTR(","));
|
||||||
|
} else {
|
||||||
|
*commaflg = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MINRFShow(bool json)
|
void MINRFShow(bool json)
|
||||||
{
|
{
|
||||||
if (json) {
|
if (json) {
|
||||||
@ -1706,9 +1714,9 @@ void MINRFShow(bool json)
|
|||||||
if(MIBLEsensors[i].type != YEERC) break; // send every RC code, even if there is a potentially false MAC
|
if(MIBLEsensors[i].type != YEERC) break; // send every RC code, even if there is a potentially false MAC
|
||||||
}
|
}
|
||||||
|
|
||||||
ResponseAppend_P(PSTR(",\"%s-%02x%02x%02x\":"),kMINRFDeviceType[MIBLEsensors[i].type-1],MIBLEsensors[i].MAC[3],MIBLEsensors[i].MAC[4],MIBLEsensors[i].MAC[5]);
|
bool commaflg = false;
|
||||||
|
ResponseAppend_P(PSTR(",\"%s-%02x%02x%02x\":{"),
|
||||||
uint32_t _positionCurlyBracket = ResponseLength(); // ... this will be a ',' first, but later be replaced
|
kMINRFDeviceType[MIBLEsensors[i].type-1],MIBLEsensors[i].MAC[3],MIBLEsensors[i].MAC[4],MIBLEsensors[i].MAC[5]);
|
||||||
|
|
||||||
if((!MINRF.mode.triggeredTele && !MINRF.option.minimalSummary)||MINRF.mode.triggeredTele){
|
if((!MINRF.mode.triggeredTele && !MINRF.option.minimalSummary)||MINRF.mode.triggeredTele){
|
||||||
bool tempHumSended = false;
|
bool tempHumSended = false;
|
||||||
@ -1719,7 +1727,7 @@ void MINRFShow(bool json)
|
|||||||
||(!hass_mode==2)
|
||(!hass_mode==2)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(","));
|
MINRFShowContinuation(&commaflg);
|
||||||
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
||||||
tempHumSended = true;
|
tempHumSended = true;
|
||||||
}
|
}
|
||||||
@ -1732,7 +1740,8 @@ void MINRFShow(bool json)
|
|||||||
||(hass_mode==2)
|
||(hass_mode==2)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%*_f"),
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_TEMPERATURE "\":%*_f"),
|
||||||
Settings.flag2.temperature_resolution, &MIBLEsensors[i].temp);
|
Settings.flag2.temperature_resolution, &MIBLEsensors[i].temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1742,7 +1751,8 @@ void MINRFShow(bool json)
|
|||||||
if (!isnan(MIBLEsensors[i].hum)) {
|
if (!isnan(MIBLEsensors[i].hum)) {
|
||||||
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);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_HUMIDITY "\":%s"), hum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1753,7 +1763,8 @@ void MINRFShow(bool json)
|
|||||||
||(hass_mode==2)
|
||(hass_mode==2)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) { // this is the error code -> no lux
|
) { // this is the error code -> no lux
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1764,7 +1775,8 @@ void MINRFShow(bool json)
|
|||||||
||(hass_mode==2)
|
||(hass_mode==2)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1775,29 +1787,37 @@ void MINRFShow(bool json)
|
|||||||
||(hass_mode==2)
|
||(hass_mode==2)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"Fertility\":%u"), MIBLEsensors[i].fertility);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
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){
|
||||||
ResponseAppend_P(PSTR(",\"Btn\":%u"),MIBLEsensors[i].Btn);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Btn\":%u"),MIBLEsensors[i].Btn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // minimal summary
|
} // minimal summary
|
||||||
if (MIBLEsensors[i].feature.PIR){
|
if (MIBLEsensors[i].feature.PIR){
|
||||||
if(MIBLEsensors[i].eventType.motion || !MINRF.mode.triggeredTele){
|
if(MIBLEsensors[i].eventType.motion || !MINRF.mode.triggeredTele){
|
||||||
if(MINRF.mode.triggeredTele) ResponseAppend_P(PSTR(",\"PIR\":1")); // only real-time
|
if(MINRF.mode.triggeredTele) {
|
||||||
ResponseAppend_P(PSTR(",\"Events\":%u"),MIBLEsensors[i].events);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"PIR\":1")); // only real-time
|
||||||
|
}
|
||||||
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Events\":%u"),MIBLEsensors[i].events);
|
||||||
}
|
}
|
||||||
else if(MIBLEsensors[i].eventType.noMotion && MINRF.mode.triggeredTele){
|
else if(MIBLEsensors[i].eventType.noMotion && MINRF.mode.triggeredTele){
|
||||||
ResponseAppend_P(PSTR(",\"PIR\":0"));
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"PIR\":0"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MIBLEsensors[i].feature.NMT || !MINRF.mode.triggeredTele){
|
if (MIBLEsensors[i].feature.NMT || !MINRF.mode.triggeredTele){
|
||||||
if(MIBLEsensors[i].eventType.NMT){
|
if(MIBLEsensors[i].eventType.NMT){
|
||||||
ResponseAppend_P(PSTR(",\"NMT\":%u"), MIBLEsensors[i].NMT);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"NMT\":%u"), MIBLEsensors[i].NMT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.bat){
|
if (MIBLEsensors[i].feature.bat){
|
||||||
@ -1807,13 +1827,13 @@ void MINRFShow(bool json)
|
|||||||
||(hass_mode==2)
|
||(hass_mode==2)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"Battery\":%u"), MIBLEsensors[i].bat);
|
MINRFShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Battery\":%u"), MIBLEsensors[i].bat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(_positionCurlyBracket==ResponseLength()) ResponseAppend_P(PSTR(",")); // write some random char, to be overwritten in the next step
|
ResponseJsonEnd();
|
||||||
ResponseAppend_P(PSTR("}"));
|
|
||||||
TasmotaGlobal.mqtt_data[_positionCurlyBracket] = '{';
|
|
||||||
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;
|
||||||
|
@ -453,23 +453,7 @@ void HM10_ReverseMAC(uint8_t _mac[]){
|
|||||||
}
|
}
|
||||||
memcpy(_mac,_reversedMAC, sizeof(_reversedMAC));
|
memcpy(_mac,_reversedMAC, sizeof(_reversedMAC));
|
||||||
}
|
}
|
||||||
#ifdef USE_HOME_ASSISTANT
|
|
||||||
/**
|
|
||||||
* @brief For HASS only, changes last entry of JSON in mqtt_data to 'null'
|
|
||||||
*/
|
|
||||||
|
|
||||||
void HM10nullifyEndOfMQTT_DATA(){
|
|
||||||
char *p = TasmotaGlobal.mqtt_data + ResponseLength();
|
|
||||||
while(true){
|
|
||||||
*p--;
|
|
||||||
if(p[0]==':'){
|
|
||||||
p[1] = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ResponseAppend_P(PSTR("null"));
|
|
||||||
}
|
|
||||||
#endif // USE_HOME_ASSISTANT
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* chained tasks
|
* chained tasks
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -1058,7 +1042,7 @@ void HM10showScanResults(){
|
|||||||
ToHex_P(_scanResult.MAC,6,_MAC,18,':');
|
ToHex_P(_scanResult.MAC,6,_MAC,18,':');
|
||||||
ResponseAppend_P(PSTR("%s{\"MAC\":\"%s\",\"CID\":\"0x%04x\",\"SVC\":\"0x%04x\",\"UUID\":\"0x%04x\",\"RSSI\":%d}"),
|
ResponseAppend_P(PSTR("%s{\"MAC\":\"%s\",\"CID\":\"0x%04x\",\"SVC\":\"0x%04x\",\"UUID\":\"0x%04x\",\"RSSI\":%d}"),
|
||||||
(add_comma)?",":"", _MAC, _scanResult.CID, _scanResult.SVC, _scanResult.UUID, _scanResult.RSSI);
|
(add_comma)?",":"", _MAC, _scanResult.CID, _scanResult.SVC, _scanResult.UUID, _scanResult.RSSI);
|
||||||
add_comma = true;
|
add_comma = true;
|
||||||
}
|
}
|
||||||
ResponseAppend_P(PSTR("]}"));
|
ResponseAppend_P(PSTR("]}"));
|
||||||
MIBLEscanResult.clear();
|
MIBLEscanResult.clear();
|
||||||
@ -1072,7 +1056,7 @@ void HM10showBlockList(){
|
|||||||
char _MAC[18];
|
char _MAC[18];
|
||||||
ToHex_P(_scanResult.buf,6,_MAC,18,':');
|
ToHex_P(_scanResult.buf,6,_MAC,18,':');
|
||||||
ResponseAppend_P(PSTR("%s\"%s\""), (add_comma)?",":"", _MAC);
|
ResponseAppend_P(PSTR("%s\"%s\""), (add_comma)?",":"", _MAC);
|
||||||
add_comma = true;
|
add_comma = true;
|
||||||
}
|
}
|
||||||
ResponseAppend_P(PSTR("]"));
|
ResponseAppend_P(PSTR("]"));
|
||||||
HM10.mode.shallShowBlockList = 0;
|
HM10.mode.shallShowBlockList = 0;
|
||||||
@ -1750,6 +1734,14 @@ const char HTTP_RSSI[] PROGMEM = "{s}%s " D_RSSI "{m}%d dBm{e}";
|
|||||||
const char HTTP_HM10_FLORA_DATA[] PROGMEM = "{s}%s" " Fertility" "{m}%u us/cm{e}";
|
const char HTTP_HM10_FLORA_DATA[] PROGMEM = "{s}%s" " Fertility" "{m}%u us/cm{e}";
|
||||||
const char HTTP_HM10_HL[] PROGMEM = "{s}<hr>{m}<hr>{e}";
|
const char HTTP_HM10_HL[] PROGMEM = "{s}<hr>{m}<hr>{e}";
|
||||||
|
|
||||||
|
void HM10ShowContinuation(bool *commaflg) {
|
||||||
|
if (*commaflg) {
|
||||||
|
ResponseAppend_P(PSTR(","));
|
||||||
|
} else {
|
||||||
|
*commaflg = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void HM10Show(bool json)
|
void HM10Show(bool json)
|
||||||
{
|
{
|
||||||
if (json) {
|
if (json) {
|
||||||
@ -1781,12 +1773,11 @@ void HM10Show(bool json)
|
|||||||
if(HM10.mode.triggeredTele && MIBLEsensors[i].eventType.raw == 0) continue;
|
if(HM10.mode.triggeredTele && MIBLEsensors[i].eventType.raw == 0) continue;
|
||||||
if(HM10.mode.triggeredTele && MIBLEsensors[i].shallSendMQTT==0) continue;
|
if(HM10.mode.triggeredTele && MIBLEsensors[i].shallSendMQTT==0) continue;
|
||||||
|
|
||||||
ResponseAppend_P(PSTR(",\"%s-%02x%02x%02x\":"), // do not add the '{' now ...
|
bool commaflg = false;
|
||||||
|
ResponseAppend_P(PSTR(",\"%s-%02x%02x%02x\":{"),
|
||||||
kHM10DeviceType[MIBLEsensors[i].type-1],
|
kHM10DeviceType[MIBLEsensors[i].type-1],
|
||||||
MIBLEsensors[i].MAC[3], MIBLEsensors[i].MAC[4], MIBLEsensors[i].MAC[5]);
|
MIBLEsensors[i].MAC[3], MIBLEsensors[i].MAC[4], MIBLEsensors[i].MAC[5]);
|
||||||
|
|
||||||
uint32_t _positionCurlyBracket = ResponseLength(); // ... this will be a ',' first, but later be replaced
|
|
||||||
|
|
||||||
if((!HM10.mode.triggeredTele && !HM10.option.minimalSummary)||HM10.mode.triggeredTele){
|
if((!HM10.mode.triggeredTele && !HM10.option.minimalSummary)||HM10.mode.triggeredTele){
|
||||||
bool tempHumSended = false;
|
bool tempHumSended = false;
|
||||||
if(MIBLEsensors[i].feature.tempHum){
|
if(MIBLEsensors[i].feature.tempHum){
|
||||||
@ -1796,7 +1787,7 @@ void HM10Show(bool json)
|
|||||||
||(hass_mode!=-1)
|
||(hass_mode!=-1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(","));
|
HM10ShowContinuation(&commaflg);
|
||||||
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
||||||
tempHumSended = true;
|
tempHumSended = true;
|
||||||
}
|
}
|
||||||
@ -1809,7 +1800,8 @@ void HM10Show(bool json)
|
|||||||
||(hass_mode!=-1)
|
||(hass_mode!=-1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%*_f"),
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_TEMPERATURE "\":%*_f"),
|
||||||
Settings.flag2.temperature_resolution, &MIBLEsensors[i].temp);
|
Settings.flag2.temperature_resolution, &MIBLEsensors[i].temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1823,99 +1815,124 @@ void HM10Show(bool json)
|
|||||||
) {
|
) {
|
||||||
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);
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_HUMIDITY "\":%s"), hum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.lux){
|
if (MIBLEsensors[i].feature.lux){
|
||||||
if(MIBLEsensors[i].eventType.lux || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.lux || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].lux!=0x0ffffff
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].lux == 0x0ffffff)) {
|
||||||
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_ILLUMINANCE "\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((MIBLEsensors[i].lux != 0x0ffffff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) { // this is the error code -> no lux
|
) { // this is the error code -> no lux
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
HM10ShowContinuation(&commaflg);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
ResponseAppend_P(PSTR("\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
||||||
if (MIBLEsensors[i].lux==0x0ffffff) HM10nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.moist){
|
if (MIBLEsensors[i].feature.moist){
|
||||||
if(MIBLEsensors[i].eventType.moist || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.moist || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].moisture!=0xff
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].moisture == 0xff)) {
|
||||||
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_MOISTURE "\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((MIBLEsensors[i].moisture != 0xff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
HM10ShowContinuation(&commaflg);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
ResponseAppend_P(PSTR("\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
||||||
if (MIBLEsensors[i].moisture==0xff) HM10nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.fert){
|
if (MIBLEsensors[i].feature.fert){
|
||||||
if(MIBLEsensors[i].eventType.fert || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.fert || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].fertility!=0xffff
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].fertility == 0xffff)) {
|
||||||
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Fertility\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((MIBLEsensors[i].fertility != 0xffff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"Fertility\":%u"), MIBLEsensors[i].fertility);
|
HM10ShowContinuation(&commaflg);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
ResponseAppend_P(PSTR("\"Fertility\":%u"), MIBLEsensors[i].fertility);
|
||||||
if (MIBLEsensors[i].fertility==0xffff) HM10nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.Btn){
|
if (MIBLEsensors[i].feature.Btn){
|
||||||
if(MIBLEsensors[i].eventType.Btn){
|
if(MIBLEsensors[i].eventType.Btn){
|
||||||
ResponseAppend_P(PSTR(",\"Btn\":%u"),MIBLEsensors[i].Btn);
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Btn\":%u"),MIBLEsensors[i].Btn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // minimal summary
|
} // minimal summary
|
||||||
if (MIBLEsensors[i].feature.PIR){
|
if (MIBLEsensors[i].feature.PIR){
|
||||||
if(MIBLEsensors[i].eventType.motion || !HM10.mode.triggeredTele){
|
if(MIBLEsensors[i].eventType.motion || !HM10.mode.triggeredTele){
|
||||||
if(HM10.mode.triggeredTele) ResponseAppend_P(PSTR(",\"PIR\":1")); // only real-time
|
if(HM10.mode.triggeredTele) {
|
||||||
ResponseAppend_P(PSTR(",\"Events\":%u"),MIBLEsensors[i].events);
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"PIR\":1")); // only real-time
|
||||||
|
}
|
||||||
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Events\":%u"),MIBLEsensors[i].events);
|
||||||
}
|
}
|
||||||
else if(MIBLEsensors[i].eventType.noMotion && HM10.mode.triggeredTele){
|
else if(MIBLEsensors[i].eventType.noMotion && HM10.mode.triggeredTele){
|
||||||
ResponseAppend_P(PSTR(",\"PIR\":0"));
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"PIR\":0"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MIBLEsensors[i].type == FLORA && !HM10.mode.triggeredTele) {
|
if (MIBLEsensors[i].type == FLORA && !HM10.mode.triggeredTele) {
|
||||||
if (MIBLEsensors[i].firmware[0] != '\0') { // this is the error code -> no firmware
|
if (MIBLEsensors[i].firmware[0] != '\0') { // this is the error code -> no firmware
|
||||||
ResponseAppend_P(PSTR(",\"Firmware\":\"%s\""), MIBLEsensors[i].firmware);
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Firmware\":\"%s\""), MIBLEsensors[i].firmware);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MIBLEsensors[i].feature.NMT || !HM10.mode.triggeredTele){
|
if (MIBLEsensors[i].feature.NMT || !HM10.mode.triggeredTele){
|
||||||
if(MIBLEsensors[i].eventType.NMT){
|
if(MIBLEsensors[i].eventType.NMT){
|
||||||
ResponseAppend_P(PSTR(",\"NMT\":%u"), MIBLEsensors[i].NMT);
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"NMT\":%u"), MIBLEsensors[i].NMT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MIBLEsensors[i].feature.bat){
|
if (MIBLEsensors[i].feature.bat){
|
||||||
if(MIBLEsensors[i].eventType.bat || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
if(MIBLEsensors[i].eventType.bat || !HM10.mode.triggeredTele || HM10.option.allwaysAggregate){
|
||||||
if (MIBLEsensors[i].bat != 0x00
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].bat == 0x00)) {
|
||||||
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Battery\":null"));
|
||||||
|
} else
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) { // this is the error code -> no battery
|
if ((MIBLEsensors[i].bat != 0x00)
|
||||||
ResponseAppend_P(PSTR(",\"Battery\":%u"), MIBLEsensors[i].bat);
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
if (MIBLEsensors[i].bat == 0x00) HM10nullifyEndOfMQTT_DATA();
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Battery\":%u"), MIBLEsensors[i].bat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (HM10.option.showRSSI) ResponseAppend_P(PSTR(",\"RSSI\":%d"), MIBLEsensors[i].rssi);
|
if (HM10.option.showRSSI) {
|
||||||
|
HM10ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"RSSI\":%d"), MIBLEsensors[i].rssi);
|
||||||
|
}
|
||||||
|
ResponseJsonEnd();
|
||||||
|
|
||||||
|
|
||||||
if(_positionCurlyBracket==ResponseLength()) ResponseAppend_P(PSTR(",")); // write some random char, to be overwritten in the next step
|
|
||||||
ResponseAppend_P(PSTR("}"));
|
|
||||||
TasmotaGlobal.mqtt_data[_positionCurlyBracket] = '{';
|
|
||||||
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;
|
||||||
|
@ -628,24 +628,6 @@ int MI32_decryptPacket(char *_buf, uint16_t _bufSize, uint32_t _type){
|
|||||||
}
|
}
|
||||||
#endif // USE_MI_DECRYPTION
|
#endif // USE_MI_DECRYPTION
|
||||||
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
|
||||||
/**
|
|
||||||
* @brief For HASS only, changes last entry of JSON in mqtt_data to 'null'
|
|
||||||
*/
|
|
||||||
|
|
||||||
void MI32nullifyEndOfMQTT_DATA(){
|
|
||||||
char *p = TasmotaGlobal.mqtt_data + ResponseLength();
|
|
||||||
while(true){
|
|
||||||
*p--;
|
|
||||||
if(p[0]==':'){
|
|
||||||
p[1] = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ResponseAppend_P(PSTR("null"));
|
|
||||||
}
|
|
||||||
#endif // USE_HOME_ASSISTANT
|
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* common functions
|
* common functions
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -1993,6 +1975,14 @@ const char HTTP_NMT[] PROGMEM = "{s}%s No motion{m}> %u seconds{e}";
|
|||||||
const char HTTP_MI32_FLORA_DATA[] PROGMEM = "{s}%s" " Fertility" "{m}%u us/cm{e}";
|
const char HTTP_MI32_FLORA_DATA[] PROGMEM = "{s}%s" " Fertility" "{m}%u us/cm{e}";
|
||||||
const char HTTP_MI32_HL[] PROGMEM = "{s}<hr>{m}<hr>{e}";
|
const char HTTP_MI32_HL[] PROGMEM = "{s}<hr>{m}<hr>{e}";
|
||||||
|
|
||||||
|
void MI32ShowContinuation(bool *commaflg) {
|
||||||
|
if (*commaflg) {
|
||||||
|
ResponseAppend_P(PSTR(","));
|
||||||
|
} else {
|
||||||
|
*commaflg = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MI32Show(bool json)
|
void MI32Show(bool json)
|
||||||
{
|
{
|
||||||
if (json) {
|
if (json) {
|
||||||
@ -2026,12 +2016,11 @@ void MI32Show(bool json)
|
|||||||
if(MI32.mode.triggeredTele && MIBLEsensors[i].eventType.raw == 0) continue;
|
if(MI32.mode.triggeredTele && MIBLEsensors[i].eventType.raw == 0) continue;
|
||||||
if(MI32.mode.triggeredTele && MIBLEsensors[i].shallSendMQTT==0) continue;
|
if(MI32.mode.triggeredTele && MIBLEsensors[i].shallSendMQTT==0) continue;
|
||||||
|
|
||||||
ResponseAppend_P(PSTR(",\"%s-%02x%02x%02x\":"), // do not add the '{' now ...
|
bool commaflg = false;
|
||||||
|
ResponseAppend_P(PSTR(",\"%s-%02x%02x%02x\":{"),
|
||||||
kMI32DeviceType[MIBLEsensors[i].type-1],
|
kMI32DeviceType[MIBLEsensors[i].type-1],
|
||||||
MIBLEsensors[i].MAC[3], MIBLEsensors[i].MAC[4], MIBLEsensors[i].MAC[5]);
|
MIBLEsensors[i].MAC[3], MIBLEsensors[i].MAC[4], MIBLEsensors[i].MAC[5]);
|
||||||
|
|
||||||
uint32_t _positionCurlyBracket = ResponseLength(); // ... this will be a ',' first, but later be replaced
|
|
||||||
|
|
||||||
if((!MI32.mode.triggeredTele && !MI32.option.minimalSummary)||MI32.mode.triggeredTele){
|
if((!MI32.mode.triggeredTele && !MI32.option.minimalSummary)||MI32.mode.triggeredTele){
|
||||||
bool tempHumSended = false;
|
bool tempHumSended = false;
|
||||||
if(MIBLEsensors[i].feature.tempHum){
|
if(MIBLEsensors[i].feature.tempHum){
|
||||||
@ -2041,7 +2030,7 @@ void MI32Show(bool json)
|
|||||||
||(hass_mode!=-1)
|
||(hass_mode!=-1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(","));
|
MI32ShowContinuation(&commaflg);
|
||||||
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
ResponseAppendTHD(MIBLEsensors[i].temp, MIBLEsensors[i].hum);
|
||||||
tempHumSended = true;
|
tempHumSended = true;
|
||||||
}
|
}
|
||||||
@ -2054,7 +2043,8 @@ void MI32Show(bool json)
|
|||||||
||(hass_mode!=-1)
|
||(hass_mode!=-1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%*_f"),
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_TEMPERATURE "\":%*_f"),
|
||||||
Settings.flag2.temperature_resolution, &MIBLEsensors[i].temp);
|
Settings.flag2.temperature_resolution, &MIBLEsensors[i].temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2068,49 +2058,62 @@ void MI32Show(bool json)
|
|||||||
) {
|
) {
|
||||||
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);
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_HUMIDITY "\":%s"), hum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].lux == 0x0ffffff)) {
|
||||||
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_ILLUMINANCE "\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((MIBLEsensors[i].lux != 0x0ffffff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) { // this is the error code -> no lux
|
) { // this is the error code -> no lux
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
MI32ShowContinuation(&commaflg);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
ResponseAppend_P(PSTR("\"" D_JSON_ILLUMINANCE "\":%u"), MIBLEsensors[i].lux);
|
||||||
if (MIBLEsensors[i].lux==0x0ffffff) MI32nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].moisture == 0xff)) {
|
||||||
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"" D_JSON_MOISTURE "\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((MIBLEsensors[i].moisture != 0xff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
MI32ShowContinuation(&commaflg);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
ResponseAppend_P(PSTR("\"" D_JSON_MOISTURE "\":%u"), MIBLEsensors[i].moisture);
|
||||||
if (MIBLEsensors[i].moisture==0xff) MI32nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].fertility == 0xffff)) {
|
||||||
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Fertility\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((MIBLEsensors[i].fertility != 0xffff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"Fertility\":%u"), MIBLEsensors[i].fertility);
|
MI32ShowContinuation(&commaflg);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
ResponseAppend_P(PSTR("\"Fertility\":%u"), MIBLEsensors[i].fertility);
|
||||||
if (MIBLEsensors[i].fertility==0xffff) MI32nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2120,50 +2123,63 @@ void MI32Show(bool json)
|
|||||||
||(hass_mode==2)
|
||(hass_mode==2)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
){
|
){
|
||||||
ResponseAppend_P(PSTR(",\"Btn\":%u"),MIBLEsensors[i].Btn);
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Btn\":%u"),MIBLEsensors[i].Btn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // minimal summary
|
} // minimal summary
|
||||||
if (MIBLEsensors[i].feature.PIR){
|
if (MIBLEsensors[i].feature.PIR){
|
||||||
if(MIBLEsensors[i].eventType.motion || !MI32.mode.triggeredTele){
|
if(MIBLEsensors[i].eventType.motion || !MI32.mode.triggeredTele){
|
||||||
if(MI32.mode.triggeredTele) ResponseAppend_P(PSTR(",\"PIR\":1")); // only real-time
|
if(MI32.mode.triggeredTele) {
|
||||||
ResponseAppend_P(PSTR(",\"Events\":%u"),MIBLEsensors[i].events);
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"PIR\":1")); // only real-time
|
||||||
|
}
|
||||||
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Events\":%u"),MIBLEsensors[i].events);
|
||||||
}
|
}
|
||||||
else if(MIBLEsensors[i].eventType.noMotion && MI32.mode.triggeredTele){
|
else if(MIBLEsensors[i].eventType.noMotion && MI32.mode.triggeredTele){
|
||||||
ResponseAppend_P(PSTR(",\"PIR\":0"));
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"PIR\":0"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MIBLEsensors[i].type == FLORA && !MI32.mode.triggeredTele) {
|
if (MIBLEsensors[i].type == FLORA && !MI32.mode.triggeredTele) {
|
||||||
if (MIBLEsensors[i].firmware[0] != '\0') { // this is the error code -> no firmware
|
if (MIBLEsensors[i].firmware[0] != '\0') { // this is the error code -> no firmware
|
||||||
ResponseAppend_P(PSTR(",\"Firmware\":\"%s\""), MIBLEsensors[i].firmware);
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Firmware\":\"%s\""), MIBLEsensors[i].firmware);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MIBLEsensors[i].feature.NMT || !MI32.mode.triggeredTele){
|
if (MIBLEsensors[i].feature.NMT || !MI32.mode.triggeredTele){
|
||||||
if(MIBLEsensors[i].eventType.NMT){
|
if(MIBLEsensors[i].eventType.NMT){
|
||||||
ResponseAppend_P(PSTR(",\"NMT\":%u"), MIBLEsensors[i].NMT);
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"NMT\":%u"), MIBLEsensors[i].NMT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (MIBLEsensors[i].bat == 0x00)) {
|
||||||
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Battery\":null"));
|
||||||
|
} else
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) { // this is the error code -> no battery
|
if ((MIBLEsensors[i].bat != 0x00)
|
||||||
ResponseAppend_P(PSTR(",\"Battery\":%u"), MIBLEsensors[i].bat);
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
if (MIBLEsensors[i].bat == 0x00) MI32nullifyEndOfMQTT_DATA();
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"Battery\":%u"), MIBLEsensors[i].bat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MI32.option.showRSSI) ResponseAppend_P(PSTR(",\"RSSI\":%d"), MIBLEsensors[i].RSSI);
|
if (MI32.option.showRSSI) {
|
||||||
|
MI32ShowContinuation(&commaflg);
|
||||||
|
ResponseAppend_P(PSTR("\"RSSI\":%d"), MIBLEsensors[i].RSSI);
|
||||||
|
}
|
||||||
|
ResponseJsonEnd();
|
||||||
|
|
||||||
if(_positionCurlyBracket==ResponseLength()) ResponseAppend_P(PSTR(",")); // write some random char, to be overwritten in the next step
|
|
||||||
ResponseAppend_P(PSTR("}"));
|
|
||||||
TasmotaGlobal.mqtt_data[_positionCurlyBracket] = '{';
|
|
||||||
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;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Copyright (C) 2020 Christian Baars and Theo Arends
|
Copyright (C) 2020 Christian Baars and Theo Arends
|
||||||
Also Simon Hailes and Robert Klauco
|
Also Simon Hailes and Robert Klauco
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -1332,27 +1332,6 @@ int MIParsePacket(const uint8_t* slotmac, struct mi_beacon_data_t *parsed, const
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
|
||||||
/**
|
|
||||||
* @brief For HASS only, changes last entry of JSON in mqtt_data to 'null'
|
|
||||||
*/
|
|
||||||
|
|
||||||
void MI32nullifyEndOfMQTT_DATA(){
|
|
||||||
char *p = TasmotaGlobal.mqtt_data + ResponseLength();
|
|
||||||
while(true){
|
|
||||||
*p--;
|
|
||||||
if(p[0]==':'){
|
|
||||||
p[1] = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ResponseAppend_P(PSTR("null"));
|
|
||||||
}
|
|
||||||
#endif // USE_HOME_ASSISTANT
|
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* common functions
|
* common functions
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -1674,7 +1653,7 @@ int MI32parseMiPayload(int _slot, struct mi_beacon_data_t *parsed){
|
|||||||
char tmp[20];
|
char tmp[20];
|
||||||
BLE_ESP32::dump(tmp, 20, (uint8_t*)&(parsed->payload), parsed->payload.size+3);
|
BLE_ESP32::dump(tmp, 20, (uint8_t*)&(parsed->payload), parsed->payload.size+3);
|
||||||
if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG_MORE,PSTR("M32: MI%d payload %s"), _slot, tmp);
|
if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG_MORE,PSTR("M32: MI%d payload %s"), _slot, tmp);
|
||||||
|
|
||||||
// clear this for every payload
|
// clear this for every payload
|
||||||
MIBLEsensors[_slot].pairing = 0;
|
MIBLEsensors[_slot].pairing = 0;
|
||||||
MIBLEsensors[_slot].eventType.PairBtn = 0;
|
MIBLEsensors[_slot].eventType.PairBtn = 0;
|
||||||
@ -1693,7 +1672,7 @@ int MI32parseMiPayload(int _slot, struct mi_beacon_data_t *parsed){
|
|||||||
uint8_t motion = parsed->payload.data[0];
|
uint8_t motion = parsed->payload.data[0];
|
||||||
res = 0;
|
res = 0;
|
||||||
}break;
|
}break;
|
||||||
case 0x000f: // 'Someone is moving (with light)'
|
case 0x000f: // 'Someone is moving (with light)'
|
||||||
MIBLEsensors[_slot].eventType.motion = 1;
|
MIBLEsensors[_slot].eventType.motion = 1;
|
||||||
MIBLEsensors[_slot].lastTime = millis();
|
MIBLEsensors[_slot].lastTime = millis();
|
||||||
MIBLEsensors[_slot].events++;
|
MIBLEsensors[_slot].events++;
|
||||||
@ -1999,13 +1978,13 @@ void MI32EverySecond(bool restart){
|
|||||||
// show tas style sensor MQTT
|
// show tas style sensor MQTT
|
||||||
MI32ShowSomeSensors();
|
MI32ShowSomeSensors();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MI32.option.MQTTType == 1
|
if (MI32.option.MQTTType == 1
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||
|
||
|
||||||
Settings.flag.hass_discovery
|
Settings.flag.hass_discovery
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
// these two share a counter
|
// these two share a counter
|
||||||
// discovery only sent if hass_discovery
|
// discovery only sent if hass_discovery
|
||||||
MI32DiscoveryOneMISensor();
|
MI32DiscoveryOneMISensor();
|
||||||
@ -2545,15 +2524,17 @@ void MI32GetOneSensorJson(int slot, int hidename){
|
|||||||
}
|
}
|
||||||
if (p->feature.lux){
|
if (p->feature.lux){
|
||||||
if(p->eventType.lux || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(p->eventType.lux || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (p->lux!=0x0ffffff
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (p->lux == 0x0ffffff)) {
|
||||||
|
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((p->lux != 0x0ffffff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) { // this is the error code -> no lux
|
) { // this is the error code -> no lux
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":%u"), p->lux);
|
ResponseAppend_P(PSTR(",\"" D_JSON_ILLUMINANCE "\":%u"), p->lux);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
|
||||||
if (p->lux==0x0ffffff) MI32nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2568,29 +2549,33 @@ void MI32GetOneSensorJson(int slot, int hidename){
|
|||||||
}
|
}
|
||||||
if (p->feature.moist){
|
if (p->feature.moist){
|
||||||
if(p->eventType.moist || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(p->eventType.moist || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (p->moisture!=0xff
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (p->moisture == 0xff)) {
|
||||||
|
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((p->moisture != 0xff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":%u"), p->moisture);
|
ResponseAppend_P(PSTR(",\"" D_JSON_MOISTURE "\":%u"), p->moisture);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
|
||||||
if (p->moisture==0xff) MI32nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (p->feature.fert){
|
if (p->feature.fert){
|
||||||
if(p->eventType.fert || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(p->eventType.fert || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (p->fertility!=0xffff
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (p->fertility == 0xffff)) {
|
||||||
|
ResponseAppend_P(PSTR(",\"Fertility\":null"));
|
||||||
|
} else
|
||||||
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
if ((p->fertility != 0xffff)
|
||||||
|
#ifdef USE_HOME_ASSISTANT
|
||||||
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) {
|
) {
|
||||||
ResponseAppend_P(PSTR(",\"Fertility\":%u"), p->fertility);
|
ResponseAppend_P(PSTR(",\"Fertility\":%u"), p->fertility);
|
||||||
#ifdef USE_HOME_ASSISTANT
|
|
||||||
if (p->fertility==0xffff) MI32nullifyEndOfMQTT_DATA();
|
|
||||||
#endif //USE_HOME_ASSISTANT
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2632,15 +2617,17 @@ void MI32GetOneSensorJson(int slot, int hidename){
|
|||||||
}
|
}
|
||||||
if (p->feature.bat){
|
if (p->feature.bat){
|
||||||
if(p->eventType.bat || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
if(p->eventType.bat || !MI32.mode.triggeredTele || MI32.option.allwaysAggregate){
|
||||||
if (p->bat != 0x00
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
||(hass_mode!=-1)
|
if ((hass_mode != -1) && (p->bat == 0x00)) {
|
||||||
|
ResponseAppend_P(PSTR(",\"Battery\":null"));
|
||||||
|
} else
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
) { // this is the error code -> no battery
|
if ((p->bat != 0x00)
|
||||||
ResponseAppend_P(PSTR(",\"Battery\":%u"), p->bat);
|
|
||||||
#ifdef USE_HOME_ASSISTANT
|
#ifdef USE_HOME_ASSISTANT
|
||||||
if (p->bat == 0x00) MI32nullifyEndOfMQTT_DATA();
|
|| (hass_mode != -1)
|
||||||
#endif //USE_HOME_ASSISTANT
|
#endif //USE_HOME_ASSISTANT
|
||||||
|
) {
|
||||||
|
ResponseAppend_P(PSTR(",\"Battery\":%u"), p->bat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2888,7 +2875,7 @@ void MI32DiscoveryOneMISensor(){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint8_t isBinary = 0;
|
uint8_t isBinary = 0;
|
||||||
|
|
||||||
ResponseClear();
|
ResponseClear();
|
||||||
|
|
||||||
switch(i/3){
|
switch(i/3){
|
||||||
|
@ -132,9 +132,7 @@ void HandleMetrics(void) {
|
|||||||
|
|
||||||
ResponseClear();
|
ResponseClear();
|
||||||
MqttShowSensor(); //Pull sensor data
|
MqttShowSensor(); //Pull sensor data
|
||||||
char json[ResponseLength()+1];
|
String jsonStr = TasmotaGlobal.mqtt_data;
|
||||||
snprintf_P(json, sizeof(json), TasmotaGlobal.mqtt_data);
|
|
||||||
String jsonStr = json;
|
|
||||||
JsonParser parser((char *)jsonStr.c_str());
|
JsonParser parser((char *)jsonStr.c_str());
|
||||||
JsonParserObject root = parser.getRootObject();
|
JsonParserObject root = parser.getRootObject();
|
||||||
if (root) { // did JSON parsing went ok?
|
if (root) { // did JSON parsing went ok?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user