Hallo ich habe da ein Problem wo ich an meinen mangelnden Perl und FHEM Kenntnissen derzeit scheitere.
Ich habe mir das UWZ Modul in mein FHEM geladen und frage nun regelmässig die Meldungen ab. Das Modul sieht bis zu 10 Unwettermeldungen vor und gibt für jede diverse Readings aus.
Readings
WarnCount
3
2015-04-01 21:00:37
Warn_0_End
1427931000
2015-04-01 21:00:37
Warn_0_IconURL
http://www.unwetterzentrale.de/images/icons/sturm-orange.gif
2015-04-01 21:00:37
Warn_0_LongText
Der West- bis Nordwestwind hat etwas nachgelassen, weht aber weiterhin frisch bis stark, in Böen stürmisch. Bis Mittwochabend kommt es weiterhin zu Sturmböen von 75 bis etwa 80 km/h. Besonders in Schauern treten auch noch schwere Sturmböen über 90 km/h auf.
2015-04-01 21:00:37
Warn_0_Severity
10
2015-04-01 21:00:37
Warn_0_ShortText
Weiter zeitweise Sturmböen 75-80 km/h, in Schauern lokal auch über 90 km/h aus W-NW
2015-04-01 21:00:37
Warn_0_Start
1427830800
2015-04-01 21:00:37
Warn_0_Type
2
2015-04-01 21:00:37
Warn_0_levelName
alert_warn_orange
2015-04-01 21:00:37
Warn_0_uwzLevel
10
2015-04-01 21:00:37
Warn_1_End
1427959800
2015-04-01 21:00:37
Warn_1_IconURL
http://www.unwetterzentrale.de/images/icons/strassenglaette-orange.gif
2015-04-01 21:00:37
Warn_1_LongText
Tagsüber am Mittwoch ist bei Durchzug von kräftigen Schauern streckenweise, in Hochlagen auch verbreitet Glätte durch Schnee und Schneematsch oder Graupel möglich. Abends und in der Nacht zum Donnerstag muss auch in tieferen Lagen in Schauern mit Glätte gerechnet werden.
2015-04-01 21:00:37
Warn_1_Severity
4
2015-04-01 21:00:37
Warn_1_ShortText
Tagsüber ab 500m, abends/nachts ab 300m streckenweise Glätte durch Schnee/Graupel
2015-04-01 21:00:37
Warn_1_Start
1427873460
2015-04-01 21:00:37
Warn_1_Type
8
2015-04-01 21:00:37
Warn_1_levelName
notice_warn_orange
2015-04-01 21:00:37
Warn_1_uwzLevel
4
2015-04-01 21:00:37
Warn_2_End
1427988600
2015-04-01 21:00:37
Warn_2_IconURL
http://www.unwetterzentrale.de/images/icons/sturm-orange.gif
2015-04-01 21:00:37
Warn_2_LongText
Am Domnnerstag frischt der Südwest- bis Westwind bereits in den Frühstunden erneut stark auf und vor allem in freien Lagen muss mit einzelnen Sturmböen bis etwa 80 km/h gerechnet werden, vereinzelt auch darüber. Im laufe des Nachmittags lässt der Wind wieder nach und dreht auf Nordwest.
2015-04-01 21:00:37
Warn_2_Severity
10
2015-04-01 21:00:37
Warn_2_ShortText
In freien Lagen einzelne Sturmböen bis 80 km/h aus Südwest bis West, örtlich mehr
2015-04-01 21:00:37
Warn_2_Start
1427947200
2015-04-01 21:00:37
Warn_2_Type
2
2015-04-01 21:00:37
Warn_2_levelName
alert_warn_orange
2015-04-01 21:00:37
Warn_2_uwzLevel
10
2015-04-01 21:00:37
Warn_3_End
2015-04-01 21:00:37
Warn_3_IconURL
2015-04-01 21:00:37
Warn_3_LongText
2015-04-01 21:00:37
Warn_3_Severity
0
2015-04-01 21:00:37
Warn_3_ShortText
2015-04-01 21:00:37
Warn_3_Start
2015-04-01 21:00:37
Warn_3_Type
2015-04-01 21:00:37
Warn_3_levelName
2015-04-01 21:00:37
Warn_3_uwzLevel
2015-04-01 21:00:37
Warn_4_End
2015-04-01 21:00:37
Warn_4_IconURL
2015-04-01 21:00:37
Warn_4_LongText
2015-04-01 21:00:37
Warn_4_Severity
0
2015-04-01 21:00:37
Warn_4_ShortText
2015-04-01 21:00:37
Warn_4_Start
2015-04-01 21:00:37
Warn_4_Type
2015-04-01 21:00:37
Warn_4_levelName
2015-04-01 21:00:37
Warn_4_uwzLevel
2015-04-01 21:00:37
Warn_5_End
2015-04-01 21:00:37
Warn_5_IconURL
2015-04-01 21:00:37
Warn_5_LongText
2015-04-01 21:00:37
Warn_5_Severity
0
2015-04-01 21:00:37
Warn_5_ShortText
2015-04-01 21:00:37
Warn_5_Start
2015-04-01 21:00:37
Warn_5_Type
2015-04-01 21:00:37
Warn_5_levelName
2015-04-01 21:00:37
Warn_5_uwzLevel
2015-04-01 21:00:37
Warn_6_End
2015-04-01 21:00:37
Warn_6_IconURL
2015-04-01 21:00:37
Warn_6_LongText
2015-04-01 21:00:37
Warn_6_Severity
0
2015-04-01 21:00:37
Warn_6_ShortText
2015-04-01 21:00:37
Warn_6_Start
2015-04-01 21:00:37
Warn_6_Type
2015-04-01 21:00:37
Warn_6_levelName
2015-04-01 21:00:37
Warn_6_uwzLevel
2015-04-01 21:00:37
Warn_7_End
2015-04-01 21:00:37
Warn_7_IconURL
2015-04-01 21:00:37
Warn_7_LongText
2015-04-01 21:00:37
Warn_7_Severity
0
2015-04-01 21:00:37
Warn_7_ShortText
2015-04-01 21:00:37
Warn_7_Start
2015-04-01 21:00:37
Warn_7_Type
2015-04-01 21:00:37
Warn_7_levelName
2015-04-01 21:00:37
Warn_7_uwzLevel
2015-04-01 21:00:37
Warn_8_End
2015-04-01 21:00:37
Warn_8_IconURL
2015-04-01 21:00:37
Warn_8_LongText
2015-04-01 21:00:37
Warn_8_Severity
0
2015-04-01 21:00:37
Warn_8_ShortText
2015-04-01 21:00:37
Warn_8_Start
2015-04-01 21:00:37
Warn_8_Type
2015-04-01 21:00:37
Warn_8_levelName
2015-04-01 21:00:37
Warn_8_uwzLevel
2015-04-01 21:00:37
Warn_9_End
2015-04-01 21:00:37
Warn_9_IconURL
2015-04-01 21:00:37
Warn_9_LongText
2015-04-01 21:00:37
Warn_9_Severity
0
2015-04-01 21:00:37
Warn_9_ShortText
2015-04-01 21:00:37
Warn_9_Start
2015-04-01 21:00:37
Warn_9_Type
2015-04-01 21:00:37
Warn_9_levelName
2015-04-01 21:00:37
Warn_9_uwzLevel
2015-04-01 21:00:37
durationFetchReadings
0.00
2015-04-01 21:00:37
lastConnection
92 values captured in 0.00 s
2015-04-01 21:00:37
state
Warnungen: 3
2015-04-01 21:00:37
Mich interessiert im speziellen das hier
Warn_0_Severity
Wenn dieses als Reading den Wert 9 oder höher ist soll mein DOIF auslösen. Jedoch muss ich aber insgesamt bis zu 10 solcher Readings abfragen, denn Warn_1_Severity steht vielleicht nur auf dem Wert 4 und erst Warn_9_Severity erreicht die 9.
Wie kann ich das elegant/effizient in einem DOIF abfragen ohne die 10 Varianten der Warn_*_Severity einzeln abzufragen?
keine ne idee? :(
Zitat von: ScherzKeks am 02 April 2015, 18:31:59
keine ne idee? :(
Wenn es zehn verschiedene Readings sind, dann musst du bei DOIF auch zehn Abfragen definieren.
Gruß
Damian
ok danke. Hatte gehoft das man das mit ner Art Platzhalter verinfachen kann
notify kann "Platzhalter"
danke auch für diesen Hinweis. Ich bin schon etwas weiter gekommen, scheitere jetzt aber an sowas trivialem wie der genauen Schachtelung von perl und fhem code
Das hier hab ich nun zusammengebastelt:
Unwetterzentrale:Warn_.*_Severity.* {
if($EVTPART1 >9) {
fhem("set Unwetter_Zaehler {([Unwetter_Zaehler]+1)}")
}
if($EVTPART1 <9) {
fhem("set Unwetter_Zaehler {([Unwetter_Zaehler]-1)}")
}
}
Unwetter_Zaehler ist ein dummy den ich dann wiederum separat auswerten werde. Ziel ist es in diesem Zähle die Anzahl der relevanten Unwettermeldungen zu speichern um dann bei Rückgang auf 0 z.B. das System wieder in Normalmodus zu versetzen.
Kann mir bitte jemand sagen was ich da mit der Verschachtelung falsch mache?
So um den Eintrag mal korrekt zu posten. Jedoch raff ich es immer noch nicht welche klammer wo hin muss.
Internals:
DEF Unwetterzentrale:Warn_.*_Severity.* {
if($EVTPART1 >9) {
fhem("set Unwetter_Zaehler "Value("Unwetter_Zaehler")+1)
}
if($EVTPART1 <9) {
fhem("set Unwetter_Zaehler "Value("Unwetter_Zaehler")-1)
}
}
NAME status_Unwetter_JN
NOTIFYDEV Unwetterzentrale
NR 82
NTFY_ORDER 50-status_Unwetter_JN
REGEXP Unwetterzentrale:Warn_.*_Severity.*
STATE 2015-04-03 10:00:32
TYPE notify
Readings:
2015-04-03 04:00:11 state active
Attributes:
verbose 5
Ich habe mich an dieser Idee (http://forum.fhem.de/index.php/topic,33549.msg320902.html#msg320902) orientiert und dann aber ein DOIF darauf gebastelt.
(
[Unwetterzentrale:WarnCount] gt 0
)
(
{DebianMail('mail@adresse.de','Unwetterwarnung: [Unwetterzentrale:WarnCount] Meldungen vorhanden', getUWZDetails("Unwetterzentrale"));;}
)
DOELSE
(
{DebianMail('mail@adresse.de','Unwetterwarnung: Keine Meldungen vorhanden', 'Es gibt aktuell keine Warnmeldungen');;}
)
Attribut: do always
Man könnte den Code natürlich noch überarbeiten und als zweiten Vergleichsparameter "Severity" mit aufnehmen. Hmm, mir fällt gerade ein, dass das doch ein wenig schwieriger werden, da man ja nicht nur [Warn_0_Severity] gt 9, sondern auch alle weiteren Warnungen berücksichtigen muss.
Zitat von: ScherzKeks am 02 April 2015, 19:17:20
ok danke. Hatte gehoft das man das mit ner Art Platzhalter verinfachen kann
Inzwischen kann DOIF auch mit Platzhaltern umgehen: http://forum.fhem.de/index.php/topic,46327.msg380929.html#msg380929
Gruß
Damian
Wie frägt man denn (via eines DOIFs) den momentan geltenden Severity-Wert ab?
Manche der Readings könnten sich ja auf Informationen beziehen, die in der Zukunft liegen.
Geht das überhaupt und falls ja, wie?
Ich will doch nur wissen, ob es windig ist, oder eben nicht. :-\
Gruß Chris
Deine Frage ist nicht präzise genug formuliert.
Wenn du einen Default-Wert/Ersatzwert für einen nicht vorhandenen Reading meinst, dann kannst du diesen bei der Abfrage angeben:
[<device>:<reading>,<defaultwert>]