DIYS Smart-Home V1 - Irgendwo muss man ja anfangen!

Schon seit einiger Zeit plane ich mein Smart-Home. Neben dem Kostenfaktor für all die tollen Dinge die ich mir so vorstelle fehlt es oft an der notwendigen Zeit zur detailierten Planung und Umsetzung. Daher habe ich beschlossen einfach mal irgendwo anzufangen und dieses DIY-Projekt parallel niederzuschreiben...mal sehen wohin das führt...Ich bitte um Nachsicht wenn ich nicht auf jedes kleine Detail eingehe, allerdings denke ich das alles ganz gut verständlich ist. Sollten dennoch Fragen auftreten dürft ihr mir aber gerne eine Mail schicken und ich werde sehen ob ich helfen kann. :-)

Fernziel ist es jedenfalls eine zentrale App für mein Smartphone zuschreiben, welche möglichst alle elektronischen Komponenten im Haushalt steuern kann. Das Ganze soll sowohl auf meinem iPhone (+Apple Watch), als auch auf meinem iPad laufen und nach Möglichkeit ohne Alexa & Co. auskommen, da ich es für Irrsinn halte Daten einmal um den Globus zu schicken nur um z.B. eine Lampe oder den Fernseher einzuschalten. Davon ab ist das hier ein Hobby-Projekt und einfach nur ein riesen großer Spaß! ;-)

Ich setze vor allem auf das WLan-Modul ESP8266 ESP-01 ESP8266 ESP-01, welches auch in vielen Wifi-Schaltern (u.a. Lichtschalter, Dimmer, etc.) und -Steckdosen (z.B. Sonoff S20 Sonoff S20) verbaut ist. Der Vorteil ist, dass man die Firmware der Module relativ einfach überschreiben bzw. flashen kann und den Chip mit eigenem Code füttern und betreiben kann. So ist man in der Lage diese direkt an sein eigenes Heimnetzwerk anzubinden ohne Cloud-Services wie Amazon AWS etc. angewiesen zusein.

Ein Anfang: TV und Horizon-Recorder steuern

Im ersten Schritt habe ich mir überlegt meinen LG-TV und den Horizon-Recorder von Unitymedia über eine App innerhalb des eigenen WLANs steuern zu können.

Benötigte Bauteile zum Steuern von Geräten über Infrarot:
- Arduino UNO
- 5V Breadboard power supply
- IR (Infrarot) Empfängermodul und eine IR LED
- WLAN-Modul ESP8266 ESP-01 ESP8266 ESP-01
- Ein paar Kabel, Akkubohrer, Lötkolben, Heißklebepistole und ggf. ein Case wo die ganze Technik untergebracht wird.

Zusammengebaut sieht das bei mir dann so aus:

RC-Box - Arduino, ESP8266, IRRemote

Auf den ersten Blick simpel denn der TV genauso wie z.B. der DVD-Player werden über IR-Signale (Infrarot) gesteuert, was kein allzu großes Problem darstellt. Einfach den IR-Empfänger an den Arduino anschließen, die IRremote-Library einbinden, und über if (irrecv.decode(&results)) und results->value im loop() die empfangenen IR-Codes ausgeben.

Dann kann man die Fernbedienung des Fernsehers auf den IR-Empfänger richten, die benötigten Tasten drücken und bekommt so die entsprechenden Codes, welche man dann über IRSend und eine angebrachte IR-LED später senden kann. Der entsprechende Code ist Simpel (in meinem Fall für einen LG-TV) und könnte so in etwa aussehen:

#define TV_POWER_ON 0x20DF10EF
.....
void sendIR(unsigned long code)

{
irsend.sendNEC(code, 32); //LG uses NEC-Protocol
}

Als nächstes habe ich den ESP8266 an meinen Arduino angeschlossen, mithilfe einer kleinen Wifi-Library (WiFiEsp) mit meinem WLAN verbunden und den Port 10005 für UDP-Pakete geöffnet. So kann ich über meine kleine iOS-App an diesen Port Anweisungen schicken, welche der Arduino dann per IR an den Fernseher schickt.

