Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Heimautomatisierung mit Raspberry Pi 2 (Windows 10 IoT Core)

Komponenten und Verbrauchsmaterialien

Raspberry Pi 2 Model B
× 1
HSRel5 - I²C-Bus-Relaisplatine
Relaisboard mit 5 Relais, 3 GPIOs und I2C-Anschluss, unterstützt die Montage an Stromverteilern, basierend auf PCF8574 .
× 1
HSRel8(+8) - 8fach-Relaisplatine
Relaisboard mit 8 Relais, 8 GPIOs und I2C-Anschluss, unterstützt die Montage an Stromverteilern, basierend auf MAX7311 .
× 1
I2C-Port 16 HS 16Bit-Porterweiterung
Port-Expander-Board mit 16 GPIOs und I2C-Anschluss, unterstützt die Montage an Stromverteilern, basierend auf MAX7311.
× 1
DR-60-12 Hutschienen Netzteil 12V / 54W
12V Netzteil für alle Geräte
× 1
Hutschienen Netzteil 15W 5V 3A; MeanWell, DR-30-5
5V Stromversorgung für alle Geräte
× 1
Prototyping Shield für Raspberry Pi
Wird verwendet, um eine LED zur Statusanzeige und einen geschützten Interrupt-Eingang für die Eingangsplatinen hinzuzufügen. Bietet auch eine 3-polige Schraubklemme für zuverlässige Verbindungen.
× 1
I2C-Puffer HS
I2C-Pegelumsetzer inklusive der benötigten Pull-Up-Widerstände etc., unterstützt die Montage an Stromverteilern, basierend auf P82B96 .
× 1
Arduino Nano R3
Wird als Brücke zwischen DHT22-Sensoren und dem I2C-Bus verwendet.
× 1
433 MHz Sender und Empfänger
Zur Unterstützung von drahtlosen Relais.
× 1

Apps und Onlinedienste

Microsoft Visual Studio 2015
Arduino Software (IDE)

Über dieses Projekt

Update 2: Das Projekt wächst noch und viele neue Features sind bereits implementiert (wie ein Twitter-Client und die Integration von Telegram-Bots). Bitte überprüfen Sie das GitHub-Repository und die Versionshinweise, um mehr über die neuen Funktionen zu erfahren (oder folgen Sie mir auf Twitter). Ich hoffe, dass ich diese Projektseite so schnell wie möglich aktualisieren kann.

Update 1: Zuerst möchte ich allen "Danke" sagen, die diese Projektseite gelesen und mir Feedback gegeben haben (entweder privat oder in den Kommentaren). Es hat viel Spaß gemacht, dieses Projekt auf der Maker Faire Rome 2015 und dem Microsoft Technical Summit 2015 zu präsentieren und zukünftige Veranstaltungen warten noch. Ich habe ein paar Bilder von den Events hinzugefügt.

Ich entwickle seit 3 ​​Jahren eine Lösung für die Hausautomation. Dies beinhaltet die physische Installation der Hardware und die Entwicklung der Software.

Funktionen

Derzeit werden die folgenden Funktionen unterstützt.

Eingänge

  • Druckknopf (BUSCH-JAEGER 2020US)
  • Bewegungsmelder (Abus 360° BW8085)
  • Raumtemperatur (Mein eigenes Gerät basierend auf DHT22)
  • Raumfeuchtigkeit (Mein eigenes Gerät basierend auf DHT22)
  • Fensterstatus (geöffnet oder geschlossen mit Honeywell Slimline Reedkontakt)
  • Sonnenaufgang, Sonnenuntergang, Temperatur und Luftfeuchtigkeit (aus OpenWeatherMap)

Ausgänge

  • Lampe (Decke) (über Relais angesteuert, kein Dimmen)
  • Steckdose (über Relais angesteuert, kein Dimmen)
  • Rollladen (Fenster) (angetrieben von zwei Relais für Auf und Ab)
  • Lüfter (Decke) (angetrieben von 3 Relais für jeden Gang)
  • Badezimmerlüfter (angetrieben von 2 Relais für jeden Gang)

