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
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...
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
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
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.
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.
Was meinst Du mit triggern?
Leider kommen beide Werte aus unterschiedlichen Device.
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
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?
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
Vielen Dank
Noch einen schönen Abend ich muss zu Bett
Und so soll es dann in etwa in der TabletUi aussehen.
Kay