FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: o.l.i am 17 Juli 2020, 22:03:14

Titel: Wert eines Reading auslesen und vergleichen
Beitrag von: o.l.i am 17 Juli 2020, 22:03:14
Hallo,

ich möchte mein Reading GA_FuellstandRegentonne:level einmal täglich auslesen und vergleichen. Dann soll entsprechend eine Ansage abgespielt werden.
Ich stocke etwas mit dem Vergleich.
Ist der level 0-5, dann Ansage1 abspielen.
Ist der level 6-15, dann Ansage2 abspielen
Ist der level 16-25, dann Ansage3 abspielen
...

Wie mache ich dies am einfachsten?

Grüße,
Oliver
Titel: Antw:Wert eines Reading auslesen und vergleichen
Beitrag von: MadMax-FHEM am 17 Juli 2020, 22:17:05
Ein tägliches at für die gewünschte Überprüfungsuhrzeit definieren.

Dann entweder direkt dort per Perl und if/elsif etc. die Bedingungen definieren und die Ansagen ausgeben...

Abfragen der Werte eines Readings entweder mit ReadingsVal("Devicename","Readingname","Ersatzwert") oder ReadingsNum("Devicename","Readingname",Ersatzwert)

Oder (aber da bin ich raus): ein DOIF mit Zeittrigger...

Beispiel (nur mal ein if / musst nat. weiter machen, wenn du deine Fälle umsetzen willst, siehe sub):


define atPruefen at *17:00:00 {if(ReadingsNum("GA_FuellstandRegentonne","level",0) < 5){fhem("Befehl für Ansage")}


EDIT: um aus Perl heraus fhem-Aufrufe nutzen zu können braucht man dann die "fhem-Funktion" fhem("Hier das übliche fhem Kommando") / fhem("set Licht on") / https://wiki.fhem.de/wiki/Klammerebenen

Besser das "auslagern" in eine Sub in myUtils: https://wiki.fhem.de/wiki/99_myUtils_anlegen

Beispiel:


define atPruefen at *17:00:00 {mySubCheck()}



sub mySubCheck()
{
  my $ValueToCheck = ReadingsNum("GA_FuellstandRegentonne","level",0);

if($ValueToCheck >= 0 && $ValueToCheck <= 5)
  {
    fhem("Befehl für Ansage 1");
  }
elsif($ValueToCheck >= 6 && $ValueToCheck <= 15)
  {
    fhem("Befehl für Ansage 2");
  }
elsif($ValueToCheck >= 16 && $ValueToCheck <= 25)
  {
    fhem("Befehl für Ansage 3");
  }
}


Gruß, Joachim
Titel: Antw:Wert eines Reading auslesen und vergleichen
Beitrag von: betateilchen am 18 Juli 2020, 10:16:02
äh...

ReadingsNum("Test","Reading","n.a.");

wenn man mit ReadingsNum() arbeitet, sollte man besser keinen alphanumerischen Wert wie "n.a." als default Wert zurückgeben.
Titel: Antw:Wert eines Reading auslesen und vergleichen
Beitrag von: MadMax-FHEM am 18 Juli 2020, 10:17:21
Jaja, sorry, copy&paste ;)

Ändere ich...

EDIT: wenigstens war ja die Erläuterung der Befehle korrekt... ;) Gut und man hofft ja auf ein wenig Mitdenken beim "Verwender"... ;)

EDIT: gut, habe dann auch gleich die vom TE genannten Namen eingebaut... ;)

Danke, Joachim