SVG-Plot für Fibaro Roller Shutter FGRM-222

Begonnen von PNinBB, 27 Juni 2015, 19:47:21

Vorheriges Thema - Nächstes Thema

PNinBB

Seit mehreren Monaten arbeiten bei mir 3 Fibaro Roller Shutter FGRM-222 zeitgesteuert (sunrise/sunset) sehr zuverlässig.
Nun wollte ich entsprechende SVG-Plots über den jeweiligen Zustand (offen, geschlossen, bzw. halb-offen, o.ä.) erzeugen, scheitere aber an den unterschiedlichen Zustandseinträgen im entsprechenden Logfile.

. . .
2015-06-26_21:30:00 WZ_RL_FS on
2015-06-26_21:30:01 WZ_RL_FS power: 94.9 W
2015-06-26_21:30:16 WZ_RL_FS power: 0.7 W
2015-06-26_21:30:18 WZ_RL_FS dim 99
2015-06-26_21:30:18 WZ_RL_FS reportedState: dim 99
2015-06-26_21:30:18 WZ_RL_FS power: 0.7 W
2015-06-27_04:59:05 WZ_RL_FS energy:  0.1 kWh
2015-06-27_06:15:00 WZ_RL_FS off
2015-06-27_06:15:01 WZ_RL_FS power: 94.3 W
2015-06-27_06:15:17 WZ_RL_FS power: 0.7 W
2015-06-27_06:15:19 WZ_RL_FS off
2015-06-27_06:15:19 WZ_RL_FS reportedState: off
2015-06-27_06:15:19 WZ_RL_FS power: 0.7 W
2015-06-27_09:22:06 WZ_RL_FS power: 91.9 W
2015-06-27_09:22:21 WZ_RL_FS power: 0.7 W
2015-06-27_09:22:22 WZ_RL_FS dim 99
2015-06-27_09:22:22 WZ_RL_FS reportedState: dim 99
2015-06-27_09:22:22 WZ_RL_FS power: 0.7 W
2015-06-27_09:49:32 WZ_RL_FS on
2015-06-27_09:49:34 WZ_RL_FS dim 99
2015-06-27_09:49:34 WZ_RL_FS reportedState: dim 99
2015-06-27_09:49:34 WZ_RL_FS power: 0.7 W
2015-06-27_09:49:40 WZ_RL_FS off
2015-06-27_09:49:41 WZ_RL_FS power: 93.5 W
2015-06-27_09:49:58 WZ_RL_FS power: 0.7 W
2015-06-27_09:49:59 WZ_RL_FS off
2015-06-27_09:49:59 WZ_RL_FS reportedState: off
2015-06-27_09:49:59 WZ_RL_FS power: 0.7 W
2015-06-27_13:00:00 WZ_RL_FS basicValue 50
2015-06-27_13:00:01 WZ_RL_FS power: 92.7 W
2015-06-27_13:00:09 WZ_RL_FS dim 50
2015-06-27_13:00:09 WZ_RL_FS reportedState: dim 50
2015-06-27_13:00:09 WZ_RL_FS power: 0.7 W
2015-06-27_14:05:13 WZ_RL_FS energy:  0.1 kWh
2015-06-27_15:00:00 WZ_RL_FS off
. . .


Abgesehen von den "power" und "energy"-Einträgen, wird der Zustand durch "on", "off", "reportedState:...", "basicValue ...", "dim ..." beschrieben. Kurios scheint mir auch zu sein, dass ein und derselbe Zustand durch mehrere Logfileeinträge, eben mit diesen unterschiedlichen Kennworten, markiert wird.
Welche Angaben habe ich dann im SVG-Plot auszuwählen ? Welchen ich auch immer nehme, es erscheint nie ein vollständiges Zustandsbild. Was mir vorschwebt, ist ein einfaches Balkendiagramm mit der Höhe, die dem momentanen Zustand entspricht.
Gibt es eventuell dafür bereits einen "passenden" .gplot-File oder muss man einen dafür passenden regulären Ausdruck "zusammenbasteln"?
Für einen Tipp wäre ich sehr dankbar.
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

rudolfkoenig

Im SVG-Editor kann man mit dem Filter-Regexp nur nach einem Text suchen, wenn man mehrere haben will, dann muss man die .gplot selbst editieren, und man darf es mit dem SVG-Editor danach nie mehr speichern. So ein Regexp wuerde mAn in diesem Fall aber nicht helfen.


Mein Vorschlag ist ein userReading, der on und off zu Zahlen wandelt. Da es die aktuellen Events analysieren muss, ist es nicht ganz trivial, und hier ein (ungetester!) Vorschlag:
attr WZ_RL_FS userReadings openLevel { openLevelFn($hash) }

und openLevelFn in 99_myUtils.pm definieren als:

sub
openLevel($)
{
  my ($hash) = @_;
  my $e = deviceEvents($hash);
  map {
    return 100 if($_ =~ m/^on$/);
    return   0 if($_ =~ m/^off$/);
    return  $1 if($_ =~ m/^dim (\d+)$/);
  } @{$e};
  return "-";
}



Der Trick zum Schluss mit "-" funktioniert nur mit FileLog, DbLog generiert mWn Fehler, dafuer habe ich keine Loesung.


Eine andere Loesung ist per eventMap on zu dim 100 und off zu dim 0 zu wandeln, evtl. gibt es im User-Interface Abweichungen zum aktuellen Fall.


Noch eleganter waere, wenn 10_ZWave.pm zusaetzlich zu on und off auch ein dim 100/dim 0 Event generieren wuerde.

PNinBB

Danke für die schnelle Reaktion und die Tipps.
Ich tendiere zur "eleganteren Lösung" und werde mich mal mit "10_ZWave.pm" beschäftigen und dann hier berichten.
Schönen Sonntag noch !
Peter
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

krikan

Wenn Du eine "elegantere" Lösung ohne tiefgreifende Änderungen an 10_ZWave.pm möchtest, würde ich an deiner Stelle configReportsType auf FibarCommands umstellen. Dann eine neue parse-Zeile einbauen, dass für Rollladen auch das Reading position angelegt wird; hatte das nur für Lamellen eingebaut.

krikan

Anhängender Patch implemtiert für den FGRM-222 mit ReportsType Fibaro CC und Nutzung von Rolladen die parse-Zeile in CC MANUFACTURER_PROPRIETARY. Das Reading "position" enthält dann immer die prozentuale Position der Rollade.

Zudem habe ich an der Commandref auch noch andere Kleinigkeiten angepasst. Erwähnenswert ist eigentlich nur der Abschnitt zu "set wakeupInterval": Hier habe ich die bisher fehlende Info zur target-nodeId mit aufgenommen. Hier bin ich dann ins Grübeln gekommen: Sollte man den Befehl vielleicht so abändern, dass standardmäßig (ohne Angabe einer nodeId) ControllerNodeId als target-NodeId genutzt wird und nur bei expliziter Angabe eine andere nodeId genutzt wird?

flurin

#5
Zitat von: PNinBB am 27 Juni 2015, 19:47:21
...
Welche Angaben habe ich dann im SVG-Plot auszuwählen ? Welchen ich auch immer nehme, es erscheint nie ein vollständiges Zustandsbild. Was mir vorschwebt, ist ein einfaches Balkendiagramm mit der Höhe, die dem momentanen Zustand entspricht.
...

Einen ähnlichen Fall habe ich mit der "Function" (Plot Editor) gelöst:

Plot-File:

# Created by FHEM/98_SVG.pm, 2015-07-11 11:28:54
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 '<TL>'
set ytics
set y2tics
set grid ytics y2tics
set ylabel ""
set y2label "Status"
set yrange [-10:110]
set y2range [-10:110]

#FileLog_shutter 3:WZ_RL_FS.(on|off|dim):0:$fld[2]=~"on"?100:$fld[2]=~"off"?0:$fld[3]

plot "<IN>" using 1:2 axes x1y2 notitle ls l0 lw 1 with steps


rudolfkoenig

@Christian: hab dein Patch eingespielt.
Wg. optionalen Parameter: gerne, habe aber z.Zt. andere Prios, d.h. wenn du Lust hast ein Patch zu bauen, dann werde ich das uebernehmen.

krikan

@Rudi: Schaue ich mir an, wenn ich meine anderen ZWave-Fhem-Dauerbaustellen abgearbeitet habe. Btw: Mit den LowLevel-Routinen (resends,..) in 00_ZWDongle.pm lasse ich Dich jetzt auch in Ruhe  ;) , läuft bei mir problemlos.

PNinBB

@flurin:
Danke für deinen Hinweis:
Den Ausdruck
Zitat
#FileLog_shutter 3:WZ_RL_FS.(on|off|dim):0:$fld[2]=~"on"?100:$fld[2]=~"off"?0:$fld[3]
habe ich angepasst und nun funktioniert es wesentlich besser.
P.S.: Gibt es eigentlich eine gute Dokumentation für diese Plot-Routinen ? Gefunden habe ich nichts brauchbares.
Wie auch immer; auf jeden Fall: vielen Dank.
Peter
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

glompf

Werden eigentlich auch lokale Eingaben (über die Taster) im Logfile geloggt?

MichaelO

