Auslösen von und Frage zu Notify

Begonnen von Mundus, 25 August 2018, 01:54:03

Vorheriges Thema - Nächstes Thema

Mundus

Hi,

ich nutze das nachfolgende Notify für ein UWZ-Device

defmod nt_uwzOrt notify uwzOrt.*Warnungen.* {\
my $anzWarn = ReadingsVal("uwzOrt","WarnCount","FEHLER");;\
my $warnText = ReadingsVal("uwzOrt","Warn_0_ShortText","FEHLER");;\
my $warnDBeginn = ReadingsVal("uwzOrt","Warn_0_Start_Date","FEHLER");;\
my $warnDEnde = ReadingsVal("uwzOrt","Warn_0_End_Date","FEHLER");;\
my $warnTBeginn = ReadingsVal("uwzOrt","Warn_0_Start_Time","FEHLER");;\
my $warnTEnde = ReadingsVal("uwzOrt","Warn_0_End_Time","FEHLER");;\
\
my $emailText = "Die UWZ meldet $anzWarn\
von $warnDBeginn, $warnTBeginn Uhr bis $warnDEnde, $warnTEnde Uhr $warnText";;\
EMailVersenden("meine\@email.de","UWZ-Warnung","$emailText");;\
}


Das Notify soll aber nur auslösen, wenn der uwzOrt.*Warnungen.* >= 1 ist. Sprich, wenn alle Warnmeldungen abgelaufen sind, ändert sich der Status auf 0, hierfür soll aber keine E-Mail geschickt werden. Nun kann ich natürlich das Suchmuster so lassen wie es ist und anschließend mittels Wenn-Dann if ($EVTPART1 >= 1) weiterarbeiten, aber ich würde es gerne im Suchmuster direkt abarbeiten. Geht das und wie müsste dieser Befehl aussehen?

Außerdem würde ich gerne alle bestehenden Warnung in der Variablen $emailText aufnehmen und dann versenden. Nun war meine Überlegung mittels eines Loops (For) alle Readings auszulesen. Leider gelingt mir das nicht....
my $i = 0;
for ($i;$i<$anzWarn;$i++){
my $warnText = ReadingsVal("uwzOrt","Warn_$i_ShortText","FEHLER");
my $warnDBeginn = ReadingsVal("uwzOrt","Warn_$i_Start_Date","FEHLER");
my $warnDEnde = ReadingsVal("uwzOrt","Warn_$i_End_Date","FEHLER");
my $warnTBeginn = ReadingsVal("uwzOrt","Warn_$i_Start_Time","FEHLER");
my $warnTEnde = ReadingsVal("uwzOrt","Warn_$i_End_Time","FEHLER");

my $emailText .=  "
von $warnDBeginn, $warnTBeginn Uhr bis $warnDEnde, $warnTEnde Uhr $warnText";
}

Dies funktioniert bei mir nicht. Habt ihr hierzu eine Idee?

Gruß und Danke

Mundus

igami

Zitat von: Mundus am 25 August 2018, 01:54:03
Habt ihr hierzu eine Idee?
Es gibt da ein passendes Attribut:
Zitat
ignoreRegexp regexp
It is hard to create a regexp which is _not_ matching something, this attribute helps in this case, as the event is ignored if matches the argument. The syntax is the same as for the original regexp.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Otto123

Moin,

funktioniert das bei Perl so mit der Variablen im Namen ohne Leerzeichen im String?
Hast Du mal probiert was dabei rauskommt? Für die FHEM Kommandozeile:
{my $i=0;;ReadingsVal("uwzOrt","Warn_$i_ShortText","FEHLER")}
Ist das nicht ein Fall für concatenation?
{my $i=0;;ReadingsVal("uwzOrt","Warn_".$i."_ShortText","FEHLER")}
Hab es jetzt aber selbst nicht getestet!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux


notifyUnwetterwarnung Unwetterzentrale:WarnCount:.[0-9]


Als Denkbeispiel
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Wzut

Zitat von: Mundus am 25 August 2018, 01:54:03
Dies funktioniert bei mir nicht. Habt ihr hierzu eine Idee?
my $emailText ausserhalb der for Schleife deklarieren und in der Schleife dann ohne my ---- > $emailText .= 
Bei my $anzWarn = ReadingsVal("uwzOrt","WarnCount","FEHLER") würd ich auch sicher stellen das es in jedem Fall immer nummerisch ist,
d.h. lieber my $anzWarn = ReadingsNuml("uwzOrt","WarnCount",-1) und ggf dann gleich return if ($anzWarn <0) da ja dann eh nichts sinnvolles mehr kommen kann.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Mundus

Zitat von: Otto123 am 25 August 2018, 09:57:02
Ist das nicht ein Fall für concatenation?
{my $i=0;;ReadingsVal("uwzOrt","Warn_".$i."_ShortText","FEHLER")}
Der Hinweis war super, es funktioniert wie gewünscht. Den Hinweis von Wzut habe ich auch berücksichtigt. Lediglich den Hinweis von CoolTux konnte ich nocht nicht ausprobieren, werde aber diese Varainte auf jeden Fall ausprobieren und mich wieder melden.

Gruß und vielen Dank für die super Ideen.