New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Geräteliste leer #408

Closed
dehell opened this Issue Sep 22, 2018 · 45 comments

Comments

Projects
None yet
@dehell

dehell commented Sep 22, 2018

RaspberryMatic-3.37.8.20180922-rpi3.zip
Beim Aufruf von Einstellungen Geräte kommt kurz eine Einblendung "Bitte warten, Konfigurationsdaten werden geladen" (oder so ähnlich, Fenster ist nur kurz zu sehen).
Danach bleibt die komplette Liste leer (weißer Bereich, auch kein Tabellenkopf).
Geprüft mit Firefox, Edge und Opera.
zwischenablage02

@AndynordSee

This comment has been minimized.

AndynordSee commented Sep 22, 2018

kann das Problem nicht verifizieren
RaspberryMatic-3.37.8.20180922-rpi3.zip mit Backup der RaspberryMatic 2.35.16.20180715.
hast du update oder neu auf gesetzt ?

@pedromania

This comment has been minimized.

pedromania commented Sep 22, 2018

I have the same issue. The device list in the "Settings"-menu is empty.
After flashing the Image with etcher I restored the backup made with 2.31.25.20180428.

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 22, 2018

Bitte mal die Javascript Konsole des Browsers checken. Es kann gut sein das dort Fehler gemeldet werden die das Problem erklären. Siehe https://homematic-forum.de/forum/viewtopic.php?p=456335#p456335

@dehell

This comment has been minimized.

dehell commented Sep 22, 2018

webui.js?_version_=3.37.8.20180922:8946 Uncaught TypeError: Cannot read property 'DUTY_CYCLE' of null
    at klass.updateStatus (webui.js?_version_=3.37.8.20180922:8946)
    at klass.updateDeviceStatus (webui.js?_version_=3.37.8.20180922:9430)
    at klass.enter (webui.js?_version_=3.37.8.20180922:16105)
    at klass.enter (webui.js?_version_=3.37.8.20180922:6337)
    at klass.eval [as m_callback] (eval at initialize (webui.js?_version_=3.37.8.20180922:15037), <anonymous>:28:99)
    at klass.ready (webui.js?_version_=3.37.8.20180922:5985)
    at webui.js?_version_=3.37.8.20180922:8217
    at webui.js?_version_=3.37.8.20180922:19281
    at XMLHttpRequest.xhr.onreadystatechange (webui.js?_version_=3.37.8.20180922:5763)
@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 22, 2018

Danke, das ist wohl Deckungsgleich wie im Forum.

Kann jemand bei dem das Problem auftritt mal folgende Änderung probieren und schauen ob das bereits das Problem behebt?

