FHEMWEB Aenderungen

Begonnen von rudolfkoenig, 22 Februar 2013, 18:45:25

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Habe folgende Aenderungen in FHEMWEB durchgefuehrt:

- Unterstuetzung fuer das "alte" Verzeichnisstruktur entfernt. Bei einem  alten updatefhem oder update (5.2 original, bzw. pre 5.3) wird nur das aktuelle update.pm heruntergeladen und ausgefuehrt, was wiederum ein upgrade auf das neue Verzeichnisstruktur durchfuehrt.

- Die interne Speicherung der Bilder-Verweise umgebaut, das sollte bei mehreren FHEMWEB Definitionen Startup-Zeit und etwas Speicher sparen.

- Die smallscreen und touchpad Attribute werden automatisch zu "stylesheetPrefix=smallscreen" usw. konvertiert, und diese Eigenschaft wird ab sofort anhand des stylesheetPrefix Namen geprueft. Damit ist es moeglich smallscreen/touchpad fuer darkstyle zu bauen (darksmallscreen, usw)

- ich habe das undokumentierte iconpath Attribut entfernt, wie auch das dokumentierte fwmodpath, um Code zu vereinfachen.

- Das im linkem Menu befindliche "Definition..." sollte ein FHEMWEB-unterstuetztes Anlegen von definitionen sein. Da ich seit einem Jahr damit nicht vorankam, habe ich es entfernt.

- Im linken Menu ein Link auf das Forum hinterlegt (wie gewuenscht auf eine Zeile mit Wiki), weiterhin gibt es ein neues Attribut "menuEntries" um hier weitere Links zu hinterlegen.

- das "Select icon" im Detailansicht ist etwas modifiziert, und es gibt zusaetzlich ein "Extend devStateIcon", um diesen Attribut einfacher zu erweitern.

- fhemweb.js: Falls man im Detailfenster ein Attribut auswaehlt, dann wird per AJAX das dazugehoerige Wert gefuellt. Mit dem gleichen Mechanismus wird auch der Slider im Detailfenster auf das aktuelle Wert nachjustiert. Slider wird per longpoll (detail & raumansicht) aktualisiert.

Ich habe es viel getestet, wuerde mich aber wundern, wenn ich nichts uebersehen haette: bitte Probleme im Fronteds Forum melden.

Eingecheckt und fuer sofortingen update bereitgestellt.


An alle Entwickler die fhem/CHANGED aendern: die Aenderungen finden immer am ENDE des aktuellen Abschnittes statt.

rudolfkoenig

Semantik von webCmd geaendert: bisher wurde das erste Kommando von webCmd beim click auf dem Status-Icon ausgefuehrt, das ist jetzt nicht mehr der Fall.

Um vom standard abweichende Kommandos beim Klick auf dem Icon auszufuehren muss man devStateIcon verwenden: mit dem neuen (optionalen) dritten Parameter kann man fuer jeden Status ein separates Befehl konfigurieren. Das zweite Parameter ist mit dieser Aenderung optional geworden. Idee:justme1968

Beispiel on->dim50%->off->on usw.:
attr rollade devStateIcon on::dim50% dim50%::off off::on

Die beschriebenen Aenderungen stehen per update zur Verfuegung.

rudolfkoenig

Die weblink Detail-Ansicht in FHEMWEB hat einen .gplot Editor bekommen:


(siehe Anhang / see attachement)


SVG-Plot-Erstellen Howto:

- FileLog definieren: Das FileLog muss alle Daten enthalten, die man in einem Plot darstellen will. In der Detail-Ansicht vom FileLog kann man dank eventTypes relativ einfach die benoetigten Daten (== regexps) zusammenklicken. EventType muss natuerlich Zeit gehabt haben, um die Events zu sammeln. Eine eventType Definition wird Teil der fhem.cfg ab der naechsten Version, das betrifft aber nur Neuinstallationen. "Alte Hasen" sollten eine eventType-Definition selbst anlegen, wenn sie diesen Feature verwenden wollen.

- nachdem das FileLog fertig definiert ist, solange warten, bis in der dazugehoerigen Datei genug Daten vorhanden sind.

