Unwetterwarnungen in DOIF auswerten - Perl/DOIF Frage?

Begonnen von ScherzKeks, 01 April 2015, 00:56:41

Vorheriges Thema - Nächstes Thema

ScherzKeks

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?


Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ScherzKeks

ok danke. Hatte gehoft das man das mit ner Art Platzhalter verinfachen kann

Mitch

FHEM im Proxmox Container

ScherzKeks

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?

ScherzKeks

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

FunkOdyssey

Ich habe mich an dieser Idee 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.


Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

#9
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
So einfach wie möglich, so kompliziert wie nötig

Damian

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>]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF