Hallo zusammen,
ich brauche mal Rat von euch. Ich habe für meine Briefkastenautomation zwei Tür/Fensterkontakte verwendet und über einen Helfer ermittle ich den Status, ob gerade Post da ist oder nicht.Siehe Coding unten.
Mein Problem ist, immer, wenn der HA oder die MQTT App neu gestartet werden, bekommen die Sensoren erstmal einen undefinierten Zustand, die dann in einen Fehlalarm münden. Ich finde den Fehler leider nicht.
Meine Lösung, die aber anscheinend nicht funktioniert:
Wenn die letzte Statusänderung der Sensoren max 3 Minuten nach Systemstart war, ignoriere alles und sestzte „unbekannt“
Hntergrund: Nach Systemstart bekommen die Sensoren den Status „unbekannt“ bis der aktuelle Status von den Sensoren abgefragt wurde. Dadurch gibt es einen neuen „last_changed“ Zeitstempel, der allerdings willkürlich istu nd nicht mehr dem letzten „Briefkasten“-Status entspricht.
{% if (as_timestamp(now()) - as_timestamp(states('sensor.uptime'))) | int > 180 %}
{% set klappe_last_changed = states.binary_sensor.briefkasten_klappe_contact.last_changed %}
{% set tur_last_changed = states.binary_sensor.briefkasten_tur_contact.last_changed %}
{% set klappe_state = states.binary_sensor.briefkasten_klappe_contact.state %}
{% set tur_state = states.binary_sensor.briefkasten_tur_contact.state %}
{# Überprüfen, ob eine der Statusänderungen innerhalb der ersten 3 Minuten nach Neustart erfolgt ist. Wenn ja, dann nichts tun #}
{% if as_timestamp(klappe_last_changed) > as_timestamp(states('sensor.uptime')) + 180 or as_timestamp(tur_last_changed) > as_timestamp(states('sensor.uptime')) + 180 %}
{# Nur dann weiterarbeiten, wenn die Änderungen 3 Minuten nach Neustart erfolgten #}
{% set current_time = now() %}
{# Berechnung der Dauer, die die Klappe geschlossen ist #}
{% set duration_klappe_closed = (as_timestamp(current_time) - as_timestamp(klappe_last_changed)) / 60 %}
{# Berechnung der Dauer, in der die Tür geöffnet war #}
{% set duration_tur_opened = (as_timestamp(current_time) - as_timestamp(tur_last_changed)) / 60 %}
{# Wenn die Klappe mehr als 2 Minuten offen war, dann "Post guckt raus" #}
{% if klappe_state == 'on' and duration_klappe_closed > 2 %}
Post guckt raus
{# Wenn die Tür nach der letzten Klappenöffnung geöffnet wurde, dann "leer" #}
{% elif tur_last_changed > klappe_last_changed %}
leer
{# Wenn die Klappe geöffnet und sofort wieder geschlossen wurde und die Tür in den nächsten 5 Minuten nicht geöffnet wurde, dann "voll" #}
{% elif klappe_state == 'off' and duration_klappe_closed > 5 and duration_tur_opened > 5 %}
voll
{# Wenn keine der Bedingungen zutrifft, dann "unbekannt" #}
{% else %}
unbekannt
{% endif %}
{% else %}
unbekannt
{% endif %}
{% endif %}
Ich hatte ein ähnliches Problem, dadurch das Zigbee2MQTT einen Neustart durchgeführt hat. Bei mir waren es allerdings Taster. Und da war es nicht nur ein Fehlalarm sondern eine Aktion die nicht ausgelösen dürften.
Komme gerade nicht an den Code den ich verwendet habe um das zu stoppen, aber wenn ich zu Hause bin. Guck ich mal rein und poste den hier mal. Vielleicht hilft er dir ja.
Super danke! Ich denke das ist ja eigentlich ein allgemeines Problem. Hab schon überlegt, mir Helfer für die Sensoren zum zwischenspeichern zu schreiben, die sich nur ändern, wenn ein definierter Zustand vorliegt.
Hallo @Symbolus,
zunächst mal
-lich willkommen in unserer Community.
In einer meiner Automationen ist ein ähnliches Phänomen, im Zusammenhang mit Rauchmeldern aufgetreten.
Die Rauchmelder-Entitäten „Rauch“ haben beim Neustart von HA oder Z2M den programmierten Gruppenalarm ausgelöst.
Das konnte nachhaltig verhindert werden, indem ich den Status der „zigbee2mqtt_bridge_connection“ in die Automation eingebaut habe.
Meine Lösung ist für dich jetzt nicht 1:1 umsetzbar, da ich es in Node-RED realisiert habe.
Aber evtl. ist es ein Ansatz, um es in deine Automation einzubauen.
Mit dieser Funktion wird erreicht, dass die Automation erst 10 Min. nach Etablierung von Z2M scharf geschaltet wird. Eine Minute würde wahrscheinlich auch reichen. Das probiere ich mal, wenn ich ganz alleine im Haus bin.

in meiner Briefkasten - Überwachung tritt das Problem allerdings nicht auf.
4 „Gefällt mir“
Der Ansatz den Status „Verbunden“ von MQTT zu schauen, ist vielversprechend. Ich habe ja ähnliches beim Systemneustart mit 3 Minuten „Uptime“ gelöst.
Ich werde das auf jeden Fall mal testen.
1 „Gefällt mir“
Hier der Code der in meinen Automationen eingesetzt ist, damit der Neustart von Zigbee2MQTT nicht die Automation triggert.
condition: template
value_template: "{{ trigger.from_state.state not in ['unknown', 'unavailable'] }}"
alias: Fehlerkorrektur
Simpel gesagt, prüft diese Bedingung einfach nur ob der Trigger der gerade die Automation getriggert hat, nicht folgenden Status hatte: „Unbekannt“ „Nicht Verfügbar“. Ist wirklich eine einfache Lösung, aber für meine Automationen funktioniert das perfekt.
2 „Gefällt mir“
Klingt auf jeden Fall interessant, hab ich so noch gar nicht daran gedacht, muss ich mir mal genauer anschauen. 
1 „Gefällt mir“
ich habe vorhin einfach andersrum geprüft, ob „on“ oder „off“ sonst mache nix 
@UncleSam139 mal blöd gefragt, wie würdes du das umsetzen? Ich habe eine Automation zur Benachrichtigung, wenn sich der Status des „Briefkasten“ (Helfer-Entität mit dem Script oben) ändert. Ich hab nun noch zwei weitere Input-Helfer gebaut, für den letzten und vorletzten Status des Briefkastens und eine Automation, die vom „Briefkasten-Status“ getriggert wird und immer, wenn dieser sich ändert, den Wert von letzten Status in den vorletzten schreibt und den neuen aktuellen Status in den Helfer-Aktueller Status. Der Status-Helfer „hört“ auf alle Sensoren, könnte man sicher auch direkt in eine Automation packen, aber ich dachte mir, so kann ich den Status auch im Dashboard ausgeben über Mashroom-Chip.
Ich kenne dein Setup jetzt nicht, aber im Grund sind ja meistens 2 Sensoren im Briefkasten einmal für die Klappe und einmal für die Tür selbst. Was mir spontan dazu einfällt, ist das man einen Helfer z.B. einen Schalter über die Automation steuert sprich das dieser auf „on“ geht wenn die Klappe geöffnet und wieder geschlossen wurde. Und diesen wieder auf „off“ stellt, wenn die Tür geöffnet und wieder geschlossen wurde.
Ist jetzt nur eine kurze Idee, wäre aber so sehr einfach zu lösen.
Alternativ kann man natürlich einen separaten Template-Sensor schreiben der z.B. über Helfer gesteuert wird. Wäre allerdings ggf. etwas aufwendiger.
1 „Gefällt mir“