FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Gisbert am 19 Februar 2026, 21:42:22

Titel: Leeres Reading in einem notify
Beitrag von: Gisbert am 19 Februar 2026, 21:42:22
Hallo,

ich hab ein an und für sich funktionierendes notify, dass auslöst, wenn ein "error(s)" auftritt.

defmod JK_BMS.notify notify JK_BMS:(errors.*|power_tube_temperature.*|temperature_sensor_1.*|temperature_sensor_2.*) \
{if ($EVENT =~ m/errors/) \
{my $alias = AttrVal($NAME,'alias','');; \
fhem "set Pushover.Nachricht msg '$alias Fehler' '$EVENT';; \
set NTFY message Title=\"$alias Fehler\" $EVENT"} \
elsif ($EVENT =~ m/temperature/ and $EVTPART1 >= 40) \
{my $alias = AttrVal($NAME,'alias','');; \
my $val = $EVENT;; $val =~ s/_/ /;; $val =~ s/_/ /;; \
fhem "set Pushover.Nachricht msg '$alias Temperatur' '$val°C';; \
set NTFY message Title=\"$alias Temperatur\" $val°C"}}

$EVENT war im Fehlerfall "errors: Charging overcurrent". Nachdem der Fehler sich erledigt hatte, wurde als Wert des Readings  nichts - also gar nichts - ausgegeben.

Diese fehlende Information ist aber insofern etwas wert, da sie ja anzeigt, dass kein Fehler mehr vorliegt - nur das obige notify triggert darauf nicht.

Meine Frage lautet deshalb, wie man auf ein leeres Reading triggern kann?

Viele Grüße Gisbert
Titel: Aw: Leeres Reading in einem notify
Beitrag von: frober am 19 Februar 2026, 21:59:57
if !$EVENT
Sofern $EVENT wirklich leer ist.
Titel: Aw: Leeres Reading in einem notify
Beitrag von: DeeSPe am 19 Februar 2026, 22:02:11
Hab Deinen Code jetzt nicht vollständig analysiert, aber so sollte deine Aufgabe gelöst werden können:
defmod JK_BMS.notify notify JK_BMS:(errors|power_tube_temperature|temperature_sensor_1|temperature_sensor_2):.* {
my @evt = split(' ',$EVENT);
my $read = chop $evt[0];
my $val = $evt[1];
if ($read eq 'errors' && $val) {
# tue wenn Reading gleich errors und value vorhanden
} elsif ($read eq 'errors' && !$val) {
# tue wenn Reading gleich errors und value nicht vorhanden
}
}

Gruß
Dan
Titel: Aw: Leeres Reading in einem notify
Beitrag von: Beta-User am 19 Februar 2026, 22:11:55
Bevor man den Inhalt zerlegt, ist es eventuell interessant, wie die Events überhaupt aussehen...

Falls eventTypes aktiv ist, könnte das hier weiterhelfen:
get eventTypes list JK_BMSDa dann raussuchen, was vermeintlich nicht triggert.
Titel: Aw: Leeres Reading in einem notify
Beitrag von: Gisbert am 19 Februar 2026, 22:38:07
Hallo zusammen,

danke für die Lösungsvorschläge, die ich mir im Detail anschauen werde.

In der Zwischenzeit habe ich folgendes heraus gefunden. Das notify triggert auch bei einem leeren Reading:
2026-02-19 22:21:16.139 MQTT_DEVICE JK_BMS errors: aber die nachfolgende Bedingung wird nicht wahr:
if ($EVENT =~ m/errors/)
Am liebsten wäre mir, wenn ich die Bedingung zum Funktionieren bringen könnte.

Viele Grüße Gisbert
Titel: Aw: Leeres Reading in einem notify
Beitrag von: Gisbert am 20 Februar 2026, 00:47:01
Hallo Dan,

ich bekomme folgenden Fehler in der log-Datei, wenn das notify triggert:

