FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bobby1000 am 11 Dezember 2014, 21:48:32

Titel: if Abfrage in fhem.cfg
Beitrag von: bobby1000 am 11 Dezember 2014, 21:48:32
Hallo,
meine ersten Gehversuche mit FHEM habe ich nun hinter mir.
Bisher habe ich zwei Steckdosen die auch funktionieren, zwei Temperaturanzeigen die ich in FHEM ablesen kann, das GDS Modul erfolgreich in FHEM eingebunden, so das die Daten vom DWD heruntergeladen werden.
Nun würde ich aber gerne auch ein wenig Funktion in meine Daten bringen.
Im Speziellen geht es hier um die Unwetterwarnungen in GDS. Im Frontend kann ich diese anzeigen, wenn auch noch nicht so wie ich es mir wünsche aber ich kann sie sehen.
siehe Bild.
Nun möchte ich die Ergebnisse der DWD gerne auswerte, so nach dem Motto Lese die Daten vom DWD ein und wenn eine Unwetterwarnung vorliegt sende eine Nachricht an mein Handy mit Namen der Warnung und Text der Warnung.
Da ich bisher noch keine Erfahrungen in Perl habe weiß aber nicht wie ich es machen soll.
Ich stelle mir da eine If abfrage vor so nach dem Motto
define checkDWD at +*00:10:00 {\
fhem "artt get DWD alerts 105354000";;\
fhem "attr checkDWD alignTime 09:35";;\
fhem "attr checkDWD disabledForIntervals 00:30-05:30";;\
if a_valid eq "1" ;;\
fhem "set HandyMeldungPushover msg a_headline 'Wetter'"

aber irgendwie ist die If abfrage total vermurkst.
Kann mir bitte jemand den entscheidenden Tipp geben wie ich solche Abfragen unter FHEM realisieren kann.

Vielen Dank für eure Hilfe im voraus
Titel: Antw:if Abfrage in fhem.cfg
Beitrag von: Zrrronggg! am 12 Dezember 2014, 00:38:27
Es gibt im wesentlichen 2 Möglichkeiten:
if oder IF

if bedeutet, dass du das Perl-if verwendest. Das ist die "ältere Variante", da FHEM von hause aus keine if konnte.
IF ist das inzwischen dazugebaute native IF von fhem.

Das Perl if ist insgesamt vermutlich immer noch mächtiger - aber auch wesentlich unintiutiver zu benutzen, weil man auf Klammer(ebenen), Escapen und so weiter achten und eigentlich auch ein bisschen Perl können muss, insbsondere wenn man Strings und Zahlenwerte vergleiche will.

Das Fhem IF lässt sich einfacher benutzen. Leute die mit Fhem angefangen haben bevor es das Fhem IF gab (so wie ich) benutzen es oft dennoch nicht, ist aber wahrscheinlich mehr eine Gewohnheitsache.

Deine Ausdrücke sind eine bunte Mischung aus Elementen beider IFs und enthalten auch zahlreiche andere Dinge (perl Aufrufe aber ohne Klammern, Perl aufrufe ohne das Perl benutzt wird mit sofortiger Rückgabe an Fhem) die so vermutlich nicht funktionieren.

Ohne das Fhem IF genau zu kennen (siehe oben) siehts für mich so aus, als ob du Perl nicht brauchst mit dem was du machen willst. Falls du es doch damit machen willst fehlen mindstens jede Menge Klammern.

Ich kann dir aber nicht echt helfen, weil ich nicht versteh was dieser Teil hier
Zitatfhem "artt get DWD alerts 105354000";;\
fhem "attr checkDWD alignTime 09:35";;\
fhem "attr checkDWD disabledForIntervals 00:30-05:30";;\
machen soll. Schreibfehler scheinen auch drin zu sein... wie gesagt ich kapier gar nicht was da der Zweck ist:

fhem "attr egal was.";;

Macht jedenfalls nichts sinnvolles.

Ich denke du solltest das Auslesen und Auswerten am Besten trennen.

Ein define liest die Werte und das andere teste zyklisch ob die Werte die und die sind.

Das letztere sähe dann in etwa so aus:

define Unwettermeldung at +*00:10:00 { if (Value("a_valid") eq "1") { fhem("set HandyMeldungPushover msg a_headline 'Wetter'") }}

Titel: Antw:if Abfrage in fhem.cfg
Beitrag von: bobby1000 am 12 Dezember 2014, 18:00:21
Ja super das klappt.
Aber damit bin ich auch schon bei meinem nächsten Problem.
DWD enthält mehrere Readings. unter anderem a_valid.
Die Abfrage funktioniert leicht abgewandelt.
{ if (ReadingsVal("DWD", "a_valid",0) == "1") { fhem("set HandyMeldungPushover msg 'a_headline' 'Wetter'") }}

Die Meldung die ich aufs Handy senden möchte ist in DWD unter dem Reading a_headline die Überschrift. Wie bekomme ich nun eine Variable in FHEM verarbeitet?
Irgendwas nach dem Motto my $Wetter = DWD.a_headline klappt nicht.

Vielen Dank für eure Geduld mit einem Anfänger
Titel: Antw:if Abfrage in fhem.cfg
Beitrag von: Puschel74 am 12 Dezember 2014, 19:00:14
Hallo,

my $Wetter = DWD.a_headline
Nah dran aber doch vorbei.

my $Wetter=ReadingsVal("DWD","a_headline","Ersatzwert");
müsste eigentlich klappen.

Grüße
Titel: Antw:if Abfrage in fhem.cfg
Beitrag von: fiedel am 12 Dezember 2014, 19:03:30
Du kannst in so einer Perlfunktion u.a. alles als Variable definieren, was du auch "so" in FHEM/Perl verwenden kannst. Also z.B.:
my $Wetter = ReadingsVal("DWD", "a_valid",0)
und auch gleich in der Variable etwas machen, wie z.B. rechnen:
my $Wetter = (ReadingsVal("DWD", "a_valid",0) +1)
Dabei kannst du auch den vorherigen Wert mit "OldValue(..." aufrufen usw. Was da alles geht, sollte im Einsteigerdok. stehen.


Gruß

Frank
Titel: Antw:if Abfrage in fhem.cfg
Beitrag von: bobby1000 am 12 Dezember 2014, 19:15:32
Super!

Vielen Dank das war genau das was ich gesucht habe