[Modul Telegram / DOIF] Runden / festlegung von anzuzeigenden Dezimalstellen

Begonnen von Kermit20, 29 April 2021, 17:31:27

Vorheriges Thema - Nächstes Thema

Kermit20

Hallo Gemeinde,

für meine MiniPV Anlage, welche ich mittel Tasmota und einem Sonof POW auswerte, bastle ich mir grade eine Benachrichtigung via Telegram. nun hänge ich an einem "Wissensdefizit". Ich möchte gerne Werte verkürzt anzeigen, sprich 2 dezimal stellen nach dem Komma.

Aufgebaut habe ich es wie folgt: Ich habe ein DOIF, welches zeitgesteuert die SVG Plots versendet und dann einen Textnachricht anfügt (Statistische Werte Verbrauch Ertrag  pro Jahr Monat etc.) Diese Werte für die Textnachricht errechne ich mittels Userreadings und Formeln im DIOF.

Internals:
   CFGFN     
   DEF        ([21:02])
(
set $SELF einspeisung_heute {(ReadingsVal("UG_Stromzaehler","total_feed",0) / 1000)},
set $SELF einspeisung_diff {([$SELF:einspeisung_heute]-[$SELF:einspeisung_gestern])},
set $SELF einspeisung_jahr {([$SELF:einspeisung_jahr]+[$SELF:einspeisung_diff])},
set $SELF einspeisung_gesamt {([$SELF:einspeisung_gesamt]-[$SELF:einspeisung_diff])},

set $SELF ertrag_heute {(ReadingsVal("MQTT2_Tasmota_POW_Solar_Energie","ENERGY_Today",0))},
set $SELF ertrag_jahr {([$SELF:ertrag_jahr]+[$SELF:ertrag_heute])},
set $SELF ertrag_gesamt {([$SELF:ertrag_gesamt]+[$SELF:ertrag_heute])},

set $SELF nutzen_eff {([$SELF:ertrag_heute]-[$SELF:einspeisung_diff])},
set $SELF ertrag_euro {([$SELF:ertrag_jahr]+[$SELF:ertrag_heute])},

 
)

(
set TelegramBot cmdSend @#FHEM_Test_Channel { plotAsPng('SVG_FileLog_MQTT2_Tasmota_POW_Solar_Energie_2') },
set TelegramBot cmdSend @#FHEM_Test_Channel { plotAsPng('SVG_FileLog_MQTT2_Tasmota_POW_Solar_Energie_1') },
set TelegramBot message @#FHEM_Test_Channel 🌞 Solar Statistik MiniPV ⚡
\n \n Erzeugung heute:  {(ReadingsVal("MQTT2_Tasmota_POW_Solar_Energie","ENERGY_Today",0))} Kwh
\n Erzeugung Jahr: [$SELF:ertrag_jahr] Kwh
\n Erzeugung geamt: [$SELF:ertrag_gesamt] Kwh
\n
\n Einspeisung heute: [$SELF:einspeisung_diff] Kwh
\n Einspeisung Jahr: [$SELF:einspeisung_jahr] Kwh
\n Einspeisung gesamt: [$SELF:einspeisung_gesamt] Kwh
\n
\n Nutzen eff:
\n Ertrag:
)

