notify + setReading und "kürzen" des Wertes mit sprintf auf eine Nachkommastelle

Begonnen von ritter_runkel, 04 April 2020, 07:51:03

Vorheriges Thema - Nächstes Thema

ritter_runkel

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
FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder

Wzut

nimm das Blank beim sprintf raus und papp es an GridFeedInMonth

GridFeedInMonth ".sprintf('%.1f', $EVTPART1)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Gisbert

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​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

rudolfkoenig

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