Hauptmenü

userReading

Begonnen von Freee84neu, 05 November 2018, 01:12:58

Vorheriges Thema - Nächstes Thema

Freee84neu

Hallo

Habe ein userReading angeklagt welches wie folgt lautet

Betrieb { my $val=ReadingsVal("Waschmaschine", "ENERGY_Power", ""); if ($val > 30) { $val="on";} elsif ($val <= 30 ) { $val="off";} ;; $val}

Also das Reading Betrieb geht bei höher 30 auf on und bei 30 oder niedriger auf off

Sowei recht einfach


Jetzt würde ich gerne aber auch standby rein bekommen
Also >30 on
Zwischen 30 und 3 standby
Unter 3 off

Jetzt stehe ich voll auf dem Schlauch wie ich das standby mit reinbekomme

Wäre nett wenn jemand helfen könnte

Hans Franz

elsif ($val <= 30 ) && ($val >= 3 )
Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Freee84neu

Betrieb { my $val=ReadingsVal("Waschmaschine", "ENERGY_Power", ""); if ($val > 30) { $val="on";} elsif ($val < 3 ) { $val="off";} elsif ($val <= 30 ) && ($val >= 3 ) { $val="standby";} ;; $val}


   
Error evaluating Waschmaschine userReading Betrieb: syntax error at (eval 2374424) line 1, near ") &&"
Global symbol "$val" requires explicit package name at (eval 2374424) line 1.
syntax error at (eval 2374424) line 1, near "$val}"

Klappt auch nicht das ist noch zu hoch für mich sorry


binford6000

Die zwei Klammern um das && sind zuviel  ;)
Also:
Betrieb {my $val=ReadingsVal("Waschmaschine","ENERGY_Power",""); if ($val > 30) {$val="on";} elsif ($val < 3) {$val="off";} elsif ($val <= 30 && $val >= 3) {$val="standby";};$val}
VG Sebastian

Freee84neu

Super vielen Dank. Das wird wohl noch dauern bis ich das ganze richtig verstanden habe

Freee84neu

#5
Hallo nochmal

würde gerne in einem userReading zählen wie oft  das ON im State reinkommt.

ich habe sowas ähnliches schon über ein notify aber ich würde es gerne direkt über das reading machen wollen
Ich hatte an das hier gedacht aber irgendwas ist wohl Falsch.  ;) , hab das ganz noch nicht so verstand ....


ON {my $val=ReadingsVal("Dummy_Waschmaschine","state",""); if ($val = ON) {$val="+1";} else {$val="+0";};$val}
oder
ON {my $Wert=ReadingsVal("Dummy_Waschmaschine","state",""); if ($Event = ON) {$Wert="+1";} else {$Wert="+0";};$Wert}

Wäre nett wenn mir jemand auf die Sprünge helfen könnte.




Freee84neu

#6
($Event = ON)

das müsste denke ich schon mal so sein

($Event eq "ON")




Byte09

Nur auf die schnelle gesehen:

String Vergleich nicht mit '=' sondern mt 'eq'

Addition  '$val=$val + 1' oder '$val++'

Bitte unbedingt in perl Grundlagen einarbeiten.... da führt kein Weg vorbei.

Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk


Freee84neu

#8
ja ich muss auf jeden Fall an einen Perl Grundlagen arbeiten  ::) aber irgendwie bekomme ich das nicht in den Kopf

ON {my $val=ReadingsVal("Dummy_Waschmaschine","state",""); if ($Event eq "ON") {$val = $val +1 ;} else {$val = $val +0 ;};$val}

das ist wohl auch was falsch


Danke schon mal

PS. wenn ich  "($Event eq "ON")" nehme Bräuchte ich doch garnicht  ""else {$val = $val +0 ;}"" mit rein nehmen oder ? das wäre doch nur wenn ich auf alle Events reagieren würde oder hab ich das ganze total fasch verstanden, jetzt bin ich wohl total durcheinander  ???



