Nachdem ich in diesem Forum schon einiges an Hilfe bekommen habe, möchte ich nun etwas zurück geben
Und zwar habe ich schon länger nach einer Lösung gesucht, um einige meiner Homematic Aktoren mit der Harmony von Logitech zu steuern. Gerade da die neuen (950 mit Hub/Elite) ja sogar dedizierte Buttons dafür haben. Die gängigen Lösungen mittels IRTRans oder IRE 8 haben aber - neben den zusätzlichen Kosten - einen entscheidenden Nachteil: Logitech hat entschieden, dass die oben genannten Home Control Buttons der Harmony nur für bestimmte Geräte (u.a. Philips HUE) außerhalb einer Aktivität belegt werden dürfen. Shame on them!
Ich finde gerade die Möglichkeit, z.B. das Licht außerhalb einer Aktivität zu steuern ein Muss. Dazu habe ich mich mal auf die Suche nach einer Lösung gemacht. Ausgangspunkt der Überlegung war, dass sowohl das HUE-System wie auch das Harmony-Hub über WLAN kommunizieren. Da muss es doch möglich sein, der Harmony eine HUE-Bridge vorzugaukeln.
Und tatsächlich...da gibt es schon was
https://github.com/falk0069/hue-upnp
Das Ganze läuft bei mir auf einer VM im Keller. System ist Ubuntu 15 und die einzigste Voraussetzung nach der frischen Installation ist, dass Python installiert ist. Die Scripts müssen händisch angepasst werden:
Der obere Teil der hueUpnp_config.py sollte selbsterklärend sein, weiter unten werden die Geräte definiert:
Code: Alles auswählen
from collections import OrderedDict
devices = OrderedDict([
('Homematic 1', ('script_handler', './hue-upnp-helper.sh')),
('Homematic 2', ('script_handler', './hue-upnp-helper.sh')),
('Homematic 3', ('script_handler', './hue-upnp-helper.sh')),
('Homematic 4', ('script_handler', './hue-upnp-helper.sh')),
])
Code: Alles auswählen
#!/bin/bash
#examples:
#./hue-upnp-helper.sh "Wemo Light" on true
#./hue-upnp-helper.sh "hue light 2" xy [0.4544,0.511]
#./hue-upnp-helper.sh "My toaster" ct 396
#./hue-upnp-helper.sh "PC WOL" bri 254
echo "$0 called with '$1' '$2' '$3'"
DEVICE1="Homematic 1"
DEVICE2="Homematic 2"
DEVICE3="Homematic 3"
DEVICE4="Homematic 4"
#HUE LIGHT 1 (DEVICE1)
if [ "$1" == "$DEVICE1" ]; then
echo "Running directive for $DEVICE1"
#ON/OFF Directive
if [ "$2" == "on" ]; then
if [ "$3" == "true" ]; then
echo 1 on true
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/javascript.0.Stehlampe.STATE?value=true
elif [ "$3" == "false" ]; then
echo 1 on false
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/javascript.0.Stehlampe.STATE?value=false
fi
#BRIGHTNESS
elif [ "$2" == "bri" ]; then
echo 1 bri $3
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/javascript.0.Stehlampe.HUE_LEVEL?value=$3
#CT
elif [ "$2" == "ct" ]; then
echo 1 ct $3
#XY
elif [ "$2" == "xy" ]; then
echo 1 xy $3
fi
#HUE LIGHT 2 (DEVICE2)
elif [ "$1" == "$DEVICE2" ]; then
echo "Running directive for $DEVICE2"
#ON/OFF Directive
if [ "$2" == "on" ]; then
if [ "$3" == "true" ]; then
echo 2 on true
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/hm-rpc.0.MEQXXXXXXX.1.STATE?value=true
elif [ "$3" == "false" ]; then
echo 2 on false
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/hm-rpc.0.MEQXXXXXXX.1.STATE?value=false
fi
#BRIGHTNESS
elif [ "$2" == "bri" ]; then
echo 2 bri $3
#CT
elif [ "$2" == "ct" ]; then
echo 2 ct $3
#XY
elif [ "$2" == "xy" ]; then
echo 2 xy $3
fi
#Licht Kueche Decke (DEVICE3)
elif [ "$1" == "$DEVICE3" ]; then
echo "Running directive for $DEVICE3"
#ON/OFF Directive
if [ "$2" == "on" ]; then
if [ "$3" == "true" ]; then
echo 1 on true
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/hm-rpc.0.MEQXXXXXXX.1.STATE?value=true
elif [ "$3" == "false" ]; then
echo 1 on false
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/hm-rpc.0.MEQXXXXXXX.1.STATE?value=false
fi
fi
#Licht Kueche Unterschrank (DEVICE4)
elif [ "$1" == "$DEVICE4" ]; then
echo "Running directive for $DEVICE4"
#ON/OFF Directive
if [ "$2" == "on" ]; then
if [ "$3" == "true" ]; then
echo 1 on true
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/hm-rpc.0.MEQXXXXXXX.2.STATE?value=true
elif [ "$3" == "false" ]; then
echo 1 on false
wget -S -q --header "Accept: application/json" -O - http://smarthome:8087/set/hm-rpc.0.MEQXXXXXXX.2.STATE?value=false
fi
fi
else
echo "Error: Unknown Device '$1' command=$2 $3"
exit 1
fi
Der erste Block (DEVICE1) ist noch ganz interessant: Hier rufe ich statt eines Aktors erstmal ein Script in iobroker auf, das sich darum kümmert, dass der Dimmwert der HUE-Bridge (0-254) in den Homematic-LEVEL (0-100) konvertiert wird. Außerdem sorgt ein weiteres Script dafür dass während des Dimmens (WORKING) die LED am Wandtaster (gesteuert über ein HM-MOD-Re-8) blinkt - it’s all about details, you know
Hier das Script für iobroker - das sollte sich in der CCU2 auch umsetzen lassen (ich habe aber alle meine Scripts zentral in iobroker).
Code: Alles auswählen
createState('javascript.0.Stehlampe.HUE_LEVEL', {type: 'number', min: 0, max: 254});
createState('javascript.0.Stehlampe.STATE', {type: 'boolean'});
createState('javascript.0.Stehlampe.LEVEL', {type: 'number', min: 0, max: 100, unit: '%'});
on('javascript.0.Stehlampe.HUE_LEVEL', function(obj) {
var level = Math.ceil(obj.state.val / 254 * 10) * 10;
setState('javascript.0.Stehlampe.LEVEL', level);
});
on('javascript.0.Stehlampe.LEVEL', function(obj) {
var level = obj.state.val;
setState('hm-rpc.0.MEQXXXXXXX.1.LEVEL', level);
});
on('javascript.0.Stehlampe.STATE', function(obj) {
var state = obj.state.val;
if (state === true) {
var level = getState('javascript.0.Stehlampe.LEVEL');
setState('hm-rpc.0.MEQXXXXXXX.1.LEVEL', level.val);
}
if (state === false) {
setState('hm-rpc.0.MEQXXXXXXX.1.LEVEL', 0);
}
});
Diese Lösung ist exakt das, was ich gesucht habe und funktioniert prima - die Kommandos der Harmony werden astrein und ohne merkliche Verzögerung (< 0.5s) ausgeführt.
Für ein Tutorial ist das oben etwas zu wenig, aber ich denke die Scripts sind so einfach dass ein Schubs in die Richtung genügen muss. Vielleicht kann der ein oder andere ja damit etwas anfangen - viel Spaß beim Nachbasteln!
Viele Grüße,
Frank