Rauchmelder Warnsystem

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?

Das ist eine generelle Beschränkung für Code pro Posting.
Teile ihn einfach sinnvoll auf mehrere Postings auf.

Gruß Tommy

Tommy56:
Das ist eine generelle Beschränkung für Code pro Posting.
Teile ihn einfach sinnvoll auf mehrere Postings auf.

Okay, merci. Dann kommt jetzt mal der Code :slight_smile:
Hab das Warnsystem jetzt zusätzlich mit meiner Steuerung vom Homesystem verbunden.

Teil 1:

//Feuermelder Warnsystem & Alexa SmartHomesystem
#include <ESP8266WiFi.h>
#include <RCSwitch.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;
#include "fauxmoESP.h"

//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;
int sms_send = 0;

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

//API & Zugangsdaten für Pushingbox
const char* logServer = "api.pushingbox.com"; //API link

//API & Zugangsdaten für innosend
String smsServer = "innosend.de"; //API link
String smsUSER = "********"; //Benutzername
String smsPASS = "********"; //Passwort
String smsABSENDER = "********"; //Absendername max 11 Buchstaben oder 16 Zahlen
String smsEMPFAENGER = "********"; //Emfängernummer
String smsTEXT = "Alarm%20Feuermelder%20aktiv"; //Text in url-encodes / ISO

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

// 433MHz
RCSwitch mySwitch = RCSwitch();

//WEBSERVER
WiFiServer server(80);

//Alexa
fauxmoESP alexawifi;

void Feuermelder() {
   if (mySwitch.available()) {
    long value = mySwitch.getReceivedValue(); //Auslesen des Receiver
        if ((value == Feuermelder_SZ) and (value_SZ == 0)) {
          sendNotification(deviceId_sz); //Push senden
          SMSsend(); //SMS 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();  
 }
}

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;
sms_send = 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;
  }

  if (request.indexOf("/01=ON") != -1)  {
   anfrage(0,0,1);
  }
  if (request.indexOf("/01=OFF") != -1)  {
   anfrage(0,0,0);
  }
 
  if (request.indexOf("/02=ON") != -1)  {
   anfrage(1,0,1);
  }
  if (request.indexOf("/02=OFF") != -1)  {  
   anfrage(1,0,0);
  }

  if (request.indexOf("/03=ON") != -1)  {
   anfrage(2,0,1);
  }
  if (request.indexOf("/03=OFF") != -1)  {  
   anfrage(2,0,0);
  }
  
  if (request.indexOf("/04=ON") != -1)  {
   anfrage(3,0,1);
  }
  if (request.indexOf("/04=OFF") != -1)  {  
   anfrage(3,0,0);
  }
   