TV oder weitere IR-Fähige Geräte ansteuern ist also keine große Sache. Die Tücke liegt wie so oft im Detail, denn der Horizon Recorder von Unitymedia wird über Funk bzw. WLan angesteuert. Da es keine Dokumentation über die Steuercodes gibt habe ich etwas im Internet recherchiert und freundliche Unterstützung bei Daniel erhalten (siehe: https://daniel-ziegler.com/php/esp/mikrocontroller/2017/12/18/Horizon-ueber-Netzwerk-Steuern/), welcher mir über seinen Artikel und per Mail kurz und knackig aushelfen konnte. Danke dafür! ;-)

Durch seinen PHP-Code war es ein leichtes die gewünschte Funktionalität in Objective-C zu programmieren und so auf mein iPhone zu bringen. Schön an dieser Lösung, dass der Arduino entlastet wird, denn die App kann so direkt ohne Umwege mit dem Horizon-Recorder kommunizieren.

Kurz gesagt habe ich mir die Keys (jeweils 2 byte) wie folgt definiert.

#define key_power @"E000"
#define key_number0 @"E300"
#define key_number1 @"E301"
...usw...

Dann habe ich eine kleine Funktion geschrieben welche nach dem Handshake mit dem Horizon-Recorder den jeweiligen Steuercode entgegen nimmt, ein entsprechdes Byte-Array bildet und an die Box sendet. Die 8 Bytes welche so den gesamten Steuercode bilden werden 2mal hintereinander mit kurzer Pause gesendet, wobei Byte Nr. 2 einmal eins (Taste gedrückt) und einmal null (Taste losgelassen) ist.  Das Ganze sieht bei mir dann so aus...

-(void)sendWifiCmdUM:(NSString*)sCode
{
char data[] = {0x04, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; //die letzten 2 bytes stellen den Tastencode dar

unsigned int anInt;
NSString *hexCharStr = [sCode substringWithRange:NSMakeRange(0, 2)];
NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
[scanner scanHexInt:&anInt];
data[6] = (char)anInt;
scanner = nil;

hexCharStr = [sCode substringWithRange:NSMakeRange(2, 2)];
scanner = [[NSScanner alloc] initWithString:hexCharStr];
[scanner scanHexInt:&anInt];
data[7] = (char)anInt;
scanner = nil;

//press button
[socket sendBytes:data count:8];

//wait
[NSThread sleepForTimeInterval:0.1f];

//release button
data[1] = 0x0;
[socket sendBytes:data count:8];

NSLog(@"SENT (%@)", sCode);
}

RC App iOSIm Anschluss habe ich ein kleines Frontend für die App gebastelt und die entsprechenden Funktionalitäten implementiert.

Im Prinzip besteht die App aktuell aus 3 Reitern. Horizon, TV und Config.

Die Lautstärke-Regelung für den Fernseher habe ich mit in die Dialoge für Horizon genommen, da in der Praxis das hin und her switchen etwas lästig war.

Kurzzeitig hatte ich auch OpenEars für Spracherkennung mit drin. Habe dies allerdings erstmal wieder auskommentiert, da die Erkennung für meinen Geschmack einfach nicht gut genug ist, und ich die Bedienung über einen Tap in der App einfach schneller und zielführender finde.

Der Konfigurationsdialog ist gut zum Einstellen der IP-Adressen von Horizon-Box und Arduino, praktisch aber auch um den Jugendschutz-Pin des Horizon-Recorders zu speichern. So kann man die gesamte Pin-Eingabe von der App übergeben lassen ohne dies lästig selbst tun zumüssen.

RC App für WatchOSDa ich beim Schreiben der App gerade im Flow war, habe ich auch gleich die Apple Watch mit angebunden.

Unnötig aber irgendwie auch ein witziges Spielzeug wenn man Fernseher und Horizon über seine Uhr am Handgelenk steuern kann. :D

Das ist der Stand der Dinge fürs Erste...Wie es mit dem Projekt weitergeht könnt ihr zu gegebener Zeit hier bei Saschas-Bastelstube.de erfahren.

Anregungen, Verbesserungsvorschläge oder Verweise auf eure eigenen Projekte sind erwünscht und können gern per Mail an mich geschickt werden. Gerne stelle ich diese hier als Inspirationsquelle vor. :-)

Zuletzt bearbeitet: 7. Januar, 2018
Tags: , , , , , , , , , , , , , ,

Verwandte Beiträge

Unfade - Mobiler Foto Album Scanner

Unfade ist der Fotoalbum Scanner für die Hosentasche.  Die App ist die beste Art analoge Fotoalben in Windeseile zu digitalisieren und sie mit Freunden zu teilen. Die automatische Erkennungs- und Zuschnitt-Funktion ermöglicht es schnell und einfach digitale Kopien der Fotos zu erstellen und die Erinnerungen zu sichern. Außerdem sorgen intelligente Filter dafür, dass verblasste Farben [...] Weiterlesen »


Kinder MP3 Player / Radio

Auf der Suche nach einem schönen und individuell konfigurierbaren MP3-Player für meine kleine Tochter, kam ich realativ schnell auf den Kinder-MP3-Player namens Hörbert . Ein schickes Gerät, gut verarbeitet und eigentlich genau das was ich gesucht habe - allerdings etwas zu teuer für meinen Geschmack. Auf der Suche nach Alternativen, bin ich nach einiger Zeit [...] Weiterlesen »


FileCalendar für iPhone und iPad

Der FileCalendar wurde komplett überarbeitet. Die App ist einzigartig, weil sie sich auf das Speichern von Dateien zum Kalender spezialisiert hat. Die Erinnerung an den Termin reicht aus, damit die Dateien sofort gefunden werden können. Der FileCalendar verfügt über ein neues Layout, kann Zip-Dateien entpacken und hat auch eine integrierte Kamera . Fotos und Filme [...] Weiterlesen »


ESP8266-WiFi-Modul flashen

Da ich mich seit kurzem wieder intensiver mit den Themen Smart Home und "Home automation" beschäftige habe ich beschlossen einige meiner Baustellen, Stolpersteine und Lösungen hier zu veröffentlichen. Wie im Beitrag zu meinem Smart-Home-Project V1 bereits erwähnt setze ich auf das WLAN-Modul ESP8266-ESP01 , da dieses unter anderem klein, zuverlässig und günstig ist. In diesem [...] Weiterlesen »


Fitnessboard v1 - DIYS

Am Wochenende hatte ich glücklicherweise mal wieder etwas Zeit zum Basteln und dazu noch eine ganz nette Idee für ein Fitness-Board für das Training zuhause, welches aus der Liegestütz-Position bedient wird. Ein Video dazu gibt es weiter unten in diesem Artikel und im Youtube-Channel von tedokai.de. Jeder der Zuhause dann und wann Sport betreibt kennt [...] Weiterlesen »