[GELÖST]Subtrahieren von zwei Werten

Begonnen von Floh22964, 28 März 2018, 21:56:00

Vorheriges Thema - Nächstes Thema

Floh22964

Hallo

Auch mit der Gefahr gesteinigt zu werden, ich habe nun zwei Tage gelesen und probiert und komme nicht weiter.
Ich möchte zwei Werte die ich über Modbus auslese subtrahieren.
Ich habe einmal solarlog_totalpac im state den Wert und solarlog_totalpac_cons im state den Wert.
Wenn der Wert negativ ist soll dieser auch negativ ausgegeben werden.

Hintergrund ich möchte mir eine Anzeige in der Tabletui erstellen wo ich sehen kann wie viel momentan aus dem Stromnetz bezogen oder halt eingespeist wird.

Danke für Eure Hilfe

Kay

Pfriemler

Schau mal was mit userReadings und stateFormat alles spannendes machen kann ... ich benutze etliche Userreadings, die Mittelwerte, Tagessummen etc. berechnen (aktueller Wert minus dem von Mitternacht etwa). Bei jeder Aktualisierung eines beteiligten readings wird automatisch neu berechnet. Lies die commandref dazu und dann frag gern nochmal...bin unterwegs, würde sonst gleich ein Beispiel liefern...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Otto123

#2
Ich helfe mal mit einem theoretisch konstruierten Beispiel
attr <DeviceName> userReadings Einspeisung {Value("solarlog_totalpac") - Value("solarlog_totalpac_cons")}
Fasl da wirklich nur Zahlen in den state Werten stehen.

mit sprintf() liese sich das noch formatieren.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Floh22964

#3
Vielen Dank, aber ich verstehe nicht wieso es nicht funktioniert

Das habe ich versucht

state { ReadingsVal("solarlog_totalpac","state",0) - ReadingsVal("solarlog_totalpac_cons","state",0)}
und es geht nicht

Bei deinem Code wird auch kein Wert angezeigt

defmod photovoltaig_diff dummy
attr photovoltaig_diff DbLogExclude .*
attr photovoltaig_diff userReadings Einspeisung {Value("solarlog_totalpac ") - Value("solarlog_totalpac_cons")}


Nur wieso bloß nicht?

und ja es stehen nur Werte im state von 0 bis 6000

Kay


Otto123

#4
Das userReadings state zu nennen ist glaube ich nicht gut.

was ergibt denn {Value("solarlog_totalpac_cons")} in der FHEM Kommandozeile?

Das userReadings muss getriggert werden. Es ist speziell, es nicht im gleichen Device wie die Ursprungswerte zu definieren.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Floh22964

Ich muss mich berichtigen, die Grundfunktion ist da, nur leider wird diese nicht aktualisiert.
Ich habe bei beiden Werten die Abgefragt werden event on change reading aktiviert.
Ich muss einen set Befehl auslösen damit es eine Änderung gibt, obwohl ich bei set nur einen Wert einstellen kann.


Floh22964

Was meinst Du mit triggern?

Leider kommen beide Werte aus unterschiedlichen Device.

Otto123

#7
Dann mach das userreadings einfach in einem der beiden devices und nicht in einem dritten

Oder erfinde einen künstlichen trigger für den dummy, finde ich aber sinnlos. z.B. zyklisches at alle paar minuten
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Floh22964

Danke Otto123, nachdem ich es nun in den solarlog_totalpac gelegt habe funktioniert es und aktualisiert sich auch von allein.

Sogar mein userreading geht

Einspeisung { ReadingsVal("solarlog_totalpac","state",0) - ReadingsVal("solarlog_totalpac_cons","state",0)}

Ich bin also darauf hereingefallen das es nicht aktualisiert.
Kannst Du mir sagen wieso es in einem dummy nicht geht und in einem anderen Device schon?

Otto123

Es geht auch in einem dummy, aber es (das gerät wo das userreadings definiert ist) muss getriggert/aktiv werden. Solange der dummy bloß vor sich hinschläft passiert nichts.
Deswegen am einfachsten dort wo einer der beteiligten Werte entsteht.

Value("Gerät") entspricht dem Spezialfall ReadingsVal("Gerät",state,default) für das Reading state :) Man muss halt weniger schreiben.
Besser ist in dem Fall noch ReadingsNum()

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Floh22964

Vielen Dank


Noch einen schönen Abend ich muss zu Bett

Und so soll es dann in etwa in der TabletUi aussehen.

Kay