notify, was mache ich falsch?

Begonnen von heinzfo, 04 März 2017, 18:10:45

Vorheriges Thema - Nächstes Thema

heinzfo

Hallo

Leider komme ich nicht auf die Lösung, kann mir bitte jemand helfen!

Ich möchte von einem AMAD Device das Reading vom "powerPlugged" auswerten und eine Nachricht erhalten.
Im EventMonitor ist der Rückabewert 0 oder 1
Eine Nachricht bekomme ich bei 0 und 1 aber der Inhalt der Variable pp ist immer 1

List YogaSteckdoseWA

Internals:
DEF        LenovoYoga2Pro:powerPlugged:.* {
my $pp = Value("powerPlugged");
if ( $pp = "1" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x92\xA1 "}
elsif ( $pp = "0" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x94\x8C "}}
NAME       YogaSteckdoseWA
NOTIFYDEV  LenovoYoga2Pro
NR         838
NTFY_ORDER 50-YogaSteckdoseWA
REGEXP     LenovoYoga2Pro:powerPlugged:.*
STATE      2017-03-04 18:05:51
TYPE       notify
Readings:
2017-03-04 18:03:31   state           active
Attributes:
group      1_Yoga
icon       message_mail
room       IT_Equipment
sortby     07


Logfile

2017.03.04 18:07:56 1: PERL WARNING: Found = in conditional, should be == at (eval 14342) line 4.
2017.03.04 18:07:56 3: eval: my $EVTPART1='0';my $SELF='YogaSteckdoseWA';my $EVTPART0='powerPlugged:';my $NAME='LenovoYoga2Pro';my $EVENT='powerPlugged: 0';my $TYPE='AMAD';{
my $pp = Value("pp");
if ( $pp = "1" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x92\xA1 "}
elsif ( $pp = "0" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x94\x8C "}}
2017.03.04 18:07:56 3: WhatsApp: sending /message send 4915170151866 'powerPlugged, *1* 💡'


Danke un Grüße
Heinz

viegener

Zuerstmal sind es 2 grundsätzliche perl probleme

a) Numerische Vergleiche werden in perl als == geschrieben
b) Bei Stringvergleichen sollte man andere Operatoren verwenden - eq für gleich / ne für ungleich etc

Was ansonsten nicht geht kann man dann noch schauen, denn die set Befehle sind mir nicht ganz klar, aber vielleicht geht das ja so

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

betateilchen

#2
Das Problem steht doch klipp und klar im Logfile:


2017.03.04 18:07:56 1: PERL WARNING: Found = in conditional, should be == at (eval 14342) line 4.


Du verwendest schilchtweg eine falsch perl Syntax.

falsch:

$pp = "1"

denn damit setzt Du die Variable $pp auf den Wert 1.
Eselsbrücke: "$pp ist 1" - also EIN = Zeichen, da ein Wort dazwischen

richtig:

$pp == "1"

damit kannst Du prüfen, ob $pp den Wert 1 hat.
Eselsbrücke: "$pp ist gleich 1?" - also ZWEI = Zeichen, da zwei Worte dazwischen
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Thorsten Pferdekaemper

Hi,
Du musst außerdem wohl eher ReadingsVal() statt Value() verwenden.
Gruß,
   Thorsten
FUIP

betateilchen

Zitat von: Thorsten Pferdekaemper am 04 März 2017, 18:20:29
Du musst außerdem wohl eher ReadingsVal() statt Value() verwenden.

Warum? Woran erkennst Du, dass der Wert nicht aus dem STATE kommen soll?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Zitat von: heinzfo am 04 März 2017, 18:10:45
Hallo

Leider komme ich nicht auf die Lösung, kann mir bitte jemand helfen!

Ich möchte von einem AMAD Device das Reading vom "powerPlugged" auswerten und eine Nachricht erhalten.
Im EventMonitor ist der Rückabewert 0 oder 1
Eine Nachricht bekomme ich bei 0 und 1 aber der Inhalt der Variable pp ist immer 1

List YogaSteckdoseWA

Internals:
DEF        LenovoYoga2Pro:powerPlugged:.* {
my $pp = Value("powerPlugged");
if ( $pp = "1" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x92\xA1 "}
elsif ( $pp = "0" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x94\x8C "}}
NAME       YogaSteckdoseWA
NOTIFYDEV  LenovoYoga2Pro
NR         838
NTFY_ORDER 50-YogaSteckdoseWA
REGEXP     LenovoYoga2Pro:powerPlugged:.*
STATE      2017-03-04 18:05:51
TYPE       notify
Readings:
2017-03-04 18:03:31   state           active
Attributes:
group      1_Yoga
icon       message_mail
room       IT_Equipment
sortby     07


Logfile

2017.03.04 18:07:56 1: PERL WARNING: Found = in conditional, should be == at (eval 14342) line 4.
2017.03.04 18:07:56 3: eval: my $EVTPART1='0';my $SELF='YogaSteckdoseWA';my $EVTPART0='powerPlugged:';my $NAME='LenovoYoga2Pro';my $EVENT='powerPlugged: 0';my $TYPE='AMAD';{
my $pp = Value("pp");
if ( $pp = "1" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x92\xA1 "}
elsif ( $pp = "0" ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x94\x8C "}}
2017.03.04 18:07:56 3: WhatsApp: sending /message send 4915170151866 'powerPlugged, *1* 💡'


Danke un Grüße
Heinz

Hallo Heinz,

Bitte Informiere Dich wie man Readings ausliest. Das was Du gemacht hast kann nicht gehen. Value geht nur auf STATE Du benötigst ReadingsVal. Und dann Frage ich mich aber auch wieso Du das Reading noch mal aus liest wenn der aktuelle Wert doch schon mit dem Event mit kommt.
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

Zitat von: betateilchen am 04 März 2017, 18:23:48
Warum? Woran erkennst Du, dass der Wert nicht aus dem STATE kommen soll?

Weil AMAD default den Wert nicht im STATE mitliefert. Das ist ein eigenes Reading.
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

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

heinzfo

#8
Hallo

Danke für die zahlreichen Rückmeldungen!

Habe es jetzt so gelöst.

LenovoYoga2Pro:powerPlugged:.* {
my $pp = ReadingsVal("LenovoYoga2Pro","powerPlugged",99);
if ( $pp == 1 ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x92\xA1 "}
elsif ( $pp == 0 ) { fhem "set HeinzMobil send powerPlugged, *$pp* \xF0\x9F\x94\x8C "}}


Value geht nur auf STATE es muss mit ReadingsVal gemacht werden, das war die Lösung ;-)

Danke nochmal
Heinz

Thorsten Pferdekaemper

Zitat von: betateilchen am 04 März 2017, 18:23:48
Warum? Woran erkennst Du, dass der Wert nicht aus dem STATE kommen soll?
Weil man in der Zeile drüber sieht, dass das Argument von Value() ein Reading ist und kein Device. Natürlich kann es theoretisch auch noch ein Device geben, dass denselben Namen hat. Das ist aber eher unwahrscheinlich. Es könnte auch sein, dass der Fragende gar nicht weiß, was Reading und was Device ist. Das wollte ich nicht unterstellen.
Ergo...
Gruß,
   Thorsten
FUIP