--- /www/webui/webui.js
+++ /www/webui/webui.js
@@ -9426,7 +9426,8 @@ DeviceList = Singleton.create({
     {
       var device = this.devices[id];
       var deviceStatus = homematic("Device.listStatus", {"id": device.id});
-      device.updateStatus(deviceStatus, _rssiInfoHmRF_);
+      if (deviceStatus !== null && typeof(deviceStatus) !== 'undefined')
+        device.updateStatus(deviceStatus, _rssiInfoHmRF_);
     }
   },

@jens-maus jens-maus added the important label Sep 22, 2018

@weinberger

This comment has been minimized.

weinberger commented Sep 22, 2018

Ich hatte das gleiche Problem.

Diese Änderung behebt das Problem.

Danke

@guny74

This comment has been minimized.

guny74 commented Sep 23, 2018

Hallo,

auch ich hatte das Problem und die Anpassung hat das Problem auch bei mir behoben.
Danke für die schnelle Lösung.

Gruss

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

Das hört sich gut an! Ich würde gerne aber noch verstehen wollen bei welchem Gerät aus der Geräteliste es hier genau zu besagtem Problem kommt damit ich rausbekomme wieso, weshalb, warum?!? Kann hier jemand mal einfach einen else Zweig an das if() machen und da via console.log(device.id); die ID des Gerätes ausgeben das den NULL wert provoziert.

@Huttmann

This comment has been minimized.

Huttmann commented Sep 23, 2018

Leider habe ich nicht genug Ahnung um die Änderung umzusetzen, was ist gemeint, die Datei webui.js editieren??

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

Die die das Problem betreffen und helfen wollen es dauerhaft zu beseitigen, bitte folgende Änderung in der Datei webui.js vornehmen:

--- /www/webui/webui.js
+++ /www/webui/webui.js
@@ -9426,7 +9426,10 @@ DeviceList = Singleton.create({
     {
       var device = this.devices[id];
       var deviceStatus = homematic("Device.listStatus", {"id": device.id});
-      device.updateStatus(deviceStatus, _rssiInfoHmRF_);
+      if (deviceStatus !== null && typeof(deviceStatus) !== 'undefined')
+        device.updateStatus(deviceStatus, _rssiInfoHmRF_);
+      else
+        console.log("NULL-Device: " + device.name + " (" + device.id + ") - " + device.typeName);
     }
   },

Und dann bitte in der Javascript-Konsole des Browsers schauen was als "NULL-Device" ausgegeben wird. Und dann das hier bitte melden damit ich verstehe was wohl der Grund ist für den Fehler.

@guny74

This comment has been minimized.

guny74 commented Sep 23, 2018

Hallo,

also bei mir wird folgendes ausgegeben....

NULL-Device: HMW-RCV-50 (1214) - HMW-RCV-50.

Hoffe es hilft.

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@guny74 Ah, das ist eine Wired Komponente. Das habe ich natürlich selbst nicht :) Vmtl. liegt es daran. Kannst du mal bitte den Inhalt deiner /etc/config/InterfacesList.xml Datei zeigen?

@guny74

This comment has been minimized.

guny74 commented Sep 23, 2018

Hallo,

also ich habe auch keine "Wired" Komponenten. Habe gestern nur das Upgrade auf die letzte Version gemacht...

Die Komponente ist die "HMW-RCV-50 / Virtuelle Fernbedienung (drahtgebunden)".
Ist das nicht genauso wie "HM-RCV-50 BidCoS-RF / Virtuelle Fernbedienung (drahtlos)", nen virtuelles Standardgerät ?


<?xml version="1.0" encoding="utf-8" ?> 
<interfaces v="1.0">
	<ipc>
	 	<name>BidCos-RF</name>
	 	<url>xmlrpc_bin://127.0.0.1:2001</url> 
	 	<info>BidCos-RF</info> 
	</ipc>
	<ipc>
	 	<name>VirtualDevices</name>
	 	<url>xmlrpc://127.0.0.1:9292/groups</url> 
	 	<info>Virtual Devices</info> 
	</ipc>
	<ipc>
	 	<name>HmIP-RF</name>
	 	<url>xmlrpc://127.0.0.1:2010</url> 
	 	<info>HmIP-RF</info> 
	</ipc>
	<ipc>
	 	<name>CUxD</name>
	 	<url>xmlrpc_bin://127.0.0.1:8701</url> 
	 	<info>CUxD</info> 
	</ipc>
</interfaces>

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@guny74 Danke für die Info. Dann liegt das doch an was anderem. Dann bitte mal folgenden HMScript unter "Skript testen" ausführen:

  var device = dom.GetObject(1214);
  if (device)
  {
    var interface = dom.GetObject(device.Interface());

    Write("ID {" # device.ID() # "}");
    Write(" NAME {" # device.Name() # "}");
    Write(" ADDRESS {" # device.Address() # "}");
    Write(" INTERFACE {"# interface.Name() # "}");
  }

Und bitte das Ergebnis hier zeigen.

@guny74

This comment has been minimized.

guny74 commented Sep 23, 2018

@jens-maus : Ergebnis ist

ID {1214} NAME {HMW-RCV-50} ADDRESS {BidCoS-Wir} INTERFACE {BidCos-Wired}

image

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@guny74 Komisch das du überhaupt dieses Gerät hast obwohl du ja kein HomeMatic-Wired hast?!? Eigentlich sollte ein Gerät "HMW-RCV-50" nicht existieren bei dir. Aber gut. ich schau mal was ich da anpassen kann um sowas abzufangen.

@guny74

This comment has been minimized.

guny74 commented Sep 23, 2018

@jens-maus :

Wäre mal interessant, ob bei den anderen Usersn, die das Problem haben, auch nur diese "Virtuelle Wired Komponente" vorhanden ist.

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@guny74 So, ich denke ich habe einen "besseren" Patch der das ursprüngliche Problem beheben sollte (das du geräte in deiner Liste hast für die es kein Interface gibt):

--- /www/api/methods/device/liststatus.tcl
+++ /www/api/methods/device/liststatus.tcl
@@ -42,7 +42,11 @@ if { ![info exists device(NAME)] } then {
 # get device status information
 #
 set url [getIfaceURL $device(INTERFACE)]
-array set valueset [xmlrpc $url getParamset [list string "$device(ADDRESS):0"] [list string VALUES]]
+if { $url != "" } then {
+  array set valueset [xmlrpc $url getParamset [list string "$device(ADDRESS):0"] [list string VALUES]]
+} else {
+  array set valueset {}
+}
 
 #
 # form output JSON

D.h. bitte mal den ursprünglichen Patch der /www/webui/webui.js Datei rückgängig machen und nur diese liststatus.tcl wie angegeben patchen. Dann sollte hoffentlich das Problem auch behoben sein.

@pedromania

This comment has been minimized.

pedromania commented Sep 23, 2018

Hallo Jens,
Die Änderung der webui.js hat bei mir keine Lösung gebracht (und keinen Output in der Konsole beim "else" Statement).
Die Änderung der liststatus.tcl hat das Problem bei mir behoben.
Ich habe gefühlt 40 Geräte; der Aufbau der Seite hat ca 4 sec. gedauert.

Ich habe keine WIRED und keine IP-Komponenten.

Danke!

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@pedromania Danke für das verifizieren das der Patch an liststatus.tcl das finale Ergebnis liefert. Ich würde aber gerne dich noch bitten doch in dem neu hinzugefügten else { } das folgende Statement hinzuzufügen:

exec echo "$device(ID) $device(NAME) $device(ADDRESS) $device(INTERFACE)" >>/tmp/blah

Und dann bitte die Geräteliste aufrufen und danach in das /tmp Verzeichnis auf RaspberryMatic schauen nach einer Datei blah und dann den Inhalt davon hier zeigen. Das würde mir helfen zu verstehen warum sich das ganze bei dir wieder etwas anders verhält als bei @guny74

jens-maus added a commit that referenced this issue Sep 23, 2018

added some additional check for empty URL parameter in liststatus.tcl…
… so that we catch strange config problems with devices for which no valid interface definition exist and thus result in empty device list being displayed instead. This refs #408.
@guny74

This comment has been minimized.

guny74 commented Sep 23, 2018

@guny74 So, ich denke ich habe einen "besseren" Patch der das ursprüngliche Problem beheben sollte (das du geräte in deiner Liste hast für die es kein Interface gibt):

--- /www/api/methods/device/liststatus.tcl
+++ /www/api/methods/device/liststatus.tcl
@@ -42,7 +42,11 @@ if { ![info exists device(NAME)] } then {
 # get device status information
 #
 set url [getIfaceURL $device(INTERFACE)]
-array set valueset [xmlrpc $url getParamset [list string "$device(ADDRESS):0"] [list string VALUES]]
+if { $url != "" } then {
+  array set valueset [xmlrpc $url getParamset [list string "$device(ADDRESS):0"] [list string VALUES]]
+} else {
+  array set valueset {}
+}
 
 #
 # form output JSON

D.h. bitte mal den ursprünglichen Patch der /www/webui/webui.js Datei rückgängig machen und nur diese liststatus.tcl wie angegeben patchen. Dann sollte hoffentlich das Problem auch behoben sein.

Hallo,

habe ich gemacht und es funktioniert immer noch.

Danke

Gruss

@FraatRamski

This comment has been minimized.

FraatRamski commented Sep 23, 2018

I can report the same issue

@FraatRamski

This comment has been minimized.

FraatRamski commented Sep 23, 2018

Habe das mal laufen lassen

var device = dom.GetObject(1214);
if (device)
{
var interface = dom.GetObject(device.Interface());

Write("ID {" # device.ID() # "}");
Write(" NAME {" # device.Name() # "}");
Write(" ADDRESS {" # device.Address() # "}");
Write(" INTERFACE {"# interface.Name() # "}");

}

ID {1214} NAME {_Fernbed Kabel} ADDRESS {BidCoS-Wir} INTERFACE {BidCos-Wired}

Ich habe keine Wired Komponenten

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@FraatRamski Die Lösung ist doch hier schon gepostet worden. bitte mal den Patch für die liststatus.tcl anwenden und dann schauen ob das Problem damit verschwindet.

@pedromania

This comment has been minimized.

pedromania commented Sep 23, 2018

Hallo Jens,
Ich bin jetzt unterwegs.

Ich führe das heute Abend aus und melde mich dann.

@mdzio

This comment has been minimized.

Contributor

mdzio commented Sep 23, 2018

Anmerkungen: Die virtuellen Wired-Taster sind bei erst jetzt (?) wieder in der Geräteliste aufgetaucht. Auf der CCU2 waren sie nicht in der Geräteliste. Mein Projekt begann auf einer CCU1, die natürlich die virtuellen Wired-Taster besaß.

Der Patch von /www/webui/webui.js hat bei mir nicht funktioniert.

Der Patch von /www/api/methods/device/liststatus.tcl funktioniert.

Es wird in /tmp/blah Folgendes ausgegeben:

1214 Virtuelle Taster (Wired) BidCoS-Wir BidCos-Wired
@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@mdzio Danke für die Info. Das deckt sich dann mit @guny74. Jedoch interessiert mich die Ausgabe von @pedromania hier da er ggf. ein etwas anders gelagertes Problem hat. Und das das Problem bei Umsteigern von CCU1 auftritt macht natürlich Sinn. Dort hatte man ja per se BidCos-Wired und damit automatisch den Virtuellen Taster für Wired.

@jens-maus jens-maus added this to the 3.x.x.20181027 milestone Sep 23, 2018

@TobiasSt78

This comment has been minimized.

TobiasSt78 commented Sep 23, 2018

Hallo Jens,
tolle Arbeit!!! Der liststatus.tcl Patch funktioniert bei mir auch.

Inhalt von blah:
(ID) (NAME) (ADDRESS) (INTERFACE)

Das andere Skript ergibt:
ID {1214} NAME {CCU_Kabel} ADDRESS {BidCoS-Wir} INTERFACE {BidCos-Wired}

Wired habe ich, und zwar nicht zu knapp.

Dazu habe ich auch

  • virtuelle CuxD Geräte,
  • Homematic Virtual Interface Geräte

Gruß, Tobias.

@FraatRamski

This comment has been minimized.

FraatRamski commented Sep 23, 2018

Hallo,
Patch von liststatus.tcl hat bei mir funktioniert. Allerdings dauert das laden der Geräte 11 Sekunden! (105 Geräte). Ich habe das Backup der letzten Raspi Version wieder eingespielt, das laden dort dauer nur 1-2 Sekunden.

LG Fraat

@dehsgr

This comment has been minimized.

dehsgr commented Sep 23, 2018

Ja, auch ich konnte feststellen, dass das Laden der Seite spürbar länger dauert. Gerade wenn man viel in den Geräten unterwegs ist, dann macht sich das doch deutlich bemerkbar. Klar kann man natürlich damit argumentieren, dass das ja nicht so häufig vorkommt, aber wenn es mal so ist, wird das eine nervige Angelegenheit.

Kann man für die neue Anzeige die Daten nicht irgendwie nachträglich asynchron beschaffen und dann in der Spalte nachreichen (z.B. via Ajax)? Dann wäre das ursprüngliche, schnelle Laden sichergestellt und dennoch dieses tolle neue Feature vorhanden...

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@dehsgr Na dann hinsetzen und aufbauend auf meinem Patch eine Erweiterung schreiben und dann als PullRequest einreichen!

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 23, 2018

@FraatRamski Also ich hab da andere Erfahrungen gemacht. Nur das erste frische Laden drr Geräteliste scheint länger zu dauern. Jedes erneuern der Liste hingehen sollte fast so schnell sein wie in der alten Version. Allerdings ist das hier ein Bugtracker und kein Diskussionsforum und insofern erübrigt sich zumindest hier weitere Diskussionen darüber.

@dehsgr

This comment has been minimized.

dehsgr commented Sep 23, 2018

@jens-maus ich kann Deine Erfahrung bestätigen. Insoweit ist die Ladezeit für mich okay. Wenn ich die Zeit übrig hätte, würde ich mich am Projekt beteiligen (hätte ich dann auch schon längst getan; evtl. wird es in der Zukunft etwas), aber momentan lässt es meine Zeit einfach nicht zu. :'(

@pedromania

This comment has been minimized.

pedromania commented Sep 23, 2018

Habe das else-statement in der liststatus.tcl durchgeführt.

Das Ergebnis der /tmp/blah:
19270 HM-LC-RGBW-WM HUEGROUP001 HUEGROUP001 HVL
19340 HM-LC-RGBW-WM HUEGROUP000 HUEGROUP000 HVL
19410 HM-LC-RGBW-WM HUEGROUP002 HUEGROUP002 HVL

Es sind somit virtuelle HVL-Devices (https://github.com/thkl/Homematic-Virtual-Interface/tree/master/addon/hvl).

@dehell

This comment has been minimized.

dehell commented Sep 24, 2018

Kann mir bitte jemand helfen, wie ich den Patch einspiele? Habe gestern versucht, die Datei mit WinSCP direkt zu editieren, konnte sie aber nicht abspeichern (readonly). Ich bin als root angemeldet, und da stehen die Rechte der tcl-Datei doch auf rw. Auch über putty bin ich zwar als root auf das System gekommen, konnte die liststatus.tcl aber nicht ändern.
Oder kann / darf man dort generell nicht ändern und muss irgendwie über den patch-Befehl gehen (den ich auch noch nie benutzt habe...). Bin eher Anwender, deshalb wäre Hilfe wilkommen :-)

@pedromania

This comment has been minimized.

pedromania commented Sep 24, 2018

Mach mal, bevor Du die Datei editierst, Folgendes in der shell:
Dateisystem read only : Mount -o remount,ro /

und nach dem Editieren:
Dateisystem read write: Mount -o remount,rw /

@dehell

This comment has been minimized.

dehell commented Sep 24, 2018

@pedromania Danke, hat geklappt (ist wohl verdreht :-) )

@StefanGubler

This comment has been minimized.

StefanGubler commented Sep 24, 2018

Ich warte auf den neuen Release. Danke

@StefanGubler

This comment has been minimized.

StefanGubler commented Sep 24, 2018

Ich hatte denselben Fehler und der Patch funktioniert.
Aber bei mir sind es einige Geräte, welche keine RSSI Anzeige haben.
Vermutlich alle Geräte, welche sich seit dem Start der CCU/Raspberrymatic nicht gemeldet haben.
z.B, alle Rauichmelder HM-Sec-SD2.

Das Laden der Geräte Seite geht nun immer langsamer. Da bei jedem Aufbau der Geräteliste diese Daten gelesen werden und bei vielen Geräten ist das sehr nervig.
Vorschlag: Die Einstellungen der Geräte nicht als neue Webseite darstellen, sondern als iFrame, Popup oder sonst wie, so dass nach dem schliessen der Geräteeinstellung nicht immer die ganze Liste gelesen werden muss und das Geräte wieder gesucht werden muss in der Liste.

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 24, 2018

@StefanGubler Na dann implementiere es mittels iFrame&Co und stell ein PullRequest zur Aufnahme der Änderungen.

@StefanGubler

This comment has been minimized.

StefanGubler commented Sep 24, 2018

Leider bin ich kein Webprogrammierer, beschäftige mich mit Datenbanken und anderen Applikationen und Application-Servers. Ich würde gerne, wenn ich könnte. ich sehe aber eigentlich EQ-3 mehr in der Pflicht.

@libertyx82

This comment has been minimized.

Contributor

libertyx82 commented Sep 24, 2018

Dir ist aber schon klar, dass die Anzeige der RSSI Werte etc. kein von eq-3 hinzugefügtes Feature ist?

@kekzmobile

This comment has been minimized.

kekzmobile commented Sep 25, 2018

Ich habe ebenfalls Probleme mit dem Laden der Geräteliste
Der Patch von /www/api/methods/device/liststatus.tcl funktionierte nicht

Hier meine liststatus.tcl: Vielleicht habe ich etwas verkehrt editiert

proc getIfaceURL {interface} {
  global INTERFACE_LIST
  if {[info exists INTERFACE_LIST($interface)]} {
    array set ifaceList $INTERFACE_LIST($interface)
    return $ifaceList(URL)
  } else {
    return ""
  }
}

set script {
  var device = dom.GetObject(id);
  if (device)
  {
    var interface = dom.GetObject(device.Interface());

    Write("ID {" # device.ID() # "}");
    Write(" NAME {" # device.Name() # "}");
    Write(" ADDRESS {" # device.Address() # "}");
    Write(" INTERFACE {"# interface.Name() # "}");
  }
}

array set device [hmscript $script args]                            
                                            
@@ -42,7 +42,11 @@ if { ![info exists device(NAME)] } then {   
  jsonrpc_error 501 "device not found"  
}                               

#
# get device status information
#
set url [getIfaceURL $device(INTERFACE)]
if { $url != "" } then {
  array set valueset [xmlrpc $url getParamset [list string "$device(ADDRESS):0"] [list string VALUES]]
} else {
  array set valueset {}
}

#
# form output JSON
#

set result "\{"
append result "\"ID\":[json_toString $device(ID)]"
append result ",\"NAME\":[json_toString $device(NAME)]"
append result ",\"ADDRESS\":[json_toString $device(ADDRESS)]"
append result ",\"INTERFACE\":[json_toString $device(INTERFACE)]"
foreach key [array names valueset] {
  append result ",\"$key\":[json_toString $valueset($key)]"
}
append result "\}"

jsonrpc_response $result
@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 25, 2018

@kekzmobile Ja, du hast da einen Fehler gemacht. Einfach die liststatus.tcl von hier herunterladen und drüberkopieren (https://github.com/jens-maus/RaspberryMatic/blob/master/buildroot-external/patches/occu/0038-WebUI-DeviceOverview-StatusColumn/occu/WebUI/www/api/methods/device/liststatus.tcl)

.. oder einfach bis zum Wochenende warten dann bringe ich eine neue version mit den fixes raus.

@jens-maus

This comment has been minimized.

Owner

jens-maus commented Sep 25, 2018

Da das problem mit der leeren Geräteliste für die nächste Version bereits behoben ist schliesse ich dieses Ticket nun.

@jens-maus jens-maus closed this Sep 25, 2018

This was referenced Sep 25, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment