Rauchmelder Warnsystem

Hallo Leute,

Diese Woche kam endlich mein Rauchmelder mit 433 MHz Funktion (bei Aliexpress bestellt - Weitere Folgen jetzt).
Bitte keine Kommentare dazu wie unsicher etc bla bla bla das ist. Ich stelle mein Projekt hier nur vor. Vorschläge was man ändern kann bezüglich der Programmierung oder Erweiterungen sind gerne Willkommen. Eine Diskussion über andere Sachen möchte ich bitte hier nicht haben.

Nun zu meinem Projekt:

Hintergrund des ganzen: Ich habe zwei Katzen, die immer auf sich gestellt sind wenn keiner da ist. Dadurch das sie im Brandfall ja keine Hilfe holen können bzw. die Haustüre nicht öffnen können, habe ich mir überlegt Rauchmelder zuzulegen die mich oder meine Frau benachrichtigen.
Wenn der Ernstfall eintritt haben wir die Möglichkeit Hilfe zu schicken und die Zeit zu minimieren das sich ein Feuer großflächig ausbreitet.

Ich habe ein ESP8266 ESP-01S und ein RXB6 Empfänger verwendet für die Leitzentrale.
Dieser sollte beim auslösen eine Benachrichtigung aufs Smartphone verschicken. Und das möglichst nicht als SMS sondern als Pushnachricht.

Der Provider pushingbox.com ist zusammen mit Pushbullet die beste Möglichkeit gewesen um das zu realisieren. (Wenn Ihr anderen Vorschläge habt, dann her damit :slight_smile: )

Zusätzlich habe ich ein Webinterface gemacht womit man sehen kann ob alles i.o ist und die Benachrichtigung ggf. deaktivieren / aktivieren kann.

Hier der Code:

//Feuermelder Warnsystem
#include <ESP8266WiFi.h>
#include <RCSwitch.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;

//WLAN Verbindung
#define WIFI_SSID "************"
#define WIFI_PASS "************"


//Status (de)aktiv
int value_SZ = 0;
int value_WZ = 2;
int value_DZ = 2;
int value_GZ = 2;
int value_KZ = 2;
int value_FV = 2;
int value_FH = 2;

//Benachrichtigung
String deviceId_sz = "************";  //Schlafzimmer
String deviceId_wz = "************";  //Wohnzimmer
String deviceId_dz = "************";  //Davids Arbeitszimmer
String deviceId_gz = "************";  //Gemeinschafts Arbeitszimmer
String deviceId_kz = "************";  //Korinnas Arbeitszimmer
String deviceId_fv = "************";  //Flur Vorne
String deviceId_fh = "************";  //Flur Hinten

const char* logServer = "api.pushingbox.com"; //API link

//Feuermelder Decimalcode
long Feuermelder_SZ = ******; //Schlafzimmer
long Feuermelder_WZ = ******; //Wohnzimmer
long Feuermelder_DZ = ******; //Davids Arbeitszimmer
long Feuermelder_GZ = ******; //Gemeinschafts Arbeitszimmer
long Feuermelder_KZ = ******; //Korinnas Arbeitszimmer
long Feuermelder_FH = ******; //Flur Hinten
long Feuermelder_FV = ******; //Flur Vorne

RCSwitch mySwitch = RCSwitch();


//WEBSERVER
WiFiServer server(80);

