Dummy Variable in SVG Log anzeigen

Begonnen von frankyaye, 21 Mai 2024, 20:37:35

Vorheriges Thema - Nächstes Thema

frankyaye

Zunächst mein Leidensweg.
Ich habe mehrere Shelly zur Solarenergie Erfassung.
Daraus bilde ich mit einem notify die Summe:
define SolarSumme dummy
define SummeNeu notify shellySolarCarport450Ost {\
my $SolarP1=ReadingsVal("shellySolarTerrasse","power","0");;\
my $SolarP2=ReadingsVal("shellySolarCarport450Ost","power_0","0");;\
my $SolarP3=ReadingsVal("shellySolarCarport600W ","power_0","0");;\
my $SolarP4=ReadingsVal("shellySolarCarport600W ","power_1","0");;\
my $SolarSumme=$SolarP1+$SolarP2+$SolarP3+$SolarP4;;\
my $SolarSumme=$SolarSumme;;\#nur zum experimentieren
Log 5, "Wert ist: $SolarSumme";;\
fhem("set SolarSumme $SolarSumme");;\
}
das ganze landet in einem Log
define FileLog_shellyAlle FileLog ./log/Log_shellyAlle.log SolarSumme
setuuid FileLog_shellyAlle 6640fdea-f33f-cb70-b990-0ac31e33335f04c0
attr FileLog_shellyAlle room Solar
attr FileLog_shellyAlle userReadings SolarSumme

das Ergebnis sieht so aus:
2024-05-20_19:15:52 SolarSumme 26.23
2024-05-20_19:15:52 SolarSumme 26.23
2024-05-20_19:15:52 SolarSumme 26.23

Aber das SVG Log zeigt mir das nicht an.
Vermutlich weil mir der Doppelpunkt fehlt
SolarSumme: 26.23
Die Frage ist also, wie bekomme ich die Variable in das SVG Diagramm?



betateilchen

Du solltest den ermittelten Wert mit addLog korrekt ins Log schreiben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

frankyaye

Sorry,
aber ich komme nicht weiter.
attr FileLog_shellyAlle addLog SolarSumme:?????:60was kommt denn da rein?
oder
define a_actuator at +*00:01 {addLog("FileLog_shellyAlle","SolarSumme"))}funktioniert auch nicht.
Aber ohne Fehlermeldungen.

Beta-User

Kannst du mal die .gplot zeigen?

Wenn "das Ergebnis" aus dem ersten Beitrag so im Logfile steht, hängt es vermutlich an der Feldauswahl, das ist nicht "4", sondern "3" (oder wirf einen Blick auf "addStateEvent").

PS: dass da (mindestens) 3 (identische) Werte/Sekunde im Log landen, ist dir bewußt? Falls nein: du solltest ggf. den trigger im notify enger wählen oder könntest  ggf. das ganze gleich in eine (sauber getriggerte!) userReadings-Funktion am "letzten" Device verfrachten...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

frankyaye

#4
Hallo Beta User,
hier der .gplot
+# Created by FHEM/98_SVG.pm, 2024-05-21 20:15:29
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics
set y2tics
set grid
set ylabel "SummeSolar"
set y2label "Temperature"

#FileLog_shellyAlle 2:SolarSumme.*::
#FileLog_shellyAlle 2:SolarSumme.\x3a::

