Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Gelöst] Änderung von Statusberichten

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    687

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

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

[Gelöst] Änderung von Statusberichten

Scheduled Pinned Locked Moved JavaScript
14 Posts 2 Posters 964 Views 2 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.
  • D Offline
    D Offline
    DocGame
    wrote on last edited by DocGame
    #1

    Hallo miteinander,

    ich lasse mir meine Temeraturwerte per Telegram 2 mal am Tag zuschicken. Was muss ich umbauen um die Liste nicht Zeitgesteuert sondern bei Abruf zu generieren und anzuzeigen bzw. zu übertragen?
    Temperaturscript:

    function TemperaturCheck() {
        var Bad = getState("mihome.0.devices.sensor_ht_158d0002454b5b.temperature").val;
        var Küche = getState("mihome.0.devices.weather_v1_158d0002c8f158.temperature").val;
        var Wohnzimmer = getState("mihome.0.devices.weather_v1_158d0002ca09bc.temperature").val;
        var Büro = getState("mihome.0.devices.weather_v1_158d000346b780.temperature").val;
        var Aussen = getState("mihome.0.devices.weather_v1_158d000346b79c.temperature").val;
        var Garage = getState("mihome.0.devices.weather_v1_158d000346c229.temperature").val;
        var Infos = [];
        var InfoMessage = ""; 
         
        Infos.push(" Aussen: " + Aussen + "°");
        Infos.push(" Garage: " + Garage + "°");
        Infos.push(" Küche: " + Küche + "°");
        Infos.push(" Wohnzimmer: " + Wohnzimmer + "°");
        Infos.push(" Bad: " + Bad + "°");
        Infos.push(" Büro: " + Büro + "°");
     
        var infoLength = Infos.length;
        InfoMessage = "Temperaturinformationen: \n";
             
        for (var i = 0; i < infoLength; i++) {
            InfoMessage = InfoMessage+Infos[i]+'\n';
        }
     
        sendTo("telegram", "send", { text: InfoMessage, user: 'Ralf'  });
    }
     
    schedule({hour: 6, minute: 0}, function () {
        TemperaturCheck();
    });
     
    schedule({hour: 20, minute: 00}, function () {
        TemperaturCheck();
    });
    

    diese Abfrage kann ich noch für einzelne Geräte anlegen, da es ja nur wenige sind.
    Bei meinen Bateriewerten ist diese Vorgehensweise ideal:

    var sensors = $('channel[state.id=mihome.0.devices.*.percent]');
    
    sensors.on(function(obj) {
            var value = obj.state.val;
            var id = obj.id;
            
            log(JSON.stringify(obj));
            
            if (value < 30) {
                var pathname = id.substring(0, id.indexOf(".percent"));
                var wholeName = getObject(pathname).common.name;
                var name = wholeName.substring(wholeName.indexOf("- ") + 1, wholeName.length); 
                
                sendTo("telegram", "send", {user: 'Ralf', text: (String('Batterie im ' + name + ' gehört getauscht (' + value + '%)!!!'))});
            }
    });
     
    

    Das Funktioniert auch Super bei über 60 Batteriebetriebenen Xiaomigeräten. Leider kommen hier nur einzelmeldungen einzelner Geräte.
    Wie müsste mann dieses Script umbauen, um eine Liste wie bei den Temperaturwerten zu generieren (und wie oben bei Bedarf senden). Ich würde gerne ab und zu die Stände kontrollieren um rechtzeitig Batterien zu bestellen. Im Moment werde ich bei einme zu hohen wert mit Nachrichten überschüttet. Wenn ich den Wert zu nieder ansetze kommt zuerst gar nichts und dann ist es eventuell zu spät. Eine Gesamtliste auf diese weise generieren wäre ideal.
    Kann mir hier jemand unter die Arme greifen?
    Danke im Voraus...

    paul53P 1 Reply Last reply
    0
    • D DocGame

      Hallo miteinander,

      ich lasse mir meine Temeraturwerte per Telegram 2 mal am Tag zuschicken. Was muss ich umbauen um die Liste nicht Zeitgesteuert sondern bei Abruf zu generieren und anzuzeigen bzw. zu übertragen?
      Temperaturscript:

      function TemperaturCheck() {
          var Bad = getState("mihome.0.devices.sensor_ht_158d0002454b5b.temperature").val;
          var Küche = getState("mihome.0.devices.weather_v1_158d0002c8f158.temperature").val;
          var Wohnzimmer = getState("mihome.0.devices.weather_v1_158d0002ca09bc.temperature").val;
          var Büro = getState("mihome.0.devices.weather_v1_158d000346b780.temperature").val;
          var Aussen = getState("mihome.0.devices.weather_v1_158d000346b79c.temperature").val;
          var Garage = getState("mihome.0.devices.weather_v1_158d000346c229.temperature").val;
          var Infos = [];
          var InfoMessage = ""; 
           
          Infos.push(" Aussen: " + Aussen + "°");
          Infos.push(" Garage: " + Garage + "°");
          Infos.push(" Küche: " + Küche + "°");
          Infos.push(" Wohnzimmer: " + Wohnzimmer + "°");
          Infos.push(" Bad: " + Bad + "°");
          Infos.push(" Büro: " + Büro + "°");
       
          var infoLength = Infos.length;
          InfoMessage = "Temperaturinformationen: \n";
               
          for (var i = 0; i < infoLength; i++) {
              InfoMessage = InfoMessage+Infos[i]+'\n';
          }
       
          sendTo("telegram", "send", { text: InfoMessage, user: 'Ralf'  });
      }
       
      schedule({hour: 6, minute: 0}, function () {
          TemperaturCheck();
      });
       
      schedule({hour: 20, minute: 00}, function () {
          TemperaturCheck();
      });
      

      diese Abfrage kann ich noch für einzelne Geräte anlegen, da es ja nur wenige sind.
      Bei meinen Bateriewerten ist diese Vorgehensweise ideal:

      var sensors = $('channel[state.id=mihome.0.devices.*.percent]');
      
      sensors.on(function(obj) {
              var value = obj.state.val;
              var id = obj.id;
              
              log(JSON.stringify(obj));
              
              if (value < 30) {
                  var pathname = id.substring(0, id.indexOf(".percent"));
                  var wholeName = getObject(pathname).common.name;
                  var name = wholeName.substring(wholeName.indexOf("- ") + 1, wholeName.length); 
                  
                  sendTo("telegram", "send", {user: 'Ralf', text: (String('Batterie im ' + name + ' gehört getauscht (' + value + '%)!!!'))});
              }
      });
       
      

      Das Funktioniert auch Super bei über 60 Batteriebetriebenen Xiaomigeräten. Leider kommen hier nur einzelmeldungen einzelner Geräte.
      Wie müsste mann dieses Script umbauen, um eine Liste wie bei den Temperaturwerten zu generieren (und wie oben bei Bedarf senden). Ich würde gerne ab und zu die Stände kontrollieren um rechtzeitig Batterien zu bestellen. Im Moment werde ich bei einme zu hohen wert mit Nachrichten überschüttet. Wenn ich den Wert zu nieder ansetze kommt zuerst gar nichts und dann ist es eventuell zu spät. Eine Gesamtliste auf diese weise generieren wäre ideal.
      Kann mir hier jemand unter die Arme greifen?
      Danke im Voraus...

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

      @DocGame sagte:

      Eine Gesamtliste
      Kann mir hier jemand unter die Arme greifen?

      Mit einer Schleife über alle sensors-Datenpunkte.

      sensors.each(function(id, i) {
         if(getState(id).val < 30) {
             // Name aus id ermitteln
            Infos.push(name);
         }
      });
      

      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 Reply Last reply
      0
      • paul53P paul53

        @DocGame sagte:

        Eine Gesamtliste
        Kann mir hier jemand unter die Arme greifen?

        Mit einer Schleife über alle sensors-Datenpunkte.

        sensors.each(function(id, i) {
           if(getState(id).val < 30) {
               // Name aus id ermitteln
              Infos.push(name);
           }
        });
        
        D Offline
        D Offline
        DocGame
        wrote on last edited by
        #3

        @paul53
        Oh je..glaube das ist mir zu hoch. Finde nicht wo ich es einbauen soll.
        Das 2. Script Liest ja schon den Namen und den Wert aus. Nur wird immer nur ein Wert auf den die Bedingung (<30) zutrifft ausgegeben.
        Ich will aber eine Liste mit allen Namen und Werten der angegebenen Rolle (in diesem Fall "battery.percent") unabhängig von einer Bedingung nur zu Infozwecken.
        Dieses Script will ich, sofern es funktioniert für weitere Rollen anpassen (Temperatur, offene Fenster usw.) und im Idealfall entweder über telegram oder IQontrol anzeigen.

        Leider bin ich in JS nicht weit genug drin um die Struckturen richtig auf die Reihe zu bringen.

        paul53P 1 Reply Last reply
        0
        • D DocGame

          @paul53
          Oh je..glaube das ist mir zu hoch. Finde nicht wo ich es einbauen soll.
          Das 2. Script Liest ja schon den Namen und den Wert aus. Nur wird immer nur ein Wert auf den die Bedingung (<30) zutrifft ausgegeben.
          Ich will aber eine Liste mit allen Namen und Werten der angegebenen Rolle (in diesem Fall "battery.percent") unabhängig von einer Bedingung nur zu Infozwecken.
          Dieses Script will ich, sofern es funktioniert für weitere Rollen anpassen (Temperatur, offene Fenster usw.) und im Idealfall entweder über telegram oder IQontrol anzeigen.

          Leider bin ich in JS nicht weit genug drin um die Struckturen richtig auf die Reihe zu bringen.

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

          @DocGame sagte:

          Leider bin ich in JS nicht weit genug drin

          const sensors = $('channel[state.id=mihome.0.devices.*.percent]');
          
          function lowBatt() {
             var Infos = [];       
             var InfoMessage = 'Batterien zu tauschen:\n';
             sensors.each(function(id, i) {
                if(getState(id).val < 30) {
                   var pathname = id.substring(0, id.indexOf(".percent"));
                   var wholeName = getObject(pathname).common.name;
                   var name = wholeName.substring(wholeName.indexOf("- ") + 1, wholeName.length); 
                   Infos.push(name);
                }
             });
             if(Infos.length) {
                for(let i = 0; i < Infos.length; i++) {
                   InfoMessage = InfoMessage + Infos[i] + '\n';
                }  
                sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
             }
          }
          
          schedule('0 20 * * *', lowBatt); 
          

          EDIT: Zeile 4 korrigiert: Info --> Infos

          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 Reply Last reply
          0
          • D Offline
            D Offline
            DocGame
            wrote on last edited by
            #5

            Danke erstmal,
            ich habe den Wert mal auf <99 geändert, da ich ja eine Liste aller Sensoren will.
            Fehler zeigt er keine an. Ich warte mal gespannt bis 20.00Uhr.
            Wenn das funktioniert wäre mein nächstes Nahziel nicht die Zeitgesteuerte Erstellung sondern bei Ausführung.

            paul53P 1 Reply Last reply
            0
            • D DocGame

              Danke erstmal,
              ich habe den Wert mal auf <99 geändert, da ich ja eine Liste aller Sensoren will.
              Fehler zeigt er keine an. Ich warte mal gespannt bis 20.00Uhr.
              Wenn das funktioniert wäre mein nächstes Nahziel nicht die Zeitgesteuerte Erstellung sondern bei Ausführung.

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

              @DocGame sagte:

              nicht die Zeitgesteuerte Erstellung sondern bei Ausführung

              on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt);
              

              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 Reply Last reply
              0
              • D Offline
                D Offline
                DocGame
                wrote on last edited by
                #7

                Hab mich schon gefreut, dass um 20.00 Uhr Telegram angesprungen ist. War aber nur das Script vom ersten Post (Wird auch um 20.00 Uhr verschickt).
                Unter deinem Script kommt im Status unten nur:
                19:11:29.266 info javascript.0 Start javascript script.js.Bot-Scripts.BatterieListe_Telegram
                19:11:29.266 info javascript.0 script.js.Bot-Scripts.BatterieListe_Telegram: registered 0 subscriptions and 1 schedule
                20:00:00.041 error javascript.0 at script.js.Bot-Scripts.BatterieListe_Telegram:23:10
                20:00:00.041 error javascript.0 at Object.<anonymous> (script.js.Bot-Scripts.BatterieListe_Telegram:13:12)

                Mit der einzelnen Scriptzeile kann ich leider nichts anfangen, da ich gar nicht weiss wo ich sie rein kopieren soll.
                Mit Blockly komme ich ja einigermassen klar aber JS ist mir leider noch zu fremd, bei meinen Wünschen hier aber sicherlich die erste Wahl..

                Ich befürchte, das ich so leider nicht zum Ziel komme.
                Danke für deine Programmzeilen. Da fehlt wohl doch noch einiges bei meinem Verständniss.

                paul53P 1 Reply Last reply
                0
                • D DocGame

                  Hab mich schon gefreut, dass um 20.00 Uhr Telegram angesprungen ist. War aber nur das Script vom ersten Post (Wird auch um 20.00 Uhr verschickt).
                  Unter deinem Script kommt im Status unten nur:
                  19:11:29.266 info javascript.0 Start javascript script.js.Bot-Scripts.BatterieListe_Telegram
                  19:11:29.266 info javascript.0 script.js.Bot-Scripts.BatterieListe_Telegram: registered 0 subscriptions and 1 schedule
                  20:00:00.041 error javascript.0 at script.js.Bot-Scripts.BatterieListe_Telegram:23:10
                  20:00:00.041 error javascript.0 at Object.<anonymous> (script.js.Bot-Scripts.BatterieListe_Telegram:13:12)

                  Mit der einzelnen Scriptzeile kann ich leider nichts anfangen, da ich gar nicht weiss wo ich sie rein kopieren soll.
                  Mit Blockly komme ich ja einigermassen klar aber JS ist mir leider noch zu fremd, bei meinen Wünschen hier aber sicherlich die erste Wahl..

                  Ich befürchte, das ich so leider nicht zum Ziel komme.
                  Danke für deine Programmzeilen. Da fehlt wohl doch noch einiges bei meinem Verständniss.

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

                  @DocGame sagte:

                  20:00:00.041 error javascript.0 at script.js.Bot-Scripts.BatterieListe_Telegram:23:10
                  20:00:00.041 error javascript.0 at Object.<anonymous> (script.js.Bot-Scripts.BatterieListe_Telegram:13:12)

                  Damit kann ich auch nichts anfangen, denn Zeilen 13 und 23 in meinem Skript können keine Fehlermeldungen erzeugen. Zeile 4 enthält einen Fehler (habe ich oben korrigiert): Ändere bitte Info in Infos.

                  @DocGame sagte in Änderung von Statusberichten:

                  Mit der einzelnen Scriptzeile kann ich leider nichts anfangen, da ich gar nicht weiss wo ich sie rein kopieren soll.

                  Sie ersetzt die letzte Zeile (22) anstelle von schedule().

                  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 Reply Last reply
                  0
                  • paul53P paul53

                    @DocGame sagte:

                    20:00:00.041 error javascript.0 at script.js.Bot-Scripts.BatterieListe_Telegram:23:10
                    20:00:00.041 error javascript.0 at Object.<anonymous> (script.js.Bot-Scripts.BatterieListe_Telegram:13:12)

                    Damit kann ich auch nichts anfangen, denn Zeilen 13 und 23 in meinem Skript können keine Fehlermeldungen erzeugen. Zeile 4 enthält einen Fehler (habe ich oben korrigiert): Ändere bitte Info in Infos.

                    @DocGame sagte in Änderung von Statusberichten:

                    Mit der einzelnen Scriptzeile kann ich leider nichts anfangen, da ich gar nicht weiss wo ich sie rein kopieren soll.

                    Sie ersetzt die letzte Zeile (22) anstelle von schedule().

                    D Offline
                    D Offline
                    DocGame
                    wrote on last edited by DocGame
                    #9

                    @paul53
                    Hier der Code:

                    const sensors = $('channel[state.id=mihome.0.devices.*.percent]');
                    
                     function lowBatt() {
                       var Info = [];       
                       var InfoMessage = 'Batterien zu tauschen:\n';
                       sensors.each(function(id, i) {
                          if(getState(id).val < 99) {
                             var pathname = id.substring(0, id.indexOf(".percent"));
                             var wholeName = getObject(pathname).common.name;
                             var name = wholeName.substring(wholeName.indexOf("- ") + 1, wholeName.length); 
                             Infos.push(name);
                          }
                       });
                       if(Infos.length) {
                          for(let i = 0; i < Infos.length; i++) {
                             InfoMessage = InfoMessage + Infos[i] + '\n';
                          }  
                          sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
                       }
                    }
                    
                    schedule('32 22 * * *', lowBatt); 
                    

                    und hier die Fehlermeldung:

                    22:30:04.357 info javascript.0 Start javascript script.js.Bot-Scripts.BatterieListe_Telegram
                    22:30:04.358 info javascript.0 script.js.Bot-Scripts.BatterieListe_Telegram: registered 0 subscriptions and 1 schedule
                    22:32:00.036 error javascript.0 at script.js.Bot-Scripts.BatterieListe_Telegram:11:10
                    22:32:00.036 error javascript.0 at Object.lowBatt (script.js.Bot-Scripts.BatterieListe_Telegram:6:12)

                    Beim ersetzen der Zeile 22 durch

                    on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); 
                    

                    tut sich beim Ausführen des Scripts leider gar nichts. Ich stehe etwas auf dem Schlauch..

                    Werde jetzt aber mal ins Bett gehen (der Wecker droht 😃 )

                    paul53P 1 Reply Last reply
                    0
                    • D DocGame

                      @paul53
                      Hier der Code:

                      const sensors = $('channel[state.id=mihome.0.devices.*.percent]');
                      
                       function lowBatt() {
                         var Info = [];       
                         var InfoMessage = 'Batterien zu tauschen:\n';
                         sensors.each(function(id, i) {
                            if(getState(id).val < 99) {
                               var pathname = id.substring(0, id.indexOf(".percent"));
                               var wholeName = getObject(pathname).common.name;
                               var name = wholeName.substring(wholeName.indexOf("- ") + 1, wholeName.length); 
                               Infos.push(name);
                            }
                         });
                         if(Infos.length) {
                            for(let i = 0; i < Infos.length; i++) {
                               InfoMessage = InfoMessage + Infos[i] + '\n';
                            }  
                            sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
                         }
                      }
                      
                      schedule('32 22 * * *', lowBatt); 
                      

                      und hier die Fehlermeldung:

                      22:30:04.357 info javascript.0 Start javascript script.js.Bot-Scripts.BatterieListe_Telegram
                      22:30:04.358 info javascript.0 script.js.Bot-Scripts.BatterieListe_Telegram: registered 0 subscriptions and 1 schedule
                      22:32:00.036 error javascript.0 at script.js.Bot-Scripts.BatterieListe_Telegram:11:10
                      22:32:00.036 error javascript.0 at Object.lowBatt (script.js.Bot-Scripts.BatterieListe_Telegram:6:12)

                      Beim ersetzen der Zeile 22 durch

                      on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); 
                      

                      tut sich beim Ausführen des Scripts leider gar nichts. Ich stehe etwas auf dem Schlauch..

                      Werde jetzt aber mal ins Bett gehen (der Wecker droht 😃 )

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

                      @DocGame sagte:

                      Hier der Code:

                      Enthält noch den Fehler in Zeile 4 (siehe vorheriger Post). Bitte ändern in

                         var Infos = [];
                      

                      @DocGame sagte in Änderung von Statusberichten:

                      tut sich beim Ausführen des Scripts leider gar nichts.

                      Damit tut sich auch nur was, wenn sich ein Batterie-Wert von >= 30 % auf < 30 % ändert. Um die Funktion lowBatt() bei Skriptstart zu testen, rufe die Funktion bei Skriptstart auf:

                      on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
                      lowBatt(); // Aufruf bei Skriptstart für Test
                      

                      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 Reply Last reply
                      0
                      • paul53P paul53

                        @DocGame sagte:

                        Hier der Code:

                        Enthält noch den Fehler in Zeile 4 (siehe vorheriger Post). Bitte ändern in

                           var Infos = [];
                        

                        @DocGame sagte in Änderung von Statusberichten:

                        tut sich beim Ausführen des Scripts leider gar nichts.

                        Damit tut sich auch nur was, wenn sich ein Batterie-Wert von >= 30 % auf < 30 % ändert. Um die Funktion lowBatt() bei Skriptstart zu testen, rufe die Funktion bei Skriptstart auf:

                        on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
                        lowBatt(); // Aufruf bei Skriptstart für Test
                        
                        D Offline
                        D Offline
                        DocGame
                        wrote on last edited by
                        #11

                        @paul53
                        Mit den Änderungen hat es jetzt geklappt. wenn ich oben 99 reinschreibe kommen alle Sensoren wie gewünscht. Ich habe etwas gebastelt, bekomme aber die Prozentzahl nicht rein. Es soll ja nur eine Übersichtsliste generiert werden mit allen Sensoren und den aktuellen Batteriewerten. Das pushen bei unterschreiten wäre nur ein "Nice to have", da mein altes Script ja läuft und in diesem Fall einspringen würde. Wenn man diesen Part rausnehmen würde wäre das ganze ja deutlich schlanker. Irgendwie bin ich mit meinen %-Werten allerdings auf dem Holzweg. Hier einmal der geänderte Code(Zeile 16):

                        const sensors = $('channel[state.id=mihome.0.devices.*.percent]');
                        
                         function lowBatt() {
                           var Infos = [];       
                           var InfoMessage = 'Batterien zu tauschen:\n';
                           sensors.each(function(id, i) {
                              if(getState(id).val < 80) {
                                 var pathname = id.substring(0, id.indexOf(".percent"));
                                 var wholeName = getObject(pathname).common.name;
                                 var name = wholeName.substring(wholeName.indexOf("- ") + 1, wholeName.length); 
                                 Infos.push(name);
                              }
                           });
                           if(Infos.length) {
                              for(let i = 0; i < Infos.length; i++) {
                                 InfoMessage = InfoMessage + Infos[i] + value + '% \n';
                              }  
                              sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
                           }
                        }
                        
                        on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
                        lowBatt(); // Aufruf bei Skriptstart für Test
                        
                        paul53P 1 Reply Last reply
                        0
                        • D DocGame

                          @paul53
                          Mit den Änderungen hat es jetzt geklappt. wenn ich oben 99 reinschreibe kommen alle Sensoren wie gewünscht. Ich habe etwas gebastelt, bekomme aber die Prozentzahl nicht rein. Es soll ja nur eine Übersichtsliste generiert werden mit allen Sensoren und den aktuellen Batteriewerten. Das pushen bei unterschreiten wäre nur ein "Nice to have", da mein altes Script ja läuft und in diesem Fall einspringen würde. Wenn man diesen Part rausnehmen würde wäre das ganze ja deutlich schlanker. Irgendwie bin ich mit meinen %-Werten allerdings auf dem Holzweg. Hier einmal der geänderte Code(Zeile 16):

                          const sensors = $('channel[state.id=mihome.0.devices.*.percent]');
                          
                           function lowBatt() {
                             var Infos = [];       
                             var InfoMessage = 'Batterien zu tauschen:\n';
                             sensors.each(function(id, i) {
                                if(getState(id).val < 80) {
                                   var pathname = id.substring(0, id.indexOf(".percent"));
                                   var wholeName = getObject(pathname).common.name;
                                   var name = wholeName.substring(wholeName.indexOf("- ") + 1, wholeName.length); 
                                   Infos.push(name);
                                }
                             });
                             if(Infos.length) {
                                for(let i = 0; i < Infos.length; i++) {
                                   InfoMessage = InfoMessage + Infos[i] + value + '% \n';
                                }  
                                sendTo("telegram", "send", {user: 'Ralf', text: InfoMessage});
                             }
                          }
                          
                          on({id: /^mihome\.0\.devices\..+\.percent$/, valLt: 30, oldValGe: 30}, lowBatt); // Triggert bei Erreichen des Grenzwertes
                          lowBatt(); // Aufruf bei Skriptstart für Test
                          
                          paul53P Offline
                          paul53P Offline
                          paul53
                          wrote on last edited by
                          #12

                          @DocGame sagte:

                          bin ich mit meinen %-Werten allerdings auf dem Holzweg. Hier einmal der geänderte Code(Zeile 16):

                          Ja, an der Stelle ist es zu spät. Ausserdem ist die Variable value nicht deklariert und gefüllt. Ersetze Zeile 7 durch:

                                var value = getState(id).val;
                                if(value < 30) {
                          

                          und ergänze Infos.push()

                                   Infos.push(name + ': ' + value + ' %');
                          

                          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 Reply Last reply
                          0
                          • paul53P paul53

                            @DocGame sagte:

                            bin ich mit meinen %-Werten allerdings auf dem Holzweg. Hier einmal der geänderte Code(Zeile 16):

                            Ja, an der Stelle ist es zu spät. Ausserdem ist die Variable value nicht deklariert und gefüllt. Ersetze Zeile 7 durch:

                                  var value = getState(id).val;
                                  if(value < 30) {
                            

                            und ergänze Infos.push()

                                     Infos.push(name + ': ' + value + ' %');
                            
                            D Offline
                            D Offline
                            DocGame
                            wrote on last edited by DocGame
                            #13

                            @paul53
                            Perfekt...Funktioniert Prima. Vielen Dank
                            Ich denke, das ich das ganze auch auf Temperatur ändern kann.
                            Nur mir den Fenstern (Boolsche Werte) wird es so vermutlich nicht hinhauen.

                            paul53P 1 Reply Last reply
                            0
                            • D DocGame

                              @paul53
                              Perfekt...Funktioniert Prima. Vielen Dank
                              Ich denke, das ich das ganze auch auf Temperatur ändern kann.
                              Nur mir den Fenstern (Boolsche Werte) wird es so vermutlich nicht hinhauen.

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

                              @DocGame sagte:

                              Funktioniert Prima.

                              Dann markiere bitte das Thema in der Überschrift als [gelöst].

                              Ich denke, das ich das ganze auch auf Temperatur ändern kann.

                              Ja, sicher.

                              @DocGame sagte in Änderung von Statusberichten:

                              Nur mir den Fenstern (Boolsche Werte) wird es so vermutlich nicht hinhauen.

                              Es unterscheidet sich nur in der Abfrage:

                                    if(value) { // Fenster offen
                              

                              (push() natürlich ohne %) und im Trigger.

                              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 Reply Last reply
                              0

                              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                              With your input, this post could be even better 💗

                              Register Login
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              589

                              Online

                              32.7k

                              Users

                              82.6k

                              Topics

                              1.3m

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

                              • Don't have an account? Register

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