CCU3 steuert IR-Geräte z.B. Klimaanlage über BL RM pro ohne Cloud und IOBroker

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Antworten
truderinger@gmx.de
Beiträge: 27
Registriert: 30.09.2013, 22:06
Hat sich bedankt: 2 Mal

CCU3 steuert IR-Geräte z.B. Klimaanlage über BL RM pro ohne Cloud und IOBroker

Beitrag von truderinger@gmx.de » 21.03.2019, 07:29

Hallo,
nachdem ich eine Olimpia Splendid SF12 zuhause habe und diese nur über die O-FB zu steuern ist, war ich gezwungen einen Weg als den normalen einzuschlagen. IM Netz fand ich hierzu nur Anfragen, wie "Klimaanlage über WebUI steuern", oder wie eine solche Klimaanlage in Homamatic einbinden. Durch meine Recherchen stieß ich auf den BroadLink RM Pro, der unter Linux ansteuerbar ist. Da die Raspberrymatic nur mit "Addons" zu ergänzen ist, musste ich auf einen anderen Raspi 3b+ ausweichen. Ich kann jetzt über die CCU3 durch ein Wandthermostat mit Feuchtigkeitsmessung bei Überschreiten im Winter die Feuchtigkeit und im Sommer die Wärme regulieren. Hierzu gibt es zwei Programme in der CCU3. Bei meiner Klimaanlage verhält es sich so, dass diese im Standby-Modus mit der O-FB entsprechend im Sommer/Winter auf entfeuchten oder klimatisieren eingestellt werden kann. Durch die Verwendung der IR-Signale wird die Klimaanlage ordentlich hoch- und runter gefahren. Die Vorgehensweise sollte sich bei allen IR-bedienbaren Geräte z.B. Deckenventilator, die den IR-Code durch den BL RM pro auslesen lassen, geeignet sein. Nachteil ist, dass ich die Drehzahl hierbei nicht regeln kann.

Der Broadlink RM Pro kann ohne Cloud und Internetzugang mit u.s. 3. Möglichkeiten (http mit php, Cuxd und CCU-Programm-Script) gesteuert werden. Für jeden Befehl ist natürlich eine sh-Datei erforderlich.

Ab hier aus dem wiki.fhem.de:
Installationsanleitung für den BroadLink-Teil von (https://wiki.fhem.de/wiki/Broadlink#Installation)

Auf dem Raspi-Rechner (z.B. Raspi) muss python und am besten auch git installiert sein. Ggf. muss auch noch simplejson und pip installiert werden. Da ich mich nicht als user fhem einlogge, sind in dieser Anleitung viele "sudo"s drin.

sudo apt-get install python git python-pip
sudo pip install simplejson

Verzeichnis erstellen und die Bibliothek installieren
sudo mkdir /opt/BroadLink
sudo chown fhem.dialout /opt/BroadLink
cd /opt/BroadLink
sudo git clone https://github.com/mjg59/python-broadlink.git
cd python-broadlink
sudo python setup.py install
cd ..

In das Verzeichnis dann noch die vier Skripte kopieren.
1. search-bl.sh

#!/usr/bin/python

#Script to locate Broadlink devices on local network by Graeme Brown Dec 23 2016
#These must be set up using the Broadlink app first!

import broadlink
import time

print "************************************************"
print "Using python library created by Matthew Garrett"
print "https://github.com/mjg59/python-broadlink"
print "************************************************"
print "Scanning network for Broadlink devices...."

mydevices = broadlink.discover(timeout=5)
print "Found " + str(len(mydevices )) + " broadlink devices"
time.sleep(1)
print "..............."

for index, item in enumerate(mydevices):

mydevices[index].auth()

ipadd = mydevices[index].host
ipadd = str(ipadd)
print "Device " + str(index + 1) +" Host address = " + ipadd[1:19]
macadd = ''.join(format(x, '02x') for x in mydevices[index].mac[::-1])
macadd = str(macadd)

mymacadd = macadd[:2] + " " + macadd[2:4] + " " + macadd[4:6] + " " + macadd[6:8] + " " + macadd[8:10] + " " + macadd[10:12]
print "Device " + str(index + 1) +" MAC address = " + mymacadd
print "..............."

2. learn-bl.sh

#!/usr/bin/python

import broadlink
import time
import sys

device = broadlink.rm(host=("<your RM3 IP address>",80), mac=bytearray.fromhex("<your RM3 mac>"))

print "Connecting to Broadlink device...."
device.auth()
time.sleep(1)
print "Connected...."

codeName = raw_input("Bitte Namen f. den Code eingeben, z.B. tvOff ")
time.sleep(1)
print "Wenn die LED am Broadlink angeht, innerhalb von 5 Sek die FB-Taste druecken "

device.host
device.enter_learning()
time.sleep(5)
ir_packet = device.check_data()
#convert code to hex
myhex = str(ir_packet).encode('hex');

if ir_packet == None:
print "Kein Code empfangen - Ende"
sys.exit()
else:

# record learned hex code to file
f = open(codeName +".txt",'w')
f.write(myhex)
f.close()

print "Hex code gespeichert unter " + codeName + ".txt"

3. send-bl.sh

#!/usr/bin/python

import broadlink
import time
import sys
ip = "192.168.1.xx" # IP des BroadLinks Rm Pro
port = 80
mac = "34EA3xxxx71" # Mac-Adresse des Broadlinks
timeout = "30"
device = broadlink.rm((ip,port), mac, timeout)

try:
fileName = sys.argv[1]
except IndexError:
fileName = 'null'

if fileName == 'null':
print "Error - kein Dateiname angegeben"
sys.exit()
else:

device = broadlink.rm(host=("<your RM3 IP address>",80), mac=bytearray.fromhex("<your RM3 mac>"))

print "Connecting to Broadlink device...."
device.auth()
time.sleep(1)
print "Connected...."
time.sleep(1)
device.host

file = open(fileName, 'r')

myhex = file.read()

device.send_data(myhex.decode('hex'))
print "Code Sent...."

4. sendmore-bl.sh

#!/usr/bin/python

import broadlink
import time
import sys
ip = "192.168.1.xx" # IP des BroadLinks Rm Pro
port = 80
mac = "34EA3xxxx71" # Mac-Adresse des Broadlinks
timeout = "30"
device = broadlink.rm((ip,port), mac, timeout)

try:
fileName = sys.argv[1]
except IndexError:
fileName = 'null'

if fileName == 'null':
print "Error - kein Dateiname angegeben"
sys.exit()
else:
device = broadlink.rm(host=("<your RM3 IP address>",80), mac=bytearray.fromhex("<your RM3 mac>"))

# print "Connecting to Broadlink device...."
device.auth()
time.sleep(1)
# print "Connected...."
device.host

# Pfad aus Aufruf extrahieren und dann den Befehl selbst vom Stapel nehmen
Parameter = sys.argv
# Name des Befehls selbst
filename1 = Parameter[0]
# Gesamtlaenge
FileNameLaenge = len(filename1)
# in Bestandteile aufteilen
filearray = filename1.split("/")
# den letzten identifizieren. Das ist der eigentliche Befehl
splitNo = len(filename1.split("/"))
lastElement = filearray[splitNo-1]
# den vom Aufruf wegschneiden, um den Pfad zu bekommen
FileNameAbzug = len(lastElement)
Ende = FileNameLaenge - FileNameAbzug
Pfad = filename1[0:Ende]
# Befehl aus der Liste loeschen, damit die Parameter bleiben
Parameter.pop(0)

# repeat for each argument
for argument in Parameter:
fileName = Pfad + argument +".txt"
file = open(fileName, 'r')
myhex = file.read()
device.send_data(myhex.decode('hex'))
time.sleep(0.5)
# print "Code Sent...."
sys.exit()

Dann in dem Verzeichnis noch die Dateibesitzer wechseln und die Skripte ausführbar machen:

sudo chown root *.sh
sudo chmod 744 *.sh
Konfiguration

Nun gilt es, die IP und MAC-Adresse des Broadlink herauszufinden. Entweder man schaut im Router nach, benutzt die Android-App FING oder das Script "search-bl.sh". Dazu

sudo ./search-bl.sh
Beispielhaft kommt dann:

************************************************
Using python library created by Matthew Garrett
https://github.com/mjg59/python-broadlink
************************************************
Scanning network for Broadlink devices....
Found 1 broadlink devices
...............
Device 1 Host address = '192.168.1.16', 8
Device 1 MAC address = b4 43 0d aa b3 54
...............
Für später sind die IP Adresse und die MAC Adresse wichtig. Diese müssen im zweiten bis vierten Script eingetragen werden!! Ich benutze da den Editor nano.

sudo nano ./learn-bl.sh
sudo nano ./send-bl.sh
sudo nano ./sendmore-bl.sh

Dabei die doppelten Anführungszeichen stehen lassen und an der passenden Stelle jeweils die IP und an der anderen die MAC-Adresse (mit Leerzeichen anstelle der Doppelpunkte) eintragen. Das erste Script liefert die auch so formatiert. Wenn man sie aber aus dem Router hat oder so, dann eben beachten!

Ab hier meine weitere Vorgehensweg:

Mit "/learn-bl.sh" z.B. für Klimanlage die Datei Klimaein.txt erstellen!
Zur Vereinfachung für CuxD bzw. Steuerung über einen Browser eine neue sh-Datei erstellen, z.B. "Klimaein.sh" und mit "./sendmore-bl.sh Klima) "Klima"-Datei, die oben erzuegt wurde ohne "txt"-Endung. Im Anschluss "chmod 0755".

Apache mit PHP5 installieren:
sudo apt-get install apache2 php
Ordner mit Web-Verzeicnis verlinken "ln -s /opt/BroadLink /var/www/html"
nun in Verzeichnis "var/www/html" eine PhP-Datei anlegen, z.B. Klimaein.php, Datei befüllen mit

<?php
#$output = shell_exec('cd /opt/Broadlink');
$output = shell_exec('sh /opt/BroadLink/sendmore-bl.sh Klimaein');
echo "<pre>$output</pre>";
?>

Ich habe dem script sendmore-bl.de noch folgende Zeilen nach
import broadlink
import time
import sys ,abweichend vom Original, hinzugefügt:

ip = "192.168.1.xx"
port = 80
mac = "34EA3xxxxx71"
timeout = "30"
device = broadlink.rm((ip,port), mac, timeout)

Dies ist dem search-bl.sh nicht hinzuzufügen. Send-bl.sh habe ich nicht getestet.


Möglichkeiten der Steuerung:

1. Steuerung im Browser:Das Klimagerät sollte jetzt mit einem modernen Browser mit http://192.168.1.xx/BroadLink/Klimaan.php einschaltbar sein.

2. Steuerung CuxD:
Ein Exec-Gerät (Typ 28) mit Cuxd anlegen:
Kanal mit z.B. Klimaanlage-ein benennen und bei "KEY|CMD_SHORT" >>>>> wget -q -O - '192.168.1.xx/BroadLink/Klimaan.php' <<<< eintragen

3. Steuerung mit CCU-Script:
string url="'http://192.168.1.xx/BroadLink/Klimaan.php'";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O - "#url);

Wichtig: den CuxD-Kanal für jeden Befehl erhöhen xx2801001:1 xx2801001:2 ……..

Zusätzlich kann der BroadLink, eingerichtet mit Cloudanbindung (konfiguriert mit einer Android-App für die EU) mit einem Konto bei "iBroadlink" unabhängig von den o.g. Steuermöglichkeiten, über Alexa sprachgesteuert werden. Hier ist zu bedenken, dass das Ganze bei mir zumindest über einen TV-Eintrag mit selbst angelernten Tasten nur möglich ist.

Anmerkung 1: Die Steuerung ist natürlich in Bezug auf Sicherheit und Vereinfachung noch ausbaubar. Da ich aber eigentlich nur Laie bin, können sich Interessierte hier austoben und Ihre Verbesserungen wie auch Ideen einbringen.

Anmerkung 2: Der BroaLink RM pro lässt sich an einer FB , wie z.B. 6490 nicht so leicht einpflegen, da bei mir zumindest keine MAC-Adresse
von aussen zu erkennen war. Ich habe daher einen China-Steckdosen-Router i.V.m. der Broadlink-App zum Auslesen der MAC dazu genutzt. Nachdem ich die MAC im der FB eingetragen habe und eine frei IP-Adresse eingab konnte sich der RM pro ohne Probs. anmelden

Viel Spass

mguenther
Beiträge: 58
Registriert: 12.02.2018, 03:13
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: CCU3 steuert IR-Geräte z.B. Klimaanlage über BL RM pro ohne Cloud und IOBroker

Beitrag von mguenther » 24.07.2020, 08:37

Hallo, wie zufrieden bist du mit der Olimpia? Bin per Zufall auf die Klima gestoßen, habe einen Raum an meiner Garage dran, der möglichst ne halbwegs konstante Temperatur haben sollte. Ich habe Photovoltaik auf dem Garagendach und kann darüber dann z.b. auch die Olimpia steuern. Wie gut ist die Heizfunktion? Rückinfo gerne auch per PN

Danke
Marcus
------
DANKE!

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: CCU3 steuert IR-Geräte z.B. Klimaanlage über BL RM pro ohne Cloud und IOBroker

Beitrag von dtp » 24.07.2020, 15:56

Bitte Code-Zeilen auch in entsprechende Code-Tags setzen. Für jemanden, der programmieren kann, sollte das möglich sein. 8)
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

omicronCZ
Beiträge: 218
Registriert: 31.07.2011, 17:37
System: CCU
Wohnort: Czech Rep.
Hat sich bedankt: 83 Mal
Danksagung erhalten: 14 Mal

Re: CCU3 steuert IR-Geräte z.B. Klimaanlage über BL RM pro ohne Cloud und IOBroker

Beitrag von omicronCZ » 25.07.2020, 13:20

Isn't it easier to use Sensibo SKY (with its own API) than BroadLink RM without its own API?

I have both at home, and for air conditioning control (any) Sensibo is a great solution, specifically for air conditioners designed. The Broadlink solution seems quite cumbersome to me.

Antworten

Zurück zu „Projektvorstellungen“