Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Rauchmelder Skript

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    200

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    7.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Rauchmelder Skript

Rauchmelder Skript

Scheduled Pinned Locked Moved JavaScript
javascriptsecurity
52 Posts 6 Posters 5.2k Views 8 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • cashC cash

    @Dominik-F Bleibt noch die Frage welches Objekt welchen Status hatte als er ausgelöst wurde? Das Script kann nur reagieren wenn in ioBroker etwas passiert...

    Dominik F.D Offline
    Dominik F.D Offline
    Dominik F.
    wrote on last edited by
    #5

    @cash

    Ja da hatte ich jetzt nicht nachgeschaut weil es 23:30 Uhr war und ich das Ding so schnell wie möglich aus haben wollte 😄

    cashC 1 Reply Last reply
    0
    • Dominik F.D Dominik F.

      @cash

      Ja da hatte ich jetzt nicht nachgeschaut weil es 23:30 Uhr war und ich das Ding so schnell wie möglich aus haben wollte 😄

      cashC Offline
      cashC Offline
      cash
      Most Active
      wrote on last edited by
      #6

      @Dominik-F Der Fehler wird in Zeile 37 liegen nur ohne das man weiß welcher State sich ändert wird man es nicht lösen können...

      Dominik F.D 2 Replies Last reply
      0
      • cashC cash

        @Dominik-F Der Fehler wird in Zeile 37 liegen nur ohne das man weiß welcher State sich ändert wird man es nicht lösen können...

        Dominik F.D Offline
        Dominik F.D Offline
        Dominik F.
        wrote on last edited by
        #7

        @cash

        Kannst du aus diesem Skript, das in meiner CCU läuft vielleicht den State herrausfinden?

        ! HomeMatic-Script
        ! AUSGELöSTEN  RAUCHMELDER FINDEN
        ! http://www.christian-luetgens.de/homematic/e-mail/rauchmelder/Rauchmelder.htm
        
        ! VARIABLEN DEFINIEREN
        
        string s_chn;
        object o_chn;
        object o_dp;
        
        string s_true = "";
        string s_false = "";
        
        string s_subj;
        string s_body;
        integer i_template;
        
        ! RAUCHMELDER FINDEN UND STATUS ABFRAGEN
        
        foreach (s_chn, dom.GetObject(ID_CHANNELS).EnumUsedIDs()) {
          o_chn = dom.GetObject (s_chn);
          if (o_chn.HssType() == "SMOKE_DETECTOR") {
            o_dp = o_chn.DPByHssDP ("STATE");
            if (o_dp.Value()) {
              s_true = s_true # "  " # o_chn.Name() # "\n";
            } else {
              s_false = s_false # "  " # o_chn.Name() # "\n";
            }
          }
        }
        
        ! SUBJECT, BODY UND ALARMIERUNG (FEHLER/STATUS) VORBEREITEN
        
        if (s_true == "") {
          s_subj = "Rauchmelder sind OK";
          s_true = "  keine\n";
          i_template = 2;
        } else {
          s_subj = "Rauchmelder haben ausgeloest";
          i_template = 1;
        }
        
        if (s_false == "") {
          s_false = "  keine\n";
        }
        
        s_body = "Rauchmelder ausgelöst:\n" # s_true # "\nRauchmelder OK:\n" # s_false;
        
        ! MAIL VERSENDEN
        
        dom.GetObject ("E-Mail.Subject").State (s_subj);
        dom.GetObject ("E-Mail.Body").State (s_body);
        dom.GetObject ("E-Mail.Versand").State (i_template);
        
        !  Ende des Scripts
        
        
        paul53P 1 Reply Last reply
        0
        • Dominik F.D Dominik F.

          @cash

          Kannst du aus diesem Skript, das in meiner CCU läuft vielleicht den State herrausfinden?

          ! HomeMatic-Script
          ! AUSGELöSTEN  RAUCHMELDER FINDEN
          ! http://www.christian-luetgens.de/homematic/e-mail/rauchmelder/Rauchmelder.htm
          
          ! VARIABLEN DEFINIEREN
          
          string s_chn;
          object o_chn;
          object o_dp;
          
          string s_true = "";
          string s_false = "";
          
          string s_subj;
          string s_body;
          integer i_template;
          
          ! RAUCHMELDER FINDEN UND STATUS ABFRAGEN
          
          foreach (s_chn, dom.GetObject(ID_CHANNELS).EnumUsedIDs()) {
            o_chn = dom.GetObject (s_chn);
            if (o_chn.HssType() == "SMOKE_DETECTOR") {
              o_dp = o_chn.DPByHssDP ("STATE");
              if (o_dp.Value()) {
                s_true = s_true # "  " # o_chn.Name() # "\n";
              } else {
                s_false = s_false # "  " # o_chn.Name() # "\n";
              }
            }
          }
          
          ! SUBJECT, BODY UND ALARMIERUNG (FEHLER/STATUS) VORBEREITEN
          
          if (s_true == "") {
            s_subj = "Rauchmelder sind OK";
            s_true = "  keine\n";
            i_template = 2;
          } else {
            s_subj = "Rauchmelder haben ausgeloest";
            i_template = 1;
          }
          
          if (s_false == "") {
            s_false = "  keine\n";
          }
          
          s_body = "Rauchmelder ausgelöst:\n" # s_true # "\nRauchmelder OK:\n" # s_false;
          
          ! MAIL VERSENDEN
          
          dom.GetObject ("E-Mail.Subject").State (s_subj);
          dom.GetObject ("E-Mail.Body").State (s_body);
          dom.GetObject ("E-Mail.Versand").State (i_template);
          
          !  Ende des Scripts
          
          
          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #8

          @Dominik-F sagte:

          o_dp = o_chn.DPByHssDP ("STATE");
          

          Das HM-Script wertet den STATE aus, nicht den ERROR_SMOKE_CHAMBER-1_ALARM.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          Dominik F.D 1 Reply Last reply
          1
          • paul53P paul53

            @Dominik-F sagte:

            o_dp = o_chn.DPByHssDP ("STATE");
            

            Das HM-Script wertet den STATE aus, nicht den ERROR_SMOKE_CHAMBER-1_ALARM.

            Dominik F.D Offline
            Dominik F.D Offline
            Dominik F.
            wrote on last edited by
            #9

            @paul53

            also müsste ich dann im obrigen Skript auch den State auswerten und nochmal testen oder`?

            paul53P 1 Reply Last reply
            0
            • Dominik F.D Dominik F.

              @paul53

              also müsste ich dann im obrigen Skript auch den State auswerten und nochmal testen oder`?

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by paul53
              #10

              @Dominik-F sagte:

              also müsste ich dann im obrigen Skript auch den State auswerten und nochmal testen oder`?

              Ja, wobei eine zusätzliche Selektion erforderlich ist, da viele HM-Geräte einen Datenpunkt haben, dessen ID auf STATE endet. Verwende das Gewerk(enum.functions) für die 7 STATE-Datenpunkte und selektiere danach.

              $('*.STATE(functions=smoke)').each(function(id, i) {log(id);});
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              Dominik F.D 1 Reply Last reply
              0
              • paul53P paul53

                @Dominik-F sagte:

                also müsste ich dann im obrigen Skript auch den State auswerten und nochmal testen oder`?

                Ja, wobei eine zusätzliche Selektion erforderlich ist, da viele HM-Geräte einen Datenpunkt haben, dessen ID auf STATE endet. Verwende das Gewerk(enum.functions) für die 7 STATE-Datenpunkte und selektiere danach.

                $('*.STATE(functions=smoke)').each(function(id, i) {log(id);});
                
                Dominik F.D Offline
                Dominik F.D Offline
                Dominik F.
                wrote on last edited by
                #11

                @paul53

                ich habs jetzt geändert. hast du eine idee wie ich es testen kann ohne das die Rauchmelder losgehen und extrem laut sind?

                paul53P 1 Reply Last reply
                0
                • Dominik F.D Dominik F.

                  @paul53

                  ich habs jetzt geändert. hast du eine idee wie ich es testen kann ohne das die Rauchmelder losgehen und extrem laut sind?

                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by paul53
                  #12

                  @Dominik-F sagte:

                  wie ich es testen kann ohne das die Rauchmelder losgehen und extrem laut sind?

                  Im Tab "Objekte" im Expertenmodus den Wert von STATE auf true ändern und anschließend wieder zurück auf false.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  Dominik F.D 1 Reply Last reply
                  0
                  • paul53P paul53

                    @Dominik-F sagte:

                    wie ich es testen kann ohne das die Rauchmelder losgehen und extrem laut sind?

                    Im Tab "Objekte" im Expertenmodus den Wert von STATE auf true ändern und anschließend wieder zurück auf false.

                    Dominik F.D Offline
                    Dominik F.D Offline
                    Dominik F.
                    wrote on last edited by
                    #13

                    @paul53

                    sehr gut. Es kam sofort eine Pushnachricht an. Ich hoffe dann mal, dass es im ernstfall auch funktioniert 😄

                    1 Reply Last reply
                    0
                    • cashC cash

                      @Dominik-F Der Fehler wird in Zeile 37 liegen nur ohne das man weiß welcher State sich ändert wird man es nicht lösen können...

                      Dominik F.D Offline
                      Dominik F.D Offline
                      Dominik F.
                      wrote on last edited by
                      #14

                      Ich habe noch eine Frage zur Pushnachricht in dem Skript.
                      Normalerweise sollte die Schrift"Rauch erkannt" rot sein, jedoch wird sie nicht Rot angezeigt sondern so

                      - <font color="red">Rauch erkannt</font>
                      
                      cashC 1 Reply Last reply
                      0
                      • Dominik F.D Dominik F.

                        Ich habe noch eine Frage zur Pushnachricht in dem Skript.
                        Normalerweise sollte die Schrift"Rauch erkannt" rot sein, jedoch wird sie nicht Rot angezeigt sondern so

                        - <font color="red">Rauch erkannt</font>
                        
                        cashC Offline
                        cashC Offline
                        cash
                        Most Active
                        wrote on last edited by
                        #15

                        @Dominik-F Dir fehlt da noch was:

                        retry: 60,
                        expire: 600,
                        html: 1

                        Das hinzufügen. Dann funktionieren Prio 2 Meldungen auch besser. Denn wenn der Rauchmelder anspringt würde ich auf Prio2 gehen so dass man in Pushover bestätigen muss das man die Meldung wahrgenommen hat....

                        Dominik F.D 1 Reply Last reply
                        0
                        • cashC cash

                          @Dominik-F Dir fehlt da noch was:

                          retry: 60,
                          expire: 600,
                          html: 1

                          Das hinzufügen. Dann funktionieren Prio 2 Meldungen auch besser. Denn wenn der Rauchmelder anspringt würde ich auf Prio2 gehen so dass man in Pushover bestätigen muss das man die Meldung wahrgenommen hat....

                          Dominik F.D Offline
                          Dominik F.D Offline
                          Dominik F.
                          wrote on last edited by
                          #16

                          @cash

                          ah, ich hab mich schon immer gefragt warum
                          retry: 60,
                          expire: 600,
                          html: 1
                          bei dir mit drin war 😄 Kannst du mir kurz erklären was die 3 Einträge genau bewirken?

                          Prio hab ich jetzt auch geändert und Push funktioniert nun.

                          cashC 1 Reply Last reply
                          0
                          • Dominik F.D Dominik F.

                            @cash

                            ah, ich hab mich schon immer gefragt warum
                            retry: 60,
                            expire: 600,
                            html: 1
                            bei dir mit drin war 😄 Kannst du mir kurz erklären was die 3 Einträge genau bewirken?

                            Prio hab ich jetzt auch geändert und Push funktioniert nun.

                            cashC Offline
                            cashC Offline
                            cash
                            Most Active
                            wrote on last edited by
                            #17

                            @Dominik-F html sollte klar sein damit Dein red auch rot ist.
                            Der 600er wert ist die Zeit wie lange Pushover Dich errinnert bevor es verfällt. Die 60 Die Pause zwischen den Pushnachrichten. Sobald Du in der App natürlich die Push bestätigt ist der Spuk vorbei.
                            Mit der Einstellung bekommst Du wenn ich nicht ganz falsch liege max 10 Minuten jede Minute eine Push das Dein Rauchmelder an ist. Wenn Du bis dahin die Push nicht hörst wird auch ein höherer Wert nicht mehr helfen. Bitte dort nicht übertreiben. Dazu ggf. auch die FAQ von Pushover lesen.

                            1 Reply Last reply
                            0
                            • FeuersturmF Online
                              FeuersturmF Online
                              Feuersturm
                              wrote on last edited by
                              #18

                              @Dominik-F Setzt du die Homematic IP Rauchmelder HMIP-SWSD ein? Ich hätte Interesse an deinem Skript. Könntest du in deinem ersten Beitrag die aktuelle Version deines Skriptes einstellen bzw. bei neuen Erkenntnissen das Skript dort aktualisieren?

                              Dominik F.D D 2 Replies Last reply
                              0
                              • FeuersturmF Feuersturm

                                @Dominik-F Setzt du die Homematic IP Rauchmelder HMIP-SWSD ein? Ich hätte Interesse an deinem Skript. Könntest du in deinem ersten Beitrag die aktuelle Version deines Skriptes einstellen bzw. bei neuen Erkenntnissen das Skript dort aktualisieren?

                                Dominik F.D Offline
                                Dominik F.D Offline
                                Dominik F.
                                wrote on last edited by Dominik F.
                                #19

                                @cash
                                Gerade das mit dem html war mir nicht klar 😄 Danke für deine Erklärung

                                @Feuersturm
                                Nein, ich nutze keine HM IP, falls der Datenpunkt STATE dort auch existiert würde ich es einfach mal testen. Falls es nicht funktioniert kann man es vielleicht so umschreiben, dass es auch damit funktioniert.
                                Hab das aktuelle Skript oben eingestellt

                                FeuersturmF 1 Reply Last reply
                                0
                                • Dominik F.D Dominik F.

                                  Hallo zusammen,

                                  ich habe mit etwas Unterstützung ein Rauchmelder Skript laufen, dass mit, im Falle eines Alarms, per Push eine Nachricht schickt, welcher Rauchmelder von HM ausgelöst hat.
                                  Da dort alle Rauchmelder im Log erkannt werden bin ich davon ausgegangen das es funktioniert. Gestern habe ich jedoch durch meine E-Zigarette ausversehen den im Wohnzimmer ausgelöst und festgestellt, dass das Skript nicht funktioniert. Kann mir da jemand helfen?

                                  var logging = true;
                                  var debugging = true;
                                  
                                  var observation = true;     //Dauerhafte Überwachung der Geräte auf Rauch (true = aktiv // false =inaktiv)
                                  var onetime = true;         //Prüft beim Script Start ob derzeit Geräte Rauch erkennen
                                  
                                  const prio_Rauchmelder = 0;
                                     
                                  //Variablen für Pushover
                                  const sendpush   = true;                    //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt
                                  const pushover_Instanz0 =  'pushover.0';    // Pushover instance für HM Alarme
                                  const pushover_Instanz1 =  'pushover.1';    // Pushover instance für HM Warnungen
                                  const pushover_Instanz2 =  'pushover.2';    // Pushover instance für Zigbee Alarme
                                  const pushover_Instanz3 =  'pushover.3';    // Pushover instance für Zigbee Warnung
                                  var prio = -2;                              //nicht verändern die höchste Prio nach Fehlertyp wird verwendet
                                  var titel;
                                  var message; 
                                  var device = 'Handy_Domi';                  //Welches Gerät soll die Nachricht bekommen
                                  //var device = 'All'; 
                                  
                                  function send_pushover (device, message, titel, prio) {
                                      var pushover_Instanz;
                                      if (prio === 0){pushover_Instanz =  pushover_Instanz0;}
                                      else if (prio == 1){pushover_Instanz =  pushover_Instanz1;}
                                      else if (prio == 2){pushover_Instanz =  pushover_Instanz2;}
                                      else {pushover_Instanz =  pushover_Instanz3;}
                                      sendTo(pushover_Instanz, { 
                                          device: device,
                                          message: message, 
                                          title: titel, 
                                          priority: 0,
                                      }); 
                                  }
                                  
                                  //Ab hier eigentliches Script
                                  
                                  var cacheSelectorSmoke = $('channel[state.id=hm-rpc.0.*.1.ERROR_SMOKE_CHAMBER-1_ALARM$]');
                                  
                                  function Smoke(obj) {
                                  var meldungsart = 'Rauch erkannt';
                                  var Gesamt = 0;
                                  var Betroffen = 0;
                                  var text = [];
                                  var _message_tmp = ' ';
                                  var log_manuell = false;
                                  
                                  if (obj) {
                                      var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':'));
                                      var status = obj.newState.val;                                 
                                      var status_text;
                                      if(status){
                                          status_text = 'Rauch erkannt';
                                      }
                                      else{
                                          status_text = 'kein Rauch';    
                                      }
                                      var id_name = obj.id.split('.')[2];
                                      log(common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status_text);
                                  } 
                                  else {
                                      if(debugging){
                                          log('[DEBUG] '+'Function ' +meldungsart +' wird gestartet.'); 
                                      }
                                      log_manuell = true;
                                  } 
                                  
                                  cacheSelectorSmoke.each(function (id, i) {// Schleife für jedes gefundenen Element *.LOWBAT
                                      var obj    = getObject(id);
                                      //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':'));
                                      var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name;
                                      var id_name = id.split('.')[2];
                                      var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE;
                                      var meldungsart = id.split('.')[4];
                                      var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss");
                                      var datum_neu;
                                      var datum_seit;
                                      if(datum < '01.01.71 01:00:00'){
                                          datum_seit = '';
                                          datum_neu = '';
                                      }else{
                                          datum_seit=  ' --- seit: ';
                                          datum_neu = datum +' Uhr';
                                      }
                                      
                                      var status = getState(id).val;                                  
                                      var status_text;
                                      if(status){
                                          status_text = 'Rauch erkannt';
                                      }
                                      else{
                                          status_text = 'kein Rauch';    
                                      }
                                  
                                      if (status === true) {      // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                                          ++Betroffen;
                                          text.push(common_name +' ('+id_name +')');                            // Zu Array hinzufügen
                                          _message_tmp = _message_tmp +common_name +' ('+id_name +')' + ' - <font color="red">Rauch erkannt</font> '+'\n';
                                         
                                      }  
                                      ++Gesamt;          // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
                                      if(debugging){
                                          log('[DEBUG] '+'Geräte Nr. ' +i  +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu);
                                      }                                                  
                                  }); 
                                  
                                  // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben
                                  if(Betroffen > 0){
                                     if(debugging || log_manuell){
                                         log('Es gibt: '+Gesamt +' Geräte im Gewerk ' +meldungsart+'. Derzeit: '+Betroffen +' Meldung(en).');
                                         
                                          }
                                     if(Betroffen >1){
                                          if(logging){
                                              log('Übersicht aller Meldungen im Gewerk: ' +meldungsart +': '+ text.join(', '));
                                          }   
                                     }
                                     //Push verschicken
                                      if(sendpush && !log_manuell){
                                          prio = prio_Rauchmelder;
                                          titel = 'Rauch erkannt';
                                          message = _message_tmp;
                                          send_pushover (device, message, titel, prio);
                                      }   
                                      
                                  }
                                  else{
                                      if((debugging) || (onetime && log_manuell)){
                                          if(Gesamt === 0){
                                              log('Keine Geräte zum überwachen gefunden.');
                                          }
                                          else{
                                              log(Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+' werden überwacht.');
                                          }
                                      }  
                                  }
                                  }
                                  
                                  //Auslösen durch Zustandsänderung
                                  if(observation){
                                  cacheSelectorSmoke.on(function(obj) {
                                  Smoke(obj);
                                  });
                                  }
                                  
                                  if(onetime){
                                  //beim Start
                                  Smoke();
                                  }
                                  
                                  

                                  Hier der Log beim Starten des Skriptes:

                                  javascript.0	2020-02-16 17:54:32.984	info	(13024) script.js.common.Rauchmelder: registered 7 subscriptions and 0 schedules
                                  javascript.0	2020-02-16 17:54:32.984	info	(13024) script.js.common.Rauchmelder: 7 Geräte mit dem Datenpunkt Rauch erkannt werden überwacht.
                                  javascript.0	2020-02-16 17:54:32.984	info	(13024) script.js.common.Rauchmelder: [DEBUG] Geräte Nr. 6 Name: OG_Treppenhaus_Rauchmelder (NEQ1029056) --- HM-Sec-SD-2 --- Typ: ERROR_SMOKE_CHAMBER-1_ALARM --- Status: 0 kein Rauch
                                  javascript.0	2020-02-16 17:54:32.984	info	(13024) script.js.common.Rauchmelder: [DEBUG] Geräte Nr. 5 Name: EG_Diele_Rauchmelder (NEQ1029037) --- HM-Sec-SD-2 --- Typ: ERROR_SMOKE_CHAMBER-1_ALARM --- Status: 0 kein Rauch
                                  javascript.0	2020-02-16 17:54:32.983	info	(13024) script.js.common.Rauchmelder: [DEBUG] Geräte Nr. 4 Name: EG_Wohnzimmer_Rauchmelder (NEQ1028984) --- HM-Sec-SD-2 --- Typ: ERROR_SMOKE_CHAMBER-1_ALARM --- Status: 0 kein Rauch
                                  javascript.0	2020-02-16 17:54:32.983	info	(13024) script.js.common.Rauchmelder: [DEBUG] Geräte Nr. 3 Name: OG_Schlafzimmer_Rauchmelder (NEQ1028652) --- HM-Sec-SD-2 --- Typ: ERROR_SMOKE_CHAMBER-1_ALARM --- Status: 0 kein Rauch
                                  javascript.0	2020-02-16 17:54:32.983	info	(13024) script.js.common.Rauchmelder: [DEBUG] Geräte Nr. 2 Name: OG_Diele_Rauchmelder (NEQ1028645) --- HM-Sec-SD-2 --- Typ: ERROR_SMOKE_CHAMBER-1_ALARM --- Status: 0 kein Rauch
                                  javascript.0	2020-02-16 17:54:32.982	info	(13024) script.js.common.Rauchmelder: [DEBUG] Geräte Nr. 1 Name: OG_Kinderzimmer_Hinten_Rauchmelder (NEQ1028635) --- HM-Sec-SD-2 --- Typ: ERROR_SMOKE_CHAMBER-1_ALARM --- Status: 0 kein Rauch
                                  javascript.0	2020-02-16 17:54:32.982	info	(13024) script.js.common.Rauchmelder: [DEBUG] Geräte Nr. 0 Name: OG_Kinderzimmer_Vorne_Rauchmelder (NEQ1028629) --- HM-Sec-SD-2 --- Typ: ERROR_SMOKE_CHAMBER-1_ALARM --- Status: 0 kein Rauch
                                  javascript.0	2020-02-16 17:54:32.981	info	(13024) script.js.common.Rauchmelder: [DEBUG] Function Rauch erkannt wird gestartet.
                                  javascript.0	2020-02-16 17:54:32.833	info	(13024) Start javascript script.js.common.Rauchmelder
                                  

                                  Edit:
                                  Hier nun die aktuelle funktionierende Version (wird wenn es Veränderungen gibt aktualisiert) :

                                  var logging = true;
                                  var debugging = false;
                                  
                                  var observation = true;     //Dauerhafte Überwachung der Geräte auf Rauch (true = aktiv // false =inaktiv)
                                  var onetime = true;         //Prüft beim Script Start ob derzeit Geräte Rauch erkennen
                                  
                                  const prio_Rauchmelder = 0;
                                     
                                  //Variablen für Pushover
                                  const sendpush   = true;                    //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt
                                  const pushover_Instanz0 =  'pushover.0';    // Pushover instance für HM Alarme
                                  const pushover_Instanz1 =  'pushover.1';    // Pushover instance für HM Warnungen
                                  const pushover_Instanz2 =  'pushover.2';    // Pushover instance für Zigbee Alarme
                                  const pushover_Instanz3 =  'pushover.3';    // Pushover instance für Zigbee Warnung
                                  var prio = -2;                              //nicht verändern die höchste Prio nach Fehlertyp wird verwendet
                                  var titel;
                                  var message; 
                                  var device = 'All';                  //Welches Gerät soll die Nachricht bekommen
                                   
                                  function send_pushover (device, message, titel, prio) {
                                      var pushover_Instanz;
                                      if (prio === 0){pushover_Instanz =  pushover_Instanz0;}
                                      else if (prio == 1){pushover_Instanz =  pushover_Instanz1;}
                                      else if (prio == 2){pushover_Instanz =  pushover_Instanz2;}
                                      else {pushover_Instanz =  pushover_Instanz3;}
                                      sendTo(pushover_Instanz, { 
                                          device: device,
                                          message: message, 
                                          title: titel, 
                                          priority: 2,
                                          retry: 60,
                                          expire: 600,
                                          html: 1
                                      }); 
                                  }
                                  
                                  //Ab hier eigentliches Script
                                  
                                  var cacheSelectorSmoke = $('*.STATE(functions=rauchmelder)');
                                  
                                  function Smoke(obj) {
                                  var meldungsart = 'Rauch erkannt';
                                  var Gesamt = 0;
                                  var Betroffen = 0;
                                  var text = [];
                                  var _message_tmp = ' ';
                                  var log_manuell = false;
                                  
                                  if (obj) {
                                      var common_name = obj.common.name.substr(0, obj.common.name.indexOf(':'));
                                      var status = obj.newState.val;                                 
                                      var status_text;
                                      if(status){
                                          status_text = 'Rauch erkannt';
                                      }
                                      else{
                                          status_text = 'kein Rauch';    
                                      }
                                      var id_name = obj.id.split('.')[2];
                                      log(common_name +' ('+id_name +') ' +'--- Typ: '+meldungsart +' --- Status: ' +status_text);
                                  } 
                                  else {
                                      if(debugging){
                                          log('[DEBUG] '+'Function ' +meldungsart +' wird gestartet.'); 
                                      }
                                      log_manuell = true;
                                  } 
                                  
                                  cacheSelectorSmoke.each(function (id, i) {// Schleife für jedes gefundenen Element *.LOWBAT
                                      var obj    = getObject(id);
                                      //var common_name = getObject(id).common.name.substr(0, obj.common.name.indexOf(':'));
                                      var common_name = getObject(id.substring(0, id.lastIndexOf('.') - 2)).common.name;
                                      var id_name = id.split('.')[2];
                                      var native_type = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE;
                                      var meldungsart = id.split('.')[4];
                                      var datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss");
                                      var datum_neu;
                                      var datum_seit;
                                      if(datum < '01.01.71 01:00:00'){
                                          datum_seit = '';
                                          datum_neu = '';
                                      }else{
                                          datum_seit=  ' --- seit: ';
                                          datum_neu = datum +' Uhr';
                                      }
                                      
                                      var status = getState(id).val;                                  
                                      var status_text;
                                      if(status){
                                          status_text = 'Rauch erkannt';
                                      }
                                      else{
                                          status_text = 'kein Rauch';    
                                      }
                                  
                                      if (status === true) {      // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt
                                          ++Betroffen;
                                          text.push(common_name +' ('+id_name +')');                            // Zu Array hinzufügen
                                          _message_tmp = _message_tmp +common_name +' ('+id_name +')' + ' - <font color="red">Rauch erkannt</font> '+'\n';
                                  
                                      }  
                                      ++Gesamt;          // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
                                      if(debugging){
                                          log('[DEBUG] '+'Geräte Nr. ' +i  +' Name: '+ common_name +' ('+id_name+') --- '+native_type +' --- Typ: '+meldungsart +' --- Status: ' +status +' ' +status_text +datum_seit +datum_neu);
                                      }                                                  
                                  }); 
                                  
                                  // Schleife ist durchlaufen. Im Log wird der aktuelle Status ausgegeben
                                  if(Betroffen > 0){
                                     if(debugging || log_manuell){
                                         log('Es gibt: '+Gesamt +' Geräte im Gewerk ' +meldungsart+'. Derzeit: '+Betroffen +' Meldung(en).');
                                         
                                          }
                                     if(Betroffen >1){
                                          if(logging){
                                              log('Übersicht aller Meldungen im Gewerk: ' +meldungsart +': '+ text.join(', '));
                                          }   
                                     }
                                     //Push verschicken
                                      if(sendpush && !log_manuell){
                                          prio = prio_Rauchmelder;
                                          titel = 'Rauch erkannt';
                                          message = _message_tmp;
                                          send_pushover (device, message, titel, prio);
                                      }   
                                      
                                  }
                                  else{
                                      if((debugging) || (onetime && log_manuell)){
                                          if(Gesamt === 0){
                                              log('Keine Geräte zum überwachen gefunden.');
                                          }
                                          else{
                                              log(Gesamt +' Geräte mit dem Datenpunkt ' +meldungsart+' werden überwacht.');
                                          }
                                      }  
                                  }
                                  }
                                  
                                  //Auslösen durch Zustandsänderung
                                  if(observation){
                                  cacheSelectorSmoke.on(function(obj) {
                                  Smoke(obj);
                                  });
                                  }
                                  
                                  if(onetime){
                                  //beim Start
                                  Smoke();
                                  }
                                  
                                  
                                  paul53P Offline
                                  paul53P Offline
                                  paul53
                                  wrote on last edited by
                                  #20

                                  @Dominik-F sagte:

                                  var cacheSelectorSmoke = $('*.STATE(functions=rauchmelder)').each(function(id, i) {log(id);});

                                  Zeile 39: Das ist eine Testfunktion. Richtige Variable:

                                  var cacheSelectorSmoke = $('*.STATE(functions=rauchmelder)');
                                  

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  Dominik F.D 1 Reply Last reply
                                  0
                                  • paul53P paul53

                                    @Dominik-F sagte:

                                    var cacheSelectorSmoke = $('*.STATE(functions=rauchmelder)').each(function(id, i) {log(id);});

                                    Zeile 39: Das ist eine Testfunktion. Richtige Variable:

                                    var cacheSelectorSmoke = $('*.STATE(functions=rauchmelder)');
                                    
                                    Dominik F.D Offline
                                    Dominik F.D Offline
                                    Dominik F.
                                    wrote on last edited by
                                    #21

                                    @paul53

                                    Danke schön, hab es im ersten Post aktualisiert

                                    1 Reply Last reply
                                    0
                                    • Dominik F.D Dominik F.

                                      @cash
                                      Gerade das mit dem html war mir nicht klar 😄 Danke für deine Erklärung

                                      @Feuersturm
                                      Nein, ich nutze keine HM IP, falls der Datenpunkt STATE dort auch existiert würde ich es einfach mal testen. Falls es nicht funktioniert kann man es vielleicht so umschreiben, dass es auch damit funktioniert.
                                      Hab das aktuelle Skript oben eingestellt

                                      FeuersturmF Online
                                      FeuersturmF Online
                                      Feuersturm
                                      wrote on last edited by Feuersturm
                                      #22

                                      @Dominik-F Dankeschön.
                                      Die HMIP-SWSD haben folgende Datenpunkte:
                                      606c5000-5abb-4f31-a6a6-3bb0c9601918-grafik.png

                                      SMOKE_DETECTOR_ALARM_STATUS
                                      "0": "IDLE_OFF",
                                      "1": "PRIMARY_ALARM",
                                      "2": "INTRUSION_ALARM",
                                      "3": "SECONDARY_ALARM"

                                      SMOKE_DETECTOR_COMMAND
                                      "0": "RESERVED_ALARM_OFF",
                                      "1": "INTRUSION_ALARM_OFF",
                                      "2": "INTRUSION_ALARM",
                                      "3": "SMOKE_TEST",
                                      "4": "COMMUNICATION_TEST",
                                      "5": "COMMUNICATION_TEST_REPEATED

                                      SMOKE_DETECTOR_TEST_RESULT
                                      "0": "NONE",
                                      "1": "SMOKE_TEST_OK",
                                      "2": "SMOKE_TEST_FAILED",
                                      "3": "COMMUNICATION_TEST_SENT",
                                      "4": "COMMUNICATION_TEST_OK"

                                      Ich werde in den nächsten Tagen einmal schauen, dass ich dein Skript verstehe und ob ich es für die HMIP-SWSD Rauchmelder anpassen kann. Heute werde ich vermutlich nicht mehr dazu kommen.

                                      Dominik F.D 1 Reply Last reply
                                      -1
                                      • FeuersturmF Feuersturm

                                        @Dominik-F Dankeschön.
                                        Die HMIP-SWSD haben folgende Datenpunkte:
                                        606c5000-5abb-4f31-a6a6-3bb0c9601918-grafik.png

                                        SMOKE_DETECTOR_ALARM_STATUS
                                        "0": "IDLE_OFF",
                                        "1": "PRIMARY_ALARM",
                                        "2": "INTRUSION_ALARM",
                                        "3": "SECONDARY_ALARM"

                                        SMOKE_DETECTOR_COMMAND
                                        "0": "RESERVED_ALARM_OFF",
                                        "1": "INTRUSION_ALARM_OFF",
                                        "2": "INTRUSION_ALARM",
                                        "3": "SMOKE_TEST",
                                        "4": "COMMUNICATION_TEST",
                                        "5": "COMMUNICATION_TEST_REPEATED

                                        SMOKE_DETECTOR_TEST_RESULT
                                        "0": "NONE",
                                        "1": "SMOKE_TEST_OK",
                                        "2": "SMOKE_TEST_FAILED",
                                        "3": "COMMUNICATION_TEST_SENT",
                                        "4": "COMMUNICATION_TEST_OK"

                                        Ich werde in den nächsten Tagen einmal schauen, dass ich dein Skript verstehe und ob ich es für die HMIP-SWSD Rauchmelder anpassen kann. Heute werde ich vermutlich nicht mehr dazu kommen.

                                        Dominik F.D Offline
                                        Dominik F.D Offline
                                        Dominik F.
                                        wrote on last edited by
                                        #23

                                        @Feuersturm

                                        ich muss da jedoch ehrlich zu dir sein. Ich habe von @cash ein Skript für einen Wassermelder bekommen und habe das dann verändert und mit seiner und @paul53 Hilfe das nun zum laufen bekommen, daher werde ich dir da nur schwer helfen können. Ich würde mich natürlich freuen wenn am Ende ein Skript rauskommt, was sowohl HM als auch HMIP Geräte findet und damit funktioniert. Vielleicht klappt es ja mit zusammenarbeit von allen 🙂

                                        cashC 1 Reply Last reply
                                        0
                                        • FeuersturmF Online
                                          FeuersturmF Online
                                          Feuersturm
                                          wrote on last edited by
                                          #24

                                          Da bin ich guter Dinge, dass die Zusammenarbeit hier im Forum klappt. Ich stehe auch noch am Anfang meiner Programmierkünste. Bisher konnte ich aber jedes Problem durch Suchen oder durch die Hilfe von anderen Users hier im Forum lösen.

                                          Vielleicht kommt ja auch noch der Hinweis zu einem fertigen Skript, welches die HMIP Rauchmelder überwacht, welches ich bisher noch nicht gefunden habe.

                                          cashC 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          136

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe