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

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Komponenten und Zubehör

Arduino Yun×1
ControlEverything.com 4-Kanal Relais-Controller für I2C×1
DHT11 Temperatur- & Feuchtigkeitssensor (4 Pins)×1
Widerstand 10 kOhm×2
SparkFun RedBot Summer×1
Allzweck-Transistor NPN×1
LM2596 DC-DC Buck Converter×1
Amazon Alexa Echo Dot×1
Arduino Proto Shield×1
USB-Webcam×1
Weiße Verteilerdose 200×155×80 mm×1

Benötigte Werkzeuge und Maschinen

Apps und Online-Dienste

Über dieses Projekt

Überblick

Als Amazon Alexa und Geräte wie der Echo Dot auf den Markt kamen, eröffneten sich unendlich viele Möglichkeiten für ein smartes Zuhause, das per Sprachbefehl in natürlicher Sprache gesteuert wird.

Dieses Projekt realisiert einen Arduino Home Controller, der viele Sensoren und Geräte ins Internet bringt und per Amazon Alexa Skill steuerbar macht.

Sie können meinen Skill „Arduino Home Controller“ installieren und aktivieren (einfacher Weg) oder sich anhand dieses Tutorials einen eigenen Skill erstellen.

Derzeit steuern wir:

Ein kurzes Video zeigt den Arduino Home Controller in Aktion. Für Demo und Video dienen vier LEDs auf Steckbrett als Simulation der Lampen in den Räumen.

Für echte Relais-Module zur Lampensteuerung siehe mein ergänzendes Projekt Arduino Home Controller Remote Modules.

Blockdiagramm

Im Blockdiagramm sehen wir die vier Hauptkomponenten:

  1. Amazon Echo Dot – empfängt Sprachbefehle und sendet sie an AWS.
  2. AWS mit Alexa Skill und Lambda-Funktion – interpretiert alle Befehle. Der Skill heißt „Arduino Home Controller“, kann später aktiviert werden.
  3. MQTT Broker via PubNub-Cloud – empfängt Steuerbefehle in zwei Kanälen (einmal für Setzen, einmal für Lesen von Sensorwerten). Für Demo-Zwecke kann mein PubNub-Account genutzt werden, kein eigener Account nötig.
  4. Home Controller mit Arduino Yun – genutzt wegen integriertem Ethernet und kleinem Linux-System, auf dem Python für bestimmte Aktionen läuft. Steuert Relais für Lampen, liest Temperatur/Feuchtigkeit, aktiviert Summer-Alarm, bedient Webcam für Sicherheitsfoto.
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Alle nötige Software installieren

An diesem Punkt haben Sie zwei Optionen: Demo mit meinem Alexa-Skill (installieren und nutzen) oder eigenen Skill erstellen.

Öffnen Sie die Alexa-App unter diesem Link, wählen Sie im Menü „Skills“, suchen Sie nach „Arduino“. In der Liste finden Sie den Skill „Arduino Home Controller“, klicken Sie auf die Skill-Karte und drücken Sie „Aktivieren“.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Alternativ direkt im Amazon Skill Store über diesen Link auf „Aktivieren“ drücken.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Sie müssen Ihr Amazon-Konto verknüpfen, da wir Ihre E-Mail-Adresse als ID für alle an den Arduino gesendeten Befehle nutzen. Hinweis: Die Adresse wird nicht für E-Mails genutzt, nur als ID.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Skill ist installiert, mit Amazon-Konto verknüpft und mit meiner Lambda-Funktion in der AWS-Cloud verbunden.

1. Eigenen Skill erstellen

Registrieren Sie einen kostenlosen Entwickler-Account unter https://developer.amazon.com/home.html

1.1 Nach Login: Alexa Menü → Alexa Skills Kit → „Get Started“

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

1.2 „Add a New Skill“ klicken.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

1.3 Bei Create a New Alexa Skill:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Neuer Skill erstellt, neues Feld Application Id erscheint:

amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb 

Wird für Verknüpfung Skill ↔ Lambda-Funktion genutzt (später in Abschnitt 2.5).

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

1.4 Interaction Model definiert Interaktion via Intents, Slots, Utterances.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Bei Interaction Model → Intent Schema folgendes JSON-Schema einfügen:

{ "intents": [ { "slots": [ { "name": "light", "type": "States" }, { "name": "which", "type": "HabRooms" } ], "intent": "LightIntent" }, { "slots": [ { "name": "alarm", "type": "States" } ], "intent": "AlarmIntent" }, { "intent": "TakePhotoIntent" }, { "intent": "GetTemperatureIntent" }, { "intent": "GetHumidityIntent" }, { "intent": "AboutIntent" }, { "intent": "AMAZON.HelpIntent" }, { "intent": "AMAZON.CancelIntent" }, { "intent": "AMAZON.StopIntent" } ] } 

Nötige Slots wie States und HabRooms in Custom Slot Types definieren.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Alle Utterances (Gesprächsmodell) in Sample Utterances definieren, folgende Liste einfügen:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
LightIntent Turn {which} light {light} LightIntent Set {which} light {light} AlarmIntent Turn alarm {alarm} TakePhotoIntent Take a Photo TakePhotoIntent Take Security Photo GetTemperatureIntent Read Temperature GetHumidityIntent Read Humidity AboutIntent Tell me about AboutIntent About 

Bevor es mit Configuration weitergeht, muss die Lambda-Funktion erstellt sein, da beide verknüpft werden müssen.

2. Lambda-Funktion erstellen

AWS-Account registrieren: https://aws.amazon.com/console/

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

2.1 Services im Top-Menü → Lambda in linker Leiste.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

2.2 Links Functions → „Create function“.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

2.3 Daten setzen:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "iot:UpdateThingShadow" ], "Resource": "*" } ] } 
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

„Add“ drücken, zurück zu Create Function, lambda_basic_execution im Feld Existing role wählen.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

2.4 TestSkillLambda Funktion erstellt, Designer-Seite sichtbar.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

2.5 Links Alexa Skills Kit auswählen und zum add triggers-Bereich hinzufügen.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Auf Alexa Skills Kit Box klicken, nach unten zu Configure triggers scrollen, Enable wählen, im Feld Skill ID die Application ID aus Abschnitt 1.3 einfügen. Damit verknüpfen wir Lambda-Funktion und Skill.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

„Save“ drücken – Alexa Skills Kit gespeichert, Lambda kennt Skill, beide verknüpft.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

2.6 Nach unten zu Function code scrollen:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Code-Editor öffnet, Ordner und Dateien sichtbar. Datei index.js wählen – enthält komplette Lambda-Implementierung.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Zeile 23 ändern: dieselbe Application ID aus Abschnitt 1.3 einfügen.

„Save“ drücken – Lambda-Funktion aktiv für Skill-Befehle.

var APP_ID = amzn1.ask.skill.6e22e052-c32f-433c-8d39-dc94a77a4adb 

Oben über dem „Save“-Button sehen Sie den ARN (Amazon Resource Name) – die ID der Lambda-Funktion, die wir im Configuration-Abschnitt der Skill-Seite brauchen.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

3. Zurück zur Skill-Definition

3.1 Configuration wählen, bei Endpoint AWS Lambda ARN auswählen, obigen ARN-String in Default einfügen. Letzter Schritt zur Verknüpfung Skill ↔ Lambda.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

3.2 Nach unten zu Account Linking scrollen, die ersten beiden Redirect URLs kopieren – für Security Profile nötig.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Vor weiterem Skill-Setup: Security Profile anlegen für Verknüpfung Skill ↔ Amazon-Konto in Alexa App.

4. Security Profile erstellen

In gleicher Developer Console: Apps & Services → Login with Amazon → „Create a New Security Profile“.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

4.1 Security Profile Management – Profil mit OAuth 2.0 für Skill-Account-Verknüpfung.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

4.2 Felder ausfüllen:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

4.3 Nach Speichern/Bearbeiten erscheinen zwei wichtige Felder: Client ID und Client Secret – für finales Skill-Setup nötig.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

4.4 Whitelist-URLs definieren, Tab Web Settings:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

5. Skill-Erstellung abschließen

5.1 Zurück zum Skill, Configuration → Account Linking:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

5.2 Account Linking fortsetzen:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

5.3 Global Fields – Skill-Dokumentation:

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

5.4 Letzter Abschnitt Privacy & Compliance.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

6. TestSkill in Alexa App installieren

6.1 Nach Speichern: Alexa App unter https://alexa.amazon.com/ → linke Leiste Skills → oben rechts „Your skills“ → Filter Dev Skills → TestSkill Karte sichtbar. Hinweis: Account Linking erforderlich.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

6.2 Karte anklicken → Skill-Beschreibung → „Enable“.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

6.3 Wegen Account Linking Weiterleitung zu Amazon-Login → Skill mit Amazon-Konto verknüpfen.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Login validiert → Seite bestätigt Verknüpfung.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

6.4 Skill fertig, installiert, verknüpft, mit Lambda verbunden.

Testen: „Alexa, ask Test Skill“ → Willkommensmeldung „Welcome to Arduino Home Controller“ (alle Dialoge identisch).

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Arduino Yun konfigurieren

Bei erstmaliger Nutzung von Arduino Yun: vorher vorbereiten vor Sketch-Upload. Ich empfehle Greg Baugues Guide „Getting started with the Arduino Yun“. Danke an Hackster-User @BenEagen für den Hinweis.

Für Fotoaufnahme und E-Mail-Versand wird zusätzliche Software benötigt. Auch USB-Kamera testen, ob Treiber funktionieren. USB-Webcam in Arduino Yun USB-Port stecken.

Per Terminal mit Arduino Yun verbinden:

ssh root@yourYunName.local 

Standardpasswort: arduino.

Bei Erfolg: OpenWRT Linux Prompt.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Bild-erzeugende Software installieren

Paketmanager aktualisieren:

opkg update 

UVC-Treiber installieren:

opkg install kmod-video-uvc 

python-openssl installieren:

opkg install python-openssl 

fswebcam-Utility für Terminal-Fotos:

opkg install fswebcam 

SD-Karte in Arduino Yun gemountet prüfen:

mount 
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Wenn Gerätelist Eintrag wie /dev/sda1 on /mnt/sda1 type vfat zeigt: SD-Karte OK.

Kamera testen, Foto machen:

cd /mnt/sda1 fswebcam test.png 

Einige Infos und Fehler erscheinen – ignorieren. Wichtig: diese Zeilen:

--- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. 

Foto prüfen: SD-Karte entnehmen, am Computer lesen. Bild sollte im Wurzelverzeichnis als „test.png“ erscheinen. Öffnen, prüfen auf Korrektheit.

E-Mail-Versand-Software installieren

Auf Computer SD-Karte: Python-Datei AHC_SendEmail.py kopieren, Zeilen 11, 12, 13 mit Ihrer Gmail-Adresse und Passwort anpassen, bei anderem Anbieter Zeile 36 (Server-Info) ändern.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

SD-Karte zurück in Arduino Yun. Im Terminal:

cd /mnt/sda1 python /mnt/sda1/AHC_SendEmail.py /mnt/sda1/ test.png 

Bei Erfolg: E-Mail mit Foto erhalten.

Alle Geräte mit Arduino Yun verbinden

Basierend auf Schaltplan alle Geräte anschließen, besonders DHT11-Sensor (Temperatur/Feuchtigkeit) und Summer (Alarm-Test).

Sketch-Datei ArduinoHomeMQTT.ino installieren

