Hauptmenü

neue svg-Funktion: card

Begonnen von Damian, 04 April 2021, 12:58:15

Vorheriges Thema - Nächstes Thema

Damian

Ich denke, dass die Farbangabe nicht stimmt, denn die Y-Achse zeigt hier Regenbogenfarben (zu viele Farbwechsel)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Zitat von: Damian am 22 Juni 2021, 17:48:58
Ich denke, dass die Farbangabe nicht stimmt, denn die Y-Achse zeigt hier Regenbogenfarben (zu viele Farbwechsel)
ja genau muss ich noch optimieren, bin froh das ich es erstmal halbwegs hinbekommen habe, das er überhaupt was zeigt
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

#212
Es ist zwar noch nicht dokumentiert, aber in der aktuellen Version lässt sich die Auflösung erhöhen. Eine Verdoppelung der Default-Auflösung von 72 auf 144 Messpunkte, kann bei langen Zeiträumen und breiter Grafik durchaus sinnvoll sein. Die Angabe der Messpunkte wird vor dem Schlüsselwort col gemacht.

Bsp.:

Zitatcard([[zaehler:l-Produktion:144col1w],[zaehler:l-Eigenverbrauch:144col1w],[zaehler:l-Bezug_neg:144col1w]],"kW","fa_bolt\@silver",-3.6,3.6,0,90,["Solar","Eigen.","Bezug"],[(-1,0,-0.01,30,1,60,3.6,90)],"2","130,,1,1,,1","1,,1,0,1")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jkriegl

Gibt es einen Grund ein Vielfaches von 72 zu verwenden?
Bei meinem shelly führt es erst ab shelly_s:power:650col1 zu keinen Falschdarstellungen.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Damian

Zitat von: jkriegl am 29 Juli 2021, 17:31:35
Gibt es einen Grund ein Vielfaches von 72 zu verwenden?
Bei meinem shelly führt es erst ab shelly_s:power:650col1 zu keinen Falschdarstellungen.

nein, es gibt keinen Grund.

Bei 650 pro Stunde hast du eine Auflösung von ca. 5 Sekunden pro Messpunkt. Bei 160 Pixeln pro Grafik werden 650/160 ca. 4 Messpunkte pro Pixel berechnet - es ist deine Entscheidung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Ich habe meine Übersicht etwas komprimiert, indem ich mehrere Cards mit zwei oder drei Sensoren bestückt habe. Es könnte für den einen oder anderen als Vorlage nützlich sein.

Die aktuelle Definition mit Output im Anhang:
defmod Aktuell DOIF ##
attr Aktuell alias Übersicht
attr Aktuell uiTable {package ui_Table;;\
  $TC{0..1} = "style='vertical-align:top'"\
  $TABLE='text-align:center;;';;\
  $SHOWNOSTATE=1;;\
}\
## $prop: "<size>,<y-scaling>,<steps>,<noFooter>,<noColor>,<hring>,<width>"\
"<div class='doifclock'style='font-size:25pt;;color:silver'>wait</div>"<\
\
card([Aussensensor:temperature:col3d],undef,"temp_outside\@silver",-10,50,undef,undef,"°C",\&temp_hue,"1","130,,,0,,,",undef,undef,[outsensor:humidity:col3d],0,100,undef,undef,"%",\&hum_hue,"0")|\
card([Wetter:RegenGesamtMm:col3d],undef,"weather_rain_gauge\@silver",0,50,180,270,"mm",undef,"1","130,,1,0,1",undef,undef,[di_Regen:state:col3d],0,1,180,290,"Regen",undef,"1")\
\
card([ESPEasy_Eingang_CO2:PPM:col3d],undef,"air",400,1200,120,0,"ppm",[(600,120,1000,60,1200,0)],0,"130,,1,0",'0,,1')|\
card([Wetter:WindboeenKm:col3d],undef,"weather_wind\@silver",0,30,120,0,"km/h",undef,"1","130,,,0,1")\
\
\
card([[Tankstelle:SuperE5:col3d],[Tankstelle:Diesel:col3d]],undef,"fuel\@silver","1.20","1.60",120,0,["E5","Diesel"],undef,"2","130,,1,0",undef,undef)|\
card([Wasserverbrauch:heute:col1w],undef,"measure_water_meter\@silver",0,600,120,0,"l/d",undef,"0","130,1,1,0,",undef,undef,[Wasserzisterne:Stand:col1w],0,100,240,180,"%",undef,"0")\
\
card([RKI7:Dueren:col1w],undef,"coronavirus",0,200,120,0,"Fälle",undef,"0","130,,1,0,1")|\
card([di_vaillant:diff_h:col1w],undef,"sani_buffer_temp_down\@white",0,200,120,0,"kWh",undef,"1","130,,1,0,1")\
\
card([[zaehler:l-Produktion:144col3d],[zaehler:l-Eigenverbrauch:144col3d],[zaehler:l-Bezug_neg:144col3d]],"kW","fa_bolt\@silver",-3.6,3.6,0,90,["Solar,yellow","Eigen.,lime","Bezug,red"],[(-1,0,-0.01,30,1,60,3.6,90)],"2","130,,1,0,,1","1,,1,0,1")|\
\
card([[zaehler:Produktion:col1w],[zaehler:Bezug_neg:col1w]],"kWh","fa_bolt\@silver",-30,30,0,90,["Ertrag","Bezug"],undef,"1","130,,1,0,1","0,0,0,0,2")
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#216
DOIF-Update: card-Funktion