plot "<IN>" using 1:2 axes x1y2 title 'Line 1' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'lllll' ls l2 lw 1 with lines
und ja die ehrfachen Einträge kommen noch aus verschiedenen versuchen.  Einmal ein notify ohne filter:
define SummeNeu notify shellySolarCarport450Ost {\
my $SolarP1=ReadingsVal("shellySolarTerrasse","power","0");;\
my $SolarP2=ReadingsVal("shellySolarCarport450Ost","power_0","0");;\
my $SolarP3=ReadingsVal("shellySolarCarport600W ","power_0","0");;\
my $SolarP4=ReadingsVal("shellySolarCarport600W ","power_1","0");;\
my $SolarSumme=$SolarP1+$SolarP2+$SolarP3+$SolarP4;;\
Log 5, "Wert ist: $SolarSumme";;\
fhem("set SolarSumme $SolarSumme");;\
}
einmal in den userreadings eines filelog:
attr FileLog_shellySolarCarport450Ost userReadings my $SolarP1=ReadingsVal("shellySolarTerrasse","power","0");;;;\\
my $SolarP2=ReadingsVal("shellySolarCarport450Ost","power_0","0");;;;\\
my $SolarP3=ReadingsVal("shellySolarCarport600W ","power_0","0");;;;\\
my $SolarP4=ReadingsVal("shellySolarCarport600W ","power_1","0");;;;\\
my $SolarSumme=$SolarP1+$SolarP2+$SolarP3+$SolarP4;;;;\\
Log 5, "Wert ist: $SolarSumme";;;;\\
fhem("set SolarSumme $SolarSumme");;;;\
Aber so lange nichts im SVG steht dachte ich ich lasse es noch drin, und schaue später was am besten ist.
Eigentlich wäre ja bei jeder änderung des dummy, aber nicht öfter als alle 60 sec ganz gut für den Anfang.
Vielleicht auch zwei logs mit den min und den Maxwerten innerhalb von 5 Minuten. Aber eins nach dem andern. Noch kriege ich ja dieses "einfache" ding nicht hin. Dabei programmiere ich Beruflich, das ist aber komplett anders in der Beckhoff sps.

Beta-User

Also: Ein "normales" logfile, in dem "alles" erfasst wird, sieht in etwa so aus:

2021-01-03_13:18:44 ZWave_THERMOSTAT_20 temperature: 16.20 C
2021-01-03_13:24:44 ZWave_THERMOSTAT_20 dim 90
2021-01-03_13:24:44 ZWave_THERMOSTAT_20 reportedState: dim 90
2021-01-03_13:24:44 ZWave_THERMOSTAT_20 valve: 90
2021-01-03_13:32:44 ZWave_THERMOSTAT_20 temperature: 16.38 C
Wenn man sich jetzt ein "typisches" .gplot ansieht, wird in der Regel das "4. Datenfeld" herangezogen, Erläuterung siehe https://wiki.fhem.de/wiki/Plots_erzeugen#Welche_Daten_werden_dargestellt.

Ergo liegst du mit "2" vermutlich falsch, das sollte "3" sein - aber: Da du (lösgelöst von irgendeinem Reading) den "STATE" schreibst, kannst du nicht einfach so weitere Readings im selben LogFile erfassen, ohne das Risiko zu laufen, dass alles durcheinander kommt. Ergo würde ich entweder hergehen, und an dem "dummy" ein explizites Reading füllen ("setreading SolarSumme total xy") (bzw.: nein, würde ich nicht, weil "dummy"-Konstruktionen in der Regel Mist sind!), oder eben AN EINS der beteiligten DEVICES (aber nur Datenlieferanten!) eine userReadings-Anweisung anflanschen...

Am FileLog-Device dagegen macht das userReadings-Attribut schlicht keinen Sinn - wer oder was sollte das triggern? Und soll das FileLog sich selbst aufzeichnen?!? Schleifengefahr...

Zitat von: frankyaye am 23 Mai 2024, 23:26:46Noch kriege ich ja dieses "einfache" ding nicht hin.
Was du da versuchst, ist nicht unbedingt einfach, jedenfalls dann nicht, wenn man noch nicht vertraut ist in der "Event-Verarbeitungs-Denke", die in FHEM für das Loggen typisch ist.

Nochmal der Ablauf, wie er funktionieren sollte:

"shellySolarCarport450Ost" bekommt ein update auf "power_0" ((Teil-) Event)).
=> entweder
- userReadings anlegen an "shellySolarCarport450Ost", das auf genau dieses Reading als trigger beschränkt reagiert und die Gesamtsumme ermittelt, oder
- notify _mit diesem Trigger_ anlegen, das dir die Summe _als explizites Reading_ in ein (anderes als das triggernde!) Device schreibt.
Da kann man jeweils übrigens auch eine Prüfung auf signifikante Änderungen einbauen!

Das erzeugt einen weiteren Eintrag in der Eventverarbeitungs-Liste, den man dann wieder im nächsten Schritt aufzeichnen (loggen) kann.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files