Seit geraumer Zeit sind Rauchmelder in Neubauten ja Pflicht. Macht ja auch durchaus Sinn. Gerade wenn man an solche USV-Aktionen denkt 🙂 Also muss ein Rauchmelder her. Der Otto-Normal-Nerd möchte aber mindestens irgendwas haben, was sich auch in die Standardhaustechnik integrieren lässt – am besten noch ein Set von mehreren Rauchmeldern. Da gibts es zig Varianten:
- Die Billigrauchmelder (um die 5-10 Euro)
- Die Billgrauchmelder die per 433MhZ miteinander sprechen (ab 60 Euro im Set mit 4 Stück)
- Die teueren Systemrauchmelder die nichts anderes als (2) machen, nur das G*ra oder sonstwas draufsteht.
- Die sündhaft teueren Rauchmelder mit eingebauten GSM-Modul (ab ca. 150 Euro aufwärts…)
Gelinde gesagt: Alles doof – da es entweder meinen Ansprüchen nicht genügt, oder massivst zu teuer ist.
Nun denn erstmal Dinge sichten – also ab zum Baumarkt und mal einen Rauchmelder der Kategorie “1” gekauft. Schimpft sich RM120 und hat schlappe 8,- gekostet. Laut ist das Ding ja, wenn man Zigarettenrauch reinbläst, oder mal den Testknopf drückt – bringt nur nix, wenn niemand zu hause ist 🙁 Nach dem öffnen des Geräts, schaut einen ein wenig SMD-Technik (Oha) an, darunter ein IC mit der Aufschrift “CS2105go“. Wie sollte es anders sein, dazu gibts leider kein Datenblatt. Aber Moment, vielleicht ist der CS2105GO-M12 ja Pinkompatibel mit dem MC145010 – Bingo, ist er ! Der MC145010 (manchmal auch MC145012) wird in fast allen Rauchmeldern der Kategorie 1 und 2 (teilweise auch 3) verkauft.
Der aufmerksame Leser merkt was: Bei 2 ist doch eine Vernetzung möglich ! Korrekt, so ist es. Mit anderen Worten: In den Rauchmeldern der Kat.1 ist derselbe IC verbaut, wie in 2, nur das in 1 halt das 433MhZ Modul fehlt. Brauch ich (zumindest jetzt zum Testen) eh erstmal nicht – doch dazu später. Der MC145010 verfügt über einen sog. I/O Pin, der bei 2er Rauchmeldern dann das 433MhZ-Modul per TTL-High triggert, sobald es qualmt. Beim 1er liegt PIN7 (I/O) tot herum. Perfekt. Also fix den Ground (-) und PIN7 per Kabel rausgeführt und an den Arduino geklemmt:
Links (Schwarz) die Masse – Also GND direkt mit dem GND des Arduino’s verbinden,
Recht (Rot), etwas fuckeliger, den PIN7 (I/O) des CS2105GO-M12 auf einen Analogen Input-PIN des Mikrocontrollers legen.
Auf dem Arduino selbst habe ich derzeit die gute Wohnzimmerinfo-Anzeige am laufen, da ist also schon ein “Ethernet-Shield” drauf. Da dort noch diverse Analoge Ports frei sind, und der Rauchmelder auch direkt deben dem Display wohnen soll, also optimal. Vom Code her gestaltet sich das ganze relativ simpel (siehe unten). Das allerfeinste ist jedoch, dass man nichtmal gegen irgendwelche Vorschriften verstösst, wenn man sich anstelle von Variante 1 für einen Rauchmelder der Variante “2” entscheidet. Denn alle Rauchmelder bleiben so wie sie sind (sprich: Die piepen trotzdem). Nur einen, in dem 433MhZ-“Netz”, muss man dann an den Arduino anklemmen. Der verbaute Standalone-RM120 piept übrigens auch noch – denn genau dafür ist PIN7 gedacht: I/O !
#include
#include
#define SmokePIN 0
int Smoke=0;
boolean mailsent=false;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0, 100 };
void setup () {
Ethernet.begin(mac,ip);
}
void loop() {
// Read Smokedetector
Smoke=analogRead(SmokePIN);
// GGf. RESET der Variable mailsent
if (Smoke > 900) {
if (mailsent==false) {
firemail();
mailsent=true;
}
}
}
void firemail() {
// IP des Mailservers
byte mserver[] = {192,168,0,101};
Client Mail(mserver,25);
if (Mail.connect()) {
Mail.println(“HELO arduino.domain.tld”); /* say hello (statement after helo is needed but irrelevant)*/
Mail.println(“MAIL From: et_brennt@domain.tld”); /* identify sender, this should be the same as the smtp server you are using */
Mail.println(“RCPT To: et_brennt@domain.tld”); /* identify recipient */
Mail.println(“DATA”);
Mail.println(“To: et_brennt@domain.tld”); /* identify recipient */
Mail.println(“Subject: Burning down the House”); /* insert subject */
Mail.println(“WARNING – Smoke detected !”); /* insert body */
Mail.println(“.”); /* end email */
Mail.println(“QUIT”); /* terminate connection */
Mail.println();
Mail.stop();
}
}