Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Help] Skript Wassersensor auswerten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Help] Skript Wassersensor auswerten

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @Diamand2k22 last edited by paul53

      @diamand2k22 sagte: "water" aus dem Text filtern

      obj.common.name.replace('water', '– meldet Wasseraustritt!<br>*Bitte überprüfen!!!!*')
      

      @diamand2k22 sagte in [Help] Skript Wassersensor auswerten:

      ggf. noch den Raum

      getObject(obj.id, 'rooms').enumNames[0];
      
      1 Reply Last reply Reply Quote 0
      • D
        Diamand2k22 @Diamand2k22 last edited by

        @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!!!!*');
        }
        })
        
        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Diamand2k22 last edited by paul53

          @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

          1 Reply Last reply Reply Quote 0
          • D
            Diamand2k22 last edited by 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

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Diamand2k22 last edited by paul53

              @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()?

              1 Reply Last reply Reply Quote 0
              • D
                Diamand2k22 last edited by

                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

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Diamand2k22 last edited by

                  @diamand2k22 sagte: Lautstärke von echo dot

                  Davon habe ich keine Ahnung.

                  1 Reply Last reply Reply Quote 0
                  • D
                    Diamand2k22 last edited by 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

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @Diamand2k22 last edited by 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 1 Reply Last reply Reply Quote 0
                      • D
                        Diamand2k22 @paul53 last edited by

                        @paul53

                        Es funktioniert perfekt, danke dir!!

                        D 1 Reply Last reply Reply Quote 0
                        • D
                          Diamand2k22 @Diamand2k22 last edited by

                          @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 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          462
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          2
                          12
                          527
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo