Homegear-Gerätenamen in Homematic-Manager übernehmen?

Aus einer CCU kann man ja die Gerätenamen mit /usr/local/lib/node_modules/homematic-manager/tools/import_rega_names.js <CCU IP> übernehmen. Mit der IP des Pi, auf dem Homegear läuft, funktioniert das nicht. Gibt es eine andere Möglichkeit?

Hallo @Manul,

vermutlich könnte das Skript umgeschrieben werden. Poste es mal, dann kann ich da reinschauen.

Viele Grüße

Sathya

1 Like

Findet sich hier.

Hey @Manul,

hier :slight_smile:.

Folgendes Skript in “/var/lib/homegear/scripts/importNamesToHmManager.php” speichern:

<?php
if($argc < 2) die("Bitte übergib den Pfad als Parameter, in welchem die Datei names.json angelegt werden soll (z. B. \"~/.hm-manager\".\n");

$namesPath = $argv[1];
if(substr($namesPath, -1) != '/') $namesPath .= '/';
$namesPath .= 'names.json';

$hg = new \Homegear\Homegear();
$devices = $hg->listDevices(false, array('ID', 'ADDRESS', 'CHANNELS'));

$names = array();
if(file_exists($namesPath))
{
    $content = file_get_contents($namesPath);
    $names = json_decode($content, true);
}

foreach($devices as $device)
{
    $id = $device['ID'];
    $serial = $device['ADDRESS'];
    $channels = $device['CHANNELS'];

    if(array_key_exists($serial, $names)) continue;

    $name = $hg->getName($id);
    if(!$name) continue;
    $names[$serial] = $name;
    foreach($channels as $channel)
    {
        $names[$serial.':'.$channel] = $name.':'.$channel;
    }
}

file_put_contents($namesPath, json_encode($names, JSON_PRETTY_PRINT));

und mit folgendem Befehl ausführen:

homegear -e rs importNamesToHmManager.php ~/.hm-manager

Unter der Annahme, dass dein HomeMatic-Manager die Daten unter ~/.hm-manager speichert.

Viele Grüße

Sathya

1 Like

Danke, funktioniert aber leider nicht. Datei .hm-manager/names.json wird nicht angelegt, egal, ob ich “homegear -e rs …” als root oder als mein eigener Nutzer ausführe. Log sieht dabei gut aus:

11/09/16 19:41:57.385 Script Engine Server: Info: Starting script "/var/lib/homegear/scripts/importNamesToHmManager.php" with id 5. 11/09/16 19:41:57.393 Script Engine Server: Info: Client number 0 is calling RPC method: listDevices Parameters: (Boolean) 0 (Array length=3) { (String) ID (String) ADDRESS (String) CHANNELS } 11/09/16 19:41:57.410 Script Engine Server: Info: Client number 0 is calling RPC method: getName Parameters: (Integer) 1 11/09/16 19:41:57.411 Script Engine Server: Info: Client number 0 is calling RPC method: getName Parameters: (Integer) 2 11/09/16 19:41:57.411 Script Engine Server: Info: Client number 0 is calling RPC method: getName Parameters: (Integer) 3 11/09/16 19:41:57.415 Info: Script with id 5 finished with exit code 0

Hallo Manul,

ich hab das gerade bei mir auch ausprobiert. Im Prinzip funktioniert es, allerdings hat Homegear wohl keine Schreibrechte im .hm-manager Verzeichnis. Wenn Du stattdessen zB

homegear -e rs importNamesToHmManager.php /tmp

aufrufst und dann mit

mv /tmp/names.json ~/.hm-manager/

verschiebst, ist alles wie gewünscht.

Gruß,
Frank

3 Likes

Danke! Darauf wäre ich so schnell nicht gekommen - ich hab’s, wie gesagt, auch als root probiert. Ich teste das morgen.

@Manul: Der homegear Prozess setzt seine Rechte herunter.

Ist in der main.conf konfigurierbar, auch wenn die Kommentare dort noch veraltet scheinen.

1 Like

@pmayer: Dein Satz kein Verb, aber sowas in der Art hatte ich vermutet. :smile:

Ooops, wohl doch schon zu spät :wink:

Funktioniert wie von @DasKleingedruckte beschrieben.

1 Like