Go Down

Topic: Rauchmelder Warnsystem (Read 1 time) previous topic - next topic

DaveFox

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  :) )

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:
Code: [Select]
//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><br>");
 
  client.println("Benachrichtungen");
  client.println("<br>");
  client.print("Schlafzimmer : ");
  if (value_SZ == 1) { client.println("ALARM!<br>"); } else if (value_SZ == 2) { client.println("deaktiviert<br>");} else { client.println("alles i.o.<br>"); }
  client.print("Wohnzimmer : ");
  client.println("offline<br>");
//  if (value_WZ == 1) { client.println("ALARM!<br>"); } else if (value_WZ == 2) { client.println("deaktiviert<br>");} else { client.println("alles i.o.<br>"); }
  client.print("Davids Zimmer : ");
  client.println("offline<br>");
//  if (value_DZ == 1) { client.println("ALARM!<br>"); } else if (value_DZ == 2) { client.println("deaktiviert<br>");} else { client.println("alles i.o.<br>"); }
  client.print("Korinnas Zimmer : ");
  client.println("offline<br>");
//  if (value_KZ == 1) { client.println("ALARM!<br>"); } else if (value_KZ == 2) { client.println("deaktiviert<br>");} else { client.println("alles i.o.<br>"); }
  client.print("Gemeinschaftszimmer : ");
  client.println("offline<br>");
//  if (value_GZ == 1) { client.println("ALARM!<br>"); } else if (value_GZ == 2) { client.println("deaktiviert<br>");} else { client.println("alles i.o.<br>"); }
  client.print("Flur hinten : ");
  client.println("offline<br>");
//  if (value_FH == 1) { client.println("ALARM!<br>"); } else if (value_FH == 2) { client.println("deaktiviert<br>");} else { client.println("alles i.o.<br>"); }
  client.print("Flur vorne : ");
  client.println("offline<br>");
//  if (value_FV == 1) { client.println("ALARM!<br>"); } else if (value_FV == 2) { client.println("deaktiviert<br>");} else { client.println("alles i.o.<br>"); }


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

 
  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 :)

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.

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

DaveFox

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

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?

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

DaveFox

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?

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 :) Da ist ein Rauchmelder nicht Pflicht! Deswegen hab ich welche installiert um im falle eines Falls reagieren zu können.

Gruss, David

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Franz54

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

DaveFox

SMS kann auch mal nen Tag dauern (schon selbst erlebt).
Stimmt, aber das kommt eigentlich relativ selten vor. Zu Silvester etc öfters :)

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 :)


Gruss, David

HotSystems

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.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Franz54

Ja, dass SMS über GSM Zeitlich auch nicht sicher ist, das wusste ich noch nicht. :(  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  :)

Franz

Mardetuino

...
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.

ElEspanol

#13
Jan 21, 2018, 09:53 am Last Edit: Jan 21, 2018, 09:54 am by ElEspanol
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 ;)

Das ist dann etwas aussagekräftiger

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

DaveFox

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.



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 :)

Go Up