- in der FileLog-Details auf "Create new SVG Plot" clicken, es wird ein neues weblink erstellt mit
eigener .gplot Datei, und man landet in der passenden Detail-Ansicht (siehe screenshot oben).

- die bisherigen Schritte entfallen beim Modifizieren eines alten weblinks, hier sollte man aber zuerst "set weblink copyGplotFile" durchfuehren, um eine eigene Kopie der .gplot Datei anzulegen, sonst werden evtl. die Aenderungen der .gplot Datei mit dem naechsten Update ueberschrieben. Der Befehl nimmt kein Argument, die .gplot-Datei wird mit dem Namen des weblinks erstellt.

- danach das Formular in der Detail-Ansicht des weblinks anpassen/ausfuellen, und die .gplot Datei schreiben. Das kann man auch Schritt-fuer-Schritt machen, die Aenderungen sollten nach jedem Schreiben (Write .gplot file) direkt sichtbar sein.

Achtung:
- nicht alle .gplot Features sind in dem Editor setzbar, insb. werden Linien ohne Label nicht angelegt bzw. geloescht.
- bei Fragen kann einem http://fhem.de/commandref.html#gnuplot-syntax weiterhelfen.
- man kann keine Linien anlegen, wenn die passenden Daten dazu nicht in der letzten 64k der Logdatei (etwa 1000 Zeilen) vorkommen.
- die .gplot Regexps werden direkt aus der Logdatei extrahiert, um diese per Dropdown anbieten zu koennen. Beim modifizieren existierender weblinks muss man vermutlich alle regexps neu aussuchen und setzen.

Fehlermeldungen bitte in der FRONTENDS Abteilung in einem neuen Thread melden, per update ist das Ganze ab morgen verfuegbar.

rudolfkoenig

longpoll ist ab sofort standardmaessig eingeschaltet, wem das nicht gefaellt, der muss es per
 attr WEB longpoll 0
ausschalten.

Nach eine Idee von Boris gibts jetzt ein longpollSVG Attribut (default aus), der ein refresh des betroffenen SVGs ausloest, falls ein "passendes" Event eintrifft. Da man im FileLog und .gplot beliebige Regexps angeben kann, und ich nicht die ganze Kette pruefen wollte, muessen die FileLog Filter (Spalte 2) bestimmten Bedingungen entsprechen, damit longpollSVG klappt: dieser Filter muss der Form deviceName oder deviceName.event oder deviceName.* sein. Mit dem .gplot Editor (siehe oben) kann man nur solche Filter setzen.

Leider wackelt die Anzeige je nach Browser merklich, elegant ist das noch nicht. Ich meine, dass eine optisch ansprechende Loesung nur durch eine Neuimplementierung der SVG.pm in JavaScript erfolgen kann.

Beides ab morgen per update.

Dr. Boris Neubert

Zitat von: rudolfkoenig schrieb am Mi, 19 Juni 2013 18:24Nach eine Idee von Boris gibts jetzt ein longpollSVG Attribut (default aus), der ein refresh des betroffenen SVGs ausloest, falls ein "passendes" Event eintrifft.

Das ist super. Ich freu' mich. Vielen Dank. Probiere das aus, sobald ich wieder zuhause bin.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Zitat von: Dr. Boris Neubert schrieb am Do, 20 Juni 2013 21:53
Zitat von: rudolfkoenig schrieb am Mi, 19 Juni 2013 18:24Nach eine Idee von Boris gibts jetzt ein longpollSVG Attribut (default aus), der ein refresh des betroffenen SVGs ausloest, falls ein "passendes" Event eintrifft.

Ich bringe es nicht zum laufen. Die .gplot-Datei habe ich mit dem gplot-Editor bearbeitet:

# Created by FHEMWEB, 2013-06-23 10:41:49
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 nomirror
set y2tics
set grid y2tics
set ylabel "brightness / units"
set y2label "brightness / units"

#FileLog 4:e.ext.bs.*::

plot "<IN>" using 1:2 axes x1y2 title 'Volume' ls l0 lw 1 with lines


Der Weblink ist so definiert:

