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

App des Tages: Die Brille - Kinderbuch-App

Die Kinderbuch-App "Die Brille" entführt in das interaktive Abenteuer des kleinen Max, der an einem schönen Sommertag eine magische Brille findet. In neun abwechslungsreichen Szenen können Kinder die Brille selbst aufsetzen und in eine bunte und herrlich verrückte Abenteuerwelt mit liebevoll animierten Figuren eintauchen. Eine Sprecherin, Musik und Soundeffekte machen aus dem digitalen Kinderbuch ein [...] Weiterlesen »


Hinzufügen von Website-Icons für iPhone, iPad und Android-Geräte

So ziemlich jeder Webseitenbetreiber hinterlegt im Wurzelverzeichnis seiner Webseite ein Favicon. Diese kleine Grafik wird dann im Browser-Tab oben neben dem Namen der Webseite angezeigt, genauso wie beim setzen eines Bookmarks bzw. Lesezeichens. Manch einer vergisst jedoch, dass inzwischen etliche Benutzer vorwiegend mit Mobilgeräten bzw. Smartphones wie iPhone, iPad oder Android-Smartphones und Tablets im Internet [...] Weiterlesen »


Einkaufszettel-App jetzt auch für Apple-Watch

Produkte manuell oder aus dem integrierten Bestand hinzufügen (es sind über 2000 in 17 Hauptkategorien), nach Abteilungen deines Marktes sortieren und schon kann dein Einkauf los gehen. Geräteübergreifend synchronisiert wird zumindest unter iOS und MacOSX vollautomatisch über iCloud. Die Einkaufszettel-App gibt es neben iOS, MacOSX und Android nun auch für deine Apple Watch. So hast [...] Weiterlesen »


Telegram Messenger und die Bot API

Telegram ist im Prinzip ein Messenger ähnlich Whatsapp oder Threema , kostenlos und leicht zu bedienen. Ich möchte nicht sagen das dieser besser oder schlechter ist als andere Messenger, allerdings gefällt mir die Telegram Bot API sogut, dass ich an dieser Stelle ein kleines Tutorial dazu schreiben möchte. Aber zunächst ein paar Randinformationen. Telegram ist [...] Weiterlesen »


Projekt: Makiwara 2.0

Es gibt bereits unzählige Bauanleitungen im Internet, wie man einen Makiwara (aus Japan stammendes Sportgerät) herstellt. Mein Eigenbau ist daher absolut nicht neu, aber alternativ und vor allem funktional. Ziel des Ganzen ist die Schlagwirkung mit dem iPad aufzuzeichnen und zu analysieren. Desweiteren sind verschiedene Modi möglich um neben Kraft auch ein nettes Reaktionstraining durchzuführen. [...] Weiterlesen »