Hinweis!
Dieser Beitrag enthält min. einen Partnerlink.
Info zu meinen Partnerlinks
Aufgepasst!
Günstige Hardware und kostenlose eBooks für den Arduino gibt es bei AZ Delivery
Info zu meinen Partnerlinks
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 Beitrag geholfen hat und/oder Du mich finanziell unterstützen magst, kannst Du dies gerne per Paypal machen.
Alternativ kannst Du Dir meinen Amazon-Partnerlink in die Favoriten legen und Amazon bei Deinen zukünftigen Einkäufen darüber aufrufen:
Es entstehen Dir dadurch keine Mehrkosten, ich erhalte aber eine kleine Provision.
Über einen Kommentar freue ich mich natürlich auch :-)
Jan B-Punkt
Neueste Artikel von Jan B-Punkt (alle ansehen)
- Adventskalender Gewinnspiele 2024 - 1. Dezember 2024
- Freie News für freie User – Schneller als die Paywall - 22. April 2024
- Adventskalender Gewinnspiele 2023 - 1. Dezember 2023
- Angespielt: Starship Troopers: Extermination - 19. Mai 2023
- Fazit zum ATOMSTACK A5 pro nach zwei Monaten Nutzung - 9. Mai 2023