Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Help] Skript Wassersensor auswerten

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    983

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

[Help] Skript Wassersensor auswerten

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 2 Kommentatoren 822 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Diamand2k22

    Hallo zusammen,

    ich habe mir ein Skript gebastelt, welches den Status meiner Wassersensoren auswertet.
    Wenn ein Sensor auslöst, wird mir eine Nachricht per WhatsApp aufs Handy geschickt.
    Das funktioniert auch soweit ganz gut.

    n({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "ne"}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      if (!getState(obj.id).val== false) {
    WhatsAppBot(0, String((obj.common ? obj.common.name : "")) + ' – meldet Wasseraustritt!<br>*Bitte überprüfen!!!!*');
    }
    })
    

    Nun schreibt er mir in der Nachricht "Wassersensor Enthärtung water - meldet Wasseraustritt!
    Bitte überprüfen!"

    Meine Frage wäre, wie kann ich den Namen der Variable "water" aus dem Text filtern und ggf. noch den Raum mit ausgeben?

    Danke für eure Antworten.

    Grüße

    Diamand

    D Offline
    D Offline
    Diamand2k22
    schrieb am zuletzt editiert von
    #3

    @diamand2k22 said in [Help] Skript Wassersensor auswerten:

    Hallo zusammen,

    ich habe mir ein Skript gebastelt, welches den Status meiner Wassersensoren auswertet.
    Wenn ein Sensor auslöst, wird mir eine Nachricht per WhatsApp aufs Handy geschickt.
    Das funktioniert auch soweit ganz gut.

    n({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "ne"}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      if (!getState(obj.id).val== false) {
    WhatsAppBot(0, String((obj.common ? obj.common.name : "")) + ' – meldet Wasseraustritt!<br>*Bitte überprüfen!!!!*');
    }
    })
    

    Nun schreibt er mir in der Nachricht "Wassersensor Enthärtung water - meldet Wasseraustritt!
    Bitte überprüfen!"

    Meine Frage wäre, wie kann ich den Namen der Variable "water" aus dem Text filtern und ggf. noch den Raum mit ausgeben?

    Danke für eure Antworten.

    Grüße

    Diamand

    Hallo Paul,

    danke für deine schnelle Antwort.
    Ich hab es jetzt so wie im Codefenster gelöst.
    So funktioniert es.

    Grüße

    on({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "ne"}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
      if (!getState(obj.id).val== false) {
    WhatsAppBot(0, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*');
    }
    })
    
    paul53P 1 Antwort Letzte Antwort
    0
    • D Diamand2k22

      @diamand2k22 said in [Help] Skript Wassersensor auswerten:

      Hallo zusammen,

      ich habe mir ein Skript gebastelt, welches den Status meiner Wassersensoren auswertet.
      Wenn ein Sensor auslöst, wird mir eine Nachricht per WhatsApp aufs Handy geschickt.
      Das funktioniert auch soweit ganz gut.

      n({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (!getState(obj.id).val== false) {
      WhatsAppBot(0, String((obj.common ? obj.common.name : "")) + ' – meldet Wasseraustritt!<br>*Bitte überprüfen!!!!*');
      }
      })
      

      Nun schreibt er mir in der Nachricht "Wassersensor Enthärtung water - meldet Wasseraustritt!
      Bitte überprüfen!"

      Meine Frage wäre, wie kann ich den Namen der Variable "water" aus dem Text filtern und ggf. noch den Raum mit ausgeben?

      Danke für eure Antworten.

      Grüße

      Diamand

      Hallo Paul,

      danke für deine schnelle Antwort.
      Ich hab es jetzt so wie im Codefenster gelöst.
      So funktioniert es.

      Grüße

      on({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (!getState(obj.id).val== false) {
      WhatsAppBot(0, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*');
      }
      })
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #4

      @diamand2k22 sagte: Ich hab es jetzt so wie im Codefenster gelöst.

      Weshalb zeigst Du den Javascript-Code, wenn es mittels Blockly erstellt wurde?
      Außerdem doppelte Verneinung: nicht Wert vom Objekt ID = falsch

      Bild_2022-08-26_220215402.png

      oder noch eleganter:

      Bild_2022-08-26_220710476.png

      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

      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        Diamand2k22
        schrieb am zuletzt editiert von Diamand2k22
        #5

        Hallo Paul,

        ich habe das Script nicht mit Blockly erstellt, das ist alles im JavaScript verpackt.
        Hab mir das zusammenkopiert und entsprechend abgeändert.
        Jetzt lasse ich mir zusätzlich über den Alexa EchoDot noch eine Sprachnachricht ausgeben.
        So sieht mein Code so aus:

        createState('waterAlert', false);
        createState('waterAlertRoom', false);
         
        on({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "gt"}, async function (obj,id) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          var room = getObject(id, 'rooms').enumNames[0];
            setState('javascript.0.waterAlert', true); 
            setState('javascript.0.waterAlertRoom', room);
            alarmOnAlexa();
            nachrichtOnWhatsApp();
        }
        );
         
        function alarmOnAlexa(id){
           if(getState('javascript.0.waterAlert').val)
            {
                var room = getObject(id, 'rooms').enumNames[0];
                setState('alexa2.0.Echo-Devices.G090XG12149215R4.Commands.speak', 'Achtung! Im ' + room + ' wurde ein Wassereinbruch festgestellt!');
                setTimeout(alarmOnAlexa, 5000);
            }
        }
         
         function nachrichtOnWhatsApp(obj){
            if(getState('javascript.0.waterAlert').val)
            {
               WhatsAppBot(0, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*');
            }
        }
        

        Meine Fragen wären:
        Die Abfrage aus welchem Raum der Alarm kommt funktioniert nicht.
        Wie kann ich bei dem EchoDot die Lautstärke bei Alarm erhöhen und wenn der Alarm quittiert wurde wieder zurück stellen?

        Auszug aus dem Log:

        javascript.0
        705	2022-08-27 10:58:32.068	error	at processImmediate (node:internal/timers:466:21)
        
        javascript.0
        705	2022-08-27 10:58:32.068	error	at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
        
        javascript.0
        705	2022-08-27 10:58:32.067	error	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:596:29)
        
        javascript.0
        705	2022-08-27 10:58:32.067	error	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1212:38)
        
        javascript.0
        705	2022-08-27 10:58:32.066	error	at Object.<anonymous> (script.js.common.Test.Test:7:36)
        
        javascript.0
        705	2022-08-27 10:58:32.065	error	script.js.common.Test.Test: TypeError: Cannot read properties of null (reading 'enumNames')
        
        javascript.0
        705	2022-08-27 10:58:32.057	warn	script.js.common.Test.Test: Object "undefined" does not exist
        

        Danke und Grüße

        paul53P 1 Antwort Letzte Antwort
        0
        • D Diamand2k22

          Hallo Paul,

          ich habe das Script nicht mit Blockly erstellt, das ist alles im JavaScript verpackt.
          Hab mir das zusammenkopiert und entsprechend abgeändert.
          Jetzt lasse ich mir zusätzlich über den Alexa EchoDot noch eine Sprachnachricht ausgeben.
          So sieht mein Code so aus:

          createState('waterAlert', false);
          createState('waterAlertRoom', false);
           
          on({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "gt"}, async function (obj,id) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            var room = getObject(id, 'rooms').enumNames[0];
              setState('javascript.0.waterAlert', true); 
              setState('javascript.0.waterAlertRoom', room);
              alarmOnAlexa();
              nachrichtOnWhatsApp();
          }
          );
           
          function alarmOnAlexa(id){
             if(getState('javascript.0.waterAlert').val)
              {
                  var room = getObject(id, 'rooms').enumNames[0];
                  setState('alexa2.0.Echo-Devices.G090XG12149215R4.Commands.speak', 'Achtung! Im ' + room + ' wurde ein Wassereinbruch festgestellt!');
                  setTimeout(alarmOnAlexa, 5000);
              }
          }
           
           function nachrichtOnWhatsApp(obj){
              if(getState('javascript.0.waterAlert').val)
              {
                 WhatsAppBot(0, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*');
              }
          }
          

          Meine Fragen wären:
          Die Abfrage aus welchem Raum der Alarm kommt funktioniert nicht.
          Wie kann ich bei dem EchoDot die Lautstärke bei Alarm erhöhen und wenn der Alarm quittiert wurde wieder zurück stellen?

          Auszug aus dem Log:

          javascript.0
          705	2022-08-27 10:58:32.068	error	at processImmediate (node:internal/timers:466:21)
          
          javascript.0
          705	2022-08-27 10:58:32.068	error	at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
          
          javascript.0
          705	2022-08-27 10:58:32.067	error	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:596:29)
          
          javascript.0
          705	2022-08-27 10:58:32.067	error	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1212:38)
          
          javascript.0
          705	2022-08-27 10:58:32.066	error	at Object.<anonymous> (script.js.common.Test.Test:7:36)
          
          javascript.0
          705	2022-08-27 10:58:32.065	error	script.js.common.Test.Test: TypeError: Cannot read properties of null (reading 'enumNames')
          
          javascript.0
          705	2022-08-27 10:58:32.057	warn	script.js.common.Test.Test: Object "undefined" does not exist
          

          Danke und Grüße

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #6

          @diamand2k22 sagte: Die Abfrage aus welchem Raum der Alarm kommt funktioniert nicht.

          Vorschlag:

          createState('waterAlert', false, {type: 'boolean', name: 'Wasseralarm'});
          createState('waterAlertRoom', '', {type: 'string', name: 'Raum Wassereinbruch'});
          
          var timer = null;
          var room = '';
          
          function alarmOnAlexa() {
              setState('alexa2.0.Echo-Devices.G090XG12149215R4.Commands.speak', 'Achtung! Im ' + room + ' wurde ein Wassereinbruch festgestellt!');
              timer = setTimeout(alarmOnAlexa, 5000);
          }
           
          function nachrichtOnWhatsApp(obj) {
              WhatsAppBot(0, '*!!Achtung!!*<br>' + obj.channelName + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*');
          }
          
          on(Array.prototype.slice.apply($("*(functions=check_water)")), function(dp) {
              if(dp.state.val) {
                  room = getObject(dp.id, 'rooms').enumNames[0];
                  setState('javascript.0.waterAlert', true, true); 
                  setState('javascript.0.waterAlertRoom', room, true);
                  alarmOnAlexa();
                  nachrichtOnWhatsApp(dp);
              } else {
                  clearTimeout(timer);
                  setState('javascript.0.waterAlert', false, true); 
              }
          });
          

          Woher kommt die Funktion WhatsAppBot()?

          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

          1 Antwort Letzte Antwort
          0
          • D Offline
            D Offline
            Diamand2k22
            schrieb am zuletzt editiert von
            #7

            Hallo Paul,

            danke dir es funktioniert nun perfekt.
            Das einzige wäre noch die Lautstärke von echo dot bei Alarm hochzustellen und danach wieder auf den vorherigen Wert.

            Grüße

            paul53P 1 Antwort Letzte Antwort
            0
            • D Diamand2k22

              Hallo Paul,

              danke dir es funktioniert nun perfekt.
              Das einzige wäre noch die Lautstärke von echo dot bei Alarm hochzustellen und danach wieder auf den vorherigen Wert.

              Grüße

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #8

              @diamand2k22 sagte: Lautstärke von echo dot

              Davon habe ich keine Ahnung.

              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

              1 Antwort Letzte Antwort
              0
              • D Offline
                D Offline
                Diamand2k22
                schrieb am zuletzt editiert von Diamand2k22
                #9

                @paul53

                ich hab das Problem dass die Abfrage in welchem Raum der Alarm auslöst als Wert dann [object Object], [object Object] zurück bekomme.
                Hast du eine Idee was da falsch ist?

                Die Abfrage wird mit:

                room = getObject(dp.id, 'rooms').enumNames.join(', ');
                

                gemacht.

                Die Variable room ist definiert mit:

                var room = '';
                

                Unter objects sind die Räume wie folgt definiert:

                room.JPG

                Gruß diamand

                paul53P 1 Antwort Letzte Antwort
                0
                • D Diamand2k22

                  @paul53

                  ich hab das Problem dass die Abfrage in welchem Raum der Alarm auslöst als Wert dann [object Object], [object Object] zurück bekomme.
                  Hast du eine Idee was da falsch ist?

                  Die Abfrage wird mit:

                  room = getObject(dp.id, 'rooms').enumNames.join(', ');
                  

                  gemacht.

                  Die Variable room ist definiert mit:

                  var room = '';
                  

                  Unter objects sind die Räume wie folgt definiert:

                  room.JPG

                  Gruß diamand

                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #10

                  @diamand2k22 sagte: [object Object], [object Object] zurück bekomme.

                  Sind die Raumnamen mehrsprachig? Wenn ja:

                          room = getObject(dp.id, 'rooms').enumNames;
                          for(let i = 0; i < room.length; i++) {
                              if(typeof room[i] == 'object') room[i] = room[i].de; 
                          };
                          room = room.join(', ');
                  

                  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

                  D 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @diamand2k22 sagte: [object Object], [object Object] zurück bekomme.

                    Sind die Raumnamen mehrsprachig? Wenn ja:

                            room = getObject(dp.id, 'rooms').enumNames;
                            for(let i = 0; i < room.length; i++) {
                                if(typeof room[i] == 'object') room[i] = room[i].de; 
                            };
                            room = room.join(', ');
                    
                    D Offline
                    D Offline
                    Diamand2k22
                    schrieb am zuletzt editiert von
                    #11

                    @paul53

                    Es funktioniert perfekt, danke dir!!

                    D 1 Antwort Letzte Antwort
                    0
                    • D Diamand2k22

                      @paul53

                      Es funktioniert perfekt, danke dir!!

                      D Offline
                      D Offline
                      Diamand2k22
                      schrieb am zuletzt editiert von
                      #12

                      @paul53

                      Hallo Paul,

                      wie kann ich beim Starten des Skriptes einmalig prüfen, ob ein Rauchmelder ausgelöst hat.
                      Aktuell bekomme ich keine Meldung wenn ich das Skript nach dem der Rauchmelder ausgelöst hat, starte.

                      Danke und Gruß

                      createState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/, false, {type: 'boolean', name: 'Feueralarm'});
                      createState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlertRoom'/*smokeAlertRoom*/, '', {type: 'string', name: 'Raum Feueralarm'});
                       
                      var timer = null;
                      var room = '';
                      var idEcho = "alexa2.0.Echo-Devices.G2A1A605204600ED"; 
                      var volume = getState(idEcho+".Player.volume"/*volume*/).val;
                      
                      function alarmOnAlexa() { 
                              setState(idEcho+".Commands.speak"/*speak*/,'Achtung! Im ' + room + ' wurde Rauch festgestellt!');
                              timer = setTimeout(alarmOnAlexa, 6000);
                      }
                      
                      function alexa2controll(){
                          setState(idEcho+".Player.controlPause"/*pause*/,true,false);
                          setState(idEcho+".Player.volume"/*volume*/,100);
                          alarmOnAlexa();
                          }
                      
                      function nachrichtOnWhatsApp(obj){
                          if(getState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/).val)
                          {
                             WhatsAppBot(2, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Rauch/Feuer <br>im ' + room + '!<br>*Bitte sofort überprüfen!!!!*');
                          }
                      }
                      
                      on(Array.prototype.slice.apply($("state[id=*](functions=check_smoke)")), function(dp) {
                          if(dp.state.val) {
                           room = getObject(dp.id, 'rooms').enumNames;
                              for(let i = 0; i < room.length; i++) {
                                  if(typeof room[i] == 'object') room[i] = room[i].de; 
                              };
                              room = room.join(', ');
                              setState('zigbee.0.0015bc0031015362.alarm'/*Manual Start of Siren - Esszimmer OG*/, true, true); 
                              setState('zigbee.0.0015bc0031014470.alarm'/*Manual Start of Siren - Treppenhaus OG*/, true, true); 
                              setState('zigbee.0.0015bc0031013f40.alarm'/*Manual Start of Siren - Arbeitszimmer EG*/, true, true); 
                              setState('zigbee.0.0015bc0031013dc7.alarm'/*Manual Start of Siren - Esszimmer EG*/, true, true); 
                              setState('zigbee.0.0015bc003101495b.alarm'/*Manual Start of Siren - Technikraum UG*/, true, true); 
                              setState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/, true, true); 
                              setState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlertRoom'/*smokeAlertRoom*/, room, true);
                              alexa2controll();
                              nachrichtOnWhatsApp(dp);
                          } else {
                              clearTimeout(timer);
                              setState('zigbee.0.0015bc0031015362.alarm'/*Manual Start of Siren - Esszimmer OG*/, false, true); 
                              setState('zigbee.0.0015bc0031014470.alarm'/*Manual Start of Siren - Treppenhaus OG*/, false, true); 
                              setState('zigbee.0.0015bc0031013f40.alarm'/*Manual Start of Siren - Arbeitszimmer EG*/, false, true); 
                              setState('zigbee.0.0015bc0031013dc7.alarm'/*Manual Start of Siren - Esszimmer EG*/, false, true); 
                              setState('zigbee.0.0015bc003101495b.alarm'/*Manual Start of Siren - Technikraum UG*/, false, true); 
                              setState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/, false, true); 
                              setState(idEcho+".Player.controlPause"/*pause*/,false,true);
                              setState(idEcho+".Player.volume"/*volume*/,30);
                          }
                      });
                      
                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      814

                      Online

                      32.6k

                      Benutzer

                      82.2k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe