Hauptmenü

Rechnen mit einem Notify

Begonnen von Bjoernar, 23 Juni 2016, 09:52:52

Vorheriges Thema - Nächstes Thema

Bjoernar

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

justme1968

#1
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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Bjoernar


Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Bjoernar

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?

Benni

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 ;) )

Bjoernar

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.

marvin78

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.

Bjoernar

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

Bjoernar

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....

justme1968

dann sollte irgendwo eine Meldung im log zu sehen sein.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Bjoernar

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 ") )"

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Bjoernar

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")}


justme1968

#14
im user reading kannst du  im fall <0 undef zurück geben.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968