Ich bekomme per MQTT von einem ESP8266 den Status einer Türe übermittelt offen oder geschlossen
Ich hätte nun versucht diese mit einem notify in ein dummy zu übertragen.
So sieht mein notify aus:
DEF
NetzwerkkastenKG:Haustuere.* {
# liest die Werte aus
my $stat = ReadingsVal("NetzwerkkastenKG","Haustuere",0);
my $anz = ReadingsNum("Haustuere","Schaltungen",0);
my $Anzahl = 0;
if ($stat == "offen") {
fhem ("setreading Haustuere Status offen");
$Anzahl = ($anz + 1);
fhem ("setreading Haustuere Schaltungen $Anzahl");
}
else {
fhem ("setreading Haustuere Status geschlossen");
}
}
Es wird zwar übertragen, aber der Werte des Readings Status im dummy bleibt immer auf offen, obwohl im Device NetzwerkkastenKG das Reading Haustuere auf geschlossen steht.
Ich bekomme mit, wenn ich die Haustüre öffnet, ändert sich der Timestamp im Device Haustuere. Wenn sich sie schließe ändert sich der Timestamp zwar auch, aber es bleibt beim Eintrag offen.
Auch die Anzahl der Öffnungen werden doppelt gezählt, obwohl ich die Türe nur aufmache und wieder schließe.
Was mache ich da falsch?
Irgendwie stehe ich auf der Leitung, wie man so schön sagt.
Zitat von: maci am 06 August 2025, 18:43:58 my $stat = ReadingsVal("NetzwerkkastenKG","Haustuere",0);
if ($stat == "offen") {
}
Da müsste eigentlich eine Fehlermeldung in der Log-Datei stehen.
Es soll ja Text verglichen werden, und kein numerischer Wert.
Daher muss es heißen:
if ($stat eq "offen")
Auf die Variable $Anzahl kannst Du verzichten. Ebenso auf die Klammern bei der Addition
$Anzahl = ($anz + 1);
ändern zu
$anz +=1;
fhem ("setreading Haustuere Schaltungen $anz");
Ja danke, das wars