Hallo,
ich habe mir letzte Woche die
IP Schalt-Mess-Steckdose HMIP-PSM gekauft und stand auch vor dem Problem, wie ich diese in Homehub korrekt darstelle.
Um es vorweg zu nehmen, ich habe es geschafft. Daher hier eine kleine Anleitung, wie ich vorgegangen bin. Außerdem anbei die Dateien als zip, die ich modifizieren musste.
Basierend darauf habe ich auch die notwendigen Anpassungen für die IP Steckdose HMIP-PS (ohne Messung) angelegt, wobei ich diese nicht testen konnte, da ich diese Komponente nicht habe. Damit könntest du Pierres es mal ausprobieren und Rückmeldung geben, ob es funktioniert.
Als erstes habe ich mir die Dateien von DJDieter vom 18.04.2018 runtergeladen und angesehen, wie diese aufgebaut waren.
Anschließend habe ich mir auf GitHub anhand der letzten Änderung an Homehub angesehen, welche Dateien alle modifiziert werden müssen, um eine neue Komponente hinzuzufügen.
https://github.com/braindead1/HomeHub-W ... 7c506541fa
die zu ändernden Dateien sind:
- README.md (habe ich nicht angepasst, nicht notwendig für Darstellung)
- app/Components/HMIP-XXXXXXXXX.php (eine neue Datei mit Name der Komponente)
- app/Config/mapping.json (habe ich nicht angepasst, da sie bei mir nicht verwendet wird)
- assets/js/script.js (Anpassung zwingend notwendig, sonst sieht man zwar die Komponente in Homehub, aber nicht die richtigen Werte bzw. die Komponente lässt sich nicht bedienen)
- und natürlich die custum.json, um die neue Komponente in der Anzeige einzubinden.
Los geht’s also mit der Datei HMIP-PSM.php, die neu zu erstellen ist:
Code: Alles auswählen
<?php
function HmIP_PSM($component) {
if ($component['parent_device_interface'] == 'HmIP-RF' && $component['visible'] == 'true' && isset($component['STATE'])) {
return '<div class="hh">'
. '<div class="pull-left"><img src="../assets/icons/' . $component["icon"] . '" class="icon">' . $component['name'] . '</div>'
. '<div class="pull-right">'
//. '<span class="right info" data-id="' . ($component['STATE']+17) . '" data-component="' . $component['component'] . '" data-datapoint="VOLTAGE"></span>'
//. '<span class="right info" data-id="' . ($component['STATE']+15) . '" data-component="' . $component['component'] . '" data-datapoint="FREQUENCY"></span>'
. '<span class="info" data-id="' . ($component['STATE']+12) . '" data-component="' . $component['component'] . '" data-datapoint="CURRENT"></span>'
. '<span class="info" data-id="' . ($component['STATE']+16) . '" data-component="' . $component['component'] . '" data-datapoint="POWER"></span>'
. '<span class="info" data-id="' . ($component['STATE']+13) . '" data-component="' . $component['component'] . '" data-datapoint="ENERGY_COUNTER"></span>'
. '<span class="info set" data-id="' . $component['STATE'] . '" data-component="' . $component['component'] . '" data-datapoint="CONTROL_MODE" data-set-id="' . $component['STATE'] . '" data-set-value=""></span>'
. '</div>'
. '<div class="clearfix"></div>'
. '</div>';
}
}
Hier habe ich mir die Konfiguration der Datei HM-ES-PMSw1-Pl.php kopiert, also der Kompoente, die die gleiche Funktion hat, wie die die neue Komponente, aber ohne IP. Folgende Änderungen musste ich machen:
hier muss der Komponentenname rein:
function HmIP_PSM($component) {
Hier muss das Interface auf IP umgestellt werden:
if ($component['parent_device_interface'] == 'HmIP-RF' &&...
Und dann musste ich noch die Angaben „State+XXX“ anpassen, da die Informationen der IP Komponente nicht an der gleichen Stelle übertragen werden.
In der alten Datei stand „State+4“ für die Angabe „Current“. Dies funktionierte bei meiner IP Komponente nicht. Also habe ich mir die Datei export.json angeschaut und nach meiner neuen IP Komponente gesucht. Hier fand ich:
"name":"HmIP-RF.xxxxxxxxxx:6.CURRENT","type":"CURRENT","ise_id":"8767"
Nun brauchte ich noch die „Basis-State-Id“ auf die sich alle Angaben relativ beziehen. Hier fand ich Suche über den Firefox Browser einfacher als in der export.json. Also erstmal die neue Datei HMIP-PSM.php gespeichert und richtig für Homehub abgelegt. Dann die Konfiguration von Homehub angepasst, dass die neue Komponente angezeigt werden soll. Dann erscheint die Komponente in Homehub, aber noch mit falschen Werten. Dann habe ich in Firefox die Zeile der neuen Komonenten doppelt draufgeklickt und mit Rechtsklick „Auswahl Quelltext anzeigen“ ausgewählt. Hier steht dann im Firefox
„<span class="info set btn-false" data-id="8755" data-component="HMIP-PSM" data-datapoint="CONTROL_MODE" data-set-id="8755"“
Hier haben wir nun die Basis-ID 8755.
Nun schnell nachrechnen: Die obige 8767 aus der export.json Minus der 8755 ergibt 12. Damit musste ich die „State+4“ für CURRENT in eine „State+12“ anpassen.
Das gleiche habe ich dann noch für Power und Energy Counter gemacht.
Ich glaube die Ids sind bei jedem Nutzer anders, aber in der Homehub Konfiguration sind ja nur die relativen Angaben relevant. Die „Basis-State-Id“ ermittelt Homehub selber.
Dann die neue Datei im Components Ordner ablegen. Ggf. noch auf die Dateirechte achten. Ich musste bei mir noch den Besitzer und die Gruppe der Datei unter unix von pi auf www-data ändern.
Dann muss nun aber noch die assets/js/script.js angepasst werden, da ansonsten die Anzeige noch immer nicht korrekt ist.
Hier habe ich einfach eine weitere „case“ Abfrage ergänzt, indem ich die vorhandene case Abfrage der Komponente HM-ES-PMSw1-Pl.php kopiert habe und nur den Code geändert habe, dass ich nun „case 'HMIP-PSM'“ eingetragen habe. Der Rest blieb gleich.
Code: Alles auswählen
case 'HMIP-PSM':
switch (datapoint) {
case 'CONTROL_MODE':
if (value === 'true') {
$('[data-id="' + ise_id + '"]').html('Ein');
$('[data-id="' + ise_id + '"]').addClass('btn-true');
$('[data-id="' + ise_id + '"]').removeClass('btn-false');
$('[data-id="' + ise_id + '"]').attr('data-set-id', ise_id);
$('[data-id="' + ise_id + '"]').attr('data-set-value', '0');
} else {
$('[data-id="' + ise_id + '"]').html('Aus');
$('[data-id="' + ise_id + '"]').addClass('btn-false');
$('[data-id="' + ise_id + '"]').removeClass('btn-true');
$('[data-id="' + ise_id + '"]').attr('data-set-id', ise_id);
$('[data-id="' + ise_id + '"]').attr('data-set-value', '1');
}
break;
case 'CURRENT':
$('[data-id="' + ise_id + '"]').html((Math.round(value * 10) / 10) + ' mA');
break;
case 'ENERGY_COUNTER':
$('[data-id="' + ise_id + '"]').html((Math.round(value * 10) / 10) + ' Wh');
break;
case 'FREQUENCY':
$('[data-id="' + ise_id + '"]').html((Math.round(value * 10) / 10) + ' Hz');
break;
case 'STATE':
$('[data-id="' + ise_id + '"]').html(value);
break;
case 'POWER':
$('[data-id="' + ise_id + '"]').html((Math.round(value * 10) / 10) + ' W');
break;
case 'VOLTAGE':
$('[data-id="' + ise_id + '"]').html((Math.round(value * 10) / 10) + ' V');
break;
default:
$('[data-id="' + ise_id + '"]').html(value);
}
break;
Die geänderte Datei speichern und das war es... nun funktioniert die Anzeige und Bedienung der Komponente bei mir einwandfrei.
In dem Zuge habe ich für pierres gleich mal auch die HMIP-PS Komponente erstellt. Einfach die neue Komponente in den Components Ordner ablegen und das vorhandene Skript durch das von mir angepasste Skript assets/js/script.js ersetzen.
Ich hoffe es funktioniert. Über eine Rückmeldung würde ich mich freuen. Vielleicht könnt ihr ja mit meiner Anleitung auch noch weitere Komponenten erstellen.