Name über getDeviceInfo nicht verfügbar

Hallo zusammen,

seit der Einführung von Namen für Channels kann ich keine Input oder Output Variablen in Node-BLUE mehr bearbeiten und auch die Standard-Webseite auf Port 2001 zeigt keine Namen für meine Devices mehr an. Im homegear-scriptengine.err steht “Undefined index: NAME in /var/lib/homegear/www/rpc/index.php on line 27”. Ich vermute “getDeviceInfo” funktioniert bei mir nicht mehr richtig. Hab mal folgenden Test gemacht:

$ homegear -c /etc/homegear -e rc 'print_r($hg->getDeviceInfo(1,[ "INTERFACE", "NAME" ]));'
Array
(
    [ID] => 1
    [INTERFACE] => usb-rs485
)
$ homegear -c /etc/homegear -e rc 'print_r($hg->getName(1));'
Aktor 5

“listDevices” gibt allerdings die korrekten Namen aus. Macht ich was falsch, oder ist das momentan defekt?

Btw, sollen solche Bugreports hier oder doch eher in Github reportet werden?

Hi @l3home,

über getDeviceInfo() geht es tatsächlich nicht mehr, NAME ist jetzt nur noch über getDeviceDescription() bzw. listDevices() abrufbar. Dort aber auch für Kanäle.

Standard-Webseite auf Port 2001 zeigt keine Namen für meine Devices mehr an

Das ist im nächsten Nightly gefixed ;-).

seit der Einführung von Namen für Channels kann ich keine Input oder Output Variablen in Node-BLUE mehr bearbeiten

Kannst du das Problem näher beschreiben? Auf Anhieb finde ich kein Problem.

Viele Grüße

Sathya

Hallo Sathya,

danke für die schnelle Reaktion. Echt klasse!
Auf der Standard-Webseite werden nun wieder Namen angezeigt. Allerdings nicht alle, Namen mit Umlaute beiben leer. Ist allerdings auch nicht so wichtig, ich dachte nur, dass könnte das selbe Problem sein, wie in Node-BLUE.
Dort besteht mein Problem weiterhin (Build 0.8.0-2117). Ich kann das so reproduzieren:

  • Variable Input Node anlegen
  • Doppelklick zum Editieren
  • dann erscheint schon oben in rot “Error: Lost connection to server, reconnecting…”
  • Ich kann noch Homematic Wired auswählen, aber keine Peer ID mehr

Kann das auch an meinen Umlauten liegen?
In den Logs taucht nichts in die Richtung auf.
Im homegear-flows.err tauch regelmäßig folgende Meldung auf, obwohl der entsprechende Link garantiert existiert:
Node-BLUE (772): Node 38816363.59bb6c: Error: Could not execute linkInput: Unknown node.
In homegear.err tauchen nur regelmäßig anscheinend irgendwelche Wired Debug Meldungen auf:
INFO_LEVEL STATE
Kann ich sonst noch irgendwelchen Input liefern?

Grüße
Leif

Hallo Leif,

die leeren Namensfelder sind mit Sicherheit Teil des gleichen Problems. Wie hast du die Namen in Homegear eingetragen? Sind die Namen UTF-8-kodiert? Andere Kodierungen verstehen sich nicht so gut mit JSON, was den Verbindungsabbruch erklären könnte. Die Konsole (F12 in Firefox oder Chrome) müsste beim Auftreten des Verbindungsabbruches auch eine Fehlermeldung anzeigen.

Ich nehme jetzt einfach mal an, die Namen sind nicht UTF8-kodiert. Probier mal Folgendes:

  1. Öffne Homegear’s CLI mit homegear -r
  2. fs 1
  3. Setze den Namen eines auf der Standard-Webseite nicht dargestellten Peers mit pn Neuer Name. Gerne auf den alten Namen und mit Umlauten.
  4. Überprüfe, ob der Name jetzt auf der Standard-Webseite angezeigt wird. Falls ja, wiederhole diesen Schritt für alle Namen. Im Anschluss müsste auch Node-BLUE wieder fehlerfrei funktionieren.

Viele Grüße

Sathya

Es gibt btw. auch getName() (siehe: https://ref.homegear.eu/rpc.html#getName), wenn es fuer ein komplettes Device reicht und man nicht die Channel-Names benoetigt :wink:

– Michael

Hallo Sathya,

danke für den Tipp. Tatsächlich waren meine Namen wider meiner Annahme nicht UTF-8-kodiert. Ich habe das für alle Namen korrigiert und nun werden sogar auch die Channel-Namen in Node-BLUE angezeigt. Großartig!

Falls noch jemand seine Namen korrigieren muss, hier das entsprechende Skript (Achtung, Skript checkt nicht, ob die Namen nicht schon UTF-8-kodiert sind! Also nicht ausführen mit UTF-8 Namen!):

<?php

$hg = new Homegear\Homegear();
$language = "de-DE";

foreach ($hg->getRooms($language) as $element) {
    $name = $element["NAME"];
    $encodedName = utf8_encode($name);
	if ($encodedName == $name) continue;
	$translation = [ $language => utf8_encode($name) ];
	$hg->updateRoom($element["ID"], $translation);
}

foreach ($hg->getCategories($language) as $element) {
    $name = $element["NAME"];
    $encodedName = utf8_encode($name);
	if ($encodedName == $name) continue;
	$translation = [ $language => utf8_encode($name) ];
	$hg->updateCategory($element["ID"], $translation);
}

foreach ($hg->listDevices(true, ["ID", "CHANNEL", "NAME"]) as $nr => $element) {
    $name = $element["NAME"];
    $encodedName = utf8_encode($name);
	if ($encodedName == $name) continue;
	$channel=$element["CHANNEL"];
	if(is_null($channel)) {
		$hg->setName($element["ID"],$encodedName);
	} else {
		$hg->setName($element["ID"],$channel,$encodedName);
	}
}

?>

@sathya, hast du eigentlich eine Idee, wo die vielen Homematic Wired Debug Meldungen in meiner homegear.err herkommen? Mir ist aufgefallen, dass die Datei unglaublich groß geworden ist und da, wie oben beschrieben, lauter solche Einträge drin stehen:

KEY_EVENT_LONG COUNTER
KEY_EVENT_SHORT COUNTER
INFO_LEVEL STATE
...

Viele Grüße

Leif

1 Like

Hallo @sathya,

wegen der Homematic Wired Debug Meldungen in meiner homegear.err hab ich selbst mal geschaut. Magst du vielleicht folgende Zeile aus der HMWiredPeer.cpp entfernen?

std::cerr << frame->id << ' ' << (*j)->parameterId << std::endl;

Viele Grüße
Leif

2 Likes

Ist entfernt ;-). Danke dir!