Anzeige der letzten Schaltevents in FHEMWEB

Begonnen von bads, 02 Mai 2014, 15:37:42

Vorheriges Thema - Nächstes Thema

justme1968

also die idee ist nicht von mir. ich sammle nur. (und auch das mit den extentions war von dir :) )

und egal was du es drehst: im gegensatz zu allen schaukeln hat mein patch funktioniert, hat alle ebenen von ganz einfach bis komplett konfigurierbar abgedeckt, hätte sich auf die minimal lösung abspecken lassen und hätte im gegensatz zu rudis version auch bei dir und deiner oma funktioniert.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

der-Lolo

die version über log 6 gefällt mir je mehr ich drüber nachdenke immer besser...
so könnte man ja auch den auslöser mitgeben und sich die events die eingetragen werden sauber aussuchen...
Manchmal weiss man bei euch beiden echt nicht wann ihr euch wirklich streitet - oder wann es gekabbel oder ironie ist...

betateilchen

Zitat von: der-Lolo am 03 Mai 2014, 12:08:44
oder wann es gekabbel oder ironie ist...

einfach: in 99,9% der Fälle ist es das :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

bads

#18
sorry Leute,

hatte nicht beabsichtigt das meine Frage so ausufert ;-) Meine ursprüngliches Ansinnen war es dies  in einem mehrzeiligen Textfeld in Fhemweb darzustellen und dann über ein notify jeweils (wie in einem Ringbuffer) mit den letzten Events zu füllen. Da es wohl nicht so etwas wie eine allgemeine Möglichkeit eigene Informationen  zur reinen Darstellung, wie eine Readonly-Textbox gibt, wollte jetzt mal ausprobieren so etwas über einen weblink einzubinden. ideal aus meiner Sicht wäre, wenn es eine Darstellungsmöglichkeit geben würde ein Logfile zu spezifizieren und die Anzahl der letzten x Zeilen die jeweils angezeigt werden sollen. Mit dem Unix-kommando tail sollte so etwas gehen und müsste halt nur bei einem Refresh (longpoll) jeweils aktualisiert werden. Da ich aber keine Ahnung von FHEMWEB habe, stehe ich etwas auf dem Schlauch, denn ein Device passt hier ja nicht?

guido
FHEM 5.5 auf Banana-PI, Raspberry PI mit FHEM2FHEM, ENOCEAN PI, ELTAKO FTK, ELTAKO FHF, HMLAN, HM-SEC-MDIR, HM-SEC-SC2, 1-Wire, Fussboden-Heizungssteuerung mit Selbstbau HM-Mod-Re-8 + Stellantriebe 230V

justme1968

das ganze über ein log files also erst raus schreiben und dann wieder einlesen zu lösen ist die schlechteste variante.

wenn doch schon alles in fhem da ist ist es besser das drekt zu verwenden und so wenig wie möglich umwege und overhead zu erzeugen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

#20
ich hab mal eine test version gebaut und bin am spielen.

die zusätzlichen events wenn man das ganze per readings macht sind wirklich nicht zu vernachlässigen. da rauscht ganz schön was durch den event monitor wenn man nichts optimiert.

das gilt auch für den update per longpoll. das scrollen durch neu schreiben aller sichtbaren zeilen hat genau das gleiche problem.

eine ressourcen schonende lösung würde das ganze wie der event monitor machen und nur neue zeilen zum browser senden und dort scrollen.

das ganze wäre dann im prinzip ein device das sich wie ein event monitor mit konfigurierbarem filter und größe verhält.

ich schau mal ob man den richtigen event monitor wieder verwenden kann.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

der-Lolo

Wow - das klingt toll..!
Ich bin sehr gespannt was da rauskommt...

justme1968

#22
here we go...

33_readingsHistory.pm ist ein normales fhem modul, fhemweb_readingsHistory.js muss nach .../www/pgm2

danach kannst du dir mitdefine <name> readingsHistory <device>:<readings> [<device>:<readings> [...]]ein history device definieren. <device> und <readings> sind jeweils reguläre ausdrücke. alles was matched wird in der history angezeigt.

