Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. XtraLarge71

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    X
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 5
    • Best 0
    • Groups 0

    XtraLarge71

    @XtraLarge71

    0
    Reputation
    19
    Profile views
    5
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    XtraLarge71 Follow

    Latest posts made by XtraLarge71

    • RE: Telegram und Inline Keyboard (Menu)

      Hi, Sorry,

      hab gerade erst mal wieder ins Forum geschaut und daher erst jetzt das gelesen. 😞

      Bisher habe ich keine Geräte mit Werten. Aber ich denke das ist nicht so kompliziert. Ich denke mir mal was aus und poste es in den nächsten Tagen.-

      lG

      XL

      posted in Skripten / Logik
      X
      XtraLarge71
    • RE: Erledigt IP Steckdose Koukaam netio 230B

      Hi,

      ich habe basierend auf Eurem Script das ganze noch etwas verfeinert. Ich hoffe ich verletzt damit nicht Euer Copyright 😉

      Im Groben die Opmierungen….

      Es ist nun eine true/false Variable vorhanden ist über die man die jeweilige Steckdose steuern kann und auf die auch das vis zugreift nun nicht direkt auf das Netio Webinterface.

      Außerdem ist das ganze durch globale Variablen im Flow konfigurierbar, damit man nicht überall die Daten eingeben muß.

      Ach ja und fehlerhafte Anfragen werden nun auch abgefangen. Bei nicht erreichbarer Steckdose hat er sonst false angenommen und bei Erreichbarkeit die Steckdose ausgeschaltet.

      PS: Wenn Ihr die Objektvariable als boolean haben wollt, könnt Ihr den Type einfach im ObjektFenster --> Edit --> Raw (von type "state" auf "boolean" ändern) Node-Red kann das noch nicht festlegen.

      PPS: Wenn es Euch gefällt würde ich mich über ein "Danke "freuen! 😉
      6134_netio_flow.txt
      6134_flow.png
      6134_netio_vis.txt
      6134_netio_vis.png

      posted in Skripten / Logik
      X
      XtraLarge71
    • Iobroker apache proxy webadress rewrite

      Hi,

      ich versuche nun schon seit zwei kompletten Tagen (Ja ich bin krankgeschrieben 😉 ) ein Problem zu lösen. Ich würde gerne die Pages (8081 8082 und 8083) über drei namebased proxy sites bereitstellen. Das funktioniert auch alles ohne Probleme. Aber auf der 8081 Seite gibt es unter Instanzen den button um auf die jeweiligen websites zu gelangen. Die Adresse wird durch die aktuelle augerufene seite plus dem port gebildet. z.B. "http://iobroker.extern.de:8082" das würde ich gerne umschreiben auf "https://irgendwas.extern.de"

      Ich habe es über mod_sed, mod_substitute, und mod_html (mit ProxyHTMLURLMap) aber nicht funktionert!

      Ich gebe aktuell auf und hoffe auf Eure Ideen.

      lG

      Willi

      PS: die Proxys haben als Basiskonfiguration nur ProxyPass und PoxyPassReverse eingetragen.

      posted in ioBroker Allgemein
      X
      XtraLarge71
    • RE: Telegram und Inline Keyboard (Menu)

      Hi,

      ich bin selbst draufgekommen und dachte vielleicht kann das script jemand das brauchen. Ist noch nicht alles 100%ig aber funktioniert schon mal grob.

      Das Script macht ein interakive Menü um die Geräte zu steuern unter Telegram mit dem InboardKeyboard.

      Die Idee war durch eine Gruppe die Berechtigungen hierfür zu vergeben.

      lG

      Willi

      `var Devices = [
          { Name: 'Switch1',     Ort: "Doppelgarage",   an: true, aus: false, Objekt: "node-red.0.Strom1",                   Beschreibung: "Steckdose an der der Server angeschlossen ist"},
          { Name: 'Switch2',     Ort: "Doppelgarage",   an: true, aus: false, Objekt: "node-red.0.Strom2",                   Beschreibung: "Steckdose an der der Router angeschlossen ist"},
          { Name: 'Switch3',     Ort: "Doppelgarage",   an: true, aus: false, Objekt: "node-red.0.Strom3",                   Beschreibung: "Steckdose an der der KVM-Switch angeschlossen ist"},
          { Name: 'Switch4',     Ort: "Doppelgarage",   an: true, aus: false, Objekt: "node-red.0.Strom4",                   Beschreibung: "Steckdose an der der WLAN Accesspoint angeschlossen ist"},
          { Name: 'Garagentore', Ort: "Garage am Haus", an: true, aus: false, Objekt: "rflink.0.channels.Warema_3.BLIND_02", Beschreibung: "Garagentore öffnen und schließen"},
          { Name: 'Dom',         Ort: "Wohnzimmer",     an: true, aus: false, Objekt: "sonoff.0.Sonoff-S20-Nr1.POWER",       Beschreibung: "Zwischenstecker an der das beleuchtete Kölnpanorama angeschlossen ist"},
          { Name: 'Zocklicht',   Ort: "Zockzimmer",     an: true, aus: false, Objekt: "sonoff.0.Sonoff-S20-Nr2.POWER",       Beschreibung: "Zwischenstecker an der die kleine Lampe angeschlossen ist"},
          { Name: 'IPCam',       Ort: "Doppelgarage",   an: true, aus: false, Objekt: "javascript.0.IPCam",                  Beschreibung: "Zwischenstecker an der die kleine Lampe angeschlossen ist"},
      ];
      
      function DistinctKeyValues(Array, Key) {
          var unique = {};
          var distinct = [];
      
          for( var i in Array ){
              if (!Array[i].selection) { continue; }
              if( typeof(unique[Array[i][Key]]) == "undefined"){
                  distinct.push(Array[i][Key]);
              }
              unique[Array[i][Key]] = 0;
          }
      return distinct;
      }
      
      function ArrayDeselectKeyValues(Array, Key, Value) {
          for( var i in Array ) {
              if (Array[i][Key] != Value) {
                  Array[i].selection = false;
              }
          }    
      return Array;
      }
      
      function Array2ID(Array, Key, Value) {
          for( var i in Array ) {
              if (Array[i][Key] == Value) {
                  break;
              }
          }
      return i;
      }
      
      function Key2Keyboard(Array, Key) {
          Distinct = [], OuterArray = []; 
          Distinct = DistinctKeyValues(Array, Key);
      
          for( var i in Distinct ){
              InnerArray = [];
              item = {};
              item.text          = Distinct[i];
              item.callback_data = "___" + Key + ","+ Distinct[i];
              InnerArray.push(item);
              OuterArray.push(InnerArray);
          }
      return OuterArray;    
      }
      
      function SwitchKeyboard(Array, Key, Value) {
          Distinct = [], OuterArray = []; 
          Distinct = ['an', 'aus'];
      
          for( var i in Distinct ){
              InnerArray = [];
              item = {};
              item.text          = Distinct[i];
              item.callback_data = "___" + Key + ","+ Distinct[i];
              InnerArray.push(item);
              OuterArray.push(InnerArray);
          }
      return OuterArray;    
      }
      
      function MenuFrageKey(Frage, Key, Array) {
          MenuFrage(Frage, Array, Key2Keyboard(Array, Key));
      }
      
      function MenuFrageDevice(ID, Array) {
          Objekt = Array[ID].Objekt;
          Status=getState(Objekt).val;
          if (Status === Array[ID].an) {
              MenuFrage("Status von " + Array[ID].Name + ": eingeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name));
          } 
          else {
              MenuFrage("Status von " + Array[ID].Name + ": ausgeschaltet.\nWas wollen Sie tun?",Array, SwitchKeyboard(Array, '*'+Array[ID].Name, Array[ID].Name));
          }
      }
      
      function MenuFrage(Frage, Array, KeyboardArray) {
          sendTo('telegram.0', {
              chatId: getState("telegram.0.communicate.requestChatId").val,
              text:   Frage,
              reply_markup: {
                  inline_keyboard: KeyboardArray,
                  resize_keyboard:   false, 
                  one_time_keyboard: true
              }
          });
      return;    
      }
      
      function MenuAntwortDeselect(Array, Key, Value) {
          MenuAntwort(Array, Key, Value);
          ArrayDeselectKeyValues(Array, Key, Value);
      }
      
      function MenuAntwort(Array, Key, Value) {
          sendTo('telegram.0', {
              chatId: getState("telegram.0.communicate.requestChatId").val,
              text: Key + ': ' + Value,
              editMessageText: {
                  options: {
                      chat_id: getState("telegram.0.communicate.requestChatId").val,
                      message_id: getState("telegram.0.communicate.requestMessageId").val,
                  }
              }
          });
      return Array;
      }
      
      on({id: "telegram.0.communicate.request", ack: false, change: 'any'}, function (obj) {
          command = obj.state.val.substring(obj.state.val.indexOf(']')+1);
          console.log("Received: " + command);
      
          // Menü beginnen
          if (command.toUpperCase() ==="MENU") {
              //Reset previous selections
              for( var i in Devices ){
                  Devices[i].selection=true;
              }
              MenuFrageKey('Wo willst du etwas tun?', 'Ort', Devices);
          }
          // Antwort verarbeiten
          else if (command.startsWith("___")) {
              command = command.slice(3,command.length); 
              var KeyVal = command.split(",");
              var Key   = KeyVal[0];
              var Value = KeyVal[1];
      
              if (Key == 'Ort') {
                  MenuAntwortDeselect(Devices, Key, Value);
                  MenuFrageKey('Welches Gerät willst du steuern', 'Name', Devices);
              }
              else if (Key == 'Name') {
                  MenuAntwortDeselect(Devices, Key, Value);
                  ID=Array2ID(Devices, Key, Value);
                  MenuFrageDevice(ID, Devices);
              }
              else if (Key.startsWith("*")) {
                  Key=Key.slice(1,Key.length);
                  ID=Array2ID(Devices, 'Name', Key);
                  setState(Devices[ID].Objekt, Devices[ID][Value]);
                  MenuAntwort(Devices, Devices[ID].Name, Value);
              }
              else {
                  console.log("Else: ___" + command);
              }
          }
          else {
                  console.log("Else: " + command);
          }
       });` [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
      
      posted in Skripten / Logik
      X
      XtraLarge71
    • Telegram und Inline Keyboard (Menu)

      Hi,

      ich versuche seit 2 Tagen ein Menü mittels Telegram aufzubauen. Ich scheite jedoch schon an der Rückmeldung.

      Wie bekomme ich die Rückantworten des InlineKeyboards, damit ich diese weiterverarbeiten kann.

      Mir ist wichtig, dass ich weiß das die Rückantworten vom Keyboard kommen, d.h. ich möchte ungern alle Rückantworten verwenden und mir die möglicherweise passenden herausfiltern.

      Dies ist mein Ansatz, der jedoch keine Rückantwort bringt:

      endTo('telegram.0', {
          text:   'Wo willst du etwas tun?',
          chatId: '-xxxxxxxxxx',
          reply_markup: {
              inline_keyboard: [
                  [
                      {text: 'Garage am Haus',  callback_data: '1'},
                      {text: 'Doppelgarage',    callback_data: '2'},
                      {text: 'Wohnzimmer',      callback_data: '3'},
                      {text: 'Zockzimmer',      callback_data: '4'}
                  ]
              ],
              resize_keyboard:   true, 
              one_time_keyboard: true
          }
      });
      
      on('callback_query', function (msg) {
          answerCallbackQuery(msg.id, 'Knopf gedrückt', false);
          console.log(msg);
      });
      

      lieben Gruß

      Willi

      PS: Ich bin mal gespannt wo ich "zu dämlich" bin 😉

      posted in Skripten / Logik
      X
      XtraLarge71
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo