SVG Plot state - plotten von Zuständen

Begonnen von dabu81, 24 Oktober 2017, 20:37:46

Vorheriges Thema - Nächstes Thema

dabu81

Da von verschiedenen Usern bei mir angefragt wurde, wie ich den Zustand meines Mähroboters in einem Plot dargestellt habe, schreibe ich hier diese kleine Anleitung.
Selbstverständlich kann dieses Vorgehen für alle möglichen Arten von Zuständen verwendet werden.

Ich wollte den aktuellen Status meines Mower in einem Diagramm darstellen, das nicht aus Punkten sonder als Linien-Diagramm dargestellt wird. Hierzu bin ich foglendermaßen vorgegangen.

mowerAnubis ist mein R40li Mähroboter. Dessen Zustand wird im 20 Sektunden Takt aktualisiert.

Dummy definieren für den Status des Mähers (Aktualisierung im 20 sec Takt):
define dummy myMowerStatus

Notify wandelt den Status vom Mower in Zahlenwerte um (diese Notify löst bei jeder Änderung eines Readings von mowerAnubis aus, bei mir also alle 20 sec.):
define notifyMowerStatus notify mowerAnubis
{
my $var= ReadingsVal("mowerAnubis","state",0);;
if($var eq "offline") {fhem("set myMowerStatus 0");}
elsif($var eq "undef") {fhem("set myMowerStatus 1");}
elsif($var eq "schlafen") {fhem("set myMowerStatus 2");}
elsif($var eq "parken") {fhem("set myMowerStatus 3");}
elsif($var eq "home") {fhem("set myMowerStatus 4");}
elsif($var eq "laden") {fhem("set myMowerStatus 5");}
elsif($var eq "suche-base") {fhem("set myMowerStatus 6");}
elsif($var eq "suche") {fhem("set myMowerStatus 7");}
elsif($var eq "start") {fhem("set myMowerStatus 8");}
elsif($var eq "manuell") {fhem("set myMowerStatus 9");}
elsif($var eq "maehen") {fhem("set myMowerStatus 10");}
}


Dummy definieren für den Status der ins Logfile geschrieben wird (Aktualisierung nur wenn sich der Status ändert, oder alle 10 Minuten).
define dummy myMowerStatusLog

Ein Notify kopiert den Status myMowerStatus in den Status myMowerStatusLog nur wenn myMowerStatus sich ändert:
define notifyMowerStatusLog notify myMowerStatus
{
my $var= ReadingsVal("myMowerStatus","state",0);;{fhem("set myMowerStatusLog $var");}
}


zusätzlich wird alle 10 Minuten der Status myMowerStatus ins den Dummy myMowerStatusLog geschrieben, sonst ist bei unverändertem Status das Logfile leer und der Plot taugt nix:
define MowerLogTriggerAt at +*00:09:20 {
my $var= ReadingsVal("myMowerStatus","state",0);;{fhem("set myMowerStatusLog $var")}
}


FileLog für notifyMowerStatusLog:
define FileLog_myMowerStatus FileLog ./log/myMowerStatus-%Y-%m-%d.log myMowerStatusLog

für das FileLog wird ein SVG_Plot SVG_FileLog_myMowerStatus erstellt.
Range left und right: [-0.3:10.3]
Unter "Tics as ("Txt" val, ...)" bei left und right folgendes eintragen, dann werden statt den Zahlenwerten im Plot der Text angezeigt: ("offline" 0,"undef" 1,"schlafen" 2, "parken" 3,"home" 4,"laden" 5,"suche-base" 6,"suche" 7,"start" 8,"manuell" 9, "maehen" 10)

Im Anhang ist der SVG_Plot inklusive der Einstellungen zu sehen.

Viel Spass damit, über Rückmeldungen würde ich mich sehr freuen.

Gruß D@BU

bmwfan

Hallo dabu81,

habe es eingebunden und es funktioniert. Danke

Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Frank_Huber

Anstelle  per notify kannst auch direkt im svg plot die Zustände in Zahlenwerte umwandeln.

#logdb ETA_FBH_2_Heizpumpe:Puffer_Heizpumpe:::$val=($val=~'Ein'?21:20)
Bei wert Ein nimm 21, ansonsten 20.
Lasst sich beliebig erweitern.


Gesendet von meinem S3_32 mit Tapatalk


bmwfan

Hallo Frank_Huber,
puh, das ist mir im Moment zu hoch. Ich bin froh, dass der Graph so geklappt hat, auch wenn es umständlicher ist.
Grüße
Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

dabu81

@Frank_Huber:
Super Idee. Hab es gerade an einem einfacheren Beispeil ausprobiert (ein State, der 'on', 'off' annehmen kann). Jedoch musste ich statt $val $fld[n] für den Zugriff auf den Werte verwenden, wenn ich die Funktion im Feld "function" im SVG Editor eingeben will. Das Ergebis ist folgendes:
($fld[2]=~'on'?1:($fld[2]=~'off'?0:-1))

Wenn ich mal Zeit habe, werde ich den SVG Plot für meinen Mower anpassen  ;)

Grüße und Danke!

D@BU

Frank_Huber

Zitat von: bmwfan am 28 Oktober 2017, 21:01:36
Hallo Frank_Huber,
puh, das ist mir im Moment zu hoch. Ich bin froh, dass der Graph so geklappt hat, auch wenn es umständlicher ist.
Grüße
Jürgen
Wenn es für dich funktioniert is doch super.
Wollte es nur erwähnen da es zum Thema gehört.

Gibt immer mehrere Wege zum Ziel.
Werd die Tage mal noch durch die  Backups wühlen.
Dann poste ich ein Beispiel für mehrere verschiedene Zustände.



Gesendet von meinem S3_32 mit Tapatalk


Frank_Huber



Zitat von: dabu81 am 28 Oktober 2017, 21:45:52
Jedoch musste ich statt $val $fld[n] für den Zugriff auf den Werte verwenden, wenn ich die Funktion im Feld "function" im SVG Editor eingeben will. Das Ergebis ist folgendes:
($fld[2]=~'on'?1:($fld[2]=~'off'?0:-1))

Das ist vermutlich der Unterschied dblog zu FileLog. ;-)

Gesendet von meinem S3_32 mit Tapatalk


Mycal2

Zitat von: Frank_Huber am 28 Oktober 2017, 20:07:03
Anstelle  per notify kannst auch direkt im svg plot die Zustände in Zahlenwerte umwandeln.

#logdb ETA_FBH_2_Heizpumpe:Puffer_Heizpumpe:::$val=($val=~'Ein'?21:20)
Bei wert Ein nimm 21, ansonsten 20.
Lasst sich beliebig erweitern.


Gesendet von meinem S3_32 mit Tapatalk

An welche Stelle im GPLOT muss man das denn schreiiben? Ich nehme an unter ,,Funktions"
Was kommt aber dann an die anderen Stellen ?