
Hinweis!Werbung:
Dieser Beitrag enthält min. einen Partnerlink. Info
Aufgepasst!
Günstige Hardware und kostenlose eBooks für den Arduino gibt es bei AZ Delivery
Endlich ist mein Ethernet Shield für den Arduino angekommen und so konnte ich mich dran setzen, die Mail-Benachrichtung zu implementieren.
Denn was bringt mir eine Meldung auf dem PC, dass die Wohnungstür geöffnet wurde, wenn ich gar nicht davor sitze, sondern unterwegs bin.
Fun Fact:
Ich hatte mich bei der Bestellung des Ethernet-Shields gewundert, warum das Teil so teuer ist.
Nun weiß ich warum: es war ein zweiter Uno dabei.
Also flux das Shield auf den Uno gesteckt, LAN-Kabel dran und losgelegt.
Die Ethernet-Lib bietet nicht nur verständliche Code-Beispiele, sondern ist auch gut dokumentiert, sodass die eigtl. Einrichtung des Shields kein großes Problem war.
Nun musste ich mir überlegen, wie ich die Mail versenden will.
Zur Auswahl standen direkte Kontaktaufnahme zum Mail-Server oder ein PHP-Script auf meinem Webserver.
Zwar machen Server im Grunde genommen Spaß, aber da ich wenig Lust hatte, mich noch mit den Rückmeldungen vom Server an den Arduino zu beschäftigen, hat das PHP-Script gewonnen.
Das hatte ich dann auch gleich als erstes erstellt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php if ($_GET['status'] == 1 && $_GET['key']=="Geheim") { $empfaenger = "empfaenger@domain.de"; $betreff = "Tür geöffnet"; $from = "From: Alarmanlage v0.1 <absender@domain.de>"; $text = "Die Haustür wurde am ".$_GET['datum']." um ".$_GET['zeit']." geöffnet"; mail($empfaenger, $betreff, $text, $from); } else if ($_GET['status'] == 2 && $_GET['key']=="Geheim") { $empfaenger = "empfaenger@domain.de"; $betreff = "Tür geschlossen"; $from = "From: Alarmanlage v0.1 <absender@domain.de>"; $text = "Die Haustür wurde am ".$_GET['datum']." um ".$_GET['zeit']." geschlossen"; mail($empfaenger, $betreff, $text, $from); } ?> |
Absolut verbesserungswürdig, aber erstmal ausreichend.
Es wird geprüft, welchen Status der Arduino übermittelt und dementsprechend wird eine Mail verschickt.
Die Sketch sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
/* * Liste der IDs * kann man später mal als array gestalten * Türsensor #1 zu 12345 * Türsensor #1 offen 67890 */ #include <Wire.h> #include <RCSwitch.h> #include <DS3231.h> #include <Ethernet.h> RTCDateTime timestamp; DS3231 clock; RCSwitch schalter = RCSwitch(); EthernetClient client; byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; void setup() { Serial.begin(9600); clock.begin(); clock.setDateTime(__DATE__, __TIME__); //Initialisiere 433MHz Empfaenger schalter.enableReceive(0); //Initialisiere Ethernet if (Ethernet.begin(mac) == 0) { //wenn wir keinen DHCP bekommen ist doof :( for (;;) ; } //Auf IP warten while (Ethernet.maintain() == 1 || Ethernet.maintain() == 3) { for (;;) ; } } void loop() { if (schalter.available()) { long id = schalter.getReceivedValue(); if (id == 12345) { sendeMail("1"); delay(1000); } else if (id == 67890) { sendeMail("2"); delay(1000); } schalter.resetAvailable(); } } void sendeMail (String status) { if (client.connect("http://test.janbpunkt.de", 80)) { client.print("GET http://test.janbpunkt.de/alarm.php?status="+status+"&key=Geheim&datum=" + holeDatum() + "&zeit=" + holeZeit() + " HTTP/1.0\r\nConnection: close\r\n\r\n"); client.println(); client.println(); client.stop(); } } String holeDatum () { timestamp = clock.getDateTime(); String datum = clock.dateFormat("d.m.Y", timestamp); return datum; } String holeZeit () { timestamp = clock.getDateTime(); String zeit = clock.dateFormat("H:i:s", timestamp); return zeit; } |
Auch diesen Code kann man sicherlich noch verbessern, aber ebenfalls gilt hier erstmal: es tut, was es soll.
Und so wartet der Arduino nun geduldig auf ein Signal vom Türkontakt, wertet aus, welcher Kontakt getriggert wurde, ruft dann das Script auf und schickt mir darüber eine entsprechende Mail.
In den nächsten Tagen, werde ich die Sketch und das Script noch optimieren. Wäre ja ganz sinnvoll, ein multi-dimensionales Array herzunehmen, um die Zuordnung Türkontakt – ID – Status besser abbilden zu können. Außerdem bin ich mit der Initialisierung des Ethernet-Teils noch nicht so zufrieden. Sieht irgendwie schief aus, funktioniert aber.
Mal sehen, was ich da noch so schaffe.
Wenn Dir dieser Artikel geholfen und/oder gefallen hat, freue ich mich, wenn Du janbpunkt.de mit einer kleinen Spende per PayPal unterstützt. Jeder Betrag ist willkommen.
Über einen Kommentar freue ich mich natürlich auch :-)

Jan B-Punkt

Neueste Artikel von Jan B-Punkt (alle ansehen)
- Angespielt: Fights in Tight Spaces - 26. Februar 2021
- Erfolgreicher Social Engineering-Angriff dank Arztbesuch - 17. Februar 2021
- Adventskalender Gewinnspiele 2020 - 1. Dezember 2020
- Rauchfrei v2 – Erster Monat überstanden - 29. November 2020
- ohsnap! vs Spigen-Halterung - 6. November 2020