define e.ext.bs.weblink weblink fileplot e.ext.bs.log:bs4:CURRENT
attr e.ext.bs.weblink alias Helligkeit
attr e.ext.bs.weblink room 1/Garten
attr e.ext.bs.weblink title sprintf("Helligkeit: %.1f (%.1f .. %.1f)",$data{currval1},$data{min1},$data{max1})


Am FHEMWEB-Gerät sind sowohl longpoll als auch longpollSVG als Attribute gesetzt.

Auf derselben Webseite wird damit die Anzeige des Sensors e.ext.bs aktualisiert, nicht aber der Plot (siehe Bild). Ich habe es auch bei keinem anderen Plot zum Funktionieren gebracht. Was mache ich hier falsch?

Viele Grüße
Boris

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

Ist wohl bei finalen "Aufraeumen" ein Bug reingekommen, das habe ich jetzt gefixed, bitte nochmal testen.

Dr. Boris Neubert

Zitat von: rudolfkoenig schrieb am So, 23 Juni 2013 15:08Ist wohl bei finalen "Aufraeumen" ein Bug reingekommen, das habe ich jetzt gefixed, bitte nochmal testen.

Habe mir die beiden von Dir geänderten Dateien weblink und SVG heruntergeladen, installiert, neu gestartet, und... es geht!

Danke.

Ich weiß jetzt auch, was Du mit "merklich wackeln" meinst. Warum meinst Du, daß das in einer Javascript-Implementierung besser wäre? Es liegt doch an der Zeit zum Aufbau des SVG-Objekts durch fhem auf dem Server, nicht wahr? Würde es nicht vielleicht so gehen, daß sich das Javascript nur den <svg>- oder darin den <defs>-Teil vom Server erst komplett neu beschafft und ersetzt?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

rudolfkoenig

> Warum meinst Du, daß das in einer Javascript-Implementierung besser wäre?

Weil man damit im Normalfall nur die Linien erweitern wuerde.
Vielleicht liegt das Wackeln an "embed", ich muss es mal ohne probieren, ist eber einiges an Aufwand.

rudolfkoenig

FHEMWEB verwendet ab sofort fuer alle Eingabefelder (<form>) die POST Methode, anstatt GET.
POST verwirrt weniger als GET, da z.Bsp. der Inhalt der editierten Datei nicht in der Browser-URL-Zeile steht.
GET wird auch weiterhin verstanden, und wird z.Bsp. fuer die diversen Links auch benoetigt.

Falls es irgendwelche Probleme verursachen sollte, bitte im separaten Thread in der Frontends Gruppe melden.

rudolfkoenig

Die weblink fileplot/dbplot Instanzen werden ab sofort nach SVG Instanzen konvertiert.
Diese Aenderung war noetig, um FHEMWEB von SVG (und FileLog) Sonderbehandlung zu befreien, bzw. die Weiterentwicklung (s.u.) zu ermoeglichen.

Ich hoffe dass es keine stoerenden Seiteneffekte hat, auch wenn das eine relativ grosse Aenderung ist. Plots mit DbLog konnte ich nicht testen, ich waere dankbar, wenn das jemand uebernimmt.

Plan: gnuplot Unterstuetzung wird entfernt, weiterhin will ich die Erstellung der SVG in Javascript implementieren: ich erhoffe dadurch signifikante Geschwindigkeit-Steigerung, insb. fuer langsamen Server-Hardware, und Features wie kontinuirliche updates der Grafiken. Danach wird die SVG Generierung in perl entfernt.

Fuer Feedback bitte ein separates Thread in der Frontends Gruppe verwenden.

rudolfkoenig

Hab cmdIcon hinzugefuegt:

ZitatLeerzeichen getrennte Auflistung von cmd:icon-name Paaren. Falls gesetzt, wird das webCmd text durch den icon gesetzt. Am einfachsten setzt man icons indem man "Extend devStateIcon" im Detail-Ansicht verwendet, und den Wert von devStateIcon nach cmdIcon kopiert.
Beispiel:

       
  • attr lamp cmdIcon on:control_centr_arrow_up off:control_centr_arrow_down