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
Hallo dabu81,
habe es eingebunden und es funktioniert. Danke
Jürgen
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
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
@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
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
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
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 ?