Andere Funktionen

  • Die Lösung enthält eine Web-App für iOS, Android, Windows, Mac OSX, mit der die virtuellen Aktoren gesteuert werden können. Die Konfiguration für die Web-App wird vom Controller geladen (Windows IoT-Instanz).
  • Alle durch Eingaben und Ausgaben generierten Ereignisse können in einem Microsoft Azure Event Hub veröffentlicht und/oder in einer CSV-Datei protokolliert werden.
  • Der Controller (Windows IoT-Instanz) bietet UDP-basiertes Tracing, das mit einer Konsolenanwendung angezeigt werden kann. Der Trace ist sehr detailliert und kann verwendet werden, um Fehler oder falsch angeschlossene Aktoren usw. zu finden.
  • Benutzerdefinierte Aktoren können hinzugefügt werden, um mehr Hardware zu unterstützen.
  • Physische Ausgänge können zu logischen Ausgängen kombiniert werden.
  • Animationen (die physischen Ausgänge innerhalb eines logischen Ausgangs können animiert werden).
  • Das gesamte System ist so resistent gegen Fehler/Hardwareausfälle wie möglich gestaltet. Auch wenn mehrere Kernkomponenten getrennt/defekt sind, funktioniert das verbleibende System weiterhin wie gewünscht (z. B. sind einige Boards im Wohnzimmer aufgrund eines Hardwarefehlers nicht erreichbar, aber das Badezimmer funktioniert weiterhin wie gewünscht)  
  • Unterstützung für 433-MHz-Remote-Relais.


Das Konzept

Als wir unser Haus vor 3 Jahren renoviert haben, beschloss ich, meine eigene Heimautomatisierungslösung zu implementieren. Die Hauptidee bei der Implementierung besteht darin, alles vom Stromverteiler aus mithilfe von Relais zu steuern. Aufgrund dieser Entscheidung muss jeder Taster, jede Lampe, Steckdose, Rollladen etc. mit einem eigenen Kabel über den Aktor an den Stromverteiler angeschlossen werden. Ein Bus wie KNX oder EIB ist nicht erforderlich.

Hinweis :Da ich in Deutschland lebe, ist jede Komponente auf 230V Stromversorgung ausgelegt. Andere Arten von Netzteilen erfordern möglicherweise weitere Modifikationen. Die Installation von 230V Kabeln (NYM), neuen Stromverteilern etc. erfolgt durch meine bevorzugte Elektriker und nicht allein.


Hardware

Der neue Stromverteiler

Wir haben einen neuen Stromverteiler installiert, der für die beiden Etagen unseres Hauses zuständig ist.

Der I2C-Bus

Generell ist der I2C-Bus nicht darauf ausgelegt, mit längeren Kabeln zu arbeiten, aber es ist möglich, die maximal mögliche Länge mit einigen Tricks zu erhöhen (ich kenne nicht den Grund für jede Optimierung, aber das sind die Dinge, die ich im WWW gefunden habe).

  • Fahre den Bus mit 5V. Der RaspberryPi steuert den Bus mit 3,3 V an, daher ist ein I2C-Level-Shifter (P82B96) erforderlich. Dies ist das erste (und einzige) Gerät, das dem RaspberryPi 2 hinzugefügt wird (in meiner Lösung Controller genannt). Das Kabel für diese Verbindung sollte so kurz wie möglich sein. Die Spezifikation erlaubt den Betrieb des Busses mit bis zu 15V, aber die Slaves wie PCF8574 unterstützen nur max. 5V.
  • Verwenden Sie ein Twisted-Pair-Kabel wie CAT7. Es ist wichtig, ein Paar für SDA&GND und ein weiteres für SCL&GND zu verwenden. Verwenden Sie kein einzelnes Twisted-Pair-Kabel für SDA&SCL. Stellen Sie außerdem sicher, dass die Abschirmung des Kabels mit PE (in Deutschland) verbunden ist.
  • Bevorzugen Sie ein Litzenkabel. Dies macht es komplexer, alles anzuschließen, erhöht aber die Länge des Kabels.
  • Fügen Sie Pullup-Widerstände mit 10k am Ende des Busses für SDA und SCL hinzu.
  • Beschränken Sie die Busgeschwindigkeit auf 100 kbit (Standardmodus), auch wenn die Slaves höhere Geschwindigkeiten unterstützen.
  • Einschließen eines I2C-Puffers (P82B96). Der IC kann als Pegelumsetzer verwendet werden oder kann verwendet werden, um den Bus in physikalische Segmente aufzuteilen. Ich habe einen dieser Puffer im Stromverteiler verwendet. Der Puffer sollte in der Mitte des Busses platziert werden.

Dieser optimierte I2C-Bus wird verwendet, um jedes Board innerhalb des Stromverteilers zu verbinden.


Die Relaisplatinen (Ausgänge)

CCTools aus Deutschland verkauft Platinen mit Relais, die an den I2C-Bus angeschlossen werden können. Es ist auch möglich, die Platinen als Einzelteile oder nur die Platine zu kaufen. Dadurch kann der Port-Expander durch pinkompatible Alternativen ersetzt werden. Ersteres ist erforderlich, da die verfügbaren Adressen der Geräte begrenzt sind. Ich habe Halter für das Relais und die ICs hinzugefügt, damit ich sie einfacher austauschen kann, wenn einer von ihnen kaputt ist. Ein weiterer Punkt ist, dass ich einen PCA9555D verwenden kann anstelle eines MAX7311 weil der PCA9555D ist günstiger und kann einfacher bestellt werden (in Deutschland).

Die HSRel5 Relaisplatine hat 5 Relais und 3 GPIOs . Alle erforderlichen Ports stammen aus dem internen PCF8574 8-Bit-Port-Expander mit 8 GPIOs . Die ersten 5 werden für die Relais verwendet und die letzten 3 können für andere Ausgänge verwendet werden. Die Relais benötigen zum Betrieb 12 V, die vom Port-Expander (der nur eine LED ansteuern kann) nicht bereitgestellt werden können. Es wird also ein Relaistreiber benötigt. Die Relais sind mit dem Relaistreiber verbunden und der Relaistreiber ist wiederum mit einem Wechselrichter verbunden. Dieser Wechselrichter ist erforderlich, da der Status aller Ports am Port-Expander HIGH ist. nachdem der IC Strom bekommt. Dadurch werden alle Relais geschlossen, was ein unbeabsichtigtes Verhalten ist.

Schlussfolgerung: Wenn das erste Relais geschlossen werden soll, muss 00011110 (MSB) . gesendet werden zum Port-Expander über den I2C-Bus. Dadurch wird der erste Port auf LOW gesetzt (die anderen Ports werden ebenfalls aktualisiert). Der erste Port des Port-Expanders ist mit dem ersten Eingang des Wechselrichters verbunden. Und der erste Ausgang des Wechselrichters ist mit dem ersten Eingang des Relaistreibers (ULN2803) verdrahtet. Als letzter Teil der Kette wird das Relais mit dem ersten Ausgang des Relaistreibers verdrahtet.

Eine weitere Relaisplatine von CCTools ist die HSRel8(+8) die einen MAX7311 . verwendet als Port-Expander und enthält 8 Relais und 8 GPIOs . Dieses Board benötigt keinen Hardware-Inverter. Dies bedeutet, dass ein HIGH Zustand für ein Relais am HSRel5 bedeutet AUS und ein HIGH Zustand am HSRel8(+8) bedeutet EIN. Dieses unterschiedliche Verhalten wird vom Treiber für diese Geräte gehandhabt und ist Teil der Software.

Jede Lampe, Fassung usw. wird an eines dieser Relais angeschlossen. Bei mir zu Hause verwende ich derzeit 8 HSRel5 und 4 HSRel8 . Ich verwende auch Platinen mit Halbleiterrelais und anderen Arten von Relais, aber um es kurz zu machen, gehe ich hier nicht auf die Details ein. Die HSRel5 ist die einfachste Relaisplatine. Aber der PCF8574 erlaubt nur 8 verschiedene Adressen. Der PCF8574 A ist der gleiche Port-Expander, hat aber 8 verschiedene Adressen. Das bedeutet, dass 16 HSRel5 kann mit dem I2C verdrahtet werden Bus.


Die Port-Expander (Eingänge)

Tasten, Bewegungsmelder und Reed-Schalter (für die Fenster) sind mit einer Platine namens I2C-Port16 HS . verdrahtet von CCTools . Dieses Board enthält einen Port-Expander (MAX7311 ), Pull-up-Widerstände (5 V, 10 K) für jeden Port und Keramikkondensatoren (100NF ). Das Board kann mit 12V oder 5V Netzteil betrieben werden. Die Keramikkondensatoren werden verwendet, um Rauschen herauszufiltern (Glitch-Filter).

Jedes Eingabegerät (Taster, Bewegungsmelder, Reedschalter) hat ein eigenes Kabel zum Stromverteiler. Ein CAT7 Kabel wird für jedes Eingabegerät verwendet, da es eine Abschirmung haben muss, die mit PE (Schutzerde) verbunden ist. Spots, die mehr als eine Taste haben, wie die Tasten für die Rollläden, können mit nur einem einzigen CAT7 . verbunden werden Kabel.

Am Stromverteiler wird jedes Eingabegerät mit einem Port des Port-Expanders und GND verdrahtet . Aufgrund der Pull-Up-Widerstände ist der Zustand an den Ports HIGH standardmäßig. Durch Drücken der Taste wird der Port mit GND verbunden was zu einem LOW . führt Zustand des Hafens. Die Bewegungsmelder und Reedkontakte funktionieren auch so.

Eine gemeinsame Unterbrechung Kabel ist mit allen Eingangsplatinen verdrahtet. Dieses Kabel ist standardmäßig hochgezogen. Im Falle eines geänderten Zustands an einem der Port-Expander setzt der entsprechende Port-Expander den Zustand des Interrupts zu LOW. Dieses Verhalten verhindert eine kontinuierliche Abfrage aller Porterweiterungen, die den I2C-Bus verwenden. Die Software am Pi2 fragt nur das entsprechende GPIO ab. Wenn der Zustand am Interrupt-GPIO geändert wurde, wird der aktuelle Zustand jedes Eingangsboards entsprechend abgefragt und bei Bedarf werden Events ausgelöst.


Raspberry Pi 2

Der Raspberry Pi 2 läuft unter Windows 10 IoT und wird mit einem kundenspezifischen Gehäuse an den Stromverteiler montiert. Es hat auch ein Prototyping-Schild mit einer Status-LED, dem Interrupt Port mit Pull-Up-Widerstand (10K ), ein Schutzwiderstand (1 K ) und ein Keramikkondensator (100NF ) zur Glitch-Filterung. Alle Kabel können mit einer Schraubklemme verdrahtet werden.

Temperatur- und Feuchtigkeitssensor

Die aktuelle Temperatur und Luftfeuchtigkeit in jedem Raum/Ort (derzeit 10) wird mit einem DHT22 (AOSONG) gemessen. Dieser Sensor liefert die aktuelle Temperatur und Luftfeuchtigkeit über ein proprietäres Protokoll, das keine Adressierung unterstützt. Dies erfordert, dass jeder Sensor mit einem Mikrocontroller verdrahtet ist. Für meine Lösung habe ich mich entschieden, einen Arduino Nano V3.0 hinzuzufügen als Sklave des I2C Bus. Der Arduino Nano liest alle 2,5 Sekunden die Werte aller angeschlossenen Sensoren aus und speichert sie lokal zwischen. Diese Werte können aus demArduino Nano . gelesen werden nach dem Senden der Port-ID (0-10). Es ist das gleiche Verhalten, wenn Daten aus Registern über den I2C-Bus gelesen werden.

Temperatur und Luftfeuchtigkeit werden in der Web-App in zwei verschiedenen Ansichten angezeigt.

Das Symbol rechts neben der Luftfeuchtigkeit ("Luftfeuchtigkeit" ) Eintrag gibt an, ob an den Wänden eine erhöhte Schimmelgefahr besteht oder nicht. Ein Wert von weniger als 60 % ist grün , weniger als 70 % sind gelb und über 70 % ist rot.

Die Web-App bietet auch eine Übersicht über alle Sensoren.


Hardware-Setup

Das folgende Bild zeigt einen Hardwareaufbau am Stromverteiler mit Ein- und Ausgangsplatinen. Die 12 V/5 V-Stromversorgung und die N/PE-Anschlüsse werden nicht angezeigt.

433Mhz Fernrelais

Während der Migration und Dokumentation des Projektes im Zuge dieser Herausforderung habe ich auch die 433Mhz Sendeeinheit entwickelt, die zusammen mit den Temperatur- und Feuchtigkeitssensoren praktischerweise in einem schlichten Gehäuse versteckt ist.

Diese Funktion macht Relaisplatinen optional. Der Arduino Nano die für das DHT22 verantwortlich ist (Temperatur- und Feuchtigkeitssensoren) senden auch die 433-MHz-Signale. Der Absender (FS1000A ) wird zusammen mit dem Temperatur- und Feuchtigkeitssensor in einem Gehäuse in einem zentralen Raum des Hauses montiert. Um die Reichweite des Senders noch weiter zu erhöhen, wird dieser zusätzlich mit 12V gespeist (funktioniert auch mit 3.3 aber kurzer Reichweite).


Eines der Hauptprobleme bei den Remote-Relais besteht darin, dass sie keine Statusinformationen senden. Somit ist es für den Benutzer absolut möglich, Zustandsänderungen des Systems mit der Original-Fernbedienung vorzunehmen. Um die Synchronisierung zu erzwingen, aktualisiert die Softwarelösung den Status automatisch alle 5 Sekunden. Dies hält den Zustand, der in der Web-App angezeigt wird, so zuverlässig wie möglich (wodurch die Verwendung der Original-Fernbedienungen jedoch nutzlos wird).

Remote-Relais können in jeder Automatisierung verwendet werden und bieten die gleichen Funktionen wie Relais von einer Relaisplatine.

Die Codes der 433-MHz-Fernbedienung können derzeit nur manuell über eine Schaltung auf einem Prototyping-Board konfiguriert werden. Diese Codes werden dann in die Konfiguration kopiert. Der Fritz Skizze für die erforderliche Platine wird unten referenziert und das Arduino Sketch befindet sich im Repository im Ordner CK.HomeAutomation.SensorsBridge\RemoteCodeFinder .


Die digitale Katzentoilette

Die Katzentoilette für unsere Katze steht im Abstellraum, der leider kein Fenster hat, um nach Gebrauch etwas frische Luft hereinzulassen. Aufgrund dieses Problems ist die Box an einen alten unbenutzten angeschlossen Kamin. Vor dem Rohr, das an den Rauchabzug angeschlossen wird, befindet sich ein Ventilator, der mit einem Relais am Stromverteiler verdrahtet ist. Ein Bewegungsmelder im Lagerraum erkennt sogar die Katze und startet den Ventilator für einige Minuten.

Die Katzentoilette hat ein eigenes Symbol in der Web-App, mit dem der Ventilator aus der Ferne gesteuert werden kann.

Durch die Analyse der generierten Protokolle und die Filterung nach den entsprechenden Aktoränderungen (Azure SQL DB oder CSV-Datei) ist es uns möglich, die Katzentoilettennutzung im Zeitverlauf zu verfolgen und somit die erforderlichen Reinigungsintervalle zu verbessern.


Software

Vor der Veröffentlichung von Windows 10 IoT lief die Software auf einem G120 von GHI-Elektronik mit dem .NET Micro Framework in Version 4.3. Aber hauptsächlich aufgrund der mangelnden Leistung (120Mhz, 16MB RAM und Interpreter) funktionierten nicht alle geplanten Funktionen wie geplant.

Vor ein paar Wochen habe ich mit der Migration der Codebasis begonnen, um sie als Windows 10 IoT-Hintergrundaufgabe auszuführen und gleichzeitig Funktionen wie die Microsoft Azure-Integration hinzuzufügen.

Das unten referenzierte Repository enthält die Visual Studio 2015-Lösung und alle abhängigen Projekte. Es ist alles, was erforderlich ist, um den Raspberry Pi 2 als Home Automation Controller zu verwenden, während er für die Erweiterung durch das Schreiben benutzerdefinierter Treiber für andere Relaisplatinen oder Sensoren offen ist.


Projekte

Die Projekte der Softwarelösung sind gruppiert in:

  • App (enthält die Web-App)
  • Controller (Enthält das Startprojekt für den Pi und die Home-Konfiguration)
  • SDK (enthält alle freigegebenen Projekte)

CK.HomeAutomation.TraceViewer

Dieses Projekt enthält eine Konsolenanwendung, die vom Controller (Pi2-Instanz) gesendete Trace-Nachrichten anzeigt. Derzeit werden alle Benachrichtigungen über einen UDP-Socket kontinuierlich an eine Broadcast-Adresse gesendet. Daher ist das Öffnen eines Ports (z. B. 19227) an der Firewall erforderlich. Ich benutze den TraceViewer hauptsächlich, um Fehler und/oder Fehlkonfigurationen zu finden.

Alle Klassen, die zum Versenden von Benachrichtigungen benötigt werden, befinden sich im Projekt CK.HomeAutomation.Notifications .


CK.HomeAutomation.Networking

Dieses Projekt enthält die Implementierung eines einfachen HTTP-Servers. Der HTTP-Server wird für die Web-App benötigt und liefert Statusinformationen im JSON-Format und nimmt Anfragen mit Statusänderungen entgegen.

Der HTTP-Server kann auch die Web-App hosten. Aufgrund unterschiedlicher Paketnamen muss der Inhalt der Web-App mithilfe der administrativen SMB-Freigabe manuell in den Zielordner hochgeladen werden.

Zielordner: \\[IP]\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\app


CK.HomeAutomation.Controller.*

Jedes Projekt in den Controllern Ordner ist ein Startup-Projekt Implementieren einer IoT-Hintergrundaufgabe . Bis zur Bereitstellung einer ausführlichen Dokumentation kann man diese Projekte (derzeit bei mir zu Hause im Einsatz) als Beispiel verwenden.

Zusätzlich biete ich das Projekt CK.HomeAutomation.Controller.Empty als Ausgangspunkt für das Herumspielen mit der Lösung. HINWEIS :Der Controller namens Cellar der für die Garten- und Parkplatzbeleuchtung zuständig ist, wird in dieser Dokumentation nicht behandelt.

Bevor Sie die Lösung testen, sollten Sie mit den folgenden Aufgaben vertraut sein:

  • Einrichten eines Raspberry Pi2 mit Windows 10 IoT von Grund auf (https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)
  • Verbinden Sie sich über eine Microsoft PowerShell-Remote-Sitzung mit dem Raspberry Pi2 (https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm)
  • Bereitstellen einer universellen Windows-App auf dem Raspberry Pi2.

Das Lösungsverzeichnis enthält auch eine kleine PowerShell Skript namens SetupRaspberryPi.ps1 um eine gemeinsame Befehlskette zum Einrichten des Raspberry Pi2 auszuführen. Es wird empfohlen, aber nicht erforderlich, dass Sie das Skript ausführen (passen Sie alle IP-Einstellungen an Ihre eigene Infrastruktur an ).

CK.HomeAutomation.Aktoren

Dieses Projekt bietet die höchste Abstraktionsebene. Die Wohnung, Räume und jeder Aktor wie Taster, Lampen, Steckdose etc. werden in diesem Projekt implementiert und bieten spezielle Ereignisse und Methoden entsprechend den Eigenschaften jedes Aktors.

Räume können über eine flüssige API erstellt werden, wodurch die Konfiguration leicht zu lesen und zu verstehen ist.

Bewegungsmelder - Aktuator

Dieser Aktor dient der Personen- und Bewegungserkennung in den Räumen. Ich benutze den Bewegungsmelder BW8085 360° von Abus die an der Decke jedes Zimmers montiert wird.

Die Implementierung eines Bewegungsmelder-Aktors bietet zwei Ereignisse. Der erste von beiden ist der MotionDetected Ereignis, das ausgelöst wird, wenn eine Bewegung erkannt wird. Der physische Bewegungsmelder hält die Ausgabe auf einem HIGH Ebene, bis keine weitere Bewegung erkannt wird, woraufhin das zweite Ereignis DetectionCompleted wird gefeuert.

Das folgende Bild zeigt einen Eintrag für einen Bewegungsmelder in der Web-App. Jeder Bewegungsmelder kann (nur in Software) über die Web-App deaktiviert werden. Der rote Punkt zeigt an, dass derzeit eine Bewegung erkannt wird.

Taste - Betätiger

Dieser Betätiger stellt einen physischen Taster dar. Die Schaltfläche hat zwei Ereignisse, die anzeigen, dass sie gedrückt wurde. Die Veranstaltung PressedShort wird ausgelöst, wenn die Taste kurz gedrückt wurde (<1,5 Sekunden), während das Ereignis PressedLong wird nur gezündet, wenn die Taste länger gedrückt wurde (> 1,5 Sekunden). Auch das zweite Ereignis wird automatisch ausgelöst, wenn die Dauer (1,5 Sekunden) überschritten ist und der Taster nicht losgelassen wird. Diese beiden Ereignisse ermöglichen Schaltflächen mit mehreren Funktionen.

Beispiel:

Die Lösung enthält auch einen VirtualButton . Diese Schaltfläche implementiert dieselbe Schnittstelle (IButton ) und kann nur mit der Web-App "gedrückt" werden.


Sockel, Lampe, BinaryStateOutput – Aktor

Die Basisklasse BinaryStateOutput wird für jeden Aktor verwendet, der einen binären Zustand unterstützt (EIN und AUS ) nur. Beispiele für diese Aktoren sind Steckdose und Lampe . Die Basisimplementierung bietet Methoden zum Aktualisieren (ON und AUS ) oder den Zustand umschalten. Schaltflächen kann mit Objekten interagieren, die den IBinaryStateOutputActuator . implementieren , dies ermöglicht das Hinzufügen mehrerer benutzerdefinierter Aktoren.

Das folgende Bild zeigt die Vorlage für jeden binären Zustandsausgang. Das Symbol auf der linken Seite ist für Steckdosen und Lampen unterschiedlich. Individuelle Icons wie die Giftflasche am "Mückenstecker " Eintrag kann über die Konfigurationsdatei definiert werden (Configuration.js ) für die Web-App.

CombinedBinaryStateAktuatoren

Jeder physische Aktor vom Typ BinaryStateOutput kann verwendet werden, um einen logischen Binärzustandsaktor zu erstellen. Ein Aktor muss auf "Master" gesetzt werden, was benötigt wird, um den neuen Zustand zu ermitteln, wenn der Zustand umgeschaltet werden soll. Der Aktor hat eine eigene ID und kann wie jeder andere Aktor mit binären Zustandsausgaben verwendet werden (die erforderliche Schnittstelle ist implementiert).

Ein wichtiger Vorteil dieser Implementierung ist die Art und Weise, wie Zustandsaktualisierungen gehandhabt werden. Normalerweise wird der neue Zustand eines Binärzustandsausgangs jedem Gerät einzeln über den I2C-Bus übergeben. Dieses Verhalten führt zu kurzen, aber sichtbaren Verzögerungen zwischen den einzelnen Aktorstatusaktualisierungen. Der CombinedBinaryStateActuator verhindert diese Verzögerung durch die interne Änderungsverfolgung.

Beispiel:

StateMachine - Aktuator

Komplexere Zustände als ON and OFF are possible to configure using the StateMachine . This actuator allows multiple states for ports (relays) or other binary output actuators.

Example with a fan:

The state machine provides methods to turn it off or moving to the next state. The state is reset to OFF if the last state of the state machine has been reached and the initial state should be applied next.

Another use case for the state machine is creating templates or "moods" for a couple of other actuators.

Example mood:

The method WithTurnOffIfStateIsAppliedTwice ensures that the state of the state machine will change to OFF if a particular trigger has been activated a second time as the configured state is still active (Example :Pressing the push button for "DeskOnly " will activate the "DeskOnly " mood. If the push button is pressed again while the "DeskOnly " mood is still active, the actuator applies the OFF Zustand. A dedicated push button for the OFF state is not needed.).

The following image shows the template for state machines. The caption and image of each state can be changed using the configuration file of the web app.

TemperatureSensor / HumiditySensor

The values for temperature and humidity are read using the I2C sensors bridge. Both values are read from a single physical device but separated into an actuator for temperature and an actuator for humidity. The values are automatically polled every 10 seconds.


Home Automation !=Home Control

As mentioned before the importing thing is automation. Without automations, the whole solution is only one big remote for the home. This solution provides several automations:


AutomaticTurnOnAndOffAutomation

This automation sets the connected binary state outputs to ON. A push button or motion detector can be used as the trigger. It is required to specify the desired duration of the ON Zustand. The state is set to OFF if that range exceeds. The state is automatically set to OFF if the specified range is exceeded. An optional time range can be provided in which the automation rule is enabled. Predefined ranges for "day only " or "night only " are available (requires a weather station object).

Example:

AutomaticRollerShutterAutomation

This automation is used to move several roller shutters automatically according to several conditions. One of these conditions is sunrise and sunset which means that the roller shutters are automatically moving up at sunrise and moving down at sunset (requires a weather station object). It is also possible to add a diff to sunrise and sunset. According to the sunrise and sunset feature, it is possible to specify a time for "do not open before" which will ensure that the roller shutter is never opened before that point in time has been reached. Another condition is the outside temperature (also requires a weather station object), which enables the roller shutters to be closed automatically if the outside temperature exceeds a certain value like for example 28°C. This feature is intended for roof windows.

The position of the roller shutter is also tracked via time measuring. The required duration between up and fully closed must be configured.

Example:

The following screenshot shows an entry for roller shutters at the web app. The progress bar over the buttons is showing the current position.

AutomaticConditionalOnAutomation

This automation is used to set the state of several binary state outputs to ON while conditions are matching. This automation is used for lamps in the garden which are only ON at night. It is possible to specify one time range for the ON state and multiple time ranges for the OFF Zustand. It is also possible to use sunrise and sunset for the ON state (requires a weather station object).

Example:

General automation and complex conditions

The latest feature of the new implementation is a generic automation and condition framework. The generic automations are designed to execute custom actions if the configured conditions are met. This is checked every time a trigger is invoked via a push button, motion detector, interval or any other code.

Weather station

Many of the automations and conditions are depend on environment conditions like the current weather, sunrise and sunset times, outside temperature or humidity. All of these information is currently provided every 60 seconds by a virtual weather station backed by WebApi of OpenWeatherMap. The virtual weather station is implemented using the interface IWeatherStation , this makes it easy to seamlessly integrate physical stations located in garden.