Moin,
ich hab seit gestern auch einen Fibaro Shutter in Betrieb und hätte die ähnliche Frage gehabt, also wie bekomme ich in ein Reading ausschließlich die Position als Zahlenwert.

Nun komme ich mit der Antwort von krikan nicht zurecht. Was muss ich mit CC MANUFACTURER_PROPRIETARY machen oder wo ist da was einzustellen? Ich habe auch gar kein Reading "Position".

nals:
   CFGFN
   DEF        d054ae9f 37
   IODev      ZWave_Stick_UZB
   LASTInputDev ZWave_Stick_UZB
   MSGCNT     70
   NAME       RS_WS_Rolladen
   NR         564
   STATE      off
   TYPE       ZWave
   ZWaveSubDevice no
   ZWave_Stick_UZB_MSGCNT 70
   ZWave_Stick_UZB_RAWMSG 000400250a32022144000000000000
   ZWave_Stick_UZB_TIME 2016-09-18 08:48:01
   homeId     d054ae9f
   isWakeUp
   lastMsgSent 1474180277.03083
   nodeIdHex  25
   Readings:
     2016-09-17 13:50:41   assocGroup_3    Max 1 Nodes ZWave_Stick_UZB
     2016-09-18 08:48:01   energy           0 kWh
     2016-09-17 13:48:04   model           FIBARO System FGR222 Roller Shutter Controller 2
     2016-09-17 13:48:04   modelConfig     fibaro/fgr222.xml
     2016-09-17 13:48:04   modelId         010f-0302-1000
     2016-09-18 08:31:19   power           0.0 W
     2016-09-18 08:31:19   reportedState   off
     2016-09-18 08:31:19   state           off
     2016-09-18 08:31:17   timeToAck       0.034
     2016-09-18 08:31:17   transmit        OK
Attributes:
   IODev      ZWave_Stick_UZB
   classes    MULTI_CHANNEL_ASSOCIATION MANUFACTURER_SPECIFIC VERSION CONFIGURATION ASSOCIATION POWERLEVEL METER SWITCH_MULTILEVEL SENSOR_MULTILEVEL SWITCH_BINARY MANUFACTURER_PROPRIETARY PROTECTION MARK METER SENSOR_MULTILEVEL MANUFACTURER_PROPRIETARY SCENE_ACTIVATION SWITCH_MULTILEVEL SWITCH_BINARY
   room       2.1_Werkstatt
   vclasses   ASSOCIATION:2 CONFIGURATION:1 MANUFACTURER_PROPRIETARY:1 MANUFACTURER_SPECIFIC:1 METER:2 MULTI_CHANNEL_ASSOCIATION:2 POWERLEVEL:1 PROTECTION:2 SCENE_ACTIVATION:1 SENSOR_MULTILEVEL:2 SWITCH_BINARY:1 SWITCH_MULTILEVEL:3 VERSION:1


Gibt es da einen Parameter, den man setzen muss, um die Position ohne die Anzeige on/off zu bekommen?

Danke
Michael

krikan

Hallo Michael!
Du musst den Positionsreport des FGRM-Aktors auf Fibar CC umstellen, damit das Reading position kommt:
set <device> configReportsType BlindPositionReportsSentToThe1
Gruß, Christian

MichaelO

Hi Christian,

danke für die Erklärung. Ich hatte den Parameter gesehen, aber wenn ich das Dropdown-Menü angeklickt hatte, war bereits ein blauer Haken bei 1. Somit dachte ich, dass dies der eingestellte Wert sei. Nach einem get configReportsType sprang der Eintrag dann auf den (wohl korrekten) Wert 0.

Nach einem set... funktioniert es nun.

Vielleicht wäre dies noch etwas, was in einem Update korrigiert werden könnte. Anscheinend steht das Dropdown-Menü falsch initialisiert auf 1, wenn man Geräte neu inkludiert, obwohl der gesetzte Wert eigentlich 0 ist.

Gruß
Michael

rudolfkoenig

ZitatAnscheinend steht das Dropdown-Menü falsch initialisiert auf 1, wenn man Geräte neu inkludiert, obwohl der gesetzte Wert eigentlich 0 ist.
Das Dropdown-Menue muss mit irgendetwas vorbesetzt sein, das Frontend weiss aber am Anfang nicht auf was es stehen soll. Dazu muesste ein "get xxx configAll" erst durchgefuehrt werden, und da das relativ viel Funkverkehr verursacht, haben wir es bei der Initialisierung bisher vermieden.

MichaelO

Alles klar. War nur etwas verwirrend. Wenn man es weiß, kann man damit umgehen und es beim nächsten mal manuell initialisieren.

Gruß
Michael