// 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.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 : ");
  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 : ");
  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 : ");
  if (value_KZ == 1) { client.println("ALARM!
"); } else if (value_KZ == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.print("Gemeinschaftszimmer : ");
  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 : ");
  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 : ");
  if (value_FV == 1) { client.println("ALARM!
"); } else if (value_FV == 2) { client.println("deaktiviert
");} else { client.println("alles i.o.
"); }
  client.println("
");
  client.print("<b>SMS code: ");
  if (sms_send == 0) { client.println("keine SMS gesendet
"); } else if (sms_send == 200) { client.println("SMS wurde verschickt
");} else { client.println(sms_send); };
  client.println("</b>
");
  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("<b>ALEXA Lichtsteuerung</b>
");
  client.print("Schlafzimmer : ");
  client.println("<a href=\"/01=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/01=OFF\"\"><button>Aus </button></a>
");  
  client.print("Bettlampe eins : ");
  client.println("<a href=\"/02=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/02=OFF\"\"><button>Aus </button></a>
");  
  client.print("Bettlampe zwei : ");
  client.println("<a href=\"/03=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/03=OFF\"\"><button>Aus </button></a>
");  
  client.print("Fenster : ");
  client.println("<a href=\"/04=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/04=OFF\"\"><button>Aus </button></a>
");  
  client.println("</html>");
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}

Teil 2 :slight_smile:

void anfrage(uint8_t device_id, const char * device_name, bool state) {

//1x Senden, 1x Pause etc. Das 3x

  if (state) {

    //Schlafzimmer
    if(device_id == 0) { //1. Gerät AN
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }

    //Bettlampe eins
    if(device_id == 1) { //2. Gerät AN
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }

    //Bettlampe zwei
    if(device_id == 2) { //3. Gerät AN
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }

    //Fenster
    if(device_id == 3) { //4. Gerät AN
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }
   } 
  else {
    
    //Schlafzimmer
    if(device_id == 0) { //1. Gerät AUS
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }
      
    //Bettlampe eins
    if(device_id == 1) { //2. Gerät AUS
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }    

    //Bettlampe zwei
    if(device_id == 2) { //3. Gerät AUS
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }       

    //Fenster
    if(device_id == 3) { //4. Gerät AUS
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      mySwitch.sendTriState("********");
      delay(20);
      }     
         
   }
}

void wifiSetup() {
    WiFi.hostname("SmartHome_Alexa"); //Hostname für Router
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASS);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
    } 
    server.begin(); //Webserver Starten
delay(20);
  
}

void geraete(){
    alexawifi.addDevice("Schlafzimmer"); //1. Gerätenamen
    alexawifi.addDevice("Bettlampe eins"); //2. Gerätenamen
    alexawifi.addDevice("Bettlampe zwei"); //3. Gerätenamen
    alexawifi.addDevice("Fenster"); //4. Gerätenamen
    alexawifi.onMessage(anfrage); // Anfrage von Alexa
}

void SMSsend() {
   HTTPClient http;
   http.begin("http://www." + smsServer + "/gateway/sms.php?id=" + smsUSER + "&pw=" + smsPASS + "&type=4&absender=" + smsABSENDER + "&empfaenger=" + smsEMPFAENGER + "&text=" + smsTEXT);
   int httpCode = http.GET();
   http.end();
   delay(50);
   
  if (httpCode > 0) {
    sms_send = httpCode;
  }
}

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
  mySwitch.enableTransmit(0); //Sender liegt auf IO0
  mySwitch.setProtocol(1); //Sende Protokoll
  mySwitch.setPulseLength(188); //Impulslänge
  wifiSetup(); //Wlan setup
  geraete(); // Geräte die für Alexa steuerbar sollen
}

void loop() {
Feuermelder(); //Feuermelderzentrale (auch über Webinterface nutzbar)
alexawifi.handle(); // Alexa check
Wifiserver(); // Webinterface
}

Dadurch das ich im Moment nur einen Funkrauchmelder habe, sind alle andern deaktiviert.
alle ******** sind die Daten die man dafür braucht.

Gruss, David

Der Test läuft jetzt seit heute Morgen automatisch mit 6 SMS am Tag. 08:35 / 10:35/ 12:35 / 14:35 / 20:35 / 22:35.
Mit den Handauslösungen habe ich bis jetzt etwa 30 SMS die alle ohne Verzögerung kamen. Ich habe in der SMS immer die Auslöseuhrzeit, so kann ich auch wenn ich unterwegs bin gleich erkennen, ob es eine Verzögerung gab. Dann lasse ich das Ding mal ein paar Wochen rennen :slight_smile:

Franz

PS: Das Netz ist bei mir Vodafone.

Franz54:
Der Test läuft jetzt seit heute Morgen automatisch mit 6 SMS am Tag. 08:35 / 10:35/ 12:35 / 14:35 / 20:35 / 22:35.
Mit den Handauslösungen habe ich bis jetzt etwa 30 SMS die alle ohne Verzögerung kamen. Ich habe in der SMS immer die Auslöseuhrzeit, so kann ich auch wenn ich unterwegs bin gleich erkennen, ob es eine Verzögerung gab. Dann lasse ich das Ding mal ein paar Wochen rennen :slight_smile:

Franz

PS: Das Netz ist bei mir Vodafone.

Hallo Franz,

da bin ich mal gespannt.
Danke schon mal dafür.

HotSystems:
da bin ich mal gespannt.

Ja, ich auch :slight_smile:

Hier noch ein Bild. Habe es jetzt doch erst mal mit Steckverbindern belassen.

Ich habe mal einen zwischenstand des SMS Test´s.
Es sind jetzt etwa drei von den 4 Wochen die ich ihn laufen lasse vorbei.

Jede SMS von den bis jetzt 147 ist rausgegangen, fünf Stück sind verspätet angekommen. Da kann es sein dass ich bei nem Kunden schlechten oder keinen Empfang hatte. Mal drei Stunden mal ne halbe Stunde, mal 1,5 Std. mal eine Stunde. Und einmal ist es seltsam. Da könnte es sein dass der SMS Server ein Problem hatte. Da ist die 20:35 Uhr Meldung am nächsten Tag um 07:33 Uhr angekommen. Also ich würde sagen eine sehr verspätete Meldung, die der Server Technik des Anbieters geschuldet ist. Die Karte ist eine aufladbare Vodafone Karte mit 9 Cent pro SMS.

Franz

Danke für den Zwischenstand!
Ich beobachte "Langzeittests" unter realen Bedingungen immer mit Interesse.

OK, jetzt sind noch 60 SMS dazu gekommen. Immer Pünklich, ausser manchmal 1 Minunte nach versendung. Also insgesamt haben wir 207 Meldungen, davon 4 Meldungen wahrscheinlich verspätet weil mein Handy keinen Empfang hatte, und eine weil der Server eine Nacht lang wohl Probleme hatte.

Ich denke das ist ein gutes Ergebnis.

Franz

Hi

Danke für diesen echt abgefahrenen Extrem-SMS-Test.
Bis auf Server-Probleme, wo Du eh machtlos bist, scheint das Versenden und Empfangen durch die Bank durch gut zu funktionieren.
Klar, wenn Dein Handy nicht empfangsbereit ist, kann der beste SMS-Sender Das nicht auffangen.

MfG

Ich habe noch einen Lieferanten der baut Störmeldeanlagen und hat dafür auch ein GSM Modul für die SMS und Sprachmeldungen. Die werde ich auch mal fragen wie zuverlässig die SMS Methode ist. Bei den Sprachmeldungen bekommt die Anlage eine Quittierung durch den Angerufenen, dann hat die Anlage sogar einen Nachweis dass die Meldung angekommen ist. Also der Angerufene bekommt die Sprachnachricht aus der Anlage und wählt dann zwei Einser zur Bestätigung. Wenn die Anlage das nicht bekommt wählt sie die nächste Nummer an. Solange bis einer der Verantwortlichen quittiert.

Danke für den Erfahrungsbericht!