Navigation

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

    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

    S
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 14
    • Best 1
    • Groups 1

    seek1338

    @seek1338

    Starter

    1
    Reputation
    4
    Profile views
    14
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    seek1338 Follow
    Starter

    Best posts made by seek1338

    • RE: Bestes Widget ?

      so nachdem nun endlich das Skript so ist wie ich es mir gewünscht habe, danke an alle die mir geholfen haben und/oder mich am richtigen weg gebraucht haben 😊

      Was das Ziel war:
      Unsichtbares HTML Overlay über ein Zimmer

      • bei Click geht das Licht An oder Aus, je nach aktuellem Status
      • bei long Press am Zimmer tauchen Widgets auf welche zu vor mit einem entsprechenden Filterwort versehen wurden (werden nach x Sekunden wieder ausgeblendet)

      Vorraussetzung:
      .) Dieses Skript funktioniert nur sofern aktuell keine anderen Widgets oder Navigationen mit Filterwörter verwendet werden!
      .) Alle Widgets welche mit Filterwort genutzt werden sollen, müssen beim Starten unsichtbar sein. Hierfür im Sichtbarkeits Objekt Verlinkung einen manuell erstelten Datenpunkt auswählen welcher imer auf fals steht (z.b. 0_userdata.0.VIS.false_state = false) eventuell kann man das schöner lösen ich weiß es nicht

      HTML Overlay - HTML Code:

      <input id="buero" style="height: 100%;width: 100%" type="button" onpointerdown="func('hm-rpc.0.OEQ0236727.3.STATE','buero_detail')" onpointerup="revert('hm-rpc.0.OEQ0236727.3.STATE','buero_detail')"/>
      

      Wobei:
      "hm-rpc.0.OEQ0236727.3.STATE" - muss mit deinem IoBroker Objekt Pfad zu deinem licht getauscht werden
      "buero_detail" - ist das Filterwort das die für das Zimmer Relevanten Widgets haben müssen

      Vis JS-Skript:

      var timer;
      var hidetimer;
      var istrue = true;
      var filterVisible = [];
      var delay = 500; // after delay Click = Longpress
      var showTime = 5; // sek after hide shown Tag-Widgets
      
       //objID    = Objekt ID from Device z.b. hm-rpc.0.OEQ0236727.3.STATE
      //visObjID = Widget Tag
      function func(objID,visObjID)
      {
          istrue = true;
          timer = setTimeout(function(){ makeChange(objID,visObjID);},delay);
      }
      
      function makeChange(objID,visObjID)
      {
          if(timer) clearTimeout(timer);
          if(hidetimer) clearTimeout(hidetimer);
          
          if(istrue) 
          { //Longpress Event Start
              istrue = false;
              
              //IF visObjID is not set!
              if(typeof filterVisible[visObjID] === 'undefined') 
              {   
                  //Show Widget with Tags = visObjID
                  vis.changeFilter(null, visObjID, null, null, null, null);
                  
                  clearArray(filterVisible);      //Clear other visObjID entrys
                  filterVisible = [];             //Set back to Array
                  filterVisible[visObjID] = true; //set status for this visObjID
                  
                  //Hide after (showTime) Sek the Tags-Widgets
                  hidetimer = setTimeout(function(){ 
                      //Hide Back Widgets with Tags = visObjID
                      vis.changeFilter(null, "TagNotExists", null, null, null, null);
                      
                      clearArray(filterVisible);  //clear 
                      filterVisible = [];         //Set back to Array
                  }, showTime*1000)
              } 
              //if the same visObjID and visObjID = true
              else
              {
                  //Hide Back Widgets with Tags = visObjID
                  vis.changeFilter(null, "TagNotExists", null, null, null, null);
                  
                  clearArray(filterVisible);  //clear 
                  filterVisible = [];         //Set back to Array
              }    
          }
      }
      
      function revert(objID,visObjID)
      {
          if(timer && istrue) 
          { //Click Event
              clearTimeout(timer);
              istrue = false;
      
              //Get ObjektID Status (Bool) and set oposide (Light On/Off)
              servConn._socket.emit('getStates', objID, (error, states) => {
                  servConn._socket.emit('setState', objID, !states[objID].val);
              });
          }
      }
      
      function clearArray(array) {
          while (array.length) {
              array.pop();
          }
      }
      

      Wobei:
      var delay = zeit in ms, welche mindestens für ein Longpress vergehen muss (bitte testet das auf euer system)
      var showTime = zeit in sekunden, nach welcher die eingeblendeten widgets wieder ausgeblendet werden

      Wichtig:
      Solltet Ihr Lichter haben welche andere Werte als false oder true vorraussetzen funktioniert dieses Skript ohne umbau nicht!! Bitte hierfür den Bereich in der revert Funktion bearbeiten z.b.: (ungetestet):

      servConn._socket.emit('getStates', objID, (error, states) => {
      	if(states[objID].val == 0) 
      		servConn._socket.emit('setState', objID, 1);
      	else 
      		servConn._socket.emit('setState', objID, 0);
      });
      

      Hat mich echt was an Zeit gekostet und ich denke das JS-Skript geht auch besser, aber es funktioniert und macht was es soll 😉

      danke nochmals besonder @oliverio für den tiefen einblick 👍

      mfg,
      Seek

      posted in Visualisierung
      S
      seek1338

    Latest posts made by seek1338

    • RE: Bestes Widget ?

      so nachdem nun endlich das Skript so ist wie ich es mir gewünscht habe, danke an alle die mir geholfen haben und/oder mich am richtigen weg gebraucht haben 😊

      Was das Ziel war:
      Unsichtbares HTML Overlay über ein Zimmer

      • bei Click geht das Licht An oder Aus, je nach aktuellem Status
      • bei long Press am Zimmer tauchen Widgets auf welche zu vor mit einem entsprechenden Filterwort versehen wurden (werden nach x Sekunden wieder ausgeblendet)

      Vorraussetzung:
      .) Dieses Skript funktioniert nur sofern aktuell keine anderen Widgets oder Navigationen mit Filterwörter verwendet werden!
      .) Alle Widgets welche mit Filterwort genutzt werden sollen, müssen beim Starten unsichtbar sein. Hierfür im Sichtbarkeits Objekt Verlinkung einen manuell erstelten Datenpunkt auswählen welcher imer auf fals steht (z.b. 0_userdata.0.VIS.false_state = false) eventuell kann man das schöner lösen ich weiß es nicht

      HTML Overlay - HTML Code:

      <input id="buero" style="height: 100%;width: 100%" type="button" onpointerdown="func('hm-rpc.0.OEQ0236727.3.STATE','buero_detail')" onpointerup="revert('hm-rpc.0.OEQ0236727.3.STATE','buero_detail')"/>
      

      Wobei:
      "hm-rpc.0.OEQ0236727.3.STATE" - muss mit deinem IoBroker Objekt Pfad zu deinem licht getauscht werden
      "buero_detail" - ist das Filterwort das die für das Zimmer Relevanten Widgets haben müssen

      Vis JS-Skript:

      var timer;
      var hidetimer;
      var istrue = true;
      var filterVisible = [];
      var delay = 500; // after delay Click = Longpress
      var showTime = 5; // sek after hide shown Tag-Widgets
      
       //objID    = Objekt ID from Device z.b. hm-rpc.0.OEQ0236727.3.STATE
      //visObjID = Widget Tag
      function func(objID,visObjID)
      {
          istrue = true;
          timer = setTimeout(function(){ makeChange(objID,visObjID);},delay);
      }
      
      function makeChange(objID,visObjID)
      {
          if(timer) clearTimeout(timer);
          if(hidetimer) clearTimeout(hidetimer);
          
          if(istrue) 
          { //Longpress Event Start
              istrue = false;
              
              //IF visObjID is not set!
              if(typeof filterVisible[visObjID] === 'undefined') 
              {   
                  //Show Widget with Tags = visObjID
                  vis.changeFilter(null, visObjID, null, null, null, null);
                  
                  clearArray(filterVisible);      //Clear other visObjID entrys
                  filterVisible = [];             //Set back to Array
                  filterVisible[visObjID] = true; //set status for this visObjID
                  
                  //Hide after (showTime) Sek the Tags-Widgets
                  hidetimer = setTimeout(function(){ 
                      //Hide Back Widgets with Tags = visObjID
                      vis.changeFilter(null, "TagNotExists", null, null, null, null);
                      
                      clearArray(filterVisible);  //clear 
                      filterVisible = [];         //Set back to Array
                  }, showTime*1000)
              } 
              //if the same visObjID and visObjID = true
              else
              {
                  //Hide Back Widgets with Tags = visObjID
                  vis.changeFilter(null, "TagNotExists", null, null, null, null);
                  
                  clearArray(filterVisible);  //clear 
                  filterVisible = [];         //Set back to Array
              }    
          }
      }
      
      function revert(objID,visObjID)
      {
          if(timer && istrue) 
          { //Click Event
              clearTimeout(timer);
              istrue = false;
      
              //Get ObjektID Status (Bool) and set oposide (Light On/Off)
              servConn._socket.emit('getStates', objID, (error, states) => {
                  servConn._socket.emit('setState', objID, !states[objID].val);
              });
          }
      }
      
      function clearArray(array) {
          while (array.length) {
              array.pop();
          }
      }
      

      Wobei:
      var delay = zeit in ms, welche mindestens für ein Longpress vergehen muss (bitte testet das auf euer system)
      var showTime = zeit in sekunden, nach welcher die eingeblendeten widgets wieder ausgeblendet werden

      Wichtig:
      Solltet Ihr Lichter haben welche andere Werte als false oder true vorraussetzen funktioniert dieses Skript ohne umbau nicht!! Bitte hierfür den Bereich in der revert Funktion bearbeiten z.b.: (ungetestet):

      servConn._socket.emit('getStates', objID, (error, states) => {
      	if(states[objID].val == 0) 
      		servConn._socket.emit('setState', objID, 1);
      	else 
      		servConn._socket.emit('setState', objID, 0);
      });
      

      Hat mich echt was an Zeit gekostet und ich denke das JS-Skript geht auch besser, aber es funktioniert und macht was es soll 😉

      danke nochmals besonder @oliverio für den tiefen einblick 👍

      mfg,
      Seek

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      @bananajoe danke... das mit dem Overlay funktioniert schon lange, war auc ham einfachsten... mir gehts drum dieses Extrabutton zu vermeiden.
      Click = Licht An/Aus
      Longpress (0,5Sek) = Extramenü (mit den weiteren Raum Optionen oder vll eine Raumansicht im neuen View, bin noch unentschlossen)

      Aber ich habs fast 😵 😬

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      @oliverio

      ok ich glaub ich verstehe was du meins, du setzt mit var element = e.currentTarget; ein pointer auf das element und fragst bzw generierst via "$(element).on(" die events direkt im skript ab und brauchst dann nicht mehr im div/input feld mehrfach einträge.

      Im gesamten verstehe ich dein skript jedoch nicht zu 100%, weil ich diese schreibweise mit element und data nicht kenne und die checks sowie die abhängigkeiten im vergleich zu meinem Skript komplizierter (für mich) geschrieben sind (js noob).

      Nachdem ich kurz mit jQuery herumexperimetiert habe (wer das auch immer erfunden hat war auf drogen), hab ich einen anderen weg gesucht und im quelltext der VIS gefunden:
      https://github.com/ioBroker/ioBroker.vis/blob/master/www/widgets/basic.html

      //ab Zeile 488
      $this.find('select').change(function () {
                vis.changeFilter(null, $this.find('select option:selected').val(), hideEffect, hideDuration, showEffect, showDuration);
      });
      

      dann im eigentlichen vis file nachgeschaut:
      https://github.com/ioBroker/ioBroker.vis/blob/master/www/js/vis.js

      ab Zeile 1092 fa läuft die funktion... auch nciht viel verstanden aber jquery unter andem gefudnen und auch folgenden hinweis:

      if (widgets[widget] && widgets[widget].data && widgets[widget].data.filterkey) {
             $('#' + widget).show(showEffect, null, parseInt(showDuration));
      }
      

      sieht für mich so aus als würde jquery alleine nicht helfen sondern die Tags ein bestands element vom Widget.data sind.

      also ein bisschen gespielt und nach ein paar fehlern folgendes zum funktionieren gebracht:

      vis.changeFilter(null, "buero_detail", null, null, null, 3000); //zeigt widgets mit dem TAG buero_detail an
      vis.changeFilter(null, "all", null, null, null, 3000); //widgets mit anderen tags verschwinden wieder
      

      die widgets mit tags, die man einblenden und ausblenen lassen möchte, müssen sichtbarkeit haben und das Prüfelement muss gegen ein false Objekt immer beim starten auf unsichtbar sein (so hab ichs gelöst, vielleicht geht es auch eleganter).

      muss jetzt nur noch ein weg finden wie ich die tags an die jeweiligen input felder binde (eventuell value vom inputfeld) und dann mit einem true/false jeweils eins der befehle zum anzeigen oder ausblenden bewege.

      wenn ich ein weg gefunden habe poste ich das gesammelte nochmal rein

      mfg,
      Seek

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      @oliverio danke für den jquery tipp ich muss mich da einlessen ich habe das noch nie verwendet bzw. wie man dann daten setzten kann.

      ich hab mein input auch umbauen müssen auf onpointerdown/onpointerup weils am touch nicht funktioniert hat nur mit der maus am pc 🙂

      <input style="height: 100%;width: 100%" type="button" onpointerdown="func('hm-rpc.0.OEQ0236727.3.STATE','0_userdata.0.VIS.buero')" onpointerup="revert('hm-rpc.0.OEQ0236727.3.STATE','0_userdata.0.VIS.buero')" value="foo"/>
      

      ich hab auch dein Skript getestet - wenn auch nicht verstanden, aber ich blick nicht so ganz durch und wenn man so periodisch alle 0,5 Sek drauf drückt erkennt er mal short und longpress (laut console) ? Wollt dich nur drauf aufmerksam machen.

      mfg,
      Seek

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      @oliverio

      Wow erstmal vielen Dank für die Antworten und den Tipp mit dem vergessenen "clearTimeout(timer);", ich hab den nun in der Funktion "function revert(objID,visObjID)" ergänzt.

      Aber es hat auch davor funktioniert, nacheinander, abwechselt long und short?? Das Mit dem Doubleklick hatte ich auch drin aber ich hab wegen einer möglichen falschen Klick/Doubleklick unterscheidung am Touch die finger davon gelassen.

      Ich hab mir auch ein bisschen deine Links und Skripte angeschaut und muss sagen es übersteigt "etwas" meine JS-Fähigkeiten 🤕 .... bin erstmal froh das es so funktioniert, verbesserungen werden aber bestimmt mit der Zeit folgen - Danke!

      Zu deiner Frage wieso ich zuerst den Status auslese:
      Wenn das Licht aktuell an ist, wird es beim Click ausgeschaltet und wenn es aus ist, wird es beim Click eingeschaltet. So eine Art schnelle On/Off Funktion fürs licht beim Single Click. Soweit ich das kenne muss man dafür vorab den Status abrufen.

      Zu meiner unverstandenen Frage:
      Es gibt im VIS ein Widget das Nennt sich "Filter - dropdown", in diesem kann man "Tags" definieren, die man anzeigen lassen möchte und alle Widgets die nicht dieses Tag haben werden deaktiviert. Das Widget ist im Standard Projekt drin wenn man ein neues anlegt, von daher kenn ich es auch.

      Ich würde gerne die Funktion im Skript beim Longpress abbilden und die Widgets die Angezeigt oder Ausgeblendet werden pro Zimmer via "Tags" dann über die VIS steuern und nicht wie jetzt, über ein Datenpunkt im Iobroker und der Sichtbarkeits Objekt ID im VIS z.b. wie ich mir das vorstelle im code:

      function makeChange(objID,tag)
      {
          if(timer)
          clearTimeout(timer);
          
          if(istrue)
          {
              //Longpress Event
              istrue =false;
              vis.showTag(tag);
          }
      }
      

      aber ich habe keine Funktion gefunden die diese Tags aktiviert oder deaktiviert. ich weiß auch nicht in wie fern die Sichtbarkeit eines Widget, welche über eine Objekt ID gesteuert wird in JS verwendung findet (JS getElement by ID und Ocupacy = 0?) oder dergleichen....

      ich hoffe ich habe mich nun verständlicher ausgedrückt 😊

      mfg,
      Seek

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      Hab nun ein Weg gefunden das Problem via VIS zu lösen und woltle das hier Teilen falls andere auch das Problem hatten/haben:

      1.) Basic HTML Widget über das Zimmer legen und Opacity im CSS Allgemein auf 0 setzten (nicht sichtbar), z-Index sollte entsprechend oben sein z.b. 5 (größer wie Background und overlays der Licht An Bilder).

      2.) Basic HTML mit folgenden Code befüllen:

      <input style="height: 100%;width: 100%" type="button" onmousedown="func('hm-rpc.0.OEQ0236727.3.STATE','0_userdata.0.VIS.buero')" onmouseup="revert('hm-rpc.0.OEQ0236727.3.STATE','0_userdata.0.VIS.buero')" value="foo"/>
      

      Wobei
      'hm-rpc.0.OEQ0236727.3.STATE' = ID Des Gerätes zum ein und Ausschalten in meinem Falls das Büro Licht.
      '0_userdata.0.VIS.buero' = Eine ID für die Widget Steuerung des Zimmers (true/false) muss zuvor im iobroker angelegt werden

      Unter Skripte folgendes eintragen (Danke hier ans Forum und auch anderen JS Seiten, bin absolut schlecht in JS 🙂 :

      // Short-Click/Longpress Handler
      var timer;
      var istrue = false;
      var delay = 500; // how much long u have to hold click in MS
      
      //objID    = Objekt ID from Device z.b. hm-rpc.0.OEQ0236727.3.STATE
      //visObjID = Objekt ID from VIS Room (Control Widgets over Visibility)
      function func(objID,visObjID)
      {
         istrue = true;
         timer = setTimeout(function(){ makeChange(objID,visObjID);},delay);
      }
      
      function makeChange(objID,visObjID)
      {
          if(timer)
          clearTimeout(timer);
          
          if(istrue)
          {
              //Longpress Event
              istrue =false;
              console.log(visObjID);
              servConn._socket.emit('getStates', visObjID, (error, states) => {
                  //console.log(states);
                  this.servConn._socket.emit('setState', visObjID, !states[visObjID].val);
              });
          }
      }
      
      function revert(objID,visObjID)
      {
          if(timer && istrue) 
          {
              //Click Event
              istrue =false;
      
              servConn._socket.emit('getStates', objID, (error, states) => {
                  //console.log("Short Click objID: " + states);
                  servConn._socket.emit('setState', objID, !states[objID].val);
              });
      
          }
      }
      // Short-Click/Longpress Handler
      

      Was passiert nun:

      1.) bei einem kurzen Klick (unter 500ms - delay Option im Skript) wird der "//Click Event" abgearbeitet und es wird bei einem True/False Objekt je nach klick True/False gesetzt. In meinem Fall Büro Licht An/Aus.

      2.) bei einem langen klick(>500ms) bzw. Presslong wird der //Longpress Event ausgeführt. Hier wird die Widget Steuerungs ID des jeweiligen Zimmers auf True/False geschaltet. Die Widgets welche man anlegt und die Sichtbarkeit auf diese ID legt, werden dann automatisch angezeigt oder ausgeblendet.

      Nachdem Short und Long Klick getrennt sind, kommen sich diese auch nicht in die Quere. Vielleicht könnte man das auch anders Lösen, aber ich habe nach meiner Langen suche nichts besseres gefunden.

      Frage:

      Falls noch wer weiß wie man den Filter Dropdown Widget als Skript ausführen könnte wäre ich sehr Dankbar, dann bräuchte man die zweite ID auch nicht mehr bzw. könnte man mit die Filterfunktion der VIS arbeiten.

      Gibt es irgendwo im Internet eine genaue beschreibung der VIS Skript möglichkeiten, Funktionen usw?? Hab hierzu auch nicht sonderlich viel gefunden.

      mfg,
      Se ek

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      @oliverio

      Ja das wäre perfekt... aber nachdem ich erst seit ein paar Tagen mit VIS zu tun habe, kenn ich noch nicht alle... dadurch die Frage ins Forum 🙂

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      @oliverio danke für die Infos zu HTML... jeder raum hat ein Button Overlay der nicht sichtbar ist, ich würde gerne komplett ohne Buttons und Icons in der Hauptansicht Arbeiten und zusätzliche Informationen nur in einem Extra View darstellen.

      Hab nun beim googeln von verscheidenen Konstelationen im Forum ein Skript gefunden womit es über umwege funktionieren würde und leicht angepasst:
      skript.JPG

      Im Grunde verwendet man das HQWidget im Tastermodus und jenachdem ob man kurz oder lang drauf drückt setzt man verschiedene Werte z.b. in meinem Fall:
      Min: false#hm-rpc.0.OEQ0236727.3.STATE
      Max: true#hm-rpc.0.OEQ0236727.3.STATE

      Die True / False verwende ich zum steuern des Skripts und den zweiten Part um eine Obj-ID des jeweiligen Raums mitzugeben um so dann im Kurz-Press Bereich das Licht zu steuern.

      Im Long-Press werde ich dann einzelne Objekt-IDs im IoBroker anlegen für jede Raum View, die dann je nach wert eingeblendet wird.

      Es wäre jedoch viel besser wenns nativ im VIS gehen würde ohne diese umwege die eventuell fehleranfälliger sind (skript rennt langsamer erkennt long obwohl short usw...)

      mfg,
      Seek

      posted in Visualisierung
      S
      seek1338
    • RE: Bestes Widget ?

      @emd
      nciht ganz die Antwort die ich erhofft hatte 😉 , aber ja im gesamten EG sind es fliesen in Holztoptik.

      posted in Visualisierung
      S
      seek1338
    • Bestes Widget ?

      Hallo,

      sorry vorweg ich verwende VIS erst seit kurzem und kenn mich nicht so gut aus.

      Ich hab via Sweet Home 3d mein Haus virtualisiert und arbeite mit image overlays um in räumen wo das Licht an ist, dieses auch anzuzeigen z.b.:
      img.JPG

      Jetzt gehts um die Steuerung und ich finde leider nichts was würklich so passt 😵

      Aktuell verwende ich die Gestensteuerung um beim wisch nach Rechts das Licht einzuschalten und Wisch nach Links ausschalten. Ich würde gerne beim "Klick" auf das jeweilige Zimmer mit dem Setzten eines Objekt ein view einblenden um die Zimmerdetails zu sehen (Rollo, Steckdosen usw..).

      Das Problem ist egal ob ich via Klick das Licht ein und ausschalte oder via Geste, sobald ich eins der beiden Methoden für die View-Darstellung verwende kommen sich diese imme in die quere - sprich beim wischen klickt er auch immer oder halt umgekehrt

      Weiß wer wie ich dieses Problem ggf. über eine Einstellung im VIS oder ein Spezielles Widget lösen kann? Wäre über jeden Tipp sehr dankbar.

      mfg,
      Se ek

      posted in Visualisierung
      S
      seek1338
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo