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.
Hi,
da Du die Readings ja selbst setzt, bau dort doch einfach sprintf ein.
https://perldoc.perl.org/functions/sprintf
Gruß Otto
Hi Kermit20,
kennst Du https://fhem.de/commandref_modular_DE.html#DOIF_Filtern_nach_Zahlen (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!
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 (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 !