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

Physical Home Automation Interface

Komponenten und Verbrauchsmaterialien

TowerPro Servo
× 1
Kleine Scharniere
× 1
Schaltflächen
× 1
Arduino Yun
× 1
100 A Stromwandler
× 1
Widerstände und Kondensatoren
× 7

Über dieses Projekt

Sehen Sie sich die beiden folgenden Videos an, um eine kurze Erklärung dieses Projekts zu erhalten.

Physical Home Automation InterfaceInterface mit realer Steuerung

Eine Schnittstelle übermittelt Informationen und ermöglicht dem Benutzer, Dinge zu steuern. Die meisten Heimautomatisierungsplattformen setzen auf eine „virtuelle Schnittstelle“. Sie zücken ein Smartphone und öffnen die App, um zu sehen, was in Ihrem Haus los ist, und schalten das Licht ein und aus. Das funktioniert gut, wenn Sie weg sind. Aber das Betrachten einer virtuellen Darstellung und das Parsen der Informationen auf dem Display erfordert Arbeit. Es erfordert Konzentration und fühlt sich nicht intuitiv an.

Ich wollte eine „physikalische Schnittstelle“ schaffen – ein kleines Musterhaus, das die Dinge, die ich mit meinem echten Haus wissen möchte, physisch nachahmt. Wenn das Garagentor geöffnet wird, möchte ich, dass sich auch das Garagentor des Modells öffnet. Dieses Musterhaus könnte auf meinem Couchtisch stehen, und ich kann einen Blick darauf werfen, um zu sehen, ob das Garagentor vor dem Schlafengehen offen gelassen wurde. Oder ich kann dies auf meinem Schreibtisch bei der Arbeit haben, über VPN mit meinem Zuhause verbunden. Wenn ich bei der Arbeit bin, kann ich nachsehen, ob die Haustür offen gelassen wurde. Diese physische Schnittstelle kann so kreativ oder nützlich sein, wie ich sie mache.

In den folgenden Schritten werde ich

  1. Baue ein Musterhaus, um Dinge wie die Türposition, den Energieverbrauch und ob ein Licht angelassen wurde anzuzeigen.
  2. Erstellen Sie einen Energiemonitor mit der Open Energy Monitor Arduino-Bibliothek und geben Sie Informationen zum Energieverbrauch an das Modellhaus und an OpenHAB
  3. Geben Sie mehrere Möglichkeiten an, die Tür-/Fensterposition an das Modellhaus zu senden. Zeigen Sie, wie die Daten des Wink Hub und des Wink Kontaktsensors „Tripper“ in einem Heimwerker-Hausautomationssystem genutzt werden können.
  4. Verwenden Sie Wink und Arduino, um Ausgaben durchzuführen, z. B. das eigentliche Garagentor zu öffnen/schließen oder das Licht ein- und auszuschalten.

Das Modellhaus verfügt über einige Servos und LEDs, die mit einem Arduino-Controller verbunden sind. Dieser Controller abonniert MQTT-Nachrichten, die Türpositionen und Energieverbrauch anzeigen, und steuert die Servos entsprechend an. Dieselbe Idee mit der LED, die anzeigt, ob ein Licht an oder aus ist. Es gibt einige Optionen, um diese Sensorinformationen an den MQTT-Broker zu senden, daher werde ich dies in späteren Schritten näher erläutern. Mittendrin ein Raspberry Pi mit einem MQTT-Broker (Mosquitto) und OpenHAB. OpenHAB wird zwar nicht benötigt, um das Musterhaus zu betreiben, aber es wird benötigt, um die Schnittstelle für die Smartphone-App bereitzustellen und eine Fernüberwachung und -steuerung zu ermöglichen. Nur weil ich eine physische Schnittstelle haben möchte, heißt das nicht, dass ich bereit bin, die virtuelle Schnittstelle wegzuwerfen.



Das Musterhaus hat auch zwei Knöpfe. Eine der Tasten schaltet eine Zigbee-Glühbirne ein/aus. Der andere Knopf öffnet und schließt das Garagentor (am ECHTEN Haus).


Teil 1:Hausbau

1) Modellhaus bauen

2) Steuerungsoptionen, Verkabelung und Code

Teil 2:Eingänge (Sensoren)

3) Sensor:Energiemonitor

4) Sensor:DIY-Sensorknotenoption

5) Sensor:Wink Hub &Tripper Kontaktsensor

Teil 3:Ausgaben

6) Lichter

7) Garagentoröffner


Schritt 1:Modellhausbau

Ich beabsichtige nicht, dass dieser Schritt vorschreibend ist. Ich bin ziemlich begabt was Kunst und Handwerk angeht, also zeige ich nur, wie ich mein Musterhaus gebaut habe. Sie sollten es so bauen, dass es Ihrer eigenen Wohnung ähnelt und die Dinge widerspiegelt, die Ihnen wichtig sind. Hier ist viel Raum für Kreativität. Einige der Komponenten in diesem Bild (wie der Stromwandler) werden in späteren Schritten verwendet.

Komponenten :

  • (1) Kästchen. Es liegt an Ihnen, wie groß und welche Proportionen.
  • (3) Tower Pro SG90 Servo http://www.dx.com/p/towerpro-sg90-9g-mini-servo-w...
  • (2) kleine Scharniere http://www.homedepot.com/p/Stanley-National-Hardw...
  • (einige) Klebematerial. Ich habe Doppelkleber von 3M Haken verwendet.
  • Arduino Yun oder Arduino Uno mit Ethernet-Schild.
  • Schaltflächenhttp://www.radioshack.com/mini-spst-1-5-amp-moment...
  • Sachen im Haus herumliegen


Dach

Ich habe eine der Seitenklappen der Box ausgeschnitten und an der anderen (noch befestigten) Seitenklappe befestigt, um ein Dach zu bilden. Ich habe eine kleine Kiste verwendet, um eine Struktur für den rechten Winkel bereitzustellen, und später mit einem Lego-Stück besser unterstützt. Sie können wahrscheinlich einfach alles verwenden, was Sie im Haus haben, um diesen rechten Winkel zu erstellen.

Türen / Fenster

Schneiden Sie die Löcher für die Türen, die Sie zeigen möchten. Befestigen Sie ein oder zwei Scharniere mit Doppelklebeband an der Tür und befestigen Sie sie am Haus. Ich weiß, nichts Besonderes, also improvisieren Sie mit dem, was Sie im Haus haben. Ich habe doppelseitige 3M-Schaumkleber verwendet, die mit Haken geliefert werden. Ich habe diese Schaumstoffklebestreifen auch verwendet, um die Servomotoren zu montieren. Beim Garagentor bewegt der Servomotorarm das Garagentor auf und die Schwerkraft schließt das Garagentor. Für die Vordertür musste ich eine Schnur an der Klapptür anbringen, damit der Servoarm die Tür öffnen kann. Das gelbe Lego-Stück, das Sie sehen, ist da, um das Servo vom Scharnier zu versetzen.

//www.youtube.com/embed/z-xyVXUSqNM

Energiezähler

Nichts Besonderes. Schneiden Sie einfach ein pfeilförmiges Ding aus und befestigen Sie es am Servoarm. Schneiden Sie eine vage strauchartige Form aus und markieren Sie sie mit einer Kilowattskala, und passen Sie den Servomotor mit dem Strauch dazwischen durch Reibung auf die Schachtel an.

Über dem Energieverbrauchsservo habe ich eine rote LED aufgeklebt.

Ich habe auch zwei Tasten, um Licht und das Garagentor zu steuern. Dies sind momentane Tasten. Die Knöpfe sind außen mit einer Mutter verschraubt, um sie an der Kartonwand zu halten. Auf der anderen Seite befinden sich die Metallkontakte zum Anlöten von Drähten.

Schritt 2:Hausbau - Drähte &Code

Verkabelung

Hier ist der Schaltplan. Ich habe die Verkabelung in der Box ziemlich durcheinander gebracht. Wenn Sie lieber nur wissen möchten, welche Drähte an welchen Pins sind:

  • Status-Pin-LED:7
  • Leuchtanzeige LED:4
  • Servo 1 (Haustür):3
  • Servo 2 (Garagentor):5
  • Servo 3 (Strauch des Energieverbrauchs):6
  • Taste 1 (Licht ein/aus):8
  • Taste 2 (Garagentor öffnen/schließen):9

Controller-Optionen

Sie können das verwenden, womit Sie sich wohl fühlen und was Sie zur Hand haben. Eine kostengünstigere (20 $) Option ist die Verwendung eines Arduino Uno-Klons und eines Ethernet-Shields. Ich habe damit angefangen, aber das hat mich an das Ethernet-Kabel gebunden. Also habe ich es auf ein Arduino Yun ($ 65) umgestellt. Viel teurer, gab mir aber auch die Freiheit, WLAN zu nutzen. Der Yun war wirklich einfach zu bedienen. Sie im Grunde:

  1. Verbinde den Yun über Ethernet mit deinem Router
  2. Navigieren Sie zur Yun-Webseite
  3. Einrichten von Passwörtern und statischer IP auf Ihrem Router
  4. Laden Sie die Yun-Skizze herunter

Unten angehängt sind die Skizzen für Arduino Uno und Arduino Yun. Sie sind ziemlich ähnlich, und mit Ausnahme der im Yun verwendeten Ethernet-Brücke können Sie den Yun-Code so ziemlich auf das Uno kopieren. Nachdem ich zum Yun gewechselt hatte, fügte ich die beiden Steuerknöpfe hinzu. Daher hat die Uno-Skizze diese Schaltflächen nicht.

Das Video im ersten Schritt zeigt das Arduino Yun. Hier ist ein Video mit dem Uno- und Ethernet-Shield. Als dieses Video gemacht wurde, hatte ich die beiden Buttons noch nicht installiert, aber alles andere funktioniert gleich.

//www.youtube.com/embed/7i6McpbU3Gs


smarthome_ethernet.ino smarthome_yun.ino


Schritt 3:Sensor:Energiemonitor

Da wir nun über eine physische Schnittstelle verfügen, die den Energieverbrauch anzeigen kann, müssen wir einen Sensorknoten bauen, um den Energieverbrauch des Hauses zu lesen und diesen Verbrauch an den MQTT-Broker zu veröffentlichen. Es gibt ein paar Möglichkeiten, dies zu tun. Ich verwende ein Arduino Yun. Es ist die am wenigsten komplizierte Methode, aber nicht die billigste. Wenn Sie möchten, können Sie ein Arduino Uno, ein Ethernet-Shield und einen WLAN-Router als WLAN-Brücke verwenden. Oder Sie verwenden einen Pi mit dem Open Energy Monitor-Paket. Ich werde nur die Yun-Methode behandeln.

Ich verwende einen 7-Euro-Stromwandler von ebay. Die 100A-Version des Yhdc SCT-013-000 finden Sie hier. Verdrahten Sie es gemäß dem obigen Schaltplan und laden Sie die Arduino Yun-Skizze am Ende dieses Schritts hoch. Achten Sie darauf, den Code mit Ihrer MQTT-Broker-IP-Adresse zu ändern. Diese Seite für die Open Energy Monitor-Bibliothek ist eine gute Referenz. Hier sind die idealen Komponentenwerte.

  • Bürdenwiderstand =33 Ohm
  • Spannungsteiler-Widerstand =10k Ohm
  • Kondensator =10uF

Das Bild meines Energiemonitors stimmt nicht wirklich mit dem Schaltplan überein, da ich genau diese Komponenten nicht zur Hand hatte. Ich musste zwei 68-Ohm-Widerstände parallel verwenden, weil ich den 33-Ohm-Bürdenwiderstand nicht hatte. Und ich hatte keinen 10uF-Kondensator für die Gleichrichterschaltung, also habe ich stattdessen zwei 22uF-Kondensatoren verwendet. Die Reihenäquivalentkapazität ist nahe genug.

Befestigen Sie den Stromwandler an einer der Eingangsphasen Ihres Hauses. Ich hatte nur einen einzigen 100-A-Transformator, also überwache ich nur eine der Phasen. Irgendwann möchte ich mehr Transformatoren bekommen, um den anderen Zweig der eingehenden Leistung und auch die Zweigstromkreise zu überwachen. Mit einem tatsächlichen Amperemeter liest mein DIY-Setup immer 1 Ampere über dem Amperemeter über verschiedene Amperewerte (siehe 5. Bild oben). Ziemlich einfach, diesen zusätzlichen Verstärker einfach abzuziehen.


OpenHAB

Da die Daten bei uns eingehen, können wir sie auch auf OpenHAB anzeigen, damit die Daten grafisch dargestellt werden können. Hier ist die relevante OpenHAB-Konfiguration.

Artikeldefinition

Zahl itm_smarthome_energy_amps "Energie (Ampere) [%.1f]" {mqtt="<[mymosquitto:2853:state:default]"}

Zahl itm_smarthome_energy_watts "Energie (Watt) [ %.1f]" {mqtt="<[mymosquitto:2852:state:default]"}

Sitemap

Text label="Energy" icon="firstfloor"
{

Frame label="Energy Usage" { Text item=itm_smarthome_energy_amps

Text item=itm_smarthome_energy_watts

Diagramm item=itm_smarthome_energy_watts period=h refresh=5000 } //Frame-Energieverbrauch

}//Text label="Energy"

Beharrlichkeit

Da wir Diagramme verwenden, müssen wir eine Art Persistenzstrategie für den Energieverbrauch definieren. RRD4J ist am einfachsten zu verwenden, also habe ich folgendes für "/openhab/configurations/persistence/rrd4j.persist".

Strategien {
// für RRD-Charts brauchen wir jede Minute eine Cron-Strategie:"0 * * * * ?"}

Items { DemoSwitch,NoOfLights,Window_GF_Toilet,Heating* :Strategy =EveryChange, EveryMinute, restoreOnStartup // speichern wir nur Temperaturwerte in rrd Temperature*,Weather_Chart* :Strategy =EveryMinute, restoreOnStartup itm_smarthome_energy_watts :Strategy =EveryUpdate}

Energiemonitor-Bildschirm

energy_monitor_yun.ino

Schritt 4:Sensor:DIY Wireless Sensor Nodes

Es gibt einige Optionen für drahtlose Öffnen/Schließen-Sensoren.

In einem meiner früheren Projekte habe ich einen drahtlosen Transceiver für 5 USD verwendet, um Sensordaten über ein MQTT-Gateway zu senden. Ich verwende dieses Projekt immer noch, um den Garagentorstatus an OpenHAB zu übertragen, und im Demo-Video spiegelt das Garagentor des Modellhauses tatsächlich meinen tatsächlichen Garagentorstatus wider. Der detaillierte Code und die Schaltung finden Sie in diesem Schritt, wenn Sie sie verwenden möchten. Es ist irgendwie hässlich, aber es ist in der Garage, wo es wahrscheinlich niemand bemerken wird.

Es gibt auch einen Lichtsensor, den ich verwende, um anzuzeigen, ob ein Licht angelassen wurde. Dies ist auch von diesem vorherigen Instructable, das in diesem Schritt detailliert wird. Es ist Teil des Uber-Sensors, der einen Fotowiderstand verwendet, um Helligkeitsinformationen drahtlos an OpenHAB zurückzugeben. In diesem Fall abonniere ich einfach das MQTT-Thema, das die Lichtstärke anzeigt.

Ich habe auch einen batteriebetriebenen Reed-Schalter-Sensor hergestellt, der den gleichen drahtlosen Transceiver und das gleiche Gateway in diesem vorherigen Instructable verwendet. Allerdings sieht es nicht sehr gut aus. Ich kann es aus ästhetischen Gründen nicht wirklich an einer Innentür oder einem Fenster verwenden. Um dieses Problem zu lösen, verwende ich besser aussehende Reedschaltersensoren von Wink für Verbraucher. Was uns zum nächsten Schritt führt.

//www.youtube.com/embed/uiD-HLezygI//www.youtube.com/embed/VKniJzIVHsI

Schritt 5:Sensor:Wink Hub

Ich bin auf diesen Blog-Beitrag eines frühen Wink Hub-Benutzers gestoßen, der einen Weg fand, den Hub zu rooten, um Zugang zu einem PHP-Exploit zu erhalten. Mit diesem Exploit können Sie ein "Aprontest"-Dienstprogramm ausführen, um Dinge zu kontrollieren, die mit dem Wink Hub gekoppelt wurden. Mit dieser Methode konnte ich Lichter über die OpenHAB-Schnittstelle steuern.

Der interessanteste Vorteil beim Rooten des Wink Hubs besteht darin, dass Sie lokal haben Kontrolle über Lichter und Sensorstatus, ohne auf den Wink-Server zugreifen zu müssen. Der Wink-Hub und die Wink-API müssen immer ins Internet gehen, um den Wink-Server zu kontaktieren, um die Lichtsteuerung durchzuführen oder den Sensorstatus abzurufen. Mit diesem PHP-Exploit können nun Beleuchtungs- und Sensorvorgänge in Ihrem lokalen LAN gehalten werden. Das ist großartig.

Ich habe am Ende dieses Schritts ein PHP-Skript eingefügt. Wenn Sie diese Datei nicht öffnen können, versuchen Sie es mit diesem Link. Dieses Skript läuft auf dem Raspberry Pi und fragt den Wink Hub nach dem Status von zwei Wink Tripper Reedschaltern ab. Dieser Status wird über die REST API an OpenHAB gesendet. OpenHAB veröffentlicht dann MQTT-Themen für diese Türpositionen. Der Controller für das Musterhaus öffnet oder schließt dann die Türen, indem er diese Türpositionsthemen abonniert.

Die drei OpenHAB-Konfigurationsdateien (Elemente, Sitemap und Regeln), die in diesem Schritt angehängt sind, werden benötigt, damit alles funktioniert. Sie definieren die Kontaktelemente, mit denen das Polling-Skript über die REST-Schnittstelle interagiert. Es gibt auch ein Beispielskript zur Steuerung von Zigbee-Glühbirne über OpenHAB.

//www.youtube.com/embed/tWKPcBOn1KM

Skripte und Konfigurationsdateien.

sitemap.txt rules.txt items.txt demo_1_general.sh polling.php


Schritt 6:Ausgabe:Lichter

Aufgrund der Reihenfolge, in der ich die Konfigurationsdateien behandelt habe, lieferten die vorherigen Schritte so ziemlich alles, was zur Steuerung einer "angeschlossenen Glühbirne" sowohl über die physikalische Schnittstelle als auch über die OpenHAB-Schnittstelle erforderlich ist. Die Lichter können alle Lichter sein, die der Wink-Hub unterstützt. Derzeit habe ich dies mit der Cree Connected Bulb und den GE Wink-Leuchten getestet. Beides funktioniert wie erwartet. Ich werfe einfach dieses Video hier, das besser zeigt, wie der Lichtsensor und die Tasten die intelligente Glühbirne steuern.

//www.youtube.com/embed/KSDUEfro3Vo

Schritt 7:Ausgabe:Garagentoröffner

Die in Schritt 5 bereitgestellten Konfigurationsdateien enthalten die meisten der erforderlichen OpenHAB-Elemente zur Steuerung eines Garagentors. Aber Sie brauchen immer noch das Etwas, um das Garagentor tatsächlich zu öffnen und zu schließen. Dafür ändere ich Teile eines früheren Instructable. Ich habe einen Garagentoröffner mit diesen Komponenten gemacht:

  • Arduino-Klon ($10)
  • Ethernet-Schild ($7)
  • Reed-Relais ($2)
  • Ersatz-Garagetor-Fernbedienung ($22)

Der Arduino steuert ein Reed-Relais durch Öffnen und Schließen der Trockenkontakte. Der Taster des Ersatz-Garagentoröffners ist über den potentialfreien Kontakt des Reed-Relais verdrahtet. Verbinden Sie Pin 5 und GND vom Arduino mit den beiden Spulenstiften (zwei äußere Stifte) des Reed-Relais und die inneren Relaisstifte mit der Taste auf der Garagentor-Fernbedienung.

Der Arduino abonniert ein MQTT-Thema und wartet auf den Befehl open/close. Wenn es dieses Thema sieht, zieht es das Reed-Relais kurzzeitig an und schließt den "Knopf" auf der Ersatz-Garagentor-Fernbedienung. Die Arduino-Skizze ist unten beigefügt. Fügen Sie außerdem die "garage_monitor_rules.txt" zu Ihrer Regeldatei hinzu. Dies wird zusätzlich zu den in Schritt 5 angehängten Regeln benötigt. Wenn Sie nicht die von mir verwendete Ultraschallsensormethode verwenden, müssen Sie dies an Ihre Modifikation anpassen.

//www.youtube.com/embed/CqbRosfqM3c

Wenn Ihr Garagentor ziemlich ruhig ist oder Sie eine Audioansage in einem anderen Teil des Hauses wünschen, wenn sich das Garagentor öffnet, kann die oben hinzugefügte Regel eine Audiodatei abspielen. Sie können es in der ersten Videodemo nach etwa 30 Minuten hören.

//www.youtube.com/embed/pdKfJtnpNzs


garage_monitor_rules.txt grage_opener.ino


Schritt 8:Andere Gedanken

Die in diesem Projekt getroffenen Entscheidungen spiegeln die Werkzeuge wider, mit denen ich vertraut bin, die Teile, die ich zur Hand habe, und meine Prioritäten, wie die Dinge funktionieren sollen. Sie haben wahrscheinlich einen anderen Satz von Tools und Sie haben verschiedene Hardwarekomponenten zur Verfügung. Sie haben wahrscheinlich auch andere Vorstellungen davon, wie die Hausautomation funktionieren sollte.

Es gibt viel Flexibilität bei der Verwendung von MQTT und OpenHAB, und Sie müssen die Dinge nicht genau so tun, wie ich es getan habe. Der Controller, der zur Steuerung des Modellhauses verwendet wird, kann eine Art Arduino, ein Raspberry Pi oder sogar ein Sparkcore sein. Die DIY-Sensoren können ein Arduino oder ein eigenständiger ESP8266 sein. Die einzige Einschränkung besteht darin, dass die Sensordaten irgendwie an den MQTT-Broker veröffentlicht werden müssen. Wenn Sie einen USB-Z-Wave-Stick in der OpenHAB-Installation haben, können Sie OpenHAB als Z-Wave-zu-MQTT-Brücke verwenden und Z-Wave-Sensoren für die Türerkennung verwenden.

Sogar die Wink-Auf/Zu-Sensoren könnten anders ausgeführt werden. Wenn Sie den Wink Hub nicht rooten, können Sie den Sensorstatus über die Wink-API abrufen und an OpenHAB senden oder direkt über MQTT posten. Dies erfordert die Verwendung des Wink-Servers, beseitigt jedoch die Einschränkung eines gerooteten Hubs.

Es gibt also viele Möglichkeiten, Dinge anders zu machen. Ich neige dazu, Hardware zu verwenden, die der kleinste gemeinsame Nenner ist, also Arduino und Kartons.

Code

  • smarthome_yun.ino
  • smarthome_ethernet.ino
  • energy_monitor_yun.ino
smarthome_yun.inoKlartext
// Eric Tsai// 2015-04-13// Arduino Yun-Code zur Steuerung der physischen Smart-Home-Schnittstelle// Ändern Sie die MQTT-Themennamen entsprechend Ihrer Verwendung// Ändern Sie die IP-Adresse des MQTT-Brokers//new yun umfasst#include #include #include //altes Ethernet beinhaltet bei Verwendung von Ethernet-Shield/*#include #include #include  */#include //Ethernet Shield setup/*IPAddress ip(192, 168, 2, 36);byte mac[] ={ 0x90, 0xA2, 0xDA, 0x0D, 0x43, 0x13 };byte server[ ] ={ 192, 168, 1; //Äquivalent von Ethernet-ClientPubSubClient client("192.168.1.101", 1883, callback, yun);bool conn_ok;//benutze LED zur Anzeige des MQTT-Verbindungsstatus.int ledPin =4; // Lichter anzeigen onint statusPin =7; // MQTT-Verbindungsstatus anzeigen // Servosteuerungint servo1Pin =3; // Front Doorint servo2Pin =5; // Garagentorint servo3Pin =6; // EnergieverbrauchsmesserServo servo1; // TürServo-Servo2; // GaragentorServo Servo3; // Energieint-Taste1 =8; // Taste über der Haustür button2 =9; // Taste über Garagentor // Servobetrieb:Zielpositionen für Servosint servo1_target =5; // Tür, Closedint servo2_target =5; // Garage, Closedint servo3_target =180; // Energie, 180 ist "0" Watt, Motor rückwärts montiertint servo1_pos_cur =5;int servo2_pos_cur =5;int servo3_pos_cur =180; // 180 ist "0" Watt, Motor rückwärts montiert. /debounce auf Schaltflächen, damit Sie keinen Spam spammen. -------------------------------------------------- ----// MQTT-Rückruf // hier auf MQTT-Nachrichten reagieren //-------------------------------- -------------------------------------------void callback(char* topic, byte* payload, unsigned int length) { //convert Thema zu int. int mytopic =atoi (Thema); //Serial.print (mytopic); // Nutzlast in int umwandeln payload[Länge] ='\0'; // eine Zeilenrückgabe hinzufügen, damit atof korrekt parsen kann float mymsg =atof( (const char *) payload); // geführt wenn (mytopic ==2822) { wenn (mymsg ==1) { DigitalWrite (ledPin, HIGH); aufrechtzuerhalten. Wenn (mymsg ==0) { DigitalWrite (ledPin, LOW); }} // Servo 1, Haustür if (mytopic ==2832) { if (mymsg ==1) //geöffnet {//Serial.println("servo1 open"); servo1_target =servo1Opened; } if (mymsg ==0) //geschlossen { //Serial.println("servo1 geschlossen"); servo1_target =servo1geschlossen; } //Serial.println (servo1_target); } /* // zweites Garagentorsignal "geschlossen" =aus =1 senden "offen" =ein =0 senden */ // Servo 2, Garagentor if (mytopic ==2842) { if (mymsg ==1) / /opened { servo2_target =servo2Opened; aufrechtzuerhalten. Wenn (mymsg ==0) //geschlossen {servo2_target =servo2Closed; } //callback_flag=1; //servo3_target =mymsg; aufrechtzuerhalten. aufrechtzuerhalten. Wenn (mymsg <0) { mymsg =0; } //bias meter from 180 degrees to 0 degrees //180 deg to 0 deg =0 watt to 6000 watts, for example //set max watts to what makes sense for you. servo3_target =180-((1-((6000-mymsg)/6000))*180)-25; callback_flag=1; }}//end callbackvoid setup() { pinMode(ledPin, OUTPUT); //LED indicating light on pinMode(statusPin, OUTPUT); pinMode(button1, INPUT_PULLUP); //use pull-up resistor, invert logic pinMode(button2, INPUT_PULLUP); //use pull-up resistor, invert logic digitalWrite(ledPin, HIGH); //yun bridge Bridge.begin(); //connect to MQTT broker client.connect("yun smarthome"); client.publish("watch", "Smart Home Connected!"); keepalivetime=millis(); //Wire.onReceive (receiveEvent); MQTT_reconnect =millis(); //client.subscribe("#"); //test subscribe client.subscribe("2822"); //LED client.subscribe("2832"); //servo 1 topic client.subscribe("2842"); //servo 2 topic client.subscribe("2852"); //servo 3 topic digitalWrite(ledPin, LOW); //servo servo1.attach(servo1Pin); servo1.write(90); servo2.attach(servo2Pin); servo2.write(90); servo3.attach(servo3Pin); servo3.write(5);} // end of setupvoid loop() { client.loop(); //MQTT processing needs this to run //For servo positioning, don't want to move too fast. //Must crawl from current position to target position //but also avoid using "delay" cmd, that just freezes up microcontroller //servo 1 if ((millis() - servo1_time)> 20) { if (servo1_pos_cur> servo1_target) { servo1_pos_cur =servo1_pos_cur - 1; } if (servo1_pos_cur  20) { if (servo2_pos_cur> servo2_target) { servo2_pos_cur =servo2_pos_cur - 1; } if (servo2_pos_cur  20) { if (servo3_pos_cur> servo3_target) { servo3_pos_cur =servo3_pos_cur - 1; } if (servo3_pos_cur 3000) || (button1_db> millis())) { button1_db=millis(); client.publish("2862", "button1 yaya"); } } //button 2 button=digitalRead(button2); if (button==0) //inverted logic { if ( ((millis() - button2_db)>3000) || (button2_db> millis())) { button2_db=millis(); client.publish("2872", "button2 yaya"); } } //check network connection to MQTT broker every 60 seconds. //reconnect if no longer connected if ((millis() - MQTT_reconnect)> 60000) { conn_ok =client.connected(); if (conn_ok==1) { digitalWrite(statusPin, HIGH); //Serial.println("MQTT connected OK"); } else { digitalWrite(statusPin, LOW); //Serial.println("MQTT NOT connected OK"); } //no connection, reconnect if (conn_ok ==0) { client.disconnect(); Verzögerung (5000); while (client.connect("smarthouse") !=1) { digitalWrite(statusPin, LOW); //Serial.println("Error connecting to MQTT"); Verzögerung (4000); } digitalWrite(statusPin, HIGH); } //Serial.println("reconnected to MQTT"); MQTT_reconnect =millis(); client.publish("watch","smart home heartbeat!"); }//end Mosquitto connection check} // end of loop
smarthome_ethernet.inoPlain text
// Eric Tsai// 2015-04-1// Arduino Uno w/ Ethernet, code for controlling physical smart home interface// Modify MQTT topic names to match your use// Modify MQTT broker IP address#include #include #include #include //Ethernetbyte mac[] ={ 0x90, 0xA2, 0xDA, 0x0D, 0x43, 0x13 };byte server[] ={ 192, 168, 1, 101 };EthernetClient ethClient;PubSubClient client(server, 1883, callback, ethClient);unsigned long keepalivetime=0;unsigned long MQTT_reconnect=0;bool conn_ok;//use LED for indicating MQTT connection status.int ledPin =4; //indicate lights onint statusPin =7; //indicate MQTT conn status//servo controlint servo1Pin =3; //front doorint servo2Pin =5; //garage doorint servo3Pin =6; //energy usage meterServo servo1; //doorServo servo2; //garage doorServo servo3; //energy//servo operation:target positions for servosint servo1_target =5; //door, closedint servo2_target =5; //garage, closedint servo3_target =180; //energy, 180 is "0" watts, motor mounted backwardsint servo1_pos_cur =5;int servo2_pos_cur =5;int servo3_pos_cur =180; // 180 is "0" watts, motor mounted backwardsint servo1Opened =5;int servo1Closed =120;int servo2Opened =5;int servo2Closed =150;unsigned long servo1_time =0;unsigned long servo2_time =0;unsigned long servo3_time =0;//---------------------------------------------------------------// MQTT call back// react to MQTT messages here//---------------------------------------------------------------void callback(char* topic, byte* payload, unsigned int length) { Serial.println("received MQTT"); //convert topic to int. int mytopic =atoi (topic); //Serial.print(mytopic); //convert payload to int payload[length] ='\0'; //add a line return so atof can parse correctly float mymsg =atof( (const char *) payload); //print MQTT message Serial.println(""); Serial.print("("); Serial.print(mytopic); Serial.print(", "); Serial.print(mymsg); Serial.println(")"); //led if (mytopic ==2822) { if (mymsg ==1) { digitalWrite(ledPin, HIGH); } if (mymsg ==0) { digitalWrite(ledPin, LOW); } } //servo 1, front door if (mytopic ==2832) { if (mymsg ==1) //opened { Serial.println("servo1 opened"); servo1_target =servo1Opened; } if (mymsg ==0) //closed { Serial.println("servo1 closed"); servo1_target =servo1Closed; } Serial.println(servo1_target); } /* //second garage door signal "closed" =off =send 1 "open" =on =send 0 */ //servo 2, garage door if (mytopic ==2842) { if (mymsg ==1) //opened { servo2_target =servo2Opened; } if (mymsg ==0) //closed { servo2_target =servo2Closed; } } //servo 3, energy meter if (mytopic ==2852) { //message =watts //error check if (mymsg> 6000) { mymsg =6000; } if (mymsg <0) { mymsg =0; } //bias meter from 180 degrees to 0 degrees //180 deg to 0 deg =0 watt to 6000 watts, for example //set max watts to what makes sense for you. servo3_target =180-((1-((6000-mymsg)/6000))*180); //servo3_target =mymsg; }}//end callbackvoid setup() { //ethernet //Ethernet.begin(mac, ip); //Wire.begin (MY_ADDRESS); Serial.begin (9600); Serial.println("starting"); pinMode(ledPin, OUTPUT); //LED indicating light on pinMode(statusPin, OUTPUT); digitalWrite(ledPin, HIGH); //wait for IP address while (Ethernet.begin(mac) !=1) { Serial.println("Error getting IP address via DHCP, trying again..."); Verzögerung (5000); } Serial.println("ethernet OK"); keepalivetime=millis(); while (client.connect("smarthouse") !=1) { Serial.println("Error connecting to MQTT"); //delay(3000); Verzögerung (4000); } MQTT_reconnect =millis(); Serial.println("setup complete"); client.publish("smarthouse","hello world"); //test publish //client.subscribe("#"); //test subscribe client.subscribe("2822"); //LED client.subscribe("2832"); //servo 1 topic client.subscribe("2842"); //servo 2 topic client.subscribe("2852"); //servo 2 topic digitalWrite(ledPin, LOW); //servo servo1.attach(servo1Pin); servo1.write(90); servo2.attach(servo2Pin); servo2.write(90); servo3.attach(servo3Pin); servo3.write(5);} // end of setupvoid loop() { client.loop(); //MQTT processing needs this to run //For servo positioning, don't want to move too fast. //Must crawl from current position to target position //but also avoid using "delay" cmd, that just freezes up microcontroller //servo 1 if ((millis() - servo1_time)> 20) { if (servo1_pos_cur> servo1_target) { servo1_pos_cur =servo1_pos_cur - 1; } if (servo1_pos_cur  20) { if (servo2_pos_cur> servo2_target) { servo2_pos_cur =servo2_pos_cur - 1; } if (servo2_pos_cur  20) { if (servo3_pos_cur> servo3_target) { servo3_pos_cur =servo3_pos_cur - 1; } if (servo3_pos_cur  60000) { conn_ok =client.connected(); if (conn_ok==1) { digitalWrite(statusPin, HIGH); Serial.println("MQTT connected OK"); } else { digitalWrite(statusPin, LOW); Serial.println("MQTT NOT connected OK"); } //no connection, reconnect if (conn_ok ==0) { client.disconnect(); Verzögerung (5000); while (client.connect("smarthouse") !=1) { digitalWrite(statusPin, LOW); Serial.println("Error connecting to MQTT"); Verzögerung (4000); } digitalWrite(statusPin, HIGH); } //Serial.println("reconnected to MQTT"); MQTT_reconnect =millis(); client.publish("smarthouse","heartbeat every minute!"); }//end Mosquitto connection check} // end of loop
energy_monitor_yun.inoPlain text
/*Eric Tsai2015-04-22Arduino Yun code for publishing energy use to MQTT brokerModify the "PubSubClient client" for your broker IP address*/#include #include #include #include "EmonLib.h" // OpenEnergy Monitor project libraryint LED =3;EnergyMonitor emon1; // open energy monitorunsigned long MQTT_reconnect=0;unsigned long read_energy=0;double Irms;bool conn_ok;YunClient yun; //equivalent of ethernet client//really shouldn't need call back, but just in case it's needed.void callback(char* topic, byte* payload, unsigned int length) { digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(500); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW}//use yunclient to bridge to networkPubSubClient client("192.168.1.101", 1883, callback, yun);//**********************************************************************void setup(){ // initialize digital pin 13 as an output. pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW Bridge.begin(); client.connect("yun_energy"); client.publish("watch", "Energy Monitor Connected!"); client.subscribe("yun_energy"); digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(3000); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW emon1.current(5, 60); // Current:input pin, calibration.}//**********************************************************************void loop(){ char buff_message[12]; //message buffer for MQTT publish float value; client.loop(); //run this every loop to maintain MQTT connection Irms =emon1.calcIrms(1480); // Calculate Irms only, 1480 means read Irms. //publish current every 10 seconds. if (millis() - read_energy> 10000) { //amps value =Irms; dtostrf (value, 4, 5, buff_message); client.publish("2853", buff_message); read_energy =millis(); //watts value =Irms*115; dtostrf (value, 4, 5, buff_message); client.publish("2852", buff_message); } //maintain MQTT connection if ((millis() - MQTT_reconnect)> 60000) { conn_ok =client.connected(); if (conn_ok==1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } //no connection, reconnect if (conn_ok ==0) { client.disconnect(); Verzögerung (5000); while (client.connect("yun_energy") !=1) { delay(4000); } digitalWrite(LED, HIGH); client.publish("watch", "Energy Monitor reconnected"); } MQTT_reconnect =millis(); }//end Mosquitto connection check }

Schaltpläne


Herstellungsprozess

  1. Schwangerschaftstest zu Hause
  2. C#-Schnittstelle
  3. Java-Schnittstelle
  4. Anwendungen der Heimautomatisierung
  5. RASPBERRY PI HOME AUTOMATION
  6. Labman Automation
  7. IoT und Heimautomatisierung:Wie sieht die Zukunft aus?
  8. C# - Schnittstellen
  9. Automatisierung in der Industrie 4.0
  10. Druckmaschinenautomatisierung verstehen