void Wifiserver() {
   // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  if (request.indexOf("/VAL=ON") != -1)  {
value_SZ = 0;
value_WZ = 0;
value_DZ = 0;
value_GZ = 0;
value_KZ = 0;
value_FV = 0;
value_FH = 0;
  }
  if (request.indexOf("/VAL=OFF") != -1)  {
value_SZ = 2;
value_WZ = 2;
value_DZ = 2;
value_GZ = 2;
value_KZ = 2;
value_FV = 2;
value_FH = 2;
  }

  // HTMLcode der Seite
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println("");
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<b>Feuermelder Warnsystem</b>
");
 
  client.println("Benachrichtungen");
  client.println("
");
  client.print("Schlafzimmer : ");
  if (value_SZ == 1) { client.println("ALARM!
"); } else if (value_SZ == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.print("Wohnzimmer : ");
  client.println("offline
");
//  if (value_WZ == 1) { client.println("ALARM!
"); } else if (value_WZ == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.print("Davids Zimmer : ");
  client.println("offline
");
//  if (value_DZ == 1) { client.println("ALARM!
"); } else if (value_DZ == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.print("Korinnas Zimmer : ");
  client.println("offline
");
//  if (value_KZ == 1) { client.println("ALARM!
"); } else if (value_KZ == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.print("Gemeinschaftszimmer : ");
  client.println("offline
");
//  if (value_GZ == 1) { client.println("ALARM!
"); } else if (value_GZ == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.print("Flur hinten : ");
  client.println("offline
");
//  if (value_FH == 1) { client.println("ALARM!
"); } else if (value_FH == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.print("Flur vorne : ");
  client.println("offline
");
//  if (value_FV == 1) { client.println("ALARM!
"); } else if (value_FV == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }


  client.println("
");
  client.println("
Benachichtigungen: ");
  client.println("<a href=\"/VAL=ON\"\"><button>Zuruecksetzten </button></a>");
  client.println("<a href=\"/VAL=OFF\"\"><button>Offline </button></a>
");  

  
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}


void wifiSetup() {

// -----------------------------------------------------------------------------
// WIFI SETUP
// -----------------------------------------------------------------------------

    WiFi.hostname("Feuermelder_Zentrale"); //Hostname für Router
 
    WiFi.mode(WIFI_STA);
 
    Serial.printf("Verbindungs zu %s wird aufgebaut ", WIFI_SSID);
    
    WiFi.begin(WIFI_SSID, WIFI_PASS);
 
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(">");
        delay(1000);
    } 
    Serial.println("");
    Serial.printf("Verbunden! SSID: %s, IP Adresse: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());

  Serial.println("Server verbunden");
    server.begin(); //Webserver Starten
delay(20);
  
}


void sendNotification(String message){
   WiFiClient client;

  if (client.connect(logServer, 80)) {
    Serial.println("- Server Login erfolgreich");
    
    String postStr = "devid=";
    postStr += String(message);
    postStr += "&message_parameter=";
    postStr += "\r\n\r\n";
    
    Serial.println("- Daten werden gesendet ...");
    
    client.print("POST /pushingbox HTTP/1.1\n");
    client.print("Host: api.pushingbox.com\n");
    client.print("Connection: close\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("\n\n");
    client.print(postStr);
  }
  client.stop();
  Serial.println("Server Logout");
}


void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(2);  // Empfänger liegt auf IO2
  wifiSetup();
}

void loop() {
  if (mySwitch.available()) {
    long value = mySwitch.getReceivedValue(); //Auslesen des Receiver
        if ((value == Feuermelder_SZ) and (value_SZ == 0)) {
          sendNotification(deviceId_sz); //Push senden
          value_SZ = 1;
        }

        if ((value == Feuermelder_WZ) and (value_WZ == 0)) {
          sendNotification(deviceId_wz); //Push senden
          value_WZ = 1;
        }

        if ((value == Feuermelder_DZ) and (value_DZ == 0)) {
          sendNotification(deviceId_dz); //Push senden
          value_DZ = 1;
        }

        if ((value == Feuermelder_KZ) and (value_KZ == 0)) {
          sendNotification(deviceId_kz); //Push senden
          value_KZ = 1;
        }

        if ((value == Feuermelder_GZ) and (value_GZ == 0)) {
          sendNotification(deviceId_gz); //Push senden
          value_GZ = 1;
        }    

        if ((value == Feuermelder_FH) and (value_FH == 0)) {
          sendNotification(deviceId_fh); //Push senden
          value_FH = 1;
        }

        if ((value == Feuermelder_FV) and (value_FV == 0)) {
          sendNotification(deviceId_fv); //Push senden
          value_FV = 1;
        }               
  mySwitch.resetAvailable();  
 }
Wifiserver();
}

Habe bis jetzt noch alles aufn Breadboard, werde die Tage alles schön auf einer Platine setzten.

Gruss, David :slight_smile:

Ich verwende pushingbox.
Es kam schon vor, dass der Dienst Stundenweise oder auch bis zu 3 Tage keine Emails verschickt hat.

Ich bekomme über den Dienst täglich Emails, sodass mir Lücken auffallen.

Wenn ein Dienst beim Rauchmelder 3 Stunden bis Tage keine Info verschickt, würde ich ihn als ungeeignet definieren.

In der Zeit ist die Hütte mehrfach abgebrannt.

Gruß Tommy

Mardetuino:
Ich verwende pushingbox.
Es kam schon vor, dass der Dienst Stundenweise oder auch bis zu 3 Tage keine Emails verschickt hat.

Ich bekomme über den Dienst täglich Emails, sodass mir Lücken auffallen.

Oh, vielen Dank für die Hinweis, da werde ich wohl eine zweite Benachrichtigung einbauen. Merci

Tommy56:
Wenn ein Dienst beim Rauchmelder 3 Stunden bis Tage keine Info verschickt, würde ich ihn als ungeeignet definieren.
In der Zeit ist die Hütte mehrfach abgebrannt.
Gruß Tommy

Mmh, was könnte man stattdessen nehmen? Via sms?

Nichts über irgendeinen Dienst. Rauchmelder direkter Alarm lokal und per GSM oder so was direkt aufs Handy.

Weil Du dann im Falle eines richtigen alarms nicht viel Zeit hast, bis die Hütte abgebrant ist.

Das ersetzt übrigens nichr die gesetzlich vorgeschriebenen (unveränderten) Rauchmelder.

Bei veränderten RM streicht Dir jede Versicherung alle Zahlungen.

Gruß Tommy

Tommy56:
Nichts über irgendeinen Dienst. Rauchmelder direkter Alarm lokal und per GSM oder so was direkt aufs Handy.

Okay, ich habe eine Fritzbox, vielleicht als anruf per SIP?

Tommy56:
Weil Du dann im Falle eines richtigen alarms nicht viel Zeit hast, bis die Hütte abgebrant ist.
Das ersetzt übrigens nichr die gesetzlich vorgeschriebenen (unveränderten) Rauchmelder.
Bei veränderten RM streicht Dir jede Versicherung alle Zahlungen.

Ich lebe in der Schweiz :slight_smile: Da ist ein Rauchmelder nicht Pflicht! Deswegen hab ich welche installiert um im falle eines Falls reagieren zu können.

Gruss, David

Ok, wenn Du die Meldung auch da nicht extrem zeitnah bekommst, ist die Hütte abgebrannt.

SMS kann auch mal nen Tag dauern (schon selbst erlebt).

Mit SIP habe ich noch nix gemacht. Da brauchst Du aber wohl eine hinterlegte Sprachdatei -ohne Gewähr.

Gruß Tommy

Also ich mache gerade Tests mit GSM - SMS. So ein Siemes TC35 GSM Gerät kostet rund 25 Euro, und ist am Arduino sehr schnell angeschlossen. Programmiert ist es auch gleich und so wäre das im Moment meine Lösung.

Du kannst so viele Meldetexte machen wie du willst, muss nur jeder Text einem eigenen MeldePin am Arduino unterstehen.

Ich möchte jetzt mal einen Testaufbau machen, wo ich 1-2 Wochen lang etwa 3x täglich verschiedenen SMS´n aufs Handy verschicke, um die Betriebssicherheit zu prüfen.

Aber ich denke dass so ein Betrieb rel. sicher ist, wenn die Simkarte geladen und nicht abgelaufen ist.

Franz

Tommy56:
SMS kann auch mal nen Tag dauern (schon selbst erlebt).

Stimmt, aber das kommt eigentlich relativ selten vor. Zu Silvester etc öfters :slight_smile:

Franz54:
Also ich mache gerade Tests mit GSM - SMS. So ein Siemes TC35 GSM Gerät ...

Ich möchte jetzt mal einen Testaufbau machen, wo ich 1-2 Wochen lang etwa 3x täglich verschiedenen SMS´n aufs Handy verschicke, um die Betriebssicherheit zu prüfen.

Halte mich bitte da mal auf den Laufenden, würde mich interessieren :slight_smile:

Gruss, David

Franz54:
Aber ich denke dass so ein Betrieb rel. sicher ist, wenn die Simkarte geladen und nicht abgelaufen ist.

Das kann ich bestätigen. Vorausgesetzt ist ein stabiles, sicheres Netz mit ausreichender Feldstärke.

Ich habe eine "kleine" Alarmanlage mit dem TC35 für einen bekannten programmiert, der damit sehr zufrieden ist.

Ich habe es schon erlebt, dass eine SMS vom Smartfone, deren Absendung ich per Sprache mitgeteilt bekommen habe (da war ein Link drin), erst 15 Sunden später ankam.

Das ist für Feuer zu langsam.

Gruß Tommy

Ja, dass SMS über GSM Zeitlich auch nicht sicher ist, das wusste ich noch nicht. :frowning: Dann werde ich den Test mal auf 4 Wochen ausweiten. Dreimal am Tag zu bestimmten Zeiten bestimmte Texte.

Muss aber erst mal eine stabile Verbindung zwischen Arduino und TC35 mit dem Lötkolben brutzeln :slight_smile:

Franz

DaveFox:
...
Mmh, was könnte man stattdessen nehmen? Via sms?

Alarmanlagen und Brandmeldeanlagen arbeiten mit einer Analogleitung.

SIP, GSM, Email, etc... würde ich bei 90% Verfügbarkeit ansetzen.

Ich schätze mal, dass bei einem Brand, sich innerhalb von 5 Minuten Rauchgas in der ganzen Wohnung in einer schädlichen Konzentration verteilt hat.
in 10 Minuten steht dann der Raum in Flammen.

Wenn etwas auf dem Herd vor sich hin schmauchelt, dann dauerts bestimmt länger.

Franz54:
Dreimal am Tag zu bestimmten Zeiten bestimmte Texte.

Mach doch testweise eine Sim mit Flatrate rein und schicke an verschiedene Handys (idealerweise in verschiedenen Netzen) alle 30 min. die Uhrzeit.
Die Empfängerhandys kannst du ja für diese Zeit für diesen Absender auf lautlos stellen :wink:

Das ist dann etwas aussagekräftiger

bei mir geht die Push Funktion von Blynk recht zuverlässig. Mit Mega/W5100/Iphone/Ipad.

Hab jetzt kurzfristig ne andere Lösung gefunden. Via Sms über einen anderen Provider. Da werden alle Handynetze benutzt, also falls eins ausfällt, kommt das nächste Netz dran -> innosend.de

Hab es per Http request eingebunden und geht super. Nachricht ist sogar 2 Sekunden schneller da als die Pushnachricht.

Mardetuino:
Alarmanlagen und Brandmeldeanlagen arbeiten mit einer Analogleitung.

SIP, GSM, Email, etc... würde ich bei 90% Verfügbarkeit ansetzen

Analogleitung haben wir hier keine im Haus. Und 90% sind besser als 0%.
Selbst wenn ich normale Rauchmelder hier verbaue, hört das keiner da ich ganz oben wohne.

Gruss, David

Ps.: Haben die Feuerwehr 3 Straßen weiter, also die sind sehr schnell da :slight_smile:

Falls Du in einem Bundesland mit gesetzlicher Rauchmelderpflicht lebst, wird diese durch einen Eigenbau nicht erfüllt.
Einen normalen Rauchmelder hört man auch in den Etagen darunter.

Du meldest über HTTP - auch da hast Du keine Garantie, dass das immer verfügbar ist.

Gruß Tommy

Hi

War Das hier nicht daraus entstanden, an ganz normale Rauchmelder eine Art Abgriff anzubringen, damit man Diese 'nach Außen' führen kann?
(kann mich Da aber auch irren und das Thema in meiner Erinnerung könnte schon älter und aus dem Mikrocontroller.net sein - wo das Thema ähnlich ablehnend behandelt wurde, wobei ich selber keine Probleme damit habe, wenn an den Rauchmeldern selber Nichts verändert wird. Wenn doch, spielt man halt mit dem Leben der Anderen (und des Eigenem, hier trifft Es dann aber den Schuldigen, womit ich leben könnte) ).

Aha - 210 Frei-SMS/Monat ohne Grundgebühr?? Wie kann sich Das rechnen?
Sonst eine sehr interessante Idee, z.B. auch für die Wald-Lichtschranke oder dem Baum-Bodenfeuchte-Messer.
Ok, Alles Relativ:
"Leider bieten wir ab sofort keine Free-SMS und Power-SMS mehr an."
Free-SMS: "Dieser Bereich ist nur angemeldet sichtbar. Melde dich gerne kostenlos und unverbindlich bei innosend.de an und testen Sie unsere Möglichkeiten mit dem Startguthaben."
Kann Da Mal wer Angemeldetes rein schauen?
(Noch habe ich keinerlei µC, Die aus dem Haus raus oder rein 'funken' müssten, also nicht sonderlich zeitkritisch)
Aus einem downloadbarem PDF zur API:
"Unsere Geschäftskundenangebote finden Sie auf smskaufen.com. Nutzung nur für private Zwecke"
Somit ist innosend.de rein für nicht-geschäftliche SMSen - ab wann ist eine SMS geschäftlich?
Spätestens nach Übergabe des Baum-Bodenfeuchte-Messer wird das Projekt von 'der Stadt' betreut und sollte somit raus fallen.
Bei der Wald-Lichtschranke könnten zumindest finanzielle Interessen dahinter stehen (wenn die Enduro-Horde Mal wieder den Wald umpflügt).

MfG

Tommy56:
Falls Du in einem Bundesland mit gesetzlicher Rauchmelderpflicht lebst, wird diese durch einen Eigenbau nicht erfüllt.
Einen normalen Rauchmelder hört man auch in den Etagen darunter.

Ich lebe in der Schweiz, da gibt es kein Pflicht, alles freiwillig.
Unter der Woche ist hier selten jemand im Haus, da alle arbeiten. Also würde es niemand hören

Tommy56:
Du meldest über HTTP - auch da hast Du keine Garantie, dass das immer verfügbar ist.

Ist richtig, aber besser als nichts, oder? Gibt es eine alternative?

postmaster-ino:
War Das hier nicht daraus entstanden, an ganz normale Rauchmelder eine Art Abgriff anzubringen, damit man Diese 'nach Außen' führen kann?
(kann mich Da aber auch irren und das Thema in meiner Erinnerung könnte schon älter und aus dem Mikrocontroller.net sein - wo das Thema ähnlich ablehnend behandelt wurde, wobei ich selber keine Probleme damit habe, wenn an den Rauchmeldern selber Nichts verändert wird. Wenn doch, spielt man halt mit dem Leben der Anderen (und des Eigenem, hier trifft Es dann aber den Schuldigen, womit ich leben könnte) ).

Hatte ich auch gelesen. Ich habe keinen Rauchmelder modifiziert sondern welche Bestellt die fertig sind.

postmaster-ino:
Aha - 210 Frei-SMS/Monat ohne Grundgebühr?? Wie kann sich Das rechnen?

Vielleicht ne Flatrate?

postmaster-ino:
"Leider bieten wir ab sofort keine Free-SMS und Power-SMS mehr an."
Free-SMS: "Dieser Bereich ist nur angemeldet sichtbar. Melde dich gerne kostenlos und unverbindlich bei innosend.de an und testen Sie unsere Möglichkeiten mit dem Startguthaben."
Kann Da Mal wer Angemeldetes rein schauen?
(Noch habe ich keinerlei µC, Die aus dem Haus raus oder rein 'funken' müssten, also nicht sonderlich zeitkritisch)

Hatte die Seite früher auch schon benutzt, als ich via Delphi noch programmiert hatte. War sehr gut, und ist auch günstig

Gruss, David

Hast du einen Link zu den Rauchmeldern und den passenden Empfängern?

ElEspanol:
Hast du einen Link zu den Rauchmeldern und den passenden Empfängern?

Habe sie bei Aliexpress bestellt.
Empfänger ist ein ESP-01S (ESP8266) und ein RXB6 Empfänger.

Gruss, David

Ps.: Wollte grad meinen neuen angepassten Code reinsetzten, da kam die meldung das ich nicht mehr als 9000 Zeichen überschreiten darf. Wieso das?