<device> kann auch ein TYPE=xyz sein und <readings> auch einfach eine durch komma getrennte liste.

über das attribut rows kannst du konfigurieren wie viele zeilen die history umfassen soll.

das ganz sollte recht sparsam mir den ressourcen umgehen. es werden keine events erzeugt wenn das history device nicht auf dem monitor sichtbar ist und es werden immer nur die zusätzliche zeilen zum browser geschickt.

was noch nicht umgesetzt ist ist eine feste breite. d.h die anzeige ist zur zeit so breit wie die breiteste zeile. das kann man per stylesheet ändern.

was noch kommten könnte wenn es genug interesse gibt: ein attribut historyReadings für alle devices in dem man die default readings die in der history erscheinen sollen pro device konfguriert. im history device selber würde man diese liste dann ergänzen oder überschreiben.

gruss
  andre

edit1-3: die device namen sind jetzt (optional) links die man anklicken kann. mapping der device namen wie bei readingsGroup ist auch möglich. die history wird bei 'save' gespeichert und beim neustart wieder geladen.

edit4: fix für das problem das die liste beim öffnen eines raumes manchmal leer war

edit5: es gibt jetzt ein 'set <device> add ...' um eine zeile von hand hinzuzufügen und ein 'set <device> clear' um die history zu löschen

edit5: %DEVICE geht jetzt im mapping

edit6:
- es ist möglich ein history device zu definieren ohne einen device/reading parameter anzugeben. das device hängt sich dann nicht ins globale notify ein und lässt sich nur mit 'set <device> add' füllen.
- mit timestampFormat kann man das format des timestamp angeben. siehe perl POSIX strftime
- mit valueFormat kann man den string der für ein reading/event ausgegeben wird frei konfigurieren. bei undef wird diese zeile übersprungen.

edit7: notify order fix
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhainz

Echt super was du da gezaubert hast von sowas hab ich geträumt! :)
Bin gerade am rumspielen und mir ist aufgefallen das die Liste einen Neustart nicht überlebt. Kann man das noch speichern?

2 Ideen hätte ich noch:
mapping Attribut wie bei readingsGroups zum Umbennen
link Attribut um direkt zum device zu kommen.

Was meinst du dazu?

Grüße

justme1968

das habe ich mir alles schon überlegt. das meiste ist auch recht einfach.

kommt aber nur wenn es auch wirklich jemand benutzt :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhainz

Ich benutze es auf alle Fälle :)
Mal sehn was der-lolo sagt, aber ich bin begeistert

fhainz

#26
Mit der regexp komm ich noch nicht klar. Ich schaff es nicht nur das on in der history auszugeben.

22:41:28  sys_s0EingangAllgemein pin: on
Das müsste dann ja
sys_s0EingangAllgemein:pin:.on
sein oder? Es kommen aber immer on und off Ereignisse in die history.

Im event monitor sieht das so aus: 2014-05-03 22:45:43.525 dummy sys_s0EingangAllgemein pin: on

Hast du eine Idee was ich falsch mache?

Grüße

Edit:
Hin und wieder verschwindet auch die Liste beim aktualisieren oder beim history device öffnen (detail Ansicht). Kommt aber, denk ich, nur vor solange die Liste noch nicht vollständig ist.

justme1968

#27
die regexp gehen nur für device und reading namen. nicht für reading werte.

der code ist noch aus der readingsGroup. für die history könnte man das ändern. aber nur wenn du mir sehr gut erklärst warum du on haben willst und off nicht...

gruss
  andre

ps: ich hab das fhem modul eben noch mal ausgestauscht. die device namen sind jetzt links die man anklicken kann.

pps: das mapping der device namen geht jetzt auch.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

der-Lolo

Du hast wirklich flinke Finger - ich werd mir das morgen anschauen, bin schon gespannt.

justme1968

die liste wird jetzt beim 'save' auch gespeichert und beim starten wieder geladen.

gute nacht :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968