DOELSEIF ([23:59])
(
set $SELF einspeisung_gestern {(ReadingsVal("UG_Stromzaehler","total_feed",0) / 1000)},
)

   FUUID      607d459c-f33f-8d9b-a7e6-0928640198ee5170
   MODEL      FHEM
   NAME       DI_Solar_Strom_Auswertung_Telegram
   NOTIFYDEV  global
   NR         141922
   NTFY_ORDER 50-DI_Solar_Strom
   STATE      initialized
   TYPE       DOIF
   VERSION    24210 2021-04-10 18:05:36
   Helper:
     DBLOG:
       cmd:
         DB_Logging_MYSQL:
           TIME       1618822556.82166
           VALUE      0
       mode:
         DB_Logging_MYSQL:
           TIME       1618822556.82166
           VALUE      enabled
       state:
         DB_Logging_MYSQL:
           TIME       1618822556.82166
           VALUE      initialized
   READINGS:
     2021-04-29 17:26:30   cmd             0
     2021-04-28 21:02:00   einspeisung_diff 0.51482398
     2021-04-28 21:02:00   einspeisung_gesamt -3.6610032
     2021-04-28 23:59:00   einspeisung_gestern 6.10867861
     2021-04-28 21:02:00   einspeisung_heute 6.10867861
     2021-04-28 21:02:00   einspeisung_jahr 3.6610032
     2021-04-28 21:02:00   ertrag_gesamt   150.944
     2021-04-28 21:02:00   ertrag_heute    3.683
     2021-04-28 21:02:00   ertrag_jahr     150.944
     2021-04-29 17:26:30   mode            enabled
     2021-04-28 21:02:00   nutzen_eff      3.16817602
     2021-04-29 17:26:30   state           initialized
     2021-04-29 17:26:30   timer_01_c01    29.04.2021 21:02:00
     2021-04-29 17:26:30   timer_02_c02    29.04.2021 23:59:00
   Regex:
     accu:
     collect:
   attr:
     cmdState:
     wait:
     waitdel:
     waitsame:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          ::DOIF_time_once($hash,1,$wday)
   days:
   do:
     0:
       0            set DI_Solar_Strom_Auswertung_Telegram einspeisung_heute {(ReadingsVal("UG_Stromzaehler","total_feed",0) / 1000)},  set DI_Solar_Strom_Auswertung_Telegram einspeisung_diff {([DI_Solar_Strom_Auswertung_Telegram:einspeisung_heute]-[DI_Solar_Strom_Auswertung_Telegram:einspeisung_gestern])},  set DI_Solar_Strom_Auswertung_Telegram einspeisung_jahr {([DI_Solar_Strom_Auswertung_Telegram:einspeisung_jahr]+[DI_Solar_Strom_Auswertung_Telegram:einspeisung_diff])},  set DI_Solar_Strom_Auswertung_Telegram einspeisung_gesamt {([DI_Solar_Strom_Auswertung_Telegram:einspeisung_gesamt]-[DI_Solar_Strom_Auswertung_Telegram:einspeisung_diff])},    set DI_Solar_Strom_Auswertung_Telegram ertrag_heute {(ReadingsVal("MQTT2_Tasmota_POW_Solar_Energie","ENERGY_Today",0))},  set DI_Solar_Strom_Auswertung_Telegram ertrag_jahr {([DI_Solar_Strom_Auswertung_Telegram:ertrag_jahr]+[DI_Solar_Strom_Auswertung_Telegram:ertrag_heute])},  set DI_Solar_Strom_Auswertung_Telegram ertrag_gesamt {([DI_Solar_Strom_Auswertung_Telegram:ertrag_gesamt]+[DI_Solar_Strom_Auswertung_Telegram:ertrag_heute])},    set DI_Solar_Strom_Auswertung_Telegram nutzen_eff {([DI_Solar_Strom_Auswertung_Telegram:ertrag_heute]-[DI_Solar_Strom_Auswertung_Telegram:einspeisung_diff])},  set DI_Solar_Strom_Auswertung_Telegram ertrag_euro {([DI_Solar_Strom_Auswertung_Telegram:ertrag_jahr]+[DI_Solar_Strom_Auswertung_Telegram:ertrag_heute])},     
       1           set TelegramBot cmdSend @#FHEM_Test_Channel { plotAsPng('SVG_FileLog_MQTT2_Tasmota_POW_Solar_Energie_2') }, set TelegramBot cmdSend @#FHEM_Test_Channel { plotAsPng('SVG_FileLog_MQTT2_Tasmota_POW_Solar_Energie_1') }, set TelegramBot message @#FHEM_Test_Channel 🌞 Solar Statistik MiniPV ⚡ \n \n Erzeugung heute:  {(ReadingsVal("MQTT2_Tasmota_POW_Solar_Energie","ENERGY_Today",0))} Kwh \n Erzeugung Jahr: [DI_Solar_Strom_Auswertung_Telegram:ertrag_jahr] Kwh \n Erzeugung geamt: [DI_Solar_Strom_Auswertung_Telegram:ertrag_gesamt] Kwh \n \n Einspeisung heute: [DI_Solar_Strom_Auswertung_Telegram:einspeisung_diff] Kwh \n Einspeisung Jahr: [DI_Solar_Strom_Auswertung_Telegram:einspeisung_jahr] Kwh \n Einspeisung gesamt: [DI_Solar_Strom_Auswertung_Telegram:einspeisung_gesamt] Kwh \n \n Nutzen eff:  \n Ertrag: 
     1:
       0            set DI_Solar_Strom_Auswertung_Telegram einspeisung_gestern {(ReadingsVal("UG_Stromzaehler","total_feed",0) / 1000)},
     2:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 2
     sleeptimer -1
   intervalfunc:
   localtime:
     0          1619722920
     1          1619733540
   realtime:
     0          21:02:00
     1          23:59:00
   time:
     0          21:02:00
     1          23:59:00
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   triggertime:
     1619722920:
       localtime  1619722920
       hash:
     1619733540:
       localtime  1619733540
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   do         always
   readingList einspeisung_heute einspeisung_gesamt einspeisung_jahr einspeisung_diff einspeisung_gestern ertrag_heute ertrag_jahr ertrag_gesamt nutzen_eff Ertrag Armortisierung


Meine Frage ist nun konkret: Wie muss ich die Werte im Nachrichtenabschnitt von Telegram angeben, damit z.B. "Einspeisung heute: [$SELF:einspeisung_diff] Kwh" auf 2 Dezimalstellen begrenzt wird und nicht "0.51482398" als Wert gesendet werden.

Oder geht das an dieser Stelle gar nicht und ich muss das Reading erst formatieren, bevor ich es "auslese" ?

Ansätze mittel Perl Funktionen oder Formatierungsversuche sind bisher gescheitert.

Danke für Euren Input im Vorfeld.
RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9

Otto123

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

Sany

Hi Kermit20,

kennst Du https://fhem.de/commandref_modular_DE.html#DOIF_Filtern_nach_Zahlen?

also
Zitat[$SELF:einspeisung_diff:d2]
sollte 2 Nachkommastellen liefern.

Vorteil: dein Reading wird nicht verändert, falls Du den Wert noch irgendwo zum Rechnen verwendest.

Viel Erfolg!
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Kermit20

Zitat von: Sany am 29 April 2021, 19:17:26
Hi Kermit20,

kennst Du https://fhem.de/commandref_modular_DE.html#DOIF_Filtern_nach_Zahlen?

also  sollte 2 Nachkommastellen liefern.

Vorteil: dein Reading wird nicht verändert, falls Du den Wert noch irgendwo zum Rechnen verwendest.

Viel Erfolg!


Klasse, Danke ! Das ist genau das was ich brauche. So verfälsche ich die Zahlen nicht =) Danke aber auch an Otto !
RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9