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 »


iOS-Android-Converter

Lange Zeit habe ich bei neuen App-Projekten zunächst die Sprachdateien / Language-Files für iOS geschrieben, und diese dann für die Android-Version händisch umgeschrieben. Das war vom Aufwand her immer schnell gemacht solange die Anzahl der implementierten Sprachen und der Umfang der Textbausteine niedrig war. Abgesehen vom Zeitaufwand ist das ganz schön langweilige und stumpfe Arbeit, [...] Weiterlesen »


App des Tages: Mekorama

Die heutige App des Tages heißt Mekorama! Bewege einen Roboter durch über 50 Level. Grafisch ansprechend aufbereitet ist dieses Spiel ein echter Knaller, nicht umsonst steht die App schon seit einiger Zeit in den Top 10 der Download-Charts und hat schon allein im Android-Appstore knapp 40.000 fast durchweg 5-Sterne Bewertungen. Neben den bereits integrierten liebevoll [...] 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 »


Rezeptbuch-App - Rezepte verwalten, teilen und mehr

Mit der Rezeptbuch-App kannst du deine Rezepte komfortabel verwalten. Erstelle deine eigene wundervolle Rezeptsammlung mit leckeren Ideen zum Kochen, Braten, Grillen und Backen. In der aktuellen Version (iPhone, iPad und Android) der Rezeptbuch-App wurde ein eigener Backup-Dienst integriert. Nun ist es möglich, neben einem Backup deiner Rezepte in der iCloud (iOS) bzw. Google-Drive (Android), die [...] Weiterlesen »