Go Down

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

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.

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

postmaster-ino

#16
Jan 21, 2018, 12:39 pm Last Edit: Jan 21, 2018, 12:54 pm by postmaster-ino
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

DaveFox

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


ElEspanol

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

DaveFox

#19
Jan 21, 2018, 06:45 pm Last Edit: Jan 21, 2018, 09:45 pm by DaveFox
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?

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

DaveFox

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("");
}

DaveFox

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

Franz54

#23
Jan 26, 2018, 11:13 pm Last Edit: Jan 26, 2018, 11:16 pm by 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  :)

Franz

PS: Das Netz ist bei mir Vodafone.

HotSystems

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.
Gruß Dieter

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

Franz54

#25
Jan 26, 2018, 11:29 pm Last Edit: Jan 27, 2018, 05:21 pm by Franz54
da bin ich mal gespannt.

Ja, ich auch :-)

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

Franz54

#26
Feb 13, 2018, 12:08 pm Last Edit: Feb 13, 2018, 12:18 pm by Franz54
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

uxomm

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

Franz54

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

postmaster-ino

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

Go Up