Arduino Forum

International => Deutsch => Topic started by: DaveFox on Jan 20, 2018, 10:57 pm

Title: Rauchmelder Warnsystem
Post by: DaveFox on Jan 20, 2018, 10:57 pm
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 :)
Title: Re: Rauchmelder Warnsystem
Post by: Mardetuino on Jan 20, 2018, 11:09 pm
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.
Title: Re: Rauchmelder Warnsystem
Post by: Tommy56 on Jan 20, 2018, 11:12 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 20, 2018, 11:14 pm
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?
Title: Re: Rauchmelder Warnsystem
Post by: Tommy56 on Jan 20, 2018, 11:19 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 20, 2018, 11:23 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: Tommy56 on Jan 20, 2018, 11:34 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: Franz54 on Jan 20, 2018, 11:43 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 20, 2018, 11:48 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: HotSystems on Jan 20, 2018, 11:50 pm
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.

Title: Re: Rauchmelder Warnsystem
Post by: Tommy56 on Jan 20, 2018, 11:51 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: Franz54 on Jan 20, 2018, 11:54 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: Mardetuino on Jan 21, 2018, 09:18 am
...
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.
Title: Re: Rauchmelder Warnsystem
Post by: ElEspanol on Jan 21, 2018, 09:53 am
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.
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 21, 2018, 12:21 pm
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 :)
Title: Re: Rauchmelder Warnsystem
Post by: Tommy56 on Jan 21, 2018, 12:31 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: postmaster-ino on Jan 21, 2018, 12:39 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 21, 2018, 01:14 pm
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
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?

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.

Aha - 210 Frei-SMS/Monat ohne Grundgebühr?? Wie kann sich Das rechnen?
Vielleicht ne Flatrate?
"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

Title: Re: Rauchmelder Warnsystem
Post by: ElEspanol on Jan 21, 2018, 06:36 pm
Hast du einen Link zu den Rauchmeldern und den passenden Empfängern?
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 21, 2018, 06:45 pm
Hast du einen Link zu den Rauchmeldern und den passenden Empfängern?
Habe sie bei Aliexpress (https://de.aliexpress.com/item/2pcs-lot-433MHz-Wireless-Smoke-Alarm-Fire-Smoke-Detector-Sensor-for-Security-System/32698895792.html) 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?
Title: Re: Rauchmelder Warnsystem
Post by: Tommy56 on Jan 21, 2018, 09:50 pm
Das ist eine generelle Beschränkung für Code pro Posting.
Teile ihn einfach sinnvoll auf mehrere Postings auf.

Gruß Tommy
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 22, 2018, 06:15 pm
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 :)
Hab das Warnsystem jetzt zusätzlich mit meiner Steuerung vom Homesystem verbunden.

Teil 1:

Code: [Select]
//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><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 : ");
  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 : ");
  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 : ");
  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 : ");
  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 : ");
  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 : ");
  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.print("<b>SMS code: ");
  if (sms_send == 0) { client.println("keine SMS gesendet<br>"); } else if (sms_send == 200) { client.println("SMS wurde verschickt<br>");} else { client.println(sms_send); };
  client.println("</b><br>");
  client.println("Benachichtigungen: ");
  client.println("<a href=\"/VAL=ON\"\"><button>Zuruecksetzten </button></a>");
  client.println("<a href=\"/VAL=OFF\"\"><button>Offline </button></a><br /></br>"); 
 
 
  client.println("<b>ALEXA Lichtsteuerung</b><br>");
  client.print("Schlafzimmer : ");
  client.println("<a href=\"/01=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/01=OFF\"\"><button>Aus </button></a><br />"); 
  client.print("Bettlampe eins : ");
  client.println("<a href=\"/02=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/02=OFF\"\"><button>Aus </button></a><br />"); 
  client.print("Bettlampe zwei : ");
  client.println("<a href=\"/03=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/03=OFF\"\"><button>Aus </button></a><br />"); 
  client.print("Fenster : ");
  client.println("<a href=\"/04=ON\"\"><button>An </button></a>");
  client.println("<a href=\"/04=OFF\"\"><button>Aus </button></a><br />"); 
  client.println("</html>");
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}
Title: Re: Rauchmelder Warnsystem
Post by: DaveFox on Jan 22, 2018, 06:21 pm
Teil 2 :)

Code: [Select]

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
Title: Re: Rauchmelder Warnsystem
Post by: Franz54 on Jan 26, 2018, 11:13 pm
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  :)

Franz

PS: Das Netz ist bei mir Vodafone.
Title: Re: Rauchmelder Warnsystem
Post by: HotSystems on Jan 26, 2018, 11:26 pm
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  :)

Franz

PS: Das Netz ist bei mir Vodafone.
Hallo Franz,

da bin ich mal gespannt.
Danke schon mal dafür.
Title: Re: Rauchmelder Warnsystem
Post by: Franz54 on Jan 26, 2018, 11:29 pm
da bin ich mal gespannt.

Ja, ich auch :-)

Hier noch ein Bild (http://www.bilder.disunddas.de/SMS_mit_TC35.jpg). Habe es jetzt doch erst mal mit Steckverbindern belassen.
Title: Re: Rauchmelder Warnsystem
Post by: Franz54 on Feb 13, 2018, 12:08 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: uxomm on Feb 13, 2018, 12:30 pm
Danke für den Zwischenstand!
Ich beobachte "Langzeittests" unter realen Bedingungen immer mit Interesse.
Title: Re: Rauchmelder Warnsystem
Post by: Franz54 on Feb 21, 2018, 07:26 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: postmaster-ino on Feb 21, 2018, 07:30 pm
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
Title: Re: Rauchmelder Warnsystem
Post by: Franz54 on Feb 21, 2018, 07:41 pm
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.
Title: Re: Rauchmelder Warnsystem
Post by: uxomm on Feb 21, 2018, 08:01 pm
Danke für den Erfahrungsbericht!