CK.HomeAutomation.Hardware

This project contains the drivers for all currently supported input and output devices. Specifically the relay boards, input boards from CCTools and 433Mhz remote switches. The driver and source code of the Arduino Nano (sensor bridge and 433Mhz sender) is included too. All higher level objects like actuators and automations are implemented against interfaces to add an abstraction layer to the concrete bare to the metal hardware classes. This makes it easy to later add further drivers for other boards and sensors.


CK.HomeAutomation.Telemetry

This project contains two components. The first one is a CSV writer which writes every changed state to the "LocalState" directory of the package. This file can be downloaded from the Pi2 using the administrative SMB share: \\192.168.1.15\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\BinaryStateOutputActuatorChanges.csv .

Example content of the the CSV file:

The second component is the AzureEventHubPublisher . This component sends events for any state has change and the values of any sensor change to an Microsoft Azure EventHub . Events are also generated if push buttons are pressed or motion is detected. The solution contains the SQL scripts for creating the required SQL database tables and the required query for a StreamAnalytics job (in folder #Azure).

Every changed actuator state generates to entries at the Azure SQL database. The first entry contains the START event and the new state. The second entry contains the END event with the total duration of that state in seconds.

I already created some reports using a free Microsoft PowerBI account.

WebApp

The software solution contains the project CK.HomeAutomation.App . This project is a web app building on top of AngularJS , jQuery and Bootstrap . The room configuration is read from the controller (Pi2) and the UI is generated according to the existing rooms.

The web app can be opened directly from the file system using the index.html  file or uploaded to a web server. The file Configuration.js  is used to configure and translate the web app. The IP address of the Controller (Pi2 instance) must be set in the configuration file.

The web app can be added to the home screen of iOS only if it is hosted at a web server (I am personally using a BananaPi with nginx). Adding a web app to the home screen is described here: http://www.tech-recipes.com/rx/44908/ios-add-website-shortcut-to-home-screen/

Hosting the web app at the Raspberry Pi2 is already in progress but currently not supported completely.

Terminal

The web app also runs at the living room. An old iPad 3 is used as the terminal.

Zukunft

The solution described above is still under development and will get more features in the future. Some of the planned are: 

  • Support for actuators based on infra red signals (like an RGB-LED-Strip).
  • Support for XML based configuration files in addition to code based configuration.
  • Implementation of a dedicated tablet web app with a different layout.
  • Support for reed switches for windows which are showing the state at the web app.
  • Libraries with drivers for devices from other manufacturers (like 433Mhz remote switches).
  • Controlling of the valves of the heating system (outputs and temperature reading already implemented).
  • Alarm system which sends notifications if motion is detected or windows are opened (requires implementation of point 4).
  • A hardware weather station.
  • Automatically closing roller shutters if the window is open and rain is detected (the currently used weather API already provides the required information).
  • More Unit Tests.
  • Detailed documentation at the GitHub wiki.
  • Animations (this feature was already implemented using NETMF but I was not able to migrate it completely within the time range of the IoT contest)

If you are interested to contribute to this project (hardware, software, documentation or anything else), feel free to contact me.

Code

CK.HomeAutomation
This repository contains the complete solution including the SDK, WebApp and my personal configuration.https://github.com/chkr1011/CK.HomeAutomation.git

Schaltpläne

This is the circuit which us required to read the 433Mhz codes from the remote control. The sketch contains the circuit board of the DHT22 sensor which is mounted at every room. The shield contains a status LED and screw terminals for the I2C bus and the interrupt. This is a regular temperature and humidity sensor which conains a 433Mhz sender. Only one is required for the entire home.

Herstellungsprozess

  1. Himbeer-Pi-Temperaturlogger
  2. Wetterfernüberwachung mit Raspberry Pi
  3. SensorTag zu Blynk mit Node-RED
  4. Bewegungssensor mit Raspberry Pi
  5. Überwachen Sie Ihre Haustemperatur mit Ihrem Raspberry Pi
  6. Windows 10 IoT Core – Lesen von Herzfrequenzpulsen
  7. RASPBERRY PI HOME AUTOMATION
  8. Windows 10 IoT Core auf Raspberry Pi 2 – Adafruit-Sensordaten
  9. Windows 10 IoT Core und SHT15
  10. Windows 10 IoT Core für Raspberry Pi 3 Model B+