FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bjoernar am 23 Juni 2016, 09:52:52

Titel: Rechnen mit einem Notify
Beitrag von: Bjoernar am 23 Juni 2016, 09:52:52
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
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: justme1968 am 23 Juni 2016, 10:04:33
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
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: Bjoernar am 23 Juni 2016, 20:37:04
Danke, läuft.
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: Puschel74 am 23 Juni 2016, 20:40:44
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.
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: Bjoernar am 23 Juni 2016, 23:26:38
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?
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: Benni am 24 Juni 2016, 05:12:19
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 ;) )
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: Bjoernar am 24 Juni 2016, 06:39:08
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.
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: marvin78 am 24 Juni 2016, 08:09:04
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.
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: Bjoernar am 24 Juni 2016, 08:14:49
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
Titel: Antw:(Gelöst) Rechnen mit einem Notify
Beitrag von: Bjoernar am 24 Juni 2016, 14:32:48
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....
Titel: Antw:Rechnen mit einem Notify
Beitrag von: justme1968 am 24 Juni 2016, 14:33:47
dann sollte irgendwo eine Meldung im log zu sehen sein.
Titel: Antw:Rechnen mit einem Notify
Beitrag von: Bjoernar am 24 Juni 2016, 14:40:16
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 ") )"
Titel: Antw:Rechnen mit einem Notify
Beitrag von: justme1968 am 24 Juni 2016, 15:26:33
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
Titel: Antw:Rechnen mit einem Notify
Beitrag von: Bjoernar am 28 Juni 2016, 09:44:53
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")}

Titel: Antw:Rechnen mit einem Notify
Beitrag von: justme1968 am 28 Juni 2016, 09:47:44
im user reading kannst du  im fall <0 undef zurück geben.

gruss
  andre
Titel: Antw:Rechnen mit einem Notify
Beitrag von: Bjoernar am 28 Juni 2016, 09:50:54
Wie?
Titel: Antw:Rechnen mit einem Notify
Beitrag von: marvin78 am 28 Juni 2016, 10:05:02
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.).
Titel: Antw:Rechnen mit einem Notify
Beitrag von: Bjoernar am 28 Juni 2016, 10:10:55
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.
Titel: Antw:Rechnen mit einem Notify
Beitrag von: marvin78 am 28 Juni 2016, 10:13:13
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}
Titel: Antw:Rechnen mit einem Notify
Beitrag von: Bjoernar am 28 Juni 2016, 10:15:11
danke.

bin ja dabei aber perl ist für mich echt noch ein schwarzes Tuch.
Bin ja noch nicht lange dabei...

Titel: Antw:Rechnen mit einem Notify
Beitrag von: marvin78 am 28 Juni 2016, 10:23:38
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