Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. js- Abfrage von Status an Ausgängen per Telegram

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    js- Abfrage von Status an Ausgängen per Telegram

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      fastfoot @maerzpa last edited by

      @maerzpa so sollte es gehen, bis wer was Eleganteres hat

      else if (befehl === "%WC_Licht") {
          setState("modbus.0.coils.12356_WC_VisuTaster_Licht_fhem",true, () => {
              getState('modbus.0.coils.573_WC_Licht', (err, state) => {
                  sendTo('telegram', {
                      user: benutzer,
                      text: 'Licht WC:                                               ' + state.val
                  });
              })
          });
      }
      
      M 1 Reply Last reply Reply Quote 0
      • M
        maerzpa @fastfoot last edited by

        @fastfoot Habe es eben probiert. Immernoch selbes Ergebnis. Lampe an, zeigt aber Status false.

        F 1 Reply Last reply Reply Quote 0
        • F
          fastfoot @maerzpa last edited by fastfoot

          @maerzpa dann fällt mir nur noch das hier ein

          else if (befehl === "%WC_Licht") {
              setState("modbus.0.coils.12356_WC_VisuTaster_Licht_fhem",true);
          }
          on({id:"modbus.0.coils.12356_WC_VisuTaster_Licht_fhem", change:"ne"}, function(obj) {
              sendTo('telegram', {
                  user: benutzer,
                  text: 'Licht WC:                                               ' + obj.state.val
              });
          })
          
          M 1 Reply Last reply Reply Quote 0
          • M
            maerzpa @fastfoot last edited by

            @fastfoot Stimmen da die Klammern? Ich bekomme eine Fehlermeldung

            F 2 Replies Last reply Reply Quote 0
            • F
              fastfoot @maerzpa last edited by

              @maerzpa sagte in js- Abfrage von Status an Ausgängen per Telegram:

              @fastfoot Stimmen da die Klammern? Ich bekomme eine Fehlermeldung

              sollten stimmen, du hast ja nur ein Fragment gepostet

              1 Reply Last reply Reply Quote 0
              • F
                fastfoot @maerzpa last edited by

                @maerzpa sagte in js- Abfrage von Status an Ausgängen per Telegram:

                @fastfoot Stimmen da die Klammern? Ich bekomme eine Fehlermeldung

                änder "change": in change:

                1 Reply Last reply Reply Quote 0
                • M
                  maerzpa last edited by

                  ich habe eine Schleife in der ich Anweisungen von Telegram abfrage:
                  on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
                  var stateval = getState('telegram.0.communicate.request').val; // Statevalue in Variable schreiben
                  var benutzer = stateval.substring(1,stateval.indexOf("]")); // Benutzer aus Statevalue extrahieren
                  var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length); // Befehl/Text aus Statevalue extrahieren
                  var idSayIt = "sayit.0.tts.text";

                   if (befehl.search(/(?=.*(\bmenu\b)).+/ig) != -1) {
                      sendTo('telegram', {
                          user: benutzer,
                          text: 'Wähle das Gewerk',
                          reply_markup: {
                              inline_keyboard: [
                                  [{ text: 'Einstellungen', callback_data: '%Einstellungen'}, { text: 'Fenster+Türe', callback_data: '%Fenster+Türe'}, { text: 'Licht', callback_data: '%Licht'}],
                                  [{ text: 'Steckdosen', callback_data: '%Steckdosen'}, { text: 'Beregnung', callback_data: '%Beregnung'}, { text: 'Kameras', callback_data: '%Kameras'}],
                              ]
                           }
                      });
                  }
                  

                  else if (befehl === "%WC_Licht") {
                  setState("modbus.0.coils.12356_WC_VisuTaster_Licht_fhem",true);
                  on({id:"modbus.0.coils.12356_WC_VisuTaster_Licht_fhem", "change":"ne"}, function(obj) {
                  sendTo('telegram', {
                  user: benutzer,
                  text: 'Licht WC: ' + obj.state.val
                  });
                  })
                  }

                  Wenn ich die Klammern so setzte wie oben in der Else Schleife--> bekomme ich den richtigen Status per Telegram gesendet. Allerdings mehrmals. Immer wieder ein vielfaches bei erneutem Wechsel des Statuses (EIN/AUS).

                  F 2 Replies Last reply Reply Quote 0
                  • F
                    fastfoot @maerzpa last edited by fastfoot

                    @maerzpa siehe nächsten Post

                    1 Reply Last reply Reply Quote 0
                    • F
                      fastfoot @maerzpa last edited by

                      @maerzpa Du hast den Trigger nicht rausgenommen, ich hatte nur auf die Klammern geachtet. So sollte es jetzt funktionieren

                      var stateval = getState('telegram.0.communicate.request').val; // Statevalue in Variable schreiben
                      var benutzer = stateval.substring(1,stateval.indexOf("]")); // Benutzer aus Statevalue extrahieren
                      var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length); // Befehl/Text aus Statevalue extrahieren
                      var idSayIt = "sayit.0.tts.text";
                      
                      on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
                      
                          if (befehl.search(/(?=.*(\bmenu\b)).+/ig) != -1) {
                              sendTo('telegram', {
                                  user: benutzer,
                                  text: 'Wähle das Gewerk',
                                  reply_markup: {
                                      inline_keyboard: [
                                          [{ text: 'Einstellungen', callback_data: '%Einstellungen'}, { text: 'Fenster+Türe', callback_data: '%Fenster+Türe'}, { text: 'Licht', callback_data: '%Licht'}],
                                          [{ text: 'Steckdosen', callback_data: '%Steckdosen'}, { text: 'Beregnung', callback_data: '%Beregnung'}, { text: 'Kameras', callback_data: '%Kameras'}],
                                      ]
                                      }
                              });
                          } else if (befehl === "%WC_Licht") {
                              setState("modbus.0.coils.12356_WC_VisuTaster_Licht_fhem",true);
                          }
                      })
                      
                      on({id:"modbus.0.coils.12356_WC_VisuTaster_Licht_fhem", "change":"ne"}, function(obj) {
                          sendTo('telegram', {
                          user: benutzer,
                          text: 'Licht WC: ' + obj.state.val
                          });
                      })
                      
                      1 Reply Last reply Reply Quote 0
                      • M
                        maerzpa last edited by

                        @fastfoot sagte in js- Abfrage von Status an Ausgängen per Telegram:

                        modbus.0.coils.573_WC_Licht

                        Danke erstmal für die Mühe und Geduld. So bekomme ich die richtige Meldung. Doch leider bekomme ich auch wenn ich vor Ort Taster drücke (ohne Telegramm Button), eine Meldung per Telegramm.
                        Sorry das ich nerve.

                        F P 2 Replies Last reply Reply Quote 0
                        • F
                          fastfoot @maerzpa last edited by

                          @maerzpa nee, nervt nicht 🙂 Ich überlege mir bis morgen etwas...

                          1 Reply Last reply Reply Quote 0
                          • F
                            fastfoot last edited by

                            @maerzpa so, ein neuer Versuch, noch ein paar Fehler beseitigt, die ich aber selbst eingebaut hatte

                            var benutzer,
                                menu_cmd = false;
                            
                            on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
                                var stateval = getState('telegram.0.communicate.request').val; // Statevalue in Variable schreiben
                                var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length); // Befehl/Text aus Statevalue extrahieren
                                var idSayIt = "sayit.0.tts.text";
                            
                                benutzer = stateval.substring(1,stateval.indexOf("]")); // Benutzer aus Statevalue extrahieren
                            
                                if (befehl.search(/(?=.*(\bmenu\b)).+/ig) != -1) {
                                    sendTo('telegram', {
                                        user: benutzer,
                                        text: 'Wähle das Gewerk',
                                        reply_markup: {
                                            inline_keyboard: [
                                                [{ text: 'Einstellungen', callback_data: '%Einstellungen'}, { text: 'Fenster+Türe', callback_data: '%Fenster+Türe'}, { text: 'Licht', callback_data: '%Licht'}],
                                                [{ text: 'Steckdosen', callback_data: '%Steckdosen'}, { text: 'Beregnung', callback_data: '%Beregnung'}, { text: 'Kameras', callback_data: '%Kameras'}],
                                            ]
                                            }
                                    });
                                } else if (befehl === "%WC_Licht") {
                                    setState("modbus.0.coils.12356_WC_VisuTaster_Licht_fhem",true);
                                    menu_cmd=true;
                                }
                            })
                            
                            on({id:"modbus.0.coils.573_WC_Licht", change:"ne"}, function(obj) {
                                if(menu_cmd) {
                                    menu_cmd=false;
                                    sendTo('telegram', {
                                        user: benutzer,
                                        text: 'Licht WC: ' + obj.state.val
                                    });
                                }
                            })```
                            1 Reply Last reply Reply Quote 0
                            • P
                              pix @maerzpa last edited by

                              Hallo!

                              Für genau diesen Fall gibt es die EIgenschaft from in der Subscription on(). Guck mal hier: https://www.iobroker.net/#de/documentation/basics/states.md

                              Da kannst du neben zum Beispiel dem Wert, den der Datenpunkt haben soll (hier soll er sich ändern, daher change: "ne") auch angeben, von wo aus er geändert wurde.

                              In diesem Falle wird die Änderung ja vom Javascript-Adapter gemacht, ich nehme an, von Instanz 0.

                              on({
                                  id:"modbus.0.coils.573_WC_Licht", 
                                  change:"ne",
                                  from: "javascript.0"
                              }, function(obj) {
                                  sendTo('telegram', {
                                          user: benutzer,
                                          text: 'Licht WC: ' + obj.state.val
                                   });
                              });
                              

                              @fastfoot Sehr gute Idee, eine Variable zu verwenden. Das kann aber bei vielen Tastern schnell unübersichtlich werden.

                              Gruß
                              Pix

                              F 1 Reply Last reply Reply Quote 0
                              • F
                                fastfoot @pix last edited by

                                @pix sagte in js- Abfrage von Status an Ausgängen per Telegram:

                                @fastfoot Sehr gute Idee, eine Variable zu verwenden. Das kann aber bei vielen Tastern schnell unübersichtlich werden.

                                ich dachte dabei an diese eine Variable, die allerdings bei jedem setState() gesetzt würde. Das sollte im Ein-Mann-Betrieb kein Problem sein, sollte aber die Frau gleichzeitig das Licht im Wohnzimmer schalten(durch Telegram), funktioniert das nicht mehr. Allerdings gibt es dann auch Probleme mit dem benutzer, denke ich

                                Was das from: angeht, Danke für den Tipp! Allerdings sagt mir mein Bauchgefühl, dass ein Adapter auf den Taster reagiert und dann entsprechend das Licht schaltet, da wäre dann beim manuellen Drücken kein Unterschied, der Trigger würde immer vom Adapter gefeuert.

                                Bin gespannt, was @maerzpa sagt, das from: wäre schon viel cooler

                                M 1 Reply Last reply Reply Quote 0
                                • M
                                  maerzpa last edited by

                                  Hallo, Dankeschön. Auf die Art (ohne from) funktioniert es super. Mit dem from will es nicht mehr.

                                  Vielen Dank an @pix und an @fastfoot.

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    maerzpa @fastfoot last edited by

                                    @fastfoot Könntest du mir noch bei einer weiteren Frage helfen:
                                    Ich möchte alle Statuse auf einen Blick als Popup (answercallbackquery) sehen. Doch leider gehen max 8 Zeilen als Ausgabe. Wenn ich also nur 8 Abfragen habe--> dann geht es. Sobald es nur eine mehr ist--> passiert nichts.

                                    else if (befehl === "%Status_Licht") {
                                    sendTo('telegram', {
                                    user: benutzer,
                                    answerCallbackQuery: {
                                    text: "Status_Licht:" +
                                    '\n++++++++++++++++++++++++++++++++++++++++++++'+
                                    '\nLicht Wohnzimmer: ' + getState('modbus.0.coils.562_WZ_Licht').val +
                                    '\nLicht Wohnzimmer LED: ' + getState('modbus.0.coils.566_WZ_LichtLED').val +
                                    '\nLicht Wohnzimmer Essbereich1: ' + getState('modbus.0.coils.561_WZ_LichtEssb').val +
                                    '\nLicht Wohnzimmer Essbereich2: ' + getState('modbus.0.coils.563_WZ_LichtEssbZus').val +
                                    '\nLicht HWR: ' + getState('modbus.0.coils.572_HWR_Licht').val +
                                    '\nLicht WC: ' + getState('modbus.0.coils.573_WC_Licht').val +
                                    '\nLicht WC Spiegel: ' + getState('modbus.0.coils.534_WC_LichtSpiegel_').val +
                                    '\nLicht Kueche: ' + getState('modbus.0.coils.568_Ku_Licht').val +
                                    '\nLicht Kueche Arbeitsplatte: ' + getState('modbus.0.coils.569_Ku_Aplatte1').val +
                                    '\nLicht Flur EG: ' + getState('modbus.0.coils.574_FEG_Licht2').val +
                                    '\nLicht Abstellraum: ' + getState('modbus.0.coils.571_ARaum_Licht').val +
                                    '\nLicht Flur OG: ' + getState('modbus.0.coils.579_FOG_Licht').val +
                                    '\nLicht Badezimmer: ' + getState('modbus.0.coils.581_BAD_Licht').val +
                                    '\nLicht Schlafzimmer: ' + getState('modbus.0.coils.576_SZ_Licht').val +
                                    '\nLicht Kinderzimmer1: ' + getState('modbus.0.coils.577_KZ1_Licht').val +
                                    '\nLicht Kinderzimmer2: ' + getState('modbus.0.coils.578_KZ2_Licht').val +
                                    '\nLicht Dachgeschoss: ' + getState('modbus.0.coils.584_DG_Licht1u2').val +
                                    '\nLicht Terrasse: ' + getState('modbus.0.coils.589_Ter_Licht').val +
                                    '\nLicht Garage1: ' + getState('modbus.0.coils.558_Gar_Licht1_').val +
                                    '\nLicht Garage2: ' + getState('modbus.0.coils.559_Gar_Licht2_').val +
                                    '\nLicht Gartenhaus: ' + getState('modbus.0.coils.586_GartenhLicht').val,
                                    showAlert: true
                                    }
                                    });
                                    }
                                    });

                                    F 1 Reply Last reply Reply Quote 0
                                    • F
                                      fastfoot @maerzpa last edited by

                                      @maerzpa schaue ich mir mal an, answercallbackQuery ist neu für mich. Melde mich später 🙂

                                      1 Reply Last reply Reply Quote 0
                                      • F
                                        fastfoot last edited by

                                        @maerzpa der Text ist schlicht zu lang. Du kannst es so probieren:

                                            sendTo('telegram', {
                                                user: benutzer,
                                                text: "Status_Licht:" +
                                                '\n++++++++++++++++++++++++++++++++++++++++++++'+
                                                '\nLicht Wohnzimmer: ' + getState('modbus.0.coils.562_WZ_Licht').val +
                                                '\nLicht Wohnzimmer LED: ' + getState('modbus.0.coils.566_WZ_LichtLED').val +
                                                '\nLicht Wohnzimmer Essbereich1: ' + getState('modbus.0.coils.561_WZ_LichtEssb').val +
                                                '\nLicht Wohnzimmer Essbereich2: ' + getState('modbus.0.coils.563_WZ_LichtEssbZus').val +
                                                '\nLicht HWR: ' + getState('modbus.0.coils.572_HWR_Licht').val +
                                                '\nLicht WC: ' + getState('modbus.0.coils.573_WC_Licht').val +
                                                '\nLicht WC Spiegel: ' + getState('modbus.0.coils.534_WC_LichtSpiegel_').val +
                                                '\nLicht Kueche: ' + getState('modbus.0.coils.568_Ku_Licht').val +
                                                '\nLicht Kueche Arbeitsplatte: ' + getState('modbus.0.coils.569_Ku_Aplatte1').val +
                                                '\nLicht Flur EG: ' + getState('modbus.0.coils.574_FEG_Licht2').val +
                                                '\nLicht Abstellraum: ' + getState('modbus.0.coils.571_ARaum_Licht').val +
                                                '\nLicht Flur OG: ' + getState('modbus.0.coils.579_FOG_Licht').val +
                                                '\nLicht Badezimmer: ' + getState('modbus.0.coils.581_BAD_Licht').val +
                                                '\nLicht Schlafzimmer: ' + getState('modbus.0.coils.576_SZ_Licht').val +
                                                '\nLicht Kinderzimmer1: ' + getState('modbus.0.coils.577_KZ1_Licht').val +
                                                '\nLicht Kinderzimmer2: ' + getState('modbus.0.coils.578_KZ2_Licht').val +
                                                '\nLicht Dachgeschoss: ' + getState('modbus.0.coils.584_DG_Licht1u2').val +
                                                '\nLicht Terrasse: ' + getState('modbus.0.coils.589_Ter_Licht').val +
                                                '\nLicht Garage1: ' + getState('modbus.0.coils.558_Gar_Licht1_').val +
                                                '\nLicht Garage2: ' + getState('modbus.0.coils.559_Gar_Licht2_').val +
                                                '\nLicht Gartenhaus: ' + getState('modbus.0.coils.586_GartenhLicht').val,
                                                parse_mode: "HTML"
                                            });
                                        
                                        M 2 Replies Last reply Reply Quote 0
                                        • M
                                          maerzpa @fastfoot last edited by

                                          @fastfoot Dankeschön. Eine ähnliche Lösung habe ich auch. Leider sind beide ohne answercallbackquery. Sodass die Info nicht aufpoppt.
                                          --> muss ich mit leben.

                                          Nochmal Dankeschön

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            maerzpa @fastfoot last edited by

                                            @fastfoot Hallo, noch eine Frage:

                                            Ich möchte den Status einer IST-Temperatur durch 10 teilen und raus geben. Leider wird diese mit jedem weiteren Abruf von Telegram durch 10 geteilt.

                                            '\nEingang Temperatur: ' + (getState('modbus.0.inputRegisters.11_Eingang_Temp_').val /=10) + ' °C ' +

                                            Wiesst du wie ich das lösen könnte?

                                            F 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            921
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            38
                                            1268
                                            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