Leeres Reading in einem notify

Begonnen von Gisbert, 19 Februar 2026, 21:42:22

Vorheriges Thema - Nächstes Thema

Gisbert

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
Proxmox | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon

frober

if !$EVENT
Sofern $EVENT wirklich leer ist.
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Beta-User

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.
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Gisbert

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
Proxmox | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon