FHEM Forum

FHEM => Automatisierung => Thema gestartet von: heinzfo am 04 März 2017, 18:10:45

Titel: notify, was mache ich falsch?
Beitrag 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
Titel: Antw:notify, was mache ich falsch?
Beitrag von: viegener am 04 März 2017, 18:17:56
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

Titel: Antw:notify, was mache ich falsch?
Beitrag von: betateilchen am 04 März 2017, 18:19:30
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
Titel: Antw:notify, was mache ich falsch?
Beitrag von: Thorsten Pferdekaemper am 04 März 2017, 18:20:29
Hi,
Du musst außerdem wohl eher ReadingsVal() statt Value() verwenden.
Gruß,
   Thorsten
Titel: Antw:notify, was mache ich falsch?
Beitrag von: betateilchen am 04 März 2017, 18:23:48
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?
Titel: Antw:notify, was mache ich falsch?
Beitrag von: CoolTux am 04 März 2017, 18:23:54
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.
Titel: Antw:notify, was mache ich falsch?
Beitrag von: CoolTux am 04 März 2017, 18:25:03
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.
Titel: Antw:notify, was mache ich falsch?
Beitrag von: betateilchen am 04 März 2017, 18:27:29
aha.
Titel: Antw:notify, was mache ich falsch?
Beitrag von: heinzfo am 04 März 2017, 18:27:39
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
Titel: Antw:notify, was mache ich falsch?
Beitrag von: Thorsten Pferdekaemper am 04 März 2017, 20:21:03
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