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
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
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
Hi,
Du musst außerdem wohl eher ReadingsVal() statt Value() verwenden.
Gruß,
Thorsten
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?
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.
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.
aha.
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
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