Hallo,
ich versuche zwei Werte zu subtrahieren.
Als Ergebnis bekomme ich immer nur eine 0.
Aber warum?
define n_AC_Einspeisung notify Wechselrichter1 {\
my $temp=Value("Wechselrichter1:Power__W")-Value("AC_Allgemein:Power_Sum__W");;;;\
if ($temp >= 0 ) {\
fhem("set AC_Einspeisung $temp");;;;\
} \
}
AC_Einspeisung ist ein dummy
Gruß
Björnar
mit Value kannst du nur STATE abfragen. nicht ein bestimmtes reading.
um ein bestimmtes reading abzufragen gibt es ReadingsVal. aber schau dir die syntax an. device und reading wird getrennt übergeben.
edit: das geht leider nicht da [<reading>:<value>] nur auf fhem ebene implementiert ist.
du kannst aber auch die [<reading>:<value>] syntax verwenden wenn du sie mit {(...)} kombinierst: define n_AC_Einspeisung notify Wechselrichter1 {( my $t=[Wechselrichter1:Power__W]-[AC_Allgemein:Power_Sum__W];; fhem( "set AC_Einspeisung $t" ) if( $t >= 0 ) )}
edit ende.
falls es dir nicht auf das if ankommt kannst auch diese variante verwenden: define n_AC_Einspeisung notify Wechselrichter1 set AC_Einspeisung {([Wechselrichter1:Power__W]-[AC_Allgemein:Power_Sum__W])}
gruss
andre
Danke, läuft.
Zitat von: Bjoernar am 23 Juni 2016, 20:37:04
Danke, läuft.
Nun noch, wie in meinem angepinnten Beitrag, die Lösung für nachfolgende hinterlassen.
Danke.
Zitat von: Puschel74 am 23 Juni 2016, 20:40:44
Nun noch, wie in meinem angepinnten Beitrag, die Lösung für nachfolgende hinterlassen.
Danke.
Was?
Zitat von: Bjoernar am 23 Juni 2016, 23:26:38
Was?
Hier: https://forum.fhem.de/index.php/topic,16311.0.html
Einer der letzten Abschnitte (das Lesen des gesamten Artikels ist aber trotzdem ratsam ;) )
Zitat von: Benni am 24 Juni 2016, 05:12:19
Hier: https://forum.fhem.de/index.php/topic,16311.0.html
Einer der letzten Abschnitte (das Lesen des gesamten Artikels ist aber trotzdem ratsam ;) )
Verstehe immer noch nicht was du willst? Die Lösung hat André doch als code geteilt.
Die angepinnten Beiträge lesen und die Inhalte verinnerlichen!
Aus dem verlinkten Thema:
ZitatWenn Eure Frage oder Euer Problem gelöst ist dann möchte ich Euch noch bitten den ersten Beitrag zu bearbeiten und dem Titel ein (Gelöst) vorne dran zu stellen.
Zitat von: marvin78 am 24 Juni 2016, 08:09:04
Die angepinnten Beiträge lesen und die Inhalte verinnerlichen!
Aus dem verlinkten Thema:
:o ah jetzt ja
Zitat von: justme1968 am 23 Juni 2016, 10:04:33
define n_AC_Einspeisung notify Wechselrichter1 {( my $t=[Wechselrichter1:Power__W]-[AC_Allgemein:Power_Sum__W];; fhem( "set AC_Einspeisung $t" ) if( $t >= 0 ) )}
Muss mich doch noch mal korrigieren, der zweite Code läuft, der erste mit dem if leider nicht....verstehe nur nicht warum....
dann sollte irgendwo eine Meldung im log zu sehen sein.
stimmt:
n_AC_Einspeisung return value: syntax error at (eval 69703) line 1, near "Wechselrichter1:"
Global symbol "$t" requires explicit package name at (eval 69703) line 1.
Global symbol "$t" requires explicit package name at (eval 69703) line 1.
syntax error at (eval 69703) line 1, near ") )"
hab gerade gesehen das diese variante tatsächlich nicht geht da die [<reading>:<wert>] variante und auch das {(..)} nur auf der fhem ebene ausgeführt werden. nicht wenn man schon auf perl ebene ist.
d.h. wenn du das if brauchst musst du über ReadingsVal gehen und kannst [<reading>:<wert>] nicht verwenden.
gruss
andre
Morgen,
define n_AC_Einspeisung notify (AC_Allgemein:Power_Sum__W.*|Wechselrichter1:Power__W.*) {\
my $temp=ReadingsVal("Wechselrichter1","Power__W","0")-ReadingsVal("AC_Allgemein","Power_Sum__W","0");;;;\
if ($temp >= 0 ) {\
fhem("set AC_Einspeisung $temp");;;;\
}\
else {\
fhem("set AC_Einspeisung 0");;;;\
}\
}
so geht es!
Bekomme ich das auch irgendwie in ein Userreadings? Dann müsste ich dafür nicht extra einen Dummy anlagen.
Das Problem ist das ich so auch Werte unter 0 bekomme, das möchte ich aber nicht.
Einspeisung__W {ReadingsVal("Wechselrichter1","Power__W","0")-ReadingsVal("AC_Allgemein","Power_Sum__W","0")}
im user reading kannst du im fall <0 undef zurück geben.
gruss
andre
Wie?
Das läuft hier normalerweise so: Zeige, was du hast und ggf. wird dir dann bei der Fehlersuche geholfen. Ein wenig selber denken ist erlaubt und mit den ganzen Infos hier solltest du schon etwas haben (wenn du sie genutzt hast um dich zu informieren - commandref, Forum etc.).
Zitat von: justme1968 am 28 Juni 2016, 09:47:44
im user teading kannst du im fall <0 undef zurück geben.
gruss
andre
habe natürlich gesucht und mir auch die commandref für userReadings angesehen. Finde aber dazu nichts.
Tipp: beschäftige dich mit Perl
Einspeisung__W {my $val=ReadingsVal("Wechselrichter1","Power__W","0")-ReadingsVal("AC_Allgemein","Power_Sum__W","0");$val>=0?$val:undef}
danke.
bin ja dabei aber perl ist für mich echt noch ein schwarzes Tuch.
Bin ja noch nicht lange dabei...
Fange damit an, zu verstehen, was du hier tust. Irgendwann musst du ohnehin anfangen. Jetzt ist ein guter Zeitpunkt.
https://wiki.selfhtml.org/wiki/Perl