CoolTux

Im Grunde funktioniert es eigentlich wie beim Notify, eigentlich brauchst Du gar keine Abfrage wenn das RegEx passt


ON { if ( $EVENT eq "ON" ) { ReadingsVal("Dummy_Waschmaschine","state","") +1 } }

Bei dieser Form reagiert das userReadings auf alle Events zu seinem Device. Wenn Du lediglich auf den state Event reagieren möchtest, musst du das mit an geben


ON:ON { ReadingsVal("Dummy_Waschmaschine","state","") +1 }

Allerdings scheint state ja kein ON OFF zu liefern sondern numerische Werte wen ich das richtig interpretiere.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Freee84neu

Danke für die Hilfe

mein state gibt "ON" "OFF" und "STANDBY" raus und wollte zählen wie off "ON" reinkommt

jetzt bin ich durchander...

ON { if ( $EVENT eq "ON" ) { ReadingsVal("Dummy_Waschmaschine","state","") +1 } }

"ON" name des userReadings

"""{ if ( $EVENT eq "ON" )""" wenn das eintrift also ein Event mit ON

""""{ ReadingsVal("Dummy_Waschmaschine","state","") +1 }"""  dann soll er das machen also state +1 setzen

jetzt stehe ich voll auf dem schlauch oder hab ich es richtig verstanden





CoolTux

Nein das wird so nicht.

ReadingsVal("Dummy_Waschmaschine","state","") +1

Bedeutet, lese den Wert aus dem Reading state aus und addiere 1 dazu. Das geht aber nur wenn der Wert auch eine Zahl ist und kein String.
Du solltest auch eigentlich Fehlermedungen im log haben.

Du kannst das ganze aber testen. Einfach zwei Dummys zusammen setzen und damit üben.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Dummy Waschmaschine ist das selbe device wie das wo das userreading rein soll?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux


Internals:
   CFGFN     
   NAME       dummyWaschmaschine
   NR         24
   STATE      ON
   TYPE       dummy
   OLDREADINGS:
   READINGS:
     2018-11-09 06:50:32   ON              ON
     2018-11-09 06:50:32   state           ON
Attributes:
   readingList state
   room       Test
   setList    state:ON,OFF,STANDBY
   userReadings ON:ON { ReadingsVal($name,'state','none') }


Das liefert Dir erstmal ein Reading ON mit dem Wert von state. Was genau willst Du nun machen? Du willst wissen wie oft der Event ON kam?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux


Internals:
   CFGFN     
   NAME       dummyWaschmaschine
   NR         24
   STATE      ON
   TYPE       dummy
   OLDREADINGS:
   READINGS:
     2018-11-09 06:53:28   ON              2
     2018-11-09 06:53:28   state           ON
Attributes:
   readingList state
   room       Test
   setList    state:ON,OFF,STANDBY
   userReadings ON:ON { ReadingsVal($name,'ON',0) + 1 }


Das zählt Dir Deine ON Evente von state.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Freee84neu

Vielen Dank

zum verständinis

ON:ON { ReadingsVal($name,'ON',0) + 1 } wie baut sich das jetzt auf

On der Name der Readings
On auf was er reagiert

dann ein set im deviece mit dem selbem Namen ""$name"" in das reading  ""On""

oder wie soll ich das verstehen

aber vielen vielen dank

CoolTux

Zitat von: Freee84neu am 09 November 2018, 14:05:38
Vielen Dank

zum verständinis

ON:ON { ReadingsVal($name,'ON',0) + 1 } wie baut sich das jetzt auf

On der Name der Readings
On auf was er reagiert

dann ein set im deviece mit dem selbem Namen ""$name"" in das reading  ""On""

oder wie soll ich das verstehen

aber vielen vielen dank