2026.02.20 00:33:28.432 1:  ERROR evaluating my $EVENT=  $evalSpecials->{'%EVENT'};my $EVTPART0=  $evalSpecials->{'%EVTPART0'};my @MATCHED=@{$evalSpecials->{'%MATCHED'}};my $NAME=  $evalSpecials->{'%NAME'};my $SELF=  $evalSpecials->{'%SELF'};my $TYPE=  $evalSpecials->{'%TYPE'};{
my $alias = AttrVal($NAME,'alias','');
my @evt = split(' ',$EVENT);
my $read = chop $evt[0];
my $val = $evt[1];
if ($read eq 'errors' && $val) {
fhem "set Pushover.Nachricht msg '$alias Fehler' '$EVENT';
set NTFY message Title=\"$alias Fehler\" $EVENT"
# true wenn Reading gleich errors und value vorhanden
}
elsif ($read eq 'errors' && !$val) {
fhem "set Pushover.Nachricht msg '$alias Fehler' 'erledigt';
set NTFY message Title=\"$alias Fehler\" erledigt"
# true wenn Reading gleich errors und value nicht vorhanden
}
elsif ($EVENT =~ m/temperature/ and $EVTPART1 >= 40)
{my $alias = AttrVal($NAME,'alias','');
my $val = $EVENT; $val =~ s/_/ /; $val =~ s/_/ /;
fhem "set Pushover.Nachricht msg '$alias Temperatur' '$val°C';
set NTFY message Title=\"$alias Temperatur\" $val°C"}}: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 68123109) line 16.

Die Definition lautet:
defmod JK_BMS.notify notify JK_BMS:(errors.*|power_tube_temperature.*|temperature_sensor_1.*|temperature_sensor_2.*) {\
my $alias = AttrVal($NAME,'alias','');;\
my @evt = split(' ',$EVENT);;\
my $read = chop $evt[0];;\
my $val = $evt[1];;\
if ($read eq 'errors' && $val) {\
fhem "set Pushover.Nachricht msg '$alias Fehler' '$EVENT';; \
set NTFY message Title=\"$alias Fehler\" $EVENT"\
# true wenn Reading gleich errors und value vorhanden\
} \
elsif ($read eq 'errors' && !$val) {\
fhem "set Pushover.Nachricht msg '$alias Fehler' 'erledigt';; \
set NTFY message Title=\"$alias Fehler\" erledigt"\
# true wenn Reading gleich errors und value nicht vorhanden\
}\
elsif ($EVENT =~ m/temperature/ and $EVTPART1 >= 40) \
{my $alias = AttrVal($NAME,'alias','');; \
my $val = $EVENT;; $val =~ s/_/ /;; $val =~ s/_/ /;; \
fhem "set Pushover.Nachricht msg '$alias Temperatur' '$val°C';; \
set NTFY message Title=\"$alias Temperatur\" $val°C"}}

Es scheint ein Problem mit $EVTPART1 zu existieren.

Viele Grüße Gisbert
Titel: Aw: Leeres Reading in einem notify
Beitrag von: DeeSPe am 20 Februar 2026, 00:51:59
Zitat von: Gisbert am 20 Februar 2026, 00:47:01Es scheint ein Problem mit $EVTPART1 zu existieren.

Ja, genau! Das ist immer der Fall wenn es leer ist! Deswegen habe ich das Aufteilen (splitten) selbst vorgenommen.
Ändere mal:
elsif ($EVENT =~ m/temperature/ and $EVTPART1 >= 40)in:
elsif ($read ne 'errors' && defined $val && $val >= 40)
Gruß
Dan
Titel: Aw: Leeres Reading in einem notify
Beitrag von: DeeSPe am 20 Februar 2026, 01:27:32
Und diesen Teil:
{my $alias = AttrVal($NAME,'alias','');
my $val = $EVENT; $val =~ s/_/ /; $val =~ s/_/ /;
fhem "set Pushover.Nachricht msg '$alias Temperatur' '$val°C';
set NTFY message Title=\"$alias Temperatur\" $val°C"}}
besser ändern zu:
{my $alias = AttrVal($NAME,'alias','');
$read =~ s/_/ /g;
fhem "set Pushover.Nachricht msg '$alias Temperatur' '$read $val°C';
set NTFY message Title=\"$alias Temperatur\" $val°C"}}

Gruß
Dan
Titel: Aw: Leeres Reading in einem notify
Beitrag von: DeeSPe am 20 Februar 2026, 01:40:02
Ach ja, sind das wirklich die Readingsnamen oder sind die noch länger?
defmod JK_BMS.notify notify JK_BMS:(errors.*|power_tube_temperature.*|temperature_sensor_1.*|temperature_sensor_2.*)Wenn das die vollständigen Namen der Readings sind dann würde ich das so schreiben wie schon in #2 (https://forum.fhem.de/index.php?msg=1358240) erwähnt:
defmod JK_BMS.notify notify JK_BMS:(errors|power_tube_temperature|temperature_sensor_1|temperature_sensor_2):.*
Gruß
Dan

EDIT:
Eigentlich sollte auch gehen:
defmod JK_BMS.notify notify JK_BMS:(errors|power_tube_temperature|temperature_sensor_[12]):.*