FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: roedert am 10 Februar 2014, 13:04:14

Titel: [gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: roedert am 10 Februar 2014, 13:04:14
Ich möchte bei einem PCA301 (Strommessgerät) ein userReading Status bringen, welches den on enthält wenn die Stromaufnahem größer 20, sonst off enthält.
attr PCA301 userReadings status PCA031:power { perl-code }
In den Beispielen ist dieser Perl-Code immer nur ein Wert oder eine Funktion - zB ReadingsVal("PCA301","power",0)/1250.0

Wie kann ich da mein Code wenn > 30 "on", sonst "off" unterbringen? Oder muss ich mir eine entsprechende function in myUtils anlegen?
Titel: Antw:if else in den Perl-Teil eines userReadings bringen
Beitrag von: betateilchen am 10 Februar 2014, 13:08:29
Perl Buch kaufen und Perl lernen :)

Ich verstehe Deine Frage nicht, zwischen den geschweiften Klammern kannst Du doch das gleiche schreiben, wie in jedem notify auch?

attr PCA301 userReadings status PCA031:power {my $wert = <hier kommt irgendeine Wertzuweisung irgendwoher>; ($wert > 30) ? 'on' : 'off'; }
Titel: Antw:if else in den Perl-Teil eines userReadings bringen
Beitrag von: ph1959de am 10 Februar 2014, 13:09:02
Ich habe zwar nicht genau verstanden, wofür Du das verwenden willst, aber vielleicht hilft Dir schon das PCA301-Beispiel bei der readingsGroup: http://www.fhemwiki.de/wiki/ReadingsGroup

Gruß, Peter
Titel: Antw:if else in den Perl-Teil eines userReadings bringen
Beitrag von: roedert am 10 Februar 2014, 13:29:26
Zitat von: betateilchen am 10 Februar 2014, 13:08:29
Perl Buch kaufen und Perl lernen :)
Ich verstehe Deine Frage nicht, zwischen den geschweiften Klammern kannst Du doch das gleiche schreiben, wie in jedem notify auch?

Schon klar ... Perl kenne ich in den Grundlagen und den Rest finde ich in manuals etc. ... ist aber in diesem Zusammenhang gar nicht so einfach, da es in dem Perl-Code der userReading-Definition gar keine Zuweisung zu irgendeiner Variable enthalten ist.

Beispiel aus der commandref:
attr myPowerMeter userReadings power differential { ReadingsVal("myPowerMeter","counters.A",0)/1250.0;; }

Es kann wohl nur eine Funktion angegeben werden und kein "richtiger Perl-Code" wie zB mein if ... else

Mein Versuch ist also
attr PCA301 userReadings status PCA301:power {((ReadingsVal("PCA301","power",0) > 10 ) ? 'on' : 'off');;}
...bringt keinen Fehler im Log, legt aber auch kein userReading an  ???

Hintergrund ist es einen Watchdog auf das neue userReading "on/off" einzurichten, da ich dem Watchdog nicht beibringen kann auf einen größer/kleiner-Vergleich eines Wertes zu reagieren.
Titel: Antw:if else in den Perl-Teil eines userReadings bringen
Beitrag von: betateilchen am 10 Februar 2014, 13:34:37
Zitat von: roedert am 10 Februar 2014, 13:29:26Es kann wohl nur eine Funktion angegeben werden und kein "richtiger Perl-Code"

Falsch.

currentMsg:(a_event|a_valid) { ReadingsVal("gds","a_valid",0) ? ReadingsVal("gds","a_event","") : "" }

Ist das etwa kein richtiger Perl-Code? Funktioniert in meinem userreading "currentMsg" jedenfalls perfekt.

Titel: Antw:if else in den Perl-Teil eines userReadings bringen
Beitrag von: roedert am 10 Februar 2014, 13:58:23
Das ist doch die Antwort die ich hören (ähm lesen) wollte :-) ... - nach dem Vorbild habe ich es hinbekommen, hatte noch einen blöden Denkfehler drin.

Danke + Gruß

attr Kueche.Kuehlschrank userReadings cooling:power { ReadingsVal("Kueche.Kuehlschrank","power",0)>20 ? "on" : "off" }
Titel: Antw:if else in den Perl-Teil eines userReadings bringen
Beitrag von: Wernieman am 10 Februar 2014, 14:45:39
Könntest Du bitte:
1. Den Betreff Ändern indem du am Anfang (Ende) ein "(gelöst)" setzt?
2. Nur aus Interesse:
Könntest Du Deinen Code posten? Nur mal als Vergleich für andere ....
Titel: Antw:[gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: betateilchen am 10 Februar 2014, 16:28:33
es sprach die Forumpolizei  8)
Titel: Antw:[gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: Wernieman am 10 Februar 2014, 16:30:23
Neee ...... so etwas würde ich mich nie "anmaßen"   8)
Titel: Antw:[gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: betateilchen am 10 Februar 2014, 16:39:08
sieht aber anders aus.
Titel: Antw:[gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: Wernieman am 10 Februar 2014, 16:41:39
Mhh .. dann sollte ich mich hiermit entschuldigen, war nicht so gemeint!

Bedauerlicherweise war ich in einem anderen Forum (Gentoo) schon mal "Fast"-Admin .. und irgendwann entgleitet einem der Ton. Werde es versuchen zu vermeiden.
Titel: Antw:[gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: Rince am 11 Februar 2014, 12:31:37
Ich fand die Anmerkung von Wernieman absolut ok.
Sie war freundlich (Bitte),
und die beiden Bitten erscheinen mir überaus sinnvoll.

Ich verstehe aber natürlich auch Betateilchen. Er löst es, und ein Anderer stellt Forderungen.

Wenn wir mal davon ausgehen, dass das Thema auch für jemand Anders interessant ist:
Wie hätte Wernieman es formulieren können, ohne das es dich, Betateilchen, stört?
Titel: Antw:[gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: betateilchen am 11 Februar 2014, 13:48:28
Die Diskussion ist müßig, das Thema ist seit gestern geklärt.
Titel: Antw:[gelöst] if else in den Perl-Teil eines userReadings bringen
Beitrag von: JoeALLb am 24 Februar 2014, 17:19:01
Rückfrage:
attr Kueche.Kuehlschrank userReadings cooling:power { ReadingsVal("Kueche.Kuehlschrank","power",0)>20 ? "on" : "off" }

ändert leider bei jeder änderung von power auch das reading und schreibt sich somit in die logdatei.
Das produziert mir hier viel zuviele "on".
Muss man heir ein zweites IF verwenden, das zuvor prüft, ob der wert schon korrekt gesetzt ist, um ihn in diesem Fall nicht zu setzen?
Wenn ja, was gebe ich dann an um das reading nicht zu verändern? reicht ein {} aus?