Ich erstellte libraries.zip mit allen nötigen Bibliotheken – von GitHub herunterladen, in Arduino IDE Libraries-Verzeichnis entpacken.

Enthaltene Bibliotheken im Ordner ArduinoHomeMQTT:

ArduinoJson → JSON-Manipulation DHT_sensor_library → DHT-Sensor-Handling pubsubclient-master → PubNub-Verbindung (Connect, Publish, Subscribe) 

Arduino IDE 1.6.x öffnen, unter Tools „Board: Arduino Yun“ wählen.

Datei ArduinoHomeMQTT.ino laden, in IDE Zeile 16 mit Ihrer Amazon-E-Mail anpassen (bei Skill-Account-Linking verwendet).

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Diese Option identifiziert Ihren Controller, wenn AWS MQTT-Nachrichten an Broker sendet.

Zeile 50 mit Ihrer UUID anpassen (Controller-ID in PubNub) – online generieren unter dieser Seite.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Speichern und Sketch hochladen. Arduino IDE Serial Monitor öffnen → Verbindung zu PubNub-Broker und Sensor-Initialisierung sichtbar.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Alle Utterances am Alexa Echo Dot testen

Der Alexa-Skill „Arduino Home Controller“ verarbeitet folgende Utterances (in Alexa App unter Skill-Beschreibung einsehbar). Testen Sie alle und beobachten Sie im Arduino Serial Monitor alle empfangenen/gesendeten Nachrichten an PubNub.

Lichtsteuerung:

==> "Alexa, ask arduino home to turn room light on" ==> "Alexa, ask arduino home to turn room light off" ==> "Alexa, ask arduino home to turn kitchen light on" ==> "Alexa, ask arduino home to turn kitchen light off" ==> "Alexa, ask arduino home to turn garage light on" ==> "Alexa, ask arduino home to turn garage light off" ==> "Alexa, ask arduino home to turn living room light on" ==> "Alexa, ask arduino home to turn living room light off" 

Alarmsteuerung:

==> "Alexa, ask arduino home to turn alarm on" ==> "Alexa, ask arduino home to turn alarm off" 

Temperatur und Feuchtigkeit abfragen:

==> "Alexa, ask arduino home to read temperature" ==> "Alexa, ask arduino home to read humidity" 

Sicherheitsfoto machen:

==> "Alexa, ask arduino home to take a photo" 

About und Help:

==> "Alexa, ask arduino home about" ==> "Alexa, ask arduino home help" 
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Software-Details

Alle Dateien für dieses Projekt auf meinem GitHub.

Ordner-Inhalte erklärt

Arduino Home Controller Workflow – Datei-Interaktion

  1. Amazon Echo Dot sendet Sprachbefehl → empfangen von Arduino Home Controller Skill.
  2. Skill ruft Lambda-Funktion index.js auf.
  3. Lambda (Node.js, node_modules, gehostet bei AWS).
  4. Lambda interpretiert Intents, wandelt in MQTT-JSON-Nachricht um, sendet an PubNub Broker. Format:
{ "topic" : Topic_xxxx, "command" : on or off, "id" : email address } 

Thema Topic_xxxx kann sein:

Topic_room → Zimmerlicht an/aus Topic_livingroom → Wohnzimmerlicht an/aus Topic_kitchen → Küchenlicht an/aus Topic_garage → Garagenlicht an/aus Topic_alarm → Alarm an/aus Topic_temperature → Temperatur lesen Topic_humidity → Feuchtigkeit lesen Topic_photo → Foto machen und per E-Mail senden 

Befehl: on oder off.

(5) Nachricht via Channel AHC_IOT_01. Channel AHC_IOT_02 für Temperatur/Feuchtigkeit-Rückmeldung.

(6) Arduino Yun Sketch ArduinoHomeMQTT.ino verbindet mit Broker, subscribed/published Channels, empfängt/sendet Nachrichten.

(7) Via Bridge kommuniziert Arduino-Sketch mit Linux OpenWRT für WAN/LAN und Befehlsausführung.

(8) E-Mail-Versand via Python AHC_SendEmail.py, Foto via fswebcam in Linux OpenWRT.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Hardware-Details

Herzstück: Arduino Yun.

Digitale Pins für Gerätesteuerung:

Pin 2 : DHT11-Sensor Pin 8 : Summer-Alarm (via NPN-Transistor) Pin 9 : Zimmerlicht Pin 10: Küchenlicht Pin 11: Garagenlicht Pin 12: Wohnzimmerlicht 

Webcam an USB-Port.

Stromversorgung: 12V DC → 5V über DC-DC-Wandler.

Ich baute einen Arduino Shield mit Proto Shield – alle Anschlüsse und Interface-Elektronik für Sensor, Summer, Netzteil. Platz für weitere Sensoren zur Erweiterung.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Arduino Yun, Proto Shield, Relais, Spannungsregler in Kunststoffbox; Alarm, Webcam, Sensor außen; alle Verbindungen laut Schaltplan.

Für Demo/Video: vier LEDs auf Steckbrett als Lampen-Simulation.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Danke fürs Lesen, ich schätze Ihre Zeit. Bei Anregungen gerne melden.

Dieses Projekt widme ich meinem Vater, der letztes Jahr verstarb. R.I.P. Dad.

Code

ArduinoHomeMQTT.ino (Arduino)

Arduino Yun Software für Home Controller

// // ArduinoHomeMQTT // v2.1 // // Copyright (C)2018 Jose Cruz. All right reserved // web: https://sites.google.com/view/raeiot/home // #include <YunClient.h> #include <PubSubClient.h> #include <ArduinoJson.h> #include <DHT.h> #include <Process.h> // Your Amazon email linked skill #define MyID "YOUR AMAZON EMAIL LINKED IN ALEXA APP" // DHT11 sensor data pin #define DHTPIN 2 // DHT 11 sensor type #define DHTTYPE DHT11 // Initialize DHT sensor DHT dht(DHTPIN, DHTTYPE); // Alarm control pin #define alarm 8 // Light control pins #define room_light 9 #define kitchen_light 10 #define garage_light 11 #define livingroom_light 12 // PubNub MQTT Server address and port int mqtt_server_port = 1883; const char* mqtt_server = "mqtt.pndsn.com"; // Suscribe topic const char* topic = "AHC_IOT_01"; // Publish topic const char* topic2 = "AHC_IOT_02"; // PubNub publisher ID // pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/ // PubNub suscriber ID // sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/ // UUID generated onlyne https://www.uuidgenerator.net/ // // PubNub Client ID // clientId = pubID + subID + uuid; const char* clientId = "pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7/sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb/YOUR UUID GENERATED"; // Define de Yun ethernet client YunClient ethClient; // Define PubNub pub and sub client PubSubClient client(ethClient); // Picture process Process picture; // Filename String filename; // Path for image file String path = "/mnt/sda1/"; // Create an image file and sent by email void TakePhoto() { // Generate filename with timestamp filename = ""; picture.runShellCommand("date +%s"); while (picture.running()); while (picture.available() > 0) { char c = picture.read(); filename += c; } filename.trim(); filename += ".jpg"; // Take picture picture.runShellCommand("/usr/bin/fswebcam -i 0 --jpeg 95 --no-banner --fps 1 -S 1 -r 352x288 --save " + path + filename); while (picture.running()); //Send it by email picture.runShellCommand("python /mnt/sda1/AHC_SendEmail.py " + path + " " + filename); while (picture.running()); } //*********************** // Send temperature //*********************** void SendTemperature() { char cstr[16]; // Read temperature as Celsius (the default) float t = dht.readTemperature(); client.publish(topic2, itoa(t, cstr, 10)); } //*********************** // Send humidity //*********************** void SendHumidity() { char cstr[16]; float h = dht.readHumidity(); client.publish(topic2, itoa(h, cstr, 10)); } //Callback function for msg receive handle void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); StaticJsonBuffer<200> jsonBuffer; JsonObject& root = jsonBuffer.parseObject((char[])payload); String alexa_topic = root["topic"]; String alexa_command = root["command"]; String alexa_id = root["id"]; if (alexa_id.equals(MyID)) { if (alexa_topic.endsWith("Topic_room")) { digitalWrite(room_light, (alexa_command.endsWith("on") ? LOW : HIGH)); } else if (alexa_topic.endsWith("Topic_kitchen")) { digitalWrite(kitchen_light, (alexa_command.endsWith("on") ? LOW : HIGH)); } else if (alexa_topic.endsWith("Topic_garage")) { digitalWrite(garage_light, (alexa_command.endsWith("on") ? LOW : HIGH )); } else if (alexa_topic.endsWith("Topic_living room")) { digitalWrite(livingroom_light, (alexa_command.endsWith("on") ? LOW : HIGH)); } else if (alexa_topic.endsWith("Topic_temperature")) { SendTemperature(); } else if (alexa_topic.endsWith("Topic_humidity")) { SendHumidity(); } else if (alexa_topic.endsWith("Topic_alarm")) { digitalWrite(alarm, (alexa_command.endsWith("on") ? HIGH : LOW)); } else if (alexa_topic.endsWith("Topic_photo")) { TakePhoto(); } } } //Reconnect to MQTT broker if lost connection void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect(clientId)) { Serial.println("MQTT broker connected"); client.subscribe(topic); } else { Serial.print("Failed, rc = "); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void setup() { Bridge.begin(); delay(2000); Serial.begin(115200); Serial.println("Init Arduino Home Controller v2.1..."); pinMode(alarm, OUTPUT); pinMode(room_light, OUTPUT); pinMode(kitchen_light, OUTPUT); pinMode(garage_light, OUTPUT); pinMode(livingroom_light, OUTPUT); digitalWrite(room_light, HIGH); digitalWrite(kitchen_light, HIGH); digitalWrite(garage_light, HIGH ); digitalWrite(livingroom_light, HIGH); client.setServer(mqtt_server, mqtt_server_port); client.setCallback(callback); client.connect(clientId); Serial.println("Connected to PubNub MQTT broker OK ..."); client.subscribe(topic); Serial.println("Suscribe to topic at MQTT broker Ok ..."); dht.begin(); delay(4000); Serial.println("DHT sensor Ok ..."); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } 

AHC_SendEmail.py (Python)

Datei für Arduino Yun OpenWRT Linux zum E-Mail-Versand mit Foto-Anhang

import smtplib import sys import time from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from email.MIMEBase import MIMEBase from email import encoders fromaddr = "joseacruzp@gmail.com" toaddr = "joseacruzp@gmail.com" emailpassword = "YOUR PASSWORD" subject = "Arduino Home Controller by Alexa Skill" body = "Photo taken in " + time.strftime('%a, %d %b %Y %H:%M:%S %Z(%z)') filedir =sys.argv[1] filename = sys.argv[2] msg = MIMEMultipart() msg['From'] = fromaddr msg['To'] = toaddr msg['Subject'] = subject msg.attach(MIMEText(body, 'plain')) attachment = open(filedir + filename, "rb") part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename= %s" % filename) msg.attach(part) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(fromaddr, emailpassword) text = msg.as_string() server.sendmail(fromaddr, toaddr, text) server.quit() 

index.js (JavaScript)

AWS Lambda Funktion für Option 2 (eigener Skill)

// Alexa SDK for Arduino Home Controller // Copyright (c) 2014-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Use is subject to license terms. // Jose Cruz https://sites.google.com/view/jriot // Define connection to PubNub var PubNub = require("pubnub"); var pubnub = new PubNub({ ssl: true, publish_key: "pub-c-e93def7f-95aa-475a-aa60-cc3cd32ee8a7", subscribe_key: "sub-c-ec04dbbc-0893-11e8-8e75-cea83f8405bb", uuid: "YOUR UUID" }); // Define the PubNub channel var channel = 'AHC_IOT_01'; // Used to receive some values (temperature, humidity) var channel2 = 'AHC_IOT_02'; // Define slot states for light and alarm turn on/off var slotStates = ['on', 'off']; // App ID for the skill var APP_ID = 'YOUR APP ID FOR THE SKILL'; // The AlexaSkill prototype and helper functions var AlexaSkill = require('./AlexaSkill'); var ArduinoHomeSkill = function() { AlexaSkill.call(this, APP_ID); }; //Listener for suscribe and receive temperature and humidity var mqttListener; var access_token; var url; var https = require("https"); function SendMessage(topicname, commandvalue, speechOutput, iresponse) { https.get(url, res => { res.setEncoding("utf8"); let body = ""; res.on("data", data => { body += data; }); res.on("end", () => { pubnub.publish({ channel: channel, message: { "topic": topicname, "command": commandvalue, "id": JSON.parse(body).email } }).then((response) => { console.log("message Published w/ timetoken", response.timetoken); if (speechOutput) iresponse.tell(speechOutput); }).catch((error) => { console.log("publishing failed w/ status: ", error); iresponse.ask("Sorry, I didn't catch what you said"); }); }); }); } /// Extend AlexaSkill ArduinoHomeSkill.prototype = Object.create(AlexaSkill.prototype); ArduinoHomeSkill.prototype.constructor = ArduinoHomeSkill; ArduinoHomeSkill.prototype.eventHandlers.onSessionStarted = function(sessionStartedRequest, session) { console.log("ArduinoHomeSkill onSessionStarted requestId: " + sessionStartedRequest.requestId + ", sessionId: " + session.sessionId); pubnub.removeListener(mqttListener); pubnub.unsubscribeAll(); }; //-------->This is invoked by invocation word "Arduino Home" ArduinoHomeSkill.prototype.eventHandlers.onLaunch = function(launchRequest, session, response) { console.log("ArduinoHomeSkill onLaunch requestId: " + launchRequest.requestId + ", sessionId: " + session.sessionId); if (session.user.accessToken == undefined) { response.tellWithCardLink('To start using this skill, please use the companion app to authenticate on Amazon.'); return; } var speechOutput = "Welcome to Arduino Home Controller. What would you like to do?"; var repromptText = "I am ready"; response.ask(speechOutput, repromptText); }; ArduinoHomeSkill.prototype.eventHandlers.onSessionEnded = function(sessionEndedRequest, session) { console.log("ArduinoHomeSkill onSessionEnded requestId: " + sessionEndedRequest.requestId + ", sessionId: " + session.sessionId); console.log("End..."); }; //*** Define all intent handlers ArduinoHomeSkill.prototype.intentHandlers = { //*** AboutIntent handler "AboutIntent": function(intent, session, response) { var myText; console.log("in about"); myText = "Arduino Home Controller skill let you control internet connected devices. It controls Lights at room, kitchen, garage or living room), read a temperature sensor to scan home temperature, read Humidity sensor to scan home humidity, uses webcam to take a home security photo and sent it by email and activate an alarm to alert some events. It uses PubNub site to manipulate all messages send by Alexa with Lambda function. Please check information at skill page for more details. What would you like to do?"; response.ask(myText); return; }, //*** LightIntent handler "LightIntent": function(intent, session, response) { var slotHabRooms = ['room', 'kitchen', 'garage', 'living room']; var lightSlot = intent.slots.light; var lightSlotValue = lightSlot ? lightSlot.value : ""; var whichSlot = intent.slots.which; var whichSlotValue = whichSlot ? whichSlot.value : ""; if (lightSlotValue && whichSlotValue && slotStates.indexOf(lightSlotValue.toLowerCase()) > -1 && slotHabRooms.indexOf(whichSlotValue.toLowerCase()) > -1) { SendMessage('Topic_' + whichSlotValue, lightSlotValue, "The light is now " + lightSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** AlarmIntent handler "AlarmIntent": function(intent, session, response) { var alarmSlot = intent.slots.alarm; var alarmSlotValue = alarmSlot ? alarmSlot.value : ""; if (alarmSlotValue && slotStates.indexOf(alarmSlotValue.toLowerCase()) > -1) { SendMessage('Topic_alarm', alarmSlotValue, "The alarm is now " + alarmSlotValue, response); } else { response.ask("Sorry, I didn't catch what you said"); } }, //*** TakePhotoIntent handler "TakePhotoIntent": function(intent, session, response) { SendMessage('Topic_photo', 'take', "Taken home photo ", response); }, //*** GetTemperatureIntent handler "GetTemperatureIntent": function(intent, session, response) { mqttListener = { status: function(statusEvent) {}, message: function(message) { console.log("Receive=", message); var myText = "Inside Temperature is " + message.message + " degrees C"; response.tell(myText); }, presence: function(presenceEvent) { } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels: [channel2] }); SendMessage('Topic_temperature', 'Ok', null, response) }, //*** GetHumidityIntent handler "GetHumidityIntent": function(intent, session, response) { mqttListener = { status: function(statusEvent) {}, message: function(message) { console.log("Receive=", message); var myText = "Inside Humidity is " + message.message + " %"; response.tell(myText); }, presence: function(presenceEvent) { } }; pubnub.addListener(mqttListener); pubnub.subscribe({ channels: [channel2] }); SendMessage('Topic_humidity', 'Ok', null, response) }, //*** HelpIntent handler "AMAZON.HelpIntent": function(intent, session, response) { response.ask("With Arduino Home Controller skill and Alexa you can control internet connected devices using an Arduino Yun or Arduino with Ethernet Shield. Please check information at skill page for more details. What would you like to do?"); }, //*** StopIntent handler "AMAZON.StopIntent": function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, //*** CancelIntent handler "AMAZON.CancelIntent": function(intent, session, response) { response.tell("Thanks for using Arduino Home Controller. Bye see you later"); }, default: function(intent, session, response) { response.ask("Try again"); }, }; // Create the handler that responds to the Alexa Request. exports.handler = function(event, context) { try { access_token = event['context']['System']['user']['accessToken']; url = 'https://api.amazon.com/user/profile?access_token=' + access_token; } catch (error) { console.log(error); } var ArduinoHomeControl = new ArduinoHomeSkill(); ArduinoHomeControl.execute(event, context); }; 

GitHub

https://github.com/jcruzp/ArduinoHomeController

Schaltplan

Hauptplatine mit Relais, Temperatur- und Feuchtigkeitssensor, Summer-Alarm und Webcam.

Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht

Herstellungsprozess

  1. Web-gesteuertes DMX-Lichtsystem – Arduino Master Controller
  2. Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
  3. DIY Arduino USB Gaming Controller – Bauen Sie Ihren eigenen High-Performance Gamepad
  4. Pixel Chaser: Interaktives One-Tap-LED-Spiel mit Arduino Nano
  5. Smart-Home Pflanzenbewässerungssystem mit Arduino Nano
  6. Arduino-basierte abstoßende Magnetschwebung: Einfache Schaltung & DIY-Anleitung
  7. Arduino-basierter VFD-Ansteuerungs-Controller (Vacuum Fluorescent Display)
  8. Autonomer Hausassistent-Roboter bauen: Komplette Teileliste & Setup-Anleitung
  9. NeoPixel-Matrix Pong auf Arduino Nano: Neon-Pong selbst bauen
  10. Arduino DMX-512 Tester & Controller – Komplettes Bauteil-Set für zuverlässige Lichtsteuerung