NEWS
[ERL] Alias von "availability" funktioniert nicht mehr
-
Habe einige Sensoren usw über verschiedene Mechanismen auf "Erreichbarkeit" gecheckt, und lasse mir eine summarische Mail schicken, die den Zustand reported...
Leider scheint man da inzwischen abzustumpfen, und ich habe erst jetzt festgestellt, dass seit etwa 21 Juli 2025 (letzte Meldung "verfügbar") mein Zigbee Aqara Thermosensor als nicht erreichbar gemeldet wird, trotzdem er noch erreichbar ist.
Der Sensor kommt über Zigbee2mqtt herein, und geht direkt in den MQTT Client/Server.
Aktuell sieht der für Verfügbarkeit ausgewertete Datenpunkt so aus:

Die im Alias verwendete Konvertierungsfunktion konnte meiner Meinung nach mit dem Inhalt nichts anfangen.
{ "common": { "name": "Aqara_1", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": false, "def": false, "alias": { "id": "mqtt.0.zigbee2mqtt.Aqara_Temperaturmultisensor_1.availability", "read": "state==\"online\"" } }, "type": "state", "native": {}, "_id": "alias.0.Available.Aqara_1", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1764157660333 }Habe das nun geändert, und es funktioniert so weit wieder.
{ "common": { "name": "Aqara_1", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": false, "def": false, "alias": { "id": "mqtt.0.zigbee2mqtt.Aqara_Temperaturmultisensor_1.availability", "read": "JSON.parse(val).state==\"online\"" } }, "type": "state", "native": {}, "_id": "alias.0.Available.Aqara_1", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1764157660333 }Weiß jemand, wo sich da etwas geändert hat? ... bei aller Unschärfe meine ich dass in Available durchaus früher nur "online" stand, und kein JSON ...
-
Weiß nicht mehr wie das geht, Expertenmodus angemacht, aber da kommt keine weitere Spalte dazu

Und hier die Objektdaten
{ "_id": "mqtt.0.zigbee2mqtt.Aqara_Temperaturmultisensor_1.availability", "common": { "name": "zigbee2mqtt/Aqara_Temperaturmultisensor_1/availability", "write": true, "read": true, "role": "variable", "desc": "mqtt server variable", "type": "string" }, "native": { "topic": "zigbee2mqtt/Aqara_Temperaturmultisensor_1/availability" }, "type": "state", "from": "system.adapter.mqtt.0", "user": "system.user.admin", "ts": 1703697860026, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } -
Habe einige Sensoren usw über verschiedene Mechanismen auf "Erreichbarkeit" gecheckt, und lasse mir eine summarische Mail schicken, die den Zustand reported...
Leider scheint man da inzwischen abzustumpfen, und ich habe erst jetzt festgestellt, dass seit etwa 21 Juli 2025 (letzte Meldung "verfügbar") mein Zigbee Aqara Thermosensor als nicht erreichbar gemeldet wird, trotzdem er noch erreichbar ist.
Der Sensor kommt über Zigbee2mqtt herein, und geht direkt in den MQTT Client/Server.
Aktuell sieht der für Verfügbarkeit ausgewertete Datenpunkt so aus:

