Das I2C WLAN Modul mit Wemos D1 mini und die dazu passenden I2C I/O Module von www.Horter-Shop.de habe ich euch bereits vorgestellt. Ich habe viele Anfragen zu einer Web-GUI und der Einbindung ins Smart Home bekommen. Deswegen gibt es jetzt den noch nicht fertigen aber bereits funktionsfähigen Sketch für das I2C WLAN Modul. Damit wird es zum I2C WLAN Gateway und fungiert als Schnittstelle zum Smart Home. Wenn es Erweiterungen gibt, aktualisiere ich auch das GitHub Repository. So habt ihr immer die aktuellste Version. Wenn ihr Fragen, Anregungen oder eigene Erweiterungen durchgeführt habt, teilt diese doch gerne mit anderen Nutzern!
Übersicht
Das I2C WLAN Gateway ist nicht intelligent und ist nur eine Schnittstelle die mit einer vorhandenen Smart Home Steuerung wie z. B. dem Loxone Miniserver kommuniziert. Zusätzlich ist noch die direkte Steuerung über eine Web-GUI möglich. Folgend eine kleine Übersicht welche Funktionen bereits enthalten, welche noch nicht vollständig implementiert und welche geplant bzw. eventuell noch umgesetzt werden.
Folgende Funktionen sind in der Steuerung enthalten:
Web-GUI – Steuerung und Visualisierung der I2C I/O Module über eine Webseite
UDP ausgehend – Das I2C Input Modul sendet ein UDP Paket an eine Steuerung
HTTP GET eingehend – Das Output Modul über HTTP GET Befehl schalten
OTA – Over the Air Update vom Gateway
Telnet – Debugging ohne serielle Verbindung
Nicht vollständig implementiert:
Interrupt – Aktuell wird das Input Module nur bei Signal auf PIN 0 abgefragt
HTTP POST eingehend – Wird von der Webseite zum schalten der I2C Output Module benutzt, ist aber nicht dokumentiert
HTTP GET ausgehend mit Authorization – Sendet aktuell nur beim Start einen Befehl an den Loxone Miniserver
Features die geplant bzw. möglich sind:UDP eingehend – Das I2C Output Modul über UDP Pakete steuern (Erledigt)I2C direkt – Direkte Ansteuerung der I2C Module ohne Library (Erledigt)
Touch LCD – Steuerung und Visualisierung der I2C Module über ein Nextion LCD
20×4 LCD – Anzeige von Warnmeldungen etc. über ein 20×4 Zeichen LCD
Ethernet Shield – Aufgrund einer Anfrage habe ich auch mal das Thema Ethernet Modul für den Wemos D1 mit auf den Plan genommen
Einsatzszenario
Meine Werkstatt wird jetzt seit ein paar Monaten über das I2C WLAN Gateway gesteuert. Es sind nur ein paar Ein- und Ausgänge angeschlossen, dies ist aber für ein Beispiel genau richtig. Am I2C Input Modul sind aktuell ein Taster für Licht und der GEV Bewegungsmelder angeschlossen. Das I2C Output Modul schaltet über Finder Koppelrelais Licht, Steckdosen, Ladegeräte und über einen Schütz den Drehstromanschluss.
Der Sketch
Das Wichtigste vorweg, in meinem GitHub Repository findet ihr alles was ihr benötigt. Über den grünen “Clone or Download” Button könnt ihr auch alles herunterladen.
GitHub Repository I2CWLANGateway (Externer Link)
Leider ist der Sketch teilweise nicht so leicht verständlich, dafür ist der Sketch einfach zu groß und noch nicht ausreichend optimiert. Wie schon gesagt, wenn ihr eine einfachere oder bessere Lösung für die einzelnen Punkte habt, schreibt sie gerne als Kommentar oder schickt mir eine E-Mail über das Kontaktformular.
Struktur
Der Sketch besteht aktuell aus zwei Dateien. Die Datei I2CWLANGateway.ino enthält den eigentlichen Gateway Sketch, benötigt aber noch die I2CWLANGateway_HTML.ino für den Aufbau der Webseiten. Legt einfach beides in einen Ordner I2CWLANGateway und startet den Sketch.
Definition der Module
Für jedes I/O Modul muss ein entsprechender Block angelegt werden. Weiter unten müssen zusätzlich noch mehrere Funktionen für die Input und Output Module kopiert und angepasst werden. Das ist nicht wirklich schön, aber es funktioniert. 🙂 Es ist geplant, alles irgendwann etwas übersichtlicher zu gestalten.
Function OpenLoxoneURL
Für die Anmeldung über den Webservice am Loxone Miniserver werden Username und Password benötigt. Diese Informationen werden verschlüsselt in der Variable LoxoneAuthorization abgelegt. Mit dem folgenden Windows Powershell Befehl kann die Kombination für die Basic Authentication verschlüsselt werden.
$AuthVal = "admin:password" [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($AuthVal))
Output Modul – HTTP
Der HTTP-Befehl zum setzen der Ausgänge auf dem Output Modul lautet wie folgt und teilt sich in drei Parameter auf.
http://<IP-Adresse>/set?module=21&out=3&value=1
Mit diesem Befehl könnt ihr auf dem Board mit der Adresse 0x21 die Ausgänge schalten. Für andere Adressen muss der Sketch entsprechend angepasst bzw. erweitert werden. Im Beispiel wäre es der dritte Ausgang (3) und der Befehl diesen einzuschalten (1).
Rückblick und kurzer Ausblick
Die Steuerung der Werkstatt war, wie im Arduino Smart Home Projekt Beitrag beschrieben, zunächst ganz anders geplant. Seitdem sind viele neue Produkte auf dem Markt erschienen. Das Projekt Arduino Smart Home soll aber trotzdem noch umgesetzt werden, wenn auch mit geänderter Hardware und anderen Protokollen. Es schwirren noch viele Ideen in meinem Kopf umher und die Kisten sind voll mit Sensoren und Technik die erprobt werden möchte. Viele kleinere aber doch nicht unwichtige Hürden wie z. B. der energiesparende Betrieb eines Mikrocontrollers mit Solarzelle und LiPo-Akku sind hoffentlich bald erledigt! Dann geht es weiter!
Hallo, habe mir mal die zusammenstellung bei Horter besorgt leider komme ich beim Kompilieren leider diese meldung :
………I2CWLANGateway.ino:12:24: fatal error: PCF8574.h: No such file or directory
#include //
^
compilation terminated.
Hallo Christoph,
ich habe ganz vergessen im Beitrag auf die noch benötigte Library für den PCF8574 hinzuweisen. Den Sketch wollte ich noch so umbauen, dass die Library nicht mehr benötigt wird. Bis dahin kannst du die Library unter dem folgendem Link herunterladen.
https://github.com/RobTillaart/Arduino/tree/master/libraries/PCF8574
Viele Grüße
Stefan
Hallo Stefan,
beim Kompilieren I2C WLAN Gateway bin ich auf folgenden Fehler gestoßen :
I2CWLANGateway:226:54: error: lvalue required as unary ‘&’ operand
module = (int) strtol( &(WebServer.arg(“module”))[2], NULL, 16);
^
exit status 1
lvalue required as unary ‘&’ operand
Ich verwende Arduino 1.8.9
Hallo Werner,
ich habe vor kurzem den Sketch selbst noch einmal kompiliert und hatte den gleichen Fehler. Ich schreibe deshalb auch gerade an einer aktualisierten Version die zudem auch andere Bugs behebt. Nächste Woche lade ich eine neue Version auf Github hoch.
Viele Grüße
Stefan
Hallo Stefan,
vielen Dank erstmal für die schnelle Information.
Ich habe vor ein paar Tagen die Module von Horter erhalten und werde erstmal etwas löten.
Geplant habe ich das Outputmodul mit Magnetventilen für die Gartenbewässerung einzusetzen.
Als Steuerung verwende ich nicht Loxone sondern FHEM.
Das sollte über UDP eigentlich auch gut funktionieren.
Viele Grüße
Werner
Servus Stefan,
die Steuerung meiner Wärmepumpe verwendet intern I2C. Das habe ich am Bord gesehen wo die div. Temperatursensoren angeschlossen sind. Dokumentiert ist der Bus aber nicht. Siehst du eine Möglichkeit das man sich mit einem Gerät auf den Bus hängt und die div. Sensoren Werte abgreift und in weitere Folge mit einem anderen System visualisiert bzw. die Daten sammelt und in eine Datenbank schreibt? Wäre hier ev. die I2C WLAN Gateway eine passender Zugang?
sg Franz
Hallo Franz,
das könnte mit einem I2C Sniffer funktionieren, ohne eine genaue Beschreibung über die Kommunikation wird es sicherlich sehr schwierig die Daten auszulesen. Hat die Wärmepumpe keine eBus, Modbus (RTU / TCP), BACnet oder sonstige Schnittstellen? Hat der Hersteller vielleicht ein Modul zum Nachrüsten im Angebot?
Viele Grüße
Stefan
Hallo Stefan,
danke für deine Rückmeldung. Leider gibt es keine Beschreibung zur Kommunikation. Den Hersteller gibt es auch nicht mehr. Ich sehe nur am Board noch ungenutzte Anschlüsse die mit I2C beschriftet sind.
Wenn ich das richtig verstehe und zusammenfassen darf.
In der Steuerung der Wärmepumpe ist der I2C Master verbaut der die div. Slaves (Sensoren) ansteuert.
Mit einem zusätzlichen Gerät als Slave kann ich mich nicht auf den Bus drauf hängen und die div. Werte der Sensoren auslesen.
Hallo Franz,
theoretisch würde es mit einem I2C Sniffer funktionieren, einfach wird es aber definitiv nicht die Daten wieder lesbar zu machen. Ein kurzes und gutes Beispiel was dich beim Reverse Engineering erwartet, findest du auf dem Blog von Horter und Kalb von denen auch das I2C WLAN Gateway stammt.
Viele Grüße
Stefan