fixed: bei zwei verschiedenen Reading, die zu unterschiedlichen Zeiten triggerten, konnten die Plots in einer Card zeitlich auseinander laufen

feature: Y-Skalierung wurde von vier auf fünf Linien erhöht

feature: Zeiten in der Fußzeile sind jetzt ausgerichtet

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Nighthawk

Hallo Damian,

könntest Du bitte das Air Icon zur Verfügung stellen, finde es nirgends :-)

Danke und Gruß
Alex

Damian

Zitat von: Nighthawk am 04 Dezember 2021, 20:45:37
Hallo Damian,

könntest Du bitte das Air Icon zur Verfügung stellen, finde es nirgends :-)

Danke und Gruß
Alex
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Nighthawk


Adimarantis

Hi Damian,

Ich würde die schicken Karten gerne wie bei SVG plots per Messenger verschicken.
Sowohl Signalbot als auch Telegrambot unterstützen ja, dass man folgende Funktion aufruft:
{plotAsPng('SVG_Aussentemperatur')}
Die liefert dann einen Stream mit dem png zurück, den der Messenger in eine Datei speichert und verschickt.
Geht sowas auch für die DOIF cards - oder wäre das als Erweiterung machbar?

Beispielanwendung: Ich chatte mein Zuhause per Signal mit dem Schlüsselwort "Benzin" an - und bekomme den aktuellen Benzinpreis meiner Lieblingstankstelle mit einer kurzen Historienkurve um die Preis einschätzen zu können.

Gruß,
Jörg

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

xenos1984

Zitat von: Damian am 17 Januar 2022, 19:20:27
xenos1984 benutzt offenbar das RSS-Modul, um die Grafik weiterzuleiten:

https://forum.fhem.de/index.php/topic,118329.msg1135113.html#msg1135113

Das waren allerdings die ring, bar etc. Funktionen. Mit card ist es mir bisher noch nicht gelungen. Letztlich muss man ja irgendwie die fertige Grafik als SVG haben und diese in PNG konvertieren. In meinem Fall geht das recht einfach, indem ich im RSS-Layout die entsprechende ui_Table::ring Funktion aufrufe, die mir ein SVG liefert. Bei card hat man aber den Trigger-Ausdruck [device:reading:XcolY], der innerhalb von DOIF ausgewertet wird, aber nicht in beliebigem Perl-Code außerhalb des Moduls. Man muss also dafür sorgen, dass dieser Code in DOIF ausgewertet wird. Wie man das am besten anstellt, ist mir aber nicht wirklich klar...

Damian

Zitat von: xenos1984 am 17 Januar 2022, 22:42:48
Das waren allerdings die ring, bar etc. Funktionen. Mit card ist es mir bisher noch nicht gelungen. Letztlich muss man ja irgendwie die fertige Grafik als SVG haben und diese in PNG konvertieren. In meinem Fall geht das recht einfach, indem ich im RSS-Layout die entsprechende ui_Table::ring Funktion aufrufe, die mir ein SVG liefert. Bei card hat man aber den Trigger-Ausdruck [device:reading:XcolY], der innerhalb von DOIF ausgewertet wird, aber nicht in beliebigem Perl-Code außerhalb des Moduls. Man muss also dafür sorgen, dass dieser Code in DOIF ausgewertet wird. Wie man das am besten anstellt, ist mir aber nicht wirklich klar...

Das müsste über das uiState-Attribut gehen. Diejenigen, die z. B. Dashboard nutzen, definieren ihre Cardfunktion im uiState eines DOIF-Devices und greifen dann auf den Status des DOIF-Devices mit der Grafik: https://forum.fhem.de/index.php/topic,121004.msg1161405.html#msg1161405

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

xenos1984

Zitat von: Damian am 17 Januar 2022, 22:57:43
...und greifen dann auf den Status des DOIF-Devices mit der Grafik:

Wie würde man denn daraus die SVG-Grafik extrahieren, um sie zu konvertieren?

In RSS habe ich es mal testweise so eingebunden:


define di_test DOIF {}
attr di_test DOIF_Readings test:[device:reading:144col6]


RSS Layout:


img   1   1   1 svg data {ui_Table::card(ReadingsVal("di_test","test",0),"Temperature","temp_temperature",-35,35,240,0,"°C",undef,1,"240,,,,,,200")}