FHEM Forum

FHEM => Automatisierung => Thema gestartet von: ritter_runkel am 04 April 2020, 07:51:03

Titel: notify + setReading und "kürzen" des Wertes mit sprintf auf eine Nachkommastelle
Beitrag von: ritter_runkel am 04 April 2020, 07:51:03
Hallo Zusammen,
ich versuche einen Wert für eine Anzeige auf eine Nachkommastelle zu kürzen.

Folgendes Notify funktioniert - aber eben mit zu vielen Nachkommastellen beim setreading:

defmod Notify_Dummy_Energy_Einspeisung_Monat notify Rep.Einspeisung.Wirkleistung.Monat.neu:(\d).*Einspeisung_Wirkleistung_Zaehler.* { fhem "setreading Dum.Energy GridFeedInMonth"." $EVTPART1"}


Jetzt habe ich versucht mit "sprintf" im setreading das Reading "GridFeedInMonth" mit folgendem Code auf eine Nachkommastelle zu kürzen:

defmod Notify_Dummy_Energy_Einspeisung_Monat notify Rep.Einspeisung.Wirkleistung.Monat.neu:(\d).*Einspeisung_Wirkleistung_Zaehler.* { fhem "setreading Dum.Energy GridFeedInMonth".[color=red]sprintf("%.1f"," $EVTPART1")[/color]}


Das schlägt fehl - bzw. erzeugt keinerlei Änderung.

Hat jemand eine Idee?

Herzlichen Dank vorab und beste Grüße aus Leipzig!
Erik
Titel: Antw:notify + setReading und "kürzen" des Wertes mit sprintf auf eine Nachkommastelle
Beitrag von: Wzut am 04 April 2020, 09:07:43
nimm das Blank beim sprintf raus und papp es an GridFeedInMonth

GridFeedInMonth ".sprintf('%.1f', $EVTPART1)
Titel: Antw:notify + setReading und "kürzen" des Wertes mit sprintf auf eine Nachkommastelle
Beitrag von: Gisbert am 04 April 2020, 09:23:03
Hallo Erik,

zu der Definition des notify kann ich eher wenig beitragen.

Ich möchte aber folgende Anregung geben. Hat dein notify den einzigen Zweck ein Reading zu erzeugen bzw. zu setzen? Ich mache sowas i.d.R. im jeweiligen Device mit userReadings. Innerhalb von geschweiften Klammern herrscht Perl, da kann man sich nach herzenslust austoben.

Der Vorteil ist, dass es im gleichen Device abgehandelt wird, und die Anzahl der Devices übersichtlicher bleibt. Wenn das notify inhaltlich mehr tut, dann ist natürlich sinnvoll dies separat zu halten.

Viele​ Grüße​ Gisbert​
Titel: Antw:notify + setReading und "kürzen" des Wertes mit sprintf auf eine Nachkommastelle
Beitrag von: rudolfkoenig am 04 April 2020, 14:22:57
Der Haken am notify: wenn es das "trigger" Geraet modifiziert, dann wird kein Event dafuer generiert, um eine Endlosschleife zu vermeiden.
Ein Workaround ist die Ausfuehrung z.Bsp. mit einem FHEM-sleep zu entkoppeln, dann sollte aber das Notify-Regexp mit bedacht gewaehlt sein, sonst hat man wieder die Endlosschleife.

userReadings verhindert auch "sich selbst" zu modifizieren, vmtl. aus aehnlichen Gruenden.

Fuer dieses Problem habe ich das readigsChange (https://fhem.de/commandref_modular.html#readingsChange) Modul gebaut.