Ich erkläre es Dir gerne, aber bitte sei so nett und schaue Dir in Zukunft vorher Beispiele in der Commandref oder im Wiki an.

ON:ON { ReadingsVal($name,'ON',0) + 1 } wie baut sich das jetzt auf

Das erste ON ist der Name welches als userReading hinterlegt werden soll. Das :ON dahinter ist die RegEx auf die vom Event getriggert werden soll. Danach kommt Perlcode

ReadingsVal($name,'ON',0) + 1 }
ReadingsVal ist eine Perlfunktion welche in der fhem.pl zu finden ist, dieser Funktion übergeben wir den Namen des Devices von welchen wir lesen wollen, $name ist eine Variable welche beim Event mitgegeben wird und die nutzen wir gleich mal. 'ON' ist der Name des Readings von welchen wir lesen wollen. Die 0 dahinter ist der default Wert welcher zurückgegeben wird wenn von dem Device mit dem Reading nicht gelesen werden kann. Zum Beispiel beim aller ersten mal.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Freee84neu

Vielen dank ich denke das hab ich verstanden

muss aber auch leider sagen  das ich vorher in die Commandref geschaut habe aber leider hat es mir nicht wirklich geholfen.

da hab ich aus anderen userReadings was zusammen geschrieben ... was leider doch sehr weit weg war von dem was richtig war ...

dank nochmal

gruß Mike

Freee84neu

Habe dieses userReading jetzt und seit heut nachmittag bekomm ich fehler im logfile

Betrieb { my $val=ReadingsVal("Waschmaschine","ENERGY_Power",""); if ($val > 30) {$val="on";} elsif ($val <= 2) {$val="off";} elsif ($val <= 30 && $val >2) {$val="standby";};$val},Standby { my $val=ReadingsVal("Waschmaschine","ENERGY_Power",""); if ($val <= 30 && $val >= 2) {$val="on";} elsif ($val < 2 | $val > 30 ) {$val="off";} ;; $val},On { my $val=ReadingsVal("Waschmaschine","ENERGY_Power",""); if ($val > 10) {$val="on";} elsif ($val <= 10 ) {$val="off";} ;; $val},Off { my $val=ReadingsVal("Waschmaschine","ENERGY_Power",""); if ($val > 2) {$val="off";} elsif ($val <= 2 ) {$val="on";} ;; $val},Waschvorgaenge { ReadingsVal("Dummy_Waschmaschine","Waschvorgaenge",0) ;;}


2018.11.09 21:21:14 1: PERL WARNING: Possible precedence problem on bitwise | operator at (eval 30447) line 1.
2018.11.09 21:21:14 3: eval: { my $val=ReadingsVal("Waschmaschine","ENERGY_Power",""); if ($val <= 30 && $val >= 2) {$val="on";} elsif ($val < 2 | $val > 30 ) {$val="off";} ;; $val}


kann mir einer auf die sprüge helfen

CoolTux

elsif ($val < 2 | $val > 30 ) {$val="off

elsif ($val < 2 || $val > 30 ) {$val="off
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Prof. Dr. Peter Henning

Ich bringe seit mehr als 40 Jahren anderen Menschen das Programmieren bei und kann ganz klar sagen: So wird das nichts.

Freee84neu hat leider noch nicht einmal den Unterschied zwischen der Ebene der FHEM-Skriptsprache und der Perl-Ebene verstanden. Ich schlage deshalb vor, sich die Anfängerdoku von FHEM noch einmal anzusehen, und Perl an Hand einer anderen Dokumentation zu lernen, z.B. http://www.tekromancer.com/perl2/inhalt.html

LG

pah

Freee84neu

Danke

Es hat ja seit ein paar Tage funktioniert muss wohl beim ändern verloren gegangen sein. Und ist mir leider nicht aufgefallen.

Und ja ich komm damit noch nicht wirklich klar. Und ich muss mich da wirklich noch einarbeiten das will ich nicht abstreiten ...