Die im Alias verwendete Konvertierungsfunktion konnte meiner Meinung nach mit dem Inhalt nichts anfangen.
{ "common": { "name": "Aqara_1", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": false, "def": false, "alias": { "id": "mqtt.0.zigbee2mqtt.Aqara_Temperaturmultisensor_1.availability", "read": "state==\"online\"" } }, "type": "state", "native": {}, "_id": "alias.0.Available.Aqara_1", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1764157660333 }Habe das nun geändert, und es funktioniert so weit wieder.
{ "common": { "name": "Aqara_1", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": false, "def": false, "alias": { "id": "mqtt.0.zigbee2mqtt.Aqara_Temperaturmultisensor_1.availability", "read": "JSON.parse(val).state==\"online\"" } }, "type": "state", "native": {}, "_id": "alias.0.Available.Aqara_1", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1764157660333 }Weiß jemand, wo sich da etwas geändert hat? ... bei aller Unschärfe meine ich dass in Available durchaus früher nur "online" stand, und kein JSON ...
-
@paul53 Bis Mitte Juli hat es funktioniert, da kam in den Mails in der Regel....
Gerätetedetails:
Lidl-Fluter : ERROR (false)
Aqara_1: OK (true)
FritzDECT_Steckdose: OK (true)
...
Alive NOUS A1T ("Bewaesserung"): OK (true)Entweder hat zigbee2mqtt da eine Umstellung erfahren, dass diese Art von Datenwerte vorher NICHT als JSON geliefert worden sind (dazu tendiere ich), oder es passiert irgendwo später auf dem Weg bis zum Schreiben des Datenpunktes nach mqtt.0....
Ich habe mehrfach den zigbee2mqtt container-stack aktualisiert vielleicht hat sich irgendwann das Verhalten geändert...
-
Hier noch das Mail-Skript
var LastFoundError, SupervisedObjects, j, timeout2, FoundError, EmailBody, i, EmailSubject; on({ id: [].concat(['mqtt.0.thermostat.logmsg']), change: 'ne' }, async (obj) => { if (!obj.state) return; const e = new Date(obj.state.ts); console.info(([ obj.state.val,' ',e.toLocaleString("DE-de")].join(''))); }); LastFoundError = 0; SupervisedObjects = Array.prototype.slice.apply($('alias.0.Available.*')); var j_list = Array.prototype.slice.apply($('ping.0.*')); for (var j_index in j_list) { j = j_list[j_index]; if (j == 'ping.0.iobroker-test-sicher.xxxxxxxxxxxx') { console.info(('Füge NICHT ein: ' + String(j))); } else { console.info(('Füge ein: ' + String(j))); SupervisedObjects.push(j); } } on({ id: [].concat(SupervisedObjects), change: 'ne' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; (() => { if (timeout2) { clearTimeout(timeout2); timeout2 = null; }})(); timeout2 = setTimeout(async () => { timeout2 = null; FoundError = 0; EmailBody = 'Gerätetedetails: ' + '\n'; for (var i_index in SupervisedObjects) { i = SupervisedObjects[i_index]; EmailBody += String((await getObjectAsync(i)).common.name); if (getState(i).val == true) { EmailBody += ': OK (true)'; } else { EmailBody += ' : ERROR (false)'; FoundError = (typeof FoundError === 'number' ? FoundError : 0) + 1; } EmailBody += '\n'; } if (LastFoundError != FoundError) { if (FoundError == 0) { EmailSubject = 'SmartHome Gerätestatus: ' + 'Alle Geräte wieder erreichbar'; } else if (FoundError == 1) { EmailSubject = 'SmartHome Gerätestatus: ' + 'Ein Gerät nicht erreichbar'; } else { EmailSubject = ['SmartHome Gerätestatus: ',FoundError,' Geräte nicht erreichbar'].join(''); } console.info(EmailSubject); sendTo('email', 'send', { text: EmailBody, to: 'xxxxxxxxxxxxxxxxxxxx', subject: EmailSubject, }); } LastFoundError = FoundError; }, 3000); }); -
@paul53 Bis Mitte Juli hat es funktioniert, da kam in den Mails in der Regel....
Gerätetedetails:
Lidl-Fluter : ERROR (false)
Aqara_1: OK (true)
FritzDECT_Steckdose: OK (true)
...
Alive NOUS A1T ("Bewaesserung"): OK (true)Entweder hat zigbee2mqtt da eine Umstellung erfahren, dass diese Art von Datenwerte vorher NICHT als JSON geliefert worden sind (dazu tendiere ich), oder es passiert irgendwo später auf dem Weg bis zum Schreiben des Datenpunktes nach mqtt.0....
Ich habe mehrfach den zigbee2mqtt container-stack aktualisiert vielleicht hat sich irgendwann das Verhalten geändert...
@MartinP sagte in z2m: Alias von "availability" funktioniert nicht mehr:
Entweder hat zigbee2mqtt da eine Umstellung erfahren, dass diese Art von Datenwerte vorher NICHT als JSON geliefert worden sind (dazu tendiere ich)
Ja, genau so ist es. Das Format hat sich in Version 2.0 geändert.
https://github.com/Koenkk/zigbee2mqtt/discussions/24198
"Due to the removal of advanced.legacy_availability_payload, zigbee2mqtt/bridge/state will now always be a JSON object ({"state":"online"} or {"state":"offline"})."