Comments (28)
Hallo,
ich kann das nicht richtig nachstellen...ode habe das noch nicht richtig verstanden.
1.) Wenn ich die UI auf einzeilig setze:
Kein Reading DDSelected vorhanden. Dies wird erst nach dem ersten ändern in der DropDown-Liste gesetzt -> Würde ich als BUG verstehen.
2.) Wenn ich nun in der Room-Ansicht (oder auch in der Detail-Ansicht...bei mir ist das verhalten gleich) den Kanal auswähle, wird nur das Reading DDSelected gesetzt. Erst wenn ein Befehl ausgeführt wird, wird das Reading Channel verändert.
So sollte es auch eigentlich sein...Das Reading Channel gibt ja nur den letzten Sende bzw. Empfangskanal wieder.
Gruß
Bismosa
from sd_keeloq.
Hallo,
ich drückte mich vielleicht ein wenig Informationsbehaftet aus :-D
- stell das UI bitte auf einzeilig mal
- schau vorher welche Readings vorhanden sind bzw. wie Ihre Zeitstempel sind
- wechselst du in die Raumansicht und drückst einen Kanal zur Steuerung
- wechselst in die Detailansicht und überprüfst die Readings nach dem Zeitstempel
Nun sollte der soeben gedrückte Kanal nicht aktualisiert sein oder das Reading fehlt wenn der Kanal noch nicht als Reading existent war.
Gruß
from sd_keeloq.
Hallo,
ich habe mal folgendes ergänzt:
if ($DDSelected eq ''){
readingsSingleUpdate($hash, "DDSelected", 1, 1);
$DDSelected = 1;
}
Hier ein größerer Auszug. Müsste in der Zeile 1217 sein...
if ($DDSelected eq ''){
readingsSingleUpdate($hash, "DDSelected", 1, 1);
$DDSelected = 1;
}
foreach my $rownr (1..$Channels) {
if ($DDSelected eq "$rownr"){
$html.= "<option selected value=".($rownr).">".($ChName[$rownr-1])."</option>";
} else {
$html.= "<option value=".($rownr).">".($ChName[$rownr-1])."</option>";
}
}
Dann wird, wenn kein Reading vorhanden ist, dieses erst angelegt und ggf. der erste Eintrag ausgewählt.
Ist es das?
Gruß
Bismosa
from sd_keeloq.
Hallo!
Jetzt habe ich den Fehler wohl gefunden. Eine Lösung ist mir aber noch nicht bekannt. Ich habe das mal nachgestellt und hier eine Frage gestellt:
https://forum.fhem.de/index.php/topic,102944.0.html
Dies liegt definitiv an der Änderung: #10
Gruß
Bismosa
from sd_keeloq.
Hallo @bismosa,
ich habe hier https://github.com/HomeAutoUser/Jaro/tree/fix_UI mal den aktuellen Branch gesetzt um hier die fixes für das UI anzugehen.
Die Aktualisierung von dem Kanal sollte kein Problem sein, das habe ich wo anders umgesetzt.
Also würde ich diesen Faden für die bisherigen UI Sachen nutzen um die Struktur nicht durcheinader zu wirbeln. Der Vorteil, wenn wir dann den Fix beheben, wird der Faden als angeschlossen markiert.
Auf gehts, Pö a Pö :-)
from sd_keeloq.
Hier nach der Stelle
my $changecmd = "cmd.$name=setreading $name DDSelected "; ## this line set DDSelected to value after change in web
$html.= "<select name=\"val.$name\" onchange=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$changecmd ' + this.options[this.selectedIndex].value)\">";
muss ein Reload der Browserseite passieren dann geht es. Bisher muss ich nur noch die Stelle finden wo ich dazwischen komme. An dieser Stelle geht es nicht direkt.
Das kannst du reproduzieren indem du den Kanal mal wechselst, dann F5 drückst im Browser und dann das Kommando absetzt. So kommt immer das Richtige Kommano mit dem richtigen Kanal.
Wir sind dran :-)
from sd_keeloq.
Hallo!
ja. Genau das ist es. Ein reload (aber bitte nicht der ganzen Seite, das habe ich schon probiert und lastet mein FHEM für mehrere Sekunden aus, wenn viele Browserfenster geöffnet sind) muss passieren, sobald das reading "DDSelected" geändert wird.
Ein Reload der ganzen Seite lässt sich erzwingen mit
FW_directNotify($filter, $fhemweb_instance, $javascript, "");
bzw.
FW_directNotify("FILTER=room=XXX", "#FHEMWEB:WEB", "location.reload('true')", "")
Aber das ist wirklich nicht schön bei vielen offenen Browserfenstern...
Soll wohl besser machbar sein mit einer separaten JavaScript Datei...und sich dort um die Aktualisierung kümmern.
Oder man baut das Kommando um. Man setzt das Reading, aber bei der Auswertung der Buttons wird auf das Reading geachtet...
Gruß
Bismosa
from sd_keeloq.
Um ein Reload kommen wir nicht drum herum. Ich teste mal und kenne das Problem der mehreren Fenster weil ich es aktuell wo anders. Es gibt die Möglichkeit nur das aktive tab zu aktualisieren.
from sd_keeloq.
Oder halt per JavaScript und den betreffenden Bereich aktualisieren...so wie es auch bisher (vor der Modifizierung) per LongPoll erfolgte und auch in allen anderen Devices funktioniert....
Aber wie auch schon im FHEM-Forum geschrieben...das ist neuland für mich...und ich hatte bisher noch keine Zeit und Gelegenheit mich da einzuarbeiten :(
Oder alternativ -> Den einen Sonderfall ignorieren und weiterhin im summaryFn die Anzeige machen. So hatte es ja auch sehr gut funktioniert. Es gibt dann halt die Darstellungsprobleme bei einzelnen Usern...
from sd_keeloq.
@bismosa , gibt es ne Variante, das wir hinter dem Kommando
$html.= "<select name=\"val.$name\" onchange=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$changecmd ' + this.options[this.selectedIndex].value)\">";
mal das eingefügt bekommten?
fhem("trigger WEB.* JS:location.reload(true)");
Ich finde nur nicht den Faden um den Syntax zu beseitigen :-D
from sd_keeloq.
Hallo!
Nein, das habe ich auch nicht geschafft mit in der Zeile einzufügen. Ich habe mal zum verdeutlichen/Testen einige Demos vorbereitet...
1.) So haben wir es bisher. Stark vereinfacht mit einem DropDown und einem Button:
99_Test_01-Wie jetzt.pm.txt
Der Effekt ist logischerweise der gleiche...aber eine einfache Grundlage zum testen :)
2.) Mit einem Reload:
99_Test_02-Reload.pm.txt
Hier habe ich den Setreading-Befehl im Dropdown auf einen "hidden" set-Befehl verändert. Hier wird dann auch das Reload angestossen.
Das funktioniert nur in der Raumansicht. Solange man in der Detailansicht ist, funktioniert dies nicht.
Ich bin auch dagegen. Wenn man etwas mehr im Raum (z.B. noch ein paar SVG-Statistiken) und dann ggf. noch mehrere Tabs offen hat ist (zumindest bei meinem Raspberry) FHEM für einige Zeit blockiert und mit dem neu Laden der kompletten Seiten beschäftigt!
3.) Mit einer Änderung in den Buttons:
99_Test_03-ohneAktualisierung.pm.txt
Hier braucht dann nicht mehr der Kanal mit dem Button verknüpft werden. Hier wird das Reading beim Ausführen des Befehls übernommen.
4.) Oder so wie andere es machen...mit einer externen JavaScript-Datei und einem Austausch nur des betreffenden HTMLs. Also eine eigene ID setzten und dann mittels
document.getElementById("element1").innerHTML = Neues HTML
...
Zitat von rudolfkoenig aus dem Forum:
Das erzeugte HTML muss die Aktualisierung in diesem Fall selbst uebernehmen.
Das kann (soweit ich es sehe) nur durch Verwendung von fhemweb_widgets erfolgen, wo updateLine (Beispiel dafuer ist fhemweb_readingsGroup.js oder fhemweb_readigsHistory.js, updateLine ist aber unerwuenscht/deprecated) oder updateDevs (Beispiel dafuer ist svg.js) aufgerufen wird.
Aber das habe ich auch alles noch nicht verstanden...
Gruß
Bismosa
from sd_keeloq.
Hallo!
Ich habe nochmal ein wenig "rumgespielt". Ich habe mal versucht den entsprechenden JavaScript Code ins HTML mit einzubauen und die Funktion denn mit neuem HTML-Code aufzurufen. Leider ist es mir nicht gelungen. Ich konnte bisher nur Text ersetzen.
99_Test_04-JavaScript.pm.txt
Gruß
Bismosa
from sd_keeloq.
@bismosa
sehe ich das richtig, das hier
Hier sollte eigentlich der geänderte HTML-Code erscheinen....
dann das Erscheinungsbild hinein soll mit den aktuellen Werten?
Ich sehe bei dem hin und her momentan noch nicht durch ;-)
from sd_keeloq.
Hallo!
Ja...so ist es. Aber auch das wäre wohl eher eine gebastelte Lösung. Wie gesagt andere machen das mit einer externen Javascript Datei...
Sorry für das Chaos.
Gruß
Bismosa
from sd_keeloq.
Das ist doch kein Chaos. Lieber einmal mehr gefragt und erläutert als "dumm" nichts wissen :-)
Ne externe Datei .... Ich kann mir nicht vorstellen das ALLE das so lösen. Es muss noch internas geben die man nicht richtig erklärt. Ich selbst benötige das ja schon bei 2 Modulen.
from sd_keeloq.
Das könnte ich mir auch nicht vorstellen. Entweder man löst es wie wir es vorher hatten oder halt wenn benötigt selbst.
Auch im FHEM Forum habe ich keinen Hinweis auf DIE Lösung bekommen. Und alle Module die ich mir angeschaut habe sind auch für mich als Laien fürchterlich kompliziert zu verstehen.
Als Beispiel hatte ich z.b. den Sonos-Player zur rate gezogen...oder auch readingsgroup.
Es gibt leider nicht viele UI-Beispiele...ich hätte da gerne mehr bedienmöglichkeiten...ich mag viele Knöpfe und wenig Einstellungen per Texteingabe :)
Gruß
Bismosa
from sd_keeloq.
@bismosa
Guten Abend, da ich in der Sache sehr Aktiv war in einem anderen Modul, nun bitte teste es mal :-)
Ich bin der Meinung nun geht der richtige Channel wenn du Ihn bedienst.
Teste mal bitte diese Variante https://github.com/HomeAutoUser/SD_Keeloq__old_Jaro/tree/fix_UI ob wir diese kleine Sache behoben haben ;-) ?
Mein Test verlief aus der Raumansicht und Detailansicht jeweils mit den dem geänderten Channel + Befehl.
LG Marco
from sd_keeloq.
Hallo!
Ich habe das gerade mal getestet. Es funktioniert, aber begeistert bin ich um ehrlich zu sein nicht.
Bitte nicht böse sein :) Ist vielleicht auch eine persönliche Meinung...nutzen würde ich den einzeiligen Modus vermutlich nie.
Meine Kritikpunkte an dieser Lösung:
- Sind mehrere Devices im Raum ist das Flackern durch das neuladen der Seite sehr auffällig
- Schlimmer noch, wenn ein oder mehrere SVG-Logs enthalten sind. Dann muss man nach jedem umschalten warten, bis die Seite neu angezeigt wird (Ich habe im gleichen Raum auch noch 2 SVG-Anzeigen)
- Sind mehrere Tabs geöffnet und die Auswahl wird verändert wird dies nur in dem einen Tab aktualisiert. Die anderen Senden noch den "alten" eingestellten Kanal (jedoch immer das, was angezeigt wird)
Wenn dann ein manueller Reload der Seite ausgeführt wird, wird der neu eingestellte Kanal verwendet...
Sorry...ich würde auch gerne "die" Lösung präsentieren und nicht einfach nur rummeckern... :)
Ich glaube ich würde vorerst die letzte Änderung wieder rückgängig machen bis eine "optimalere" Lösung gefunden wurde...
Gruß
Bismosa
from sd_keeloq.
Hallo,
Sind mehrere Devices im Raum ist das Flackern durch das neuladen der Seite sehr auffällig
Da könnte man die Zeit verkürzen.
Sind mehrere Tabs geöffnet und die Auswahl wird verändert wird dies nur in dem einen Tab aktualisiert. Die anderen Senden noch den "alten" eingestellten Kanal (jedoch immer das, was angezeigt wird)
Wenn dann ein manueller Reload der Seite ausgeführt wird, wird der neu eingestellte Kanal verwendet...
Das ist aber normal zum Teil. Ein Weg wäre, das man beim Klick auf das aktive Fenster ein Refresh vorab machen kann. Leider gibt es dafür bisher keine FHEM Umsetzung mit der Aktualisierung wie du selbst mitbekommen hast.
Schlimmer noch, wenn ein oder mehrere SVG-Logs enthalten sind. Dann muss man nach jedem umschalten warten, bis die Seite neu angezeigt wird (Ich habe im gleichen Raum auch noch 2 SVG-Anzeigen)
Überall wo SVGs drin sind, werden bei einem Neuladen aktualisiert und je größer / mehr svg Daten, desto länger benötigt das. Es ist ein normales Verhalten.
Ich werde nochmal weiter testen. Mich stört der Weg bisher nicht und finde es eigentlich als Lösungsansatz recht gut.
from sd_keeloq.
Hallo!
Sorry. Bitte meine "Kritik" nicht falsch verstehen. Ich habe großen Respekt vor Deiner Arbeit!
Das ist aber normal zum Teil. Ein Weg wäre, das man beim Klick auf das aktive Fenster ein Refresh vorab machen kann. Leider gibt es dafür bisher keine FHEM Umsetzung mit der Aktualisierung wie du selbst mitbekommen hast.
Doch. Das gibt es in FHEM. Nennt sich Longpoll. Bei der vorherigen Variante über "FW_summaryFn" lief es ja auch problemlos. Bei einer Änderung der Auswahl wurde sofort in allen geöffneten Tabs diese Auswahl übernommen.
In der "FW_summaryFn" wird bei der Änderung der "eigene" HTML-Code ausgetauscht. Nicht die ganze Seite neu geladen. Daher brauchen dann z.B. SVGs nicht neu geladen werden.
Genauer gesagt bei jeder Statusänderung wird der HTML-Code ausgetauscht.
So funktioniert es ja auch in allen Geräten, die z.B. die Glühbirne bei Statusänderung anzeigen.
Readingsgroup funktioniert ja auch nicht über die "FW_summaryFn" sondern hier wurde es auch in der "FW_detailFn" gelöst (jedoch leider mit einer externen JS Datei).
Wen ich die Tage die Zeit dazu finde, werde ich mir das nochmal genauer anschauen und ausprobieren...irgendwie muss sich das doch lösen lassen...
Gruß
Bismosa
from sd_keeloq.
Hallo!
So...ich saß nun die ganze Nacht da dran...mich wurmt dieses Problem.
Ich will ja auch nicht nur kritisieren ohne mich selbst damit zu beschäftigen :)
Ich habe nun mal eine Lösung gebastelt, die sogar funktioniert. Ob das die "optimale" Lösung ist, weiß ich allerdings nicht.
Ich habe mal einen Pull-Request erstellt... 30d75e4
Hier sind auch viele Kommentare von mir drin mit meinen Erkenntnissen.
Was nun passiert:
Bei Änderung der Auswahl wird nicht nur das Reading gesetzt, sondern auch ein Befehl zum aktualisieren des HTML.
Dies wird mit der Funktion "FW_directNotify" umgesetzt. Wenn das JavaScript auf der Seite vorhanden ist, wird der HTML-Code neu geladen und der Part auf der Seite ersetzt.
Vorteile:
- Wenn die Auswahl verändert wird, wird dies in allen geöffneten Tabs aktualisiert.
- Es wird nicht die ganze Seite neu geladen, sondern nur der eigene HTML-Code
- es wird auf eine externe JavaScript-Datei verzichtet
Nachteile:
- Nach dem setzen der Auswahl kommt es zu einer kleinen Verzögerung bis der HTML-Code neu generiert und ausgetauscht wird. Muss mal getestet werden, wie lange das wirklich dauert. Ich habe es nicht geschafft nach einer neuen Auswahl einen Button zu betätigen, der noch nicht aktuell war.
Hier gibt es bestimmt auch noch ein bisschen was zu optimieren. Ich habe nur keine Idee, wie wir neuen HTML-Code direkt ans JavaScript geben könnten.
Eine ganz andere Idee wäre noch, wenn man nicht das komplette HTML ersetzt, sondern im JavaScript nur die Befehle verändert, wenn die Auswahl geändert wurde. Das Spart die Abfrage.
Ich habe leider keine Zeit mich damit jetzt weiter auseinander zu setzen. Ich bin am Wochenende und vermutlich Anfang der Woche unterwegs. danach geht es weiter :)
Was meinst du dazu?
Gruß
Bismosa
from sd_keeloq.
Hallo,
ich schaue es mir an und danke ebenso für deinen Willen das zu lösen. Ich bin selbst dran dort einen Weg zu suchen. Aktuell werde ich noch neu gewonnene Erkenntnisse später daheim testen. Wir finden einen optimalen Weg denke ich. „Daumen hoch“
Gruß Marco
from sd_keeloq.
Hallo!
Manchmal dauert es halt etwas länger, bis eine Lösung gefunden wird. :)
Mein Wille das zu lösen ist ja nicht ganz uneigennützig...ich habe auch noch 2 andere Module, bei denen ich das gleiche Problem habe...
Schönes Wochenende
Gruß
Bismosa
from sd_keeloq.
Hallo!
Wollte das doch mal eben auf meinem Produktivem FHEM testen...und siehe da...eine Zeile hatte ich vergessen anzupassen...
Siehe: b16e77e
Gruß
Bismosa
from sd_keeloq.
Hallo Bismosa,
so einfach geht es nicht. Der Token muss mit eingearbeitet werden.
FHEMWEB WEB CSRF error: ne csrf_507447449257198 for client WEB_192.168.2.4_60633 / command get SD_Keeloq_9AF000 html. For details see the csrfToken FHEMWEB attribute.
Ich versuchte die Variable $FW_CSRF abzugreifen aber in unserem Code ist diese immer noch leer.
Wo anders habe ich diese im Einsatz und da ist diese gefüllt ohne großes kund tun.
Gruß
PS: Mich lässt die Codeflut immer noch ein wenig Buachschmerzen aufkommen und überlege nach einem anderen Weg.
from sd_keeloq.
Ja...es ist viel geworden...und wie ich finde sehr verwirrend. Was besseres ist mir nicht eingefallen...oder hat nicht funktioniert.
Mist...ich benötige den token nicht...daher hat der weg bei mir schon geklappt.
Gruß
Bismosa
from sd_keeloq.
Eigentlich sollte das #15 (comment) hier her :-D
from sd_keeloq.
Eigentlich sollte das #15 (comment)
hier her. Sorry. Hier nochmal:
Hallo!
Eigentlich könnte es mir ja egal sein...ich werde die einzeilige Variante vermutlich nie selbst nutzen.
Ich denke aber das auch diese Variante gerne benutzt werden wird...deswegen ist mir das dann doch nicht so egal :)
Wenn es als einziges Device im Raum ist, ist der Reload bei mir ebenfalls schnell.
Wenn ich das im gleichen Raum habe wie auch meine anderen 4 Fernbedienungen (mit mehrzeilig) ist der Reload schon deutlich spürbar.
Wenn ich dann noch mein SVG im Raum habe ist der Reload mit über 3sek. nervig.Ich hatte da auch noch eine Idee, die ich jetzt mal ausprobiert habe. Mal als Diskussionsgrundlage.
#18Hier wird jetzt bei der Änderung der Auswahl nur noch der Wert im Reading gemerkt, aber keine Weitere Aktion ausgeführt.
Wenn man einen Button betätigt, wird per JavaScript der FHEM Befehl abgesetzt...dabei wird vorher der Kanal aus dem Optionsfeld hinzugefügt.
Damit entfällt der Reload. Bei einem SeitenReload wird der zuletzt eingestellte Kanal wieder übernommen...und in anderen Fenstern bleibt es bei der Einstellung, die auch zumindest in meinem Test problemlos funktionierte.Lässt sich bestimmt noch verbessern. Kann ich Anfang der Woche mal probieren. Ist von Unterwegs nicht so einfach :)
Gruß
Bismosa
from sd_keeloq.
Related Issues (18)
- Entwicklung HOT 205
- Fehlerhafte Spaltenbreite HOT 9
- Serial Send HOT 4
- No shade button shown for groups HOT 3
- Gruppensteuerung ab dem 10. Motor funktioniert nicht. HOT 6
- ChannelAttribute Check HOT 4
- enjoy_motors_HS-8 / RIO Fernbedienung HOT 1
- Pearl Warning im FHEM Log HOT 16
- Version von 2020-12-02 bringt FHEM zum Absturz HOT 17
- attribute ignore missing HOT 1
- Pearl warning
- ToDo List HOT 13
- Umsetzung für OH mit dem Signalduion ? HOT 3
- your <Serial> xxxxxx is wrong! Please use only hexadecimal input with END 00. HOT 31
- MQTT Bridge einbauen / Befehle per MQTT senden / empfangen HOT 17
- Anleitung für FHEM ? Gibts keine oder bin ich blind ? HOT 3
- Shade ohne Funktion HOT 44
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sd_keeloq.