Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. VIS(1): Ein PopUp für mehrere Lampen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

VIS(1): Ein PopUp für mehrere Lampen

Geplant Angeheftet Gesperrt Verschoben Visualisierung
2 Beiträge 2 Kommentatoren 57 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Stefan_NK
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen, ich hoffe, ihr könnt mir weiterhelfen...

    Ich habe mehrere Lampen, deren Einstellungen (Helligkeit, Farbtemperatur,...) ich in einem PopUp vornehmen möchte.
    Ich möchte allerdings nur eine einzige PopUp View erstellen und je nach zu steuerndem Gerät die entsprechenden Widgets anzeigen. Und genau hier beginnt für mich das Problem. Ich habe keine Möglichkeit gefunden, eine Art Parameter an das PopUp zu übergeben, auf Grund dessen dann die Widget-Anzeige gesteuert wird.
    Ich verwende die Standard-Widgets und die Widgets vom vis-inventwo Adapter, habe aber keine Möglichkeit gefunden, zwei Datenpunkte gleichzeitig zu setzen - einer zum Öffnen des PopUps und einer, um die Lampenbezeichnung für die Anzeige im PopUp in einen DP zu schreiben. Funktionieren würde das wahrscheinlich mittels Blockly-Umweg, wo entsprechend der zweite DP gesetzt wird.
    Habt ihr da eine "elegantere" Lösung dafür?

    1 Antwort Letzte Antwort
    0
    • grrfieldG Offline
      grrfieldG Offline
      grrfield
      schrieb zuletzt editiert von grrfield
      #2

      Hallo, ich löse das über ein Javascript zusammen mit den MaterialDesign-Widgets. Ich habe unterschiedliche PopUps für Schalter, Dimmer, Heizung, Rolläden usw., die alle auf der aktiven View liegen und mit einem State versteckt oder sichtbar gemacht werden können. Die Position wird ebenfalls aus einem State übernommen:

      be3e94a0-2410-4d12-9040-494a569afc5f-image.png 7e3831eb-cf48-4fda-a0a5-192d7838c4df-image.png

      Jedes Gerät auf meiner Karte hat ein Widget, das den Namen des Geräts und seine Position auf der Karte (hier
      Tischlampe<br>Wohnzimmer;14,538) in einen State schreibt:

      53cb068d-f180-47ca-8932-a91d04e15a63-image.png 618e6fc2-9ab8-4e33-9a50-505d05d60a13-image.png

      Das Skript triggert auf den State, sucht den passenden PopUp heraus, bestimmt aus der Lage des Gerätewidgets die Position des Popups und macht diesen sichtbar - sieht dann so aus:

      871fb9d8-f391-4754-85d5-47a01becf458-image.png

      Der Popup selbst ist eine View, in der je nach Gerät ein Schalter- oder Reglerwidget angeordnet sind, die ihre Werte wieder in einen State schreiben, der dann von meinem Skript an den betreffenden Schalter oder Dimmer weitergegeben wird:

      bcf524ac-e229-49a8-b1c1-7ce1f3c26ebd-image.png 4840fc4a-e9dc-4b92-a496-eec346d9ce48-image.png

      Nach Betätigung des Schalters oder nach einer Totzeit macht das Skript den PopUp dann wieder unsichtbar.
      Das Skript ist sehr speziell für meine Zwecke angelegt, wenn es Dich interessiert und Du es anpassen möchtest, kannst Du es Dir hier ansehen:

      /**
      * vHausSubDialog
      * Erzeugt die Subdialoge in den Hausplänen Steuerung der Geräte per vis
      * Die Dialoge werden über vXXXXSelectausgewählt, dann öffnet sich über 
      * vis+'vXXXXDialog' ein Dialogfeld zum Einstellen des Wertes über
      * vis+'vXXXXLevel'
      * In vXXXXSelect werden auch die Koordinaten des Dialogfeldes angegeben
      * - das Format ist: 'Name;x-Position,y-Position;[View]'
      * 
      * States:      vis+'vDeviceSelect'         // Auswahl Device
      *              vis+'vDeviceSelectName'     // Device Name
      *              vis+'vDialogX'              // x-Position des Dialogs
      *              vis+'vDialogY'              // y-Position des Dialogs
      *              vis+'vDimmerDialog'         // Dimmer Dialog anzeigen
      *              vis+'vDimmerDialogClose'    // Dimmer Dialog schließen
      *              vis+'vDimmerLevel'          // Helligkeit der mit vDeviceSelect ausgewählten Lampe
      *              vis+'vSchalterDialog'       // Schalter Dialog anzeigen
      *              vis+'vSchalterDialogClose'  // Schalter Dialog schließen
      *              vis+'vSchalterState'        // Zustand der mit vDeviceSelect ausgewählten Lampe
      *              vis+'vHeizungDialog'        // Heizungs Dialog anzeigen
      *              vis+'vHeizungDialogClose'   // Heizungs Dialog schließen
      *              vis+'vHeizungLevel'         // Temperatur der mit vDeviceSelect ausgewählten Heizung
      *              vis+'vKlimaDialog'          // Klima Dialog anzeigen
      *              vis+'vKlimaDialogClose'     // Klima Dialog schließen
      *              vis+'vKlimagLevel'          // Temperatur der mit vDeviceSelect ausgewählten Klimaanlage
      *              vis+'vKlimaState'           // Zustand der mit vDeviceSelect ausgewählten Klimaanlage
      *              vis+'vRolloDialog'          // Rolladen Dialog anzeigen
      *              vis+'vRolloDialogClose'     // Rolladen Dialog schließen
      *              vis+'vRolloLevel'           // Position des mit vDeviceSelect ausgewählten Rolladens
      *              vis+'vBlindDialog'          // Jalousie Dialog anzeigen
      *              vis+'vBlindDialogClose'     // Jalousie Dialog schließen
      *              vis+'vBlindLevel'           // Position der mit vDeviceSelect ausgewählten Jalousie
      * 
      * log:     vHD002
      * debug:   vHD113
      */
      
      DEBUG=true;
      
      
      /**
      * Einstellungen                            //Defaults
      */
      
      // Positionierung der Dialoge [pixel]
      const ViewHaus={
         height: 661,                            //661
         width: 914,                             //914
         buttonHeight: 64,                       //64
         buttonWidth: 64                         //64
      };
      const ViewRollos={
         height: 678,                            //678
         width: 889,                             //889
         buttonHeight: 84,                       //84
         buttonWidth: 220                        //220
      };
      const ViewBlinds={
         height: 678,                            //678
         width: 889,                             //889
         buttonHeight: 84,                       //84
         buttonWidth: 220                        //220
      };
      
      //Abstand der Dialoge zum Button und mindestens zum Rand [pixel]
      const distance=8;                           //8
      
      // Dialoggröße [pixel]
      const DialogWidth=200;                      //200
      const DimmerLevelHeight=298;                //298
      const SchalterStateHeight=186;              //186
      const TtasterStateHeight=186;                //186
      const RolloLevelHeight=368;                 //368
      const BlindLevelHeight=368;                 //368
      const HeizungLevelHeight=298;               //298
      const KlimaLevelHeight=348;                 //348
      
      // Versatz Dialog gegen Button [pixel]
      const Dx=0;                                 //0
      const Dy=0;                                 //0
      
      // Timeout für Dialog [s]
      const DialogTimeout=30;                     //30
      
      // Timeout für Wiederaufruf [ms]
      const LockTime=1000;                        //1000
      
      // Wartezeit für Viewaufruf [ms]
      const ReViewTime=200;                       //100
      
      // Entprellzeit [ms]
      const BouncingTime=400;                     //400
      
      // Basis für Objekte
      const Haus=getState('Init.BasisHaus').val;
      const Heizung=getState('Init.BasisHeizung').val;
      const Licht=getState('Init.BasisLicht').val;
      const Tagesablauf=getState('Init.BasisTagesablauf').val;
      const Trigger=getState('Init.BasisTrigger').val;
      const Verschluss=getState('Init.BasisVerschluss').val;
      const Vis=getState('Init.Basisvis').val;
      const SwitchBot='0_userdata.0.SwitchBot.';
      const BlindTilts=SwitchBot+'BlindTilts.';
      
      // Browserinstance für Vis ['xxxxxxxx']
      const VisInstance=getState(Vis+'Init.visTuer').val;
      
      // Vis-Name ['text']
      const VisName='SM-P610'                     //'SM-P610'     
      
      
      /**
      * States
      */
      
      createState(Vis+'vDeviceSelect', {type: 'string', name: 'Auswahl Device'});
      createState(Vis+'vDeviceSelectName', {type: 'string', name: 'Device Name'});
      createState(Vis+'vDialogX', {type: 'number', name: 'x-Position des Dialogs'});
      createState(Vis+'vDialogY', {type: 'number', name: 'y-Position des Dialogs'});
      createState(Vis+'vDimmerDialog', false, {type: 'boolean', name: 'Dimmer Dialog anzeigen'});
      createState(Vis+'vDimmerDialogClose', false, {type: 'boolean', name: 'Dimmer Dialog schließen'});
      createState(Vis+'vDimmerLevel', {type: 'number', name: 'Helligkeit der mit vDeviceSelect ausgewählten Lampe'});
      createState(Vis+'vSchalterDialog', false, {type: 'boolean', name: 'Schalter Dialog anzeigen'});
      createState(Vis+'vSchalterDialogClose', false, {type: 'boolean', name: 'Schalter Dialog schließen'});
      createState(Vis+'vSchalterState', false, {type: 'boolean', name: 'Zustand des mit vDeviceSelect ausgewählten Schalters'});
      createState(Vis+'vTasterDialog', false, {type: 'boolean', name: 'Taster Dialog anzeigen'});
      createState(Vis+'vTasterDialogClose', false, {type: 'boolean', name: 'Taster Dialog schließen'});
      createState(Vis+'vTasterState', false, {type: 'boolean', name: 'Zustand des mit vDeviceSelect ausgewählten Tasters'});
      createState(Vis+'vTasterIcon', '', {type: 'string', name: 'Taster Icon'});
      createState(Vis+'vHeizungDialog', false, {type: 'boolean', name: 'Heizung Dialog anzeigen'});
      createState(Vis+'vHeizungDialogClose', false, {type: 'boolean', name: 'Heizung Dialog schließen'});
      createState(Vis+'vHeizungLevel', {type: 'number', name: 'Temperatur der mit vDeviceSelect ausgewählten Heizung'});
      createState(Vis+'vKlimaDialog', false, {type: 'boolean', name: 'Klima Dialog anzeigen'});
      createState(Vis+'vKlimaDialogClose', false, {type: 'boolean', name: 'Klima Dialog schließen'});
      createState(Vis+'vKlimaLevel', {type: 'number', name: 'Temperatur der mit vDeviceSelect ausgewählten Klimaanlage'});
      createState(Vis+'vKlimaState', false, {type: 'boolean', name: 'Zustand der mit vDeviceSelect ausgewählten Klimaanlage'});
      createState(Vis+'vRolloDialog', false, {type: 'boolean', name: 'Rolladen Dialog anzeigen'});
      createState(Vis+'vRolloDialogClose', false, {type: 'boolean', name: 'Rolladen Dialog schließen'});
      createState(Vis+'vRolloLevel', {type: 'number', name: 'Position des mit vDeviceSelect ausgewählten Rolladens'});
      createState(Vis+'vBlindDialog', false, {type: 'boolean', name: 'Jalousie Dialog anzeigen'});
      createState(Vis+'vBlindDialogClose', false, {type: 'boolean', name: 'Jalousie Dialog schließen'});
      createState(Vis+'vBlindLevel', {type: 'number', name: 'Position der mit vDeviceSelect ausgewählten Jalousie'});
      
      // Restart, wenn States noch nicht geschrieben
      if(!existsState(Vis+'vRolloLevel')) runScript();
      
      /**
      * Initialisierung
      */
      
      setState(Vis+'vDimmerDialog', false, true);
      setState(Vis+'vDimmerDialogClose', false, true);
      setState(Vis+'vSchalterDialog', false, true);
      setState(Vis+'vSchalterDialogClose', false, true);
      setState(Vis+'vTasterDialog', false, true);
      setState(Vis+'vTasterDialogClose', false, true);
      setState(Vis+'vTasterDialog', false, true);
      setState(Vis+'vTasterDialogClose', false, true);
      setState(Vis+'vHeizungDialog', false, true);
      setState(Vis+'vHeizungDialogClose', false, true);
      setState(Vis+'vKlimaDialog', false, true);
      setState(Vis+'vKlimaDialogClose', false, true);
      setState(Vis+'vRolloDialog', false, true);
      setState(Vis+'vRolloDialogClose', false, true);
      setState(Vis+'vBlindDialog', false, true);
      setState(Vis+'vBlindDialogClose', false, true);
      setState(Vis+'vDeviceSelect', '');
      
      
      /**
      * Main
      */
      
      let aktView='';
      let deviceType='';      // 'Dimmer'||'Schalter'||'Taster'||'Heizung'||'Klima'||'Rolladen'||'Jalousie'
      let aktor='';
      let aktorK='';
      let tastLevel;
      let tastIcon='';
      
      let dDialogOnID;
      let dDialogToID;
      let dCloseOnID;
      let sDialogOnID;
      let sDialogToID;
      let sCloseOnID;
      let tDialogOnID;
      let tDdialogToID;
      let tCloseOnID;
      let hDialogOnID;
      let hDialogToID;
      let hCloseOnID;
      let kDialogOnID;
      let kDialogToID;
      let kCloseOnID;
      let rDialogOnID;
      let rDialogToID;
      let rCloseOnID;
      let bDialogOnID;
      let bDialogToID;
      let bCloseOnID;
      let dlgToID;
      let lckToID;
      
      let lock=false;     // Mehrfachaufruf blockieren
      // Aufruf durch Setzen des States vis+'vDeviceSelect' mit: Dimmer;X,Y;[View]
      on({id: Vis+'vDeviceSelect', change: 'any'}, select => {
         let device=select.state.val.slice(0, select.state.val.indexOf(';'));
         let x=Number(select.state.val.slice(select.state.val.indexOf(';')+1, select.state.val.indexOf(',')));
         let y;
         let view='';
         x= x == NaN ? Dx : x+Dx;
         if(select.state.val.indexOf(';', select.state.val.indexOf(',')) == -1) {
             y=Number(select.state.val.slice(select.state.val.indexOf(',')+1));
         } else {
             y=Number(select.state.val.slice(select.state.val.indexOf(',')+1, select.state.val.indexOf(';', select.state.val.indexOf(','))));
             view=select.state.val.slice(select.state.val.indexOf(';', select.state.val.indexOf(','))+1);
         }
         y= y == NaN ? Dy : y+Dy;
         if(device != '' && !lock) {
             unsubscribe(dDialogOnID);
             unsubscribe(dCloseOnID);
             unsubscribe(sDialogOnID);
             unsubscribe(sCloseOnID);
             unsubscribe(tDialogOnID);
             unsubscribe(tCloseOnID);
             unsubscribe(hDialogOnID);
             unsubscribe(hCloseOnID);
             unsubscribe(kDialogOnID);
             unsubscribe(kCloseOnID);
             unsubscribe(rDialogOnID);
             unsubscribe(rCloseOnID);
             unsubscribe(bDialogOnID);
             unsubscribe(bCloseOnID);
             setState(Vis+'vDimmerDialog', false, true);
             setState(Vis+'vDimmerDialogClose', false, true);
             setState(Vis+'vSchalterDialog', false, true);
             setState(Vis+'vSchalterDialogClose', false, true);
             setState(Vis+'vTasterDialog', false, true);
             setState(Vis+'vTasterDialogClose', false, true);
             setState(Vis+'vHeizungDialog', false, true);
             setState(Vis+'vHeizungDialogClose', false, true);
             setState(Vis+'vKlimaDialog', false, true);
             setState(Vis+'vKlimaDialogClose', false, true);
             setState(Vis+'vRolloDialog', false, true);
             setState(Vis+'vRolloDialogClose', false, true);
             setState(Vis+'vBlindDialog', false, true);
             setState(Vis+'vBlindDialogClose', false, true);
             debug('vHD101 Device: '+device+'; x = '+x+', y = '+y);
             switch(device) {
                 // Dimmer
                 case 'Deckenstrahler<br>Küche':
                     aktor='hm-rpc.2.000E17098FA545.2.LEVEL'/*Deckenstrahler Küche LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausEG';
                     break;
                 case 'Strahler<br>Wohnzimmer':
                     aktor='hm-rpc.2.000E1709999BCF.2.LEVEL'/*Strahler Wohnzimmer LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausEG';
                     break;
                 case 'Stehlampe<br>Wohnzimmer':
                     aktor='hm-rpc.2.000DD8A98BDCF0.3.LEVEL'/*Stehlampe Wohnzimmer LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausEG';
                     break;
                 case 'Tischlampe<br>Wohnzimmer':
                     aktor='hm-rpc.2.000DD8A98AD787.3.LEVEL'/*Tischlampe Wohnzimmer LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausEG';
                     break;
                 case 'Deckenlampe<br>Dusche':
                     aktor='hm-rpc.1.PEQ0156604.1.LEVEL'/*Deckenlampe Dusche LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausEG';
                     break;
                 case 'Treppen-<br>beleuchtung':
                     aktor='hm-rpc.2.000E1A498E6EFE.3.LEVEL'/*Treppenbeleuchtung:2 LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausEG';
                     break;
                 case 'Stehlampe<br>Schlafzimmer':
                     aktor='hm-rpc.1.MEQ1567227.2.LEVEL'/*Stehlampe Schlafzimmer:2 LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausOG';
                     break;
                 case 'Schirmlampe<br>Schlafzimmer':
                     aktor='hm-rpc.1.MEQ1567059.1.LEVEL'/*Schirmlampe Schlafzimmer LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausOG';
                     break;
                 case 'Bettlicht<br>Schlafzimmer':
                     aktor='hm-rpc.1.OEQ2080651.1.LEVEL'/*Bettunterlicht Schlafzimmer LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausOG';
                     break;
                 case 'Deckenlampe<br>Bad':
                     aktor='hm-rpc.1.PEQ0156624.1.LEVEL'/*Deckenlampe Bad LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausOG';
                     break;
                 case 'Strahler<br>Flur':
                     aktor='hm-rpc.1.OEQ0331512.1.LEVEL'/*Deckenstrahler Flur LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausOG';
                     break;
                 case 'Strahler<br>Keller':
                     aktor='hm-rpc.1.PEQ0156595.1.LEVEL'/*Deckenstrahler Keller LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausUG';
                     break;
                 case 'Tischlampe<br>Keller':
                     aktor='alias.0.Tischlampe_Keller.SET';
                     deviceType='Dimmer';
                     aktView='2_HausUG';
                     break;               
                 case 'Deckenlampe<br>Hobbyraum':
                     aktor='hm-rpc.1.PEQ0156603.1.LEVEL'/*Deckenlampe Hobbyraum LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausUG';
                     break;
                 case 'Stehlampe<br>Hobbyraum':
                     aktor='hm-rpc.1.MEQ1567016.1.LEVEL'/*Stehlampe Hobbyraum LEVEL*/;
                     deviceType='Dimmer';
                     aktView='2_HausUG';
                     break;
                 // Schalter
                 case 'Arbeitslicht<br>Küche':
                     aktor='hm-rpc.2.003AA269960BE3.3.STATE'/*Arbeitslicht Küche STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Sockellicht<br>Küche':
                     aktor='hm-rpc.2.000898A994E27C.2.STATE'/*Sockellicht Küche STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Lichtkugel<br>Wohnzimmer':
                     aktor='hm-rpc.2.000218A98A59D8.3.STATE'/*Lichtkugel Wohnzimmer STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Katzen-<br>brunnen':
                     aktor='hm-rpc.2.00021D8999AFC2.3.STATE'/*Katzenbrunnen STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Deckenlampe<br>Garderobe':
                     aktor='hm-rpc.2.000858A994AFD3.4.STATE'/*Deckenlampe Garderobe STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Eingangs-<br>beleuchtung':
                     aktor='hm-rpc.2.00021A49A85F15.3.STATE'/*Eingangsbeleuchtung STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Weihnachts-<br>baum':
                     aktor='alias.0.Weihnachtsbaum.SET';
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Subwoofer':
                     aktor='0_userdata.0.IoT.Subwoofer';
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Leuchtstofflampe<br>Schlafzimmer':
                     aktor='hm-rpc.1.OEQ1359657.1.STATE'/*Leuchtstofflampe Schlafzimmer STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausOG';
                     break;
                 case 'Elefant<br>Schlafzimmer':
                     aktor='hm-rpc.1.OEQ1359731.1.STATE'/*Elefant Schlafzimmer STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausOG';
                     break;
                 case 'Receiver<br>Schlafzimmer':
                     aktor='hm-rpc.2.00351F2992C4F4.3.STATE'/*HeimkinoSchlafzimmer STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausOG';
                     break;
                 case 'Licht<br>Ankleidezimmer':
                     aktor='hm-rpc.2.00021A49A41316.3.STATE'/*Licht Ankleidezimmer STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausOG';
                     break;
                 case 'Deckenlampe<br>Arbeitszimmer':
                     aktor='hm-rpc.2.000858A994B014.4.STATE'/*Deckenlampe Arbeitszimmer STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausOG';
                     break;
                 case 'Vitrine<br>Hobbyraum':
                     aktor='hm-rpc.1.OEQ1359235.1.STATE'/*Vitrine Hobbyraum STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausUG';
                     break;
                 case 'Schrankwand<br>Hobbyraum':
                     aktor='hm-rpc.1.OEQ1359232.1.STATE'/*Schrankwand Hobbyraum STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausUG';
                     break;
                 case 'Licht<br>Terrasse':
                     aktor='hm-rpc.2.000218A992903D.3.STATE'/*Licht Terrasse STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausG';
                     break;
                 case 'Licht<br>Garten':
                     aktor='hm-rpc.2.000218A9929026.3.STATE'/*Licht Garten STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausG';
                     break;
                 case 'Hecken-<br>beleuchtung':
                     aktor='hm-rpc.2.000218A9929119.3.STATE'/*Heckenbeleuchtung STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausG';
                     break;
                 case 'Buddha-<br>brunnen':
                     aktor='hm-rpc.2.000218A992884B.3.STATE'/*Buddhabrunnen STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausG';
                     break;
                 case 'Löwenkopf-<br>brunnen':
                     aktor='hm-rpc.2.000218A99288B9.3.STATE'/*Löwenkopfbrunnen STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausG';
                     break;
                 case 'Lüftung Dusche':
                     aktor='hm-rpc.2.000855699C48F0.4.STATE'/*Schalter Lüftung Dusche STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausEG';
                     break;
                 case 'Lüftung Bad':
                     aktor='hm-rpc.2.000855699C4D23.4.STATE'/*Schalter Lüftung Bad STATE*/;
                     deviceType='Schalter';
                     aktView='2_HausOG';
                     break;
                 // Taster
                 case 'Fernseher<br>Wohnzimmer':
                     aktor='harmony.0.HarmonyHub_Wohnzimmer.Loewe_TV.PowerToggle';
                     deviceType='Taster';
                     tastLevel=250;
                     tastIcon='power';
                     aktView='2_HausEG';
                     break;
                 case 'Robby':
                     aktor='0_userdata.0.Trigger.RobbyClean';
                     deviceType='Taster';
                     tastLevel=true;
                     tastIcon='power';
                     aktView='2_HausEG';
                     break;
                 case 'Bewässerung':
                     aktor=Trigger+'LinkTap';
                     deviceType='Taster';
                     tastLevel=true;
                     tastIcon='power';
                     aktView='2_HausG';
                     break;
                 case 'Fernseher<br>Schlafzimmer':
                     aktor='harmony.0.HarmonyHub_Schlafzimmer.Samsung_TV.PowerToggle';
                     deviceType='Taster';
                     tastLevel=250;
                     tastIcon='power';
                     aktView='2_HausOG';
                     break;
                 case 'Tobby':
                     aktor='0_userdata.0.Trigger.TobbyClean';
                     deviceType='Taster';
                     tastLevel=true;
                     tastIcon='power';
                     aktView='2_HausOG';
                     break;
                 // Heizungen
                 case 'Heizung<br>Wohnzimmer':
                     aktor='hm-rpc.2.000E58A99C8B62.1.SET_POINT_TEMPERATURE'/*Heizungssensor Wohnzimmer:Thermostat SET POINT TEMPERATURE*/;
                     device='Wohnzimmer';
                     deviceType='Heizung';
                     aktView='2_HausEG';
                     break;
                 case 'Heizung<br>Dusche':
                     aktor='hm-rpc.2.000A18A9A6660D.1.SET_POINT_TEMPERATURE'/*Heizkörper Dusche SET POINT TEMPERATURE*/;
                     device='Dusche';
                     deviceType='Heizung';
                     aktView='2_HausEG';
                     break;
                 case 'Heizung<br>Arbeitszimmer':
                     aktor='hm-rpc.2.000A18A98E6FD8.1.SET_POINT_TEMPERATURE'/*Heizkörper Arbeitszimmer SET POINT TEMPERATURE*/;
                     device='Arbeitszimmer';
                     deviceType='Heizung';
                     aktView='2_HausOG';
                     break;
                 case 'Heizung<br>Bad':
                     aktor='hm-rpc.2.000A18A9970002.1.SET_POINT_TEMPERATURE'/*Heizkörper Bad SET POINT TEMPERATURE*/;
                     device='Bad';
                     deviceType='Heizung';
                     aktView='2_HausOG';
                     break;
                 // Klimaanlagen
                 case 'Klima<br>Arbeitszimmer':
                     //aktor='daikin-cloud.0.53675292-15a8-4272-b21e-d2347b7ab55e.climateControl.temperatureControl.operationModes.cooling.setpoints.roomTemperature'/*roomTemperature*/;
                     aktor='alias.0.Klimaanlage_Arbeitszimmer.SOLL-Temperatur';
                     aktorK='daikin-cloud.0.53675292-15a8-4272-b21e-d2347b7ab55e.climateControl.onOffMode'/*onOffMode*/;
                     device='Arbeitszimmer';
                     deviceType='Klima';
                     aktView='2_HausOG';
                     break;
                 case 'Klima<br>Schlafzimmer':
                     aktor='daikin-cloud.0.d157a703-d5c3-4f0c-9db3-303041932916.climateControl.temperatureControl.operationModes.cooling.setpoints.roomTemperature'/*roomTemperature*/;
                     aktorK='daikin-cloud.0.d157a703-d5c3-4f0c-9db3-303041932916.climateControl.onOffMode'/*onOffMode*/;
                     device='Schlafzimmer';
                     deviceType='Klima';
                     aktView='2_HausOG';
                     break;
                 // Rolladen
                 case 'Rolladen<br>Terrasse':
                     aktor=Verschluss+'RolladenTerrasse.LEVEL'/*Position*/;
                     device='Terrasse';
                     deviceType='Rolladen';
                     aktView='2_HausEG';
                     break;
                 case 'Rolladen<br>Küche':
                     aktor=Verschluss+'RolladenKüche.LEVEL'/*Position*/;
                     device='Küche';
                     deviceType='Rolladen';
                     aktView='2_HausEG';
                     break;
                 case 'Rolladen<br>Fenster Wohnen':
                     aktor=Verschluss+'RolladenFensterWohnen.LEVEL'/*Position*/;
                     device='Fenster Wohnen';
                     deviceType='Rolladen';
                     aktView='2_HausEG';
                     break;
                 case 'Rolladen<br>Seitenfenster':
                     aktor=Verschluss+'RolladenSeitenfenster.LEVEL'/*Position*/;
                     device='Seitenfenster';
                     deviceType='Rolladen';
                     aktView='2_HausEG';
                     break;
                 case 'Rolladen<br>Garderobe':
                     aktor=Verschluss+'RolladenGarderobe.LEVEL'/*Position*/;
                     device='Garderobe';
                     deviceType='Rolladen';
                     aktView='2_HausEG';
                     break;
                 case 'Rolladen<br>Treppe':
                     aktor=Verschluss+'RolladenTreppe.LEVEL'/*Position*/;
                     device='Treppe';
                     deviceType='Rolladen';
                     aktView='2_HausOG';
                     break;
                 case 'Rolladen<br>Kratzbaum':
                     aktor=Verschluss+'RolladenKratzbaum.LEVEL'/*Position*/;
                     device='Kratzbaum';
                     deviceType='Rolladen';
                     aktView='2_HausOG';
                     break;
                 case 'Rolladen<br>Pferd':
                     aktor=Verschluss+'RolladenPferd.LEVEL'/*Position*/;
                     device='Pferd';
                     deviceType='Rolladen';
                     aktView='2_HausOG';
                     break;
                 case 'Rolladen<br>Schlafzimmer':
                     aktor=Verschluss+'RolladenSchlafzimmer.LEVEL'/*Position*/;
                     device='Schlafzimmer';
                     deviceType='Rolladen';
                     aktView='2_HausOG';
                     break;
                 case 'Rolladen<br>Ankleidezimmer':
                     aktor=Verschluss+'RolladenAnkleidezimmer.LEVEL'/*Position*/;
                     device='Ankleidezimmer';
                     deviceType='Rolladen';
                     aktView='2_HausOG';
                     break;
                 case 'Rolladen<br>Arbeitszimmer':
                     aktor=Verschluss+'RolladenArbeitszimmer.LEVEL'/*Position*/;
                     device='Arbeitszimmer';
                     deviceType='Rolladen';
                     aktView='2_HausOG';
                     break;
                 case 'Markise':
                     aktor='hm-rpc.2.00115D89913642.4.LEVEL'/*Markise LEVEL*/;
                     device='Markise';
                     deviceType='Markise';
                     aktView='2_HausG';
                     break;
                 // Jalousien
                 case 'Jalousie<br>Dusche':
                     aktor=BlindTilts+'JalousieDusche.LEVEL';
                     device='Dusche';
                     deviceType='Jalousie';
                     aktView='2_HausEG';
                     break;
                 case 'Jalousie<br>Schlafzimmer':
                     aktor=BlindTilts+'JalousieSchlafzimmer.LEVEL';
                     device='Schlafzimmer';
                     deviceType='Jalousie';
                     aktView='2_HausOG';
                     break;
                 case 'Jalousie<br>Arbeitszimmer':
                     aktor=BlindTilts+'JalousieArbeitszimmer.LEVEL';
                     device='Arbeitszimmer';
                     deviceType='Jalousie';
                     aktView='2_HausOG';
                     break;
                 case 'Jalousie<br>Bad':
                     aktor=BlindTilts+'JalousieBad.LEVEL';
                     device='Bad';
                     deviceType='Jalousie';
                     aktView='2_HausOG';
                     break;
                 default:
                     log('vHD001 Device '+select.state.val+' not exist!', 'warn');
                     aktor='';
             }
             if(view != '') aktView=view;
             debug('vHD102 View: '+aktView);
             setState(Vis+'vDeviceSelectName', device);
             if(aktor != '') {
                 // Dimmer
                 if(deviceType == 'Dimmer') {
                     // alten Dimmerlevel in vis darstellen
                     setState(Vis+'vDimmerLevel', getState(aktor).val);
                     x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                     y= y+DimmerLevelHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-DimmerLevelHeight;
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vDimmerDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     setStateDelayed('vis.0.control.command', 'changeView', ReViewTime+BouncingTime, () => {
                         setState('vis.0.control.data', VisName+'/'+aktView);
                     });
                     unsubscribe(dDialogOnID);
                     dDialogOnID=on({id: Vis+'vDimmerLevel', change: 'ne'}, level => {
                         debug('vHD103 Dimmer: '+device+' = '+aktor+', Level: '+level.state.val);
                         // Dimmerlevel setzen
                         setState(aktor, level.state.val);
                         clearTimeout(dDialogToID);
                         dDialogToID=setTimeout(() => {
                             unsubscribe(dDialogOnID);
                             unsubscribe(dCloseOnID);
                             setState(Vis+'vDimmerDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vDimmerDialogClose', false);
                         }, DialogTimeout*1000);
                     });
                     unsubscribe(dCloseOnID);
                     dCloseOnID=on({id: Vis+'vDimmerDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(dDialogOnID);
                         clearTimeout(dDialogToID);
                         setState(Vis+'vDimmerDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vDimmerDialogClose', false);
                     });
                     clearTimeout(dDialogToID);
                     dDialogToID=setTimeout(() => {
                         unsubscribe(dDialogOnID);
                         unsubscribe(dCloseOnID);
                         setState(Vis+'vDimmerDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vDimmerDialogClose', false);
                     }, DialogTimeout*1000);
                 // Schalter
                 } else if(deviceType == 'Schalter') {
                     // alten Schaltzustand in vis darstellen
                     setState(Vis+'vSchalterState', getState(aktor).val);
                     x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                     y= y+SchalterStateHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-SchalterStateHeight;
                     debug('vHD111 XY '+x+', '+y);
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vSchalterDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     unsubscribe(sDialogOnID);
                     sDialogOnID=on({id: Vis+'vSchalterState', change: 'ne'}, level => {
                         debug('vHD104 Schalter: '+device+' = '+aktor+', Level: '+level.state.val);
                         // Schalterlevel setzen
                         setState(aktor, level.state.val);
                         clearTimeout(dDialogToID);
                         sDialogToID=setTimeout(() => {
                             unsubscribe(sDialogOnID);
                             unsubscribe(sCloseOnID);
                             setState(Vis+'vSchalterDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vSchalterDialogClose', false);
                         }, DialogTimeout*1000);
                     });
                     unsubscribe(sCloseOnID);
                     sCloseOnID=on({id: Vis+'vSchalterDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(sDialogOnID);
                         clearTimeout(dDialogToID);
                         setState(Vis+'vSchalterDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vSchalterDialogClose', false);
                     });
                     clearTimeout(dDialogToID);
                     sDialogToID=setTimeout(() => {
                         unsubscribe(sDialogOnID);
                         unsubscribe(sCloseOnID);
                         setState(Vis+'vSchalterDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vSchalterDialogClose', false);
                     }, DialogTimeout*1000);
                 // Taster
                 } else if(deviceType == 'Taster') {
                     // alten Schaltzustand in vis darstellen
                     setState(Vis+'vTasterIcon', tastIcon);
                     x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                     y= y+TtasterStateHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-TtasterStateHeight;
                     debug('vHD112 XY '+x+', '+y);
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vTasterDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     unsubscribe(tDialogOnID);
                     tDialogOnID=on({id: Vis+'vTasterState', change: 'any'}, () => {
                         debug('vHD104 Taster: '+device+' = '+aktor+', Level: '+tastLevel);
                         // Tasterlevel setzen
                         setState(aktor, tastLevel);
                         clearTimeout(tDdialogToID);
                         tDdialogToID=setTimeout(() => {
                             unsubscribe(dDialogOnID);
                             unsubscribe(dCloseOnID);
                             setState(Vis+'vTasterDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vTasterDialogClose', false, true);
                         }, BouncingTime);
                     });
                     unsubscribe(tCloseOnID);
                     tCloseOnID=on({id: Vis+'vTasterDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(tDialogOnID);
                         clearTimeout(tDdialogToID);
                         setState(Vis+'vTasterDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vTasterDialogClose', false, true);
                     });
                     clearTimeout(tDdialogToID);
                     tDdialogToID=setTimeout(() => {
                         unsubscribe(dDialogOnID);
                         unsubscribe(dCloseOnID);
                         setState(Vis+'vTasterDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vTasterDialogClose', false, true);
                     }, DialogTimeout*1000);
                 // Heizung
                 } else if(deviceType == 'Heizung') {
                     // alten Heizunglevel in vis darstellen
                     setState(Vis+'vHeizungLevel', getState(aktor).val);
                     x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                     y= y+HeizungLevelHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-HeizungLevelHeight;
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vHeizungDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     unsubscribe(hDialogOnID);
                     hDialogOnID=on({id: Vis+'vHeizungLevel', change: 'ne'}, level => {
                         debug('vHD105 Heizung: '+device+' = '+aktor+', Level: '+level.state.val);
                         // Heizunglevel setzen
                         setState(aktor, level.state.val);
                         clearTimeout(hDialogToID);
                         hDialogToID=setTimeout(() => {
                             unsubscribe(hDialogOnID);
                             unsubscribe(hCloseOnID);
                             setState(Vis+'vHeizungDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vHeizungDialogClose', false, true);
                         }, DialogTimeout*1000);
                     });
                     unsubscribe(hCloseOnID);
                     hCloseOnID=on({id: Vis+'vHeizungDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(hDialogOnID);
                         clearTimeout(hDialogToID);
                         setState(Vis+'vHeizungDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vHeizungDialogClose', false, true);
                     });
                     clearTimeout(hDialogToID);
                     hDialogToID=setTimeout(() => {
                         unsubscribe(hDialogOnID);
                         unsubscribe(hCloseOnID);
                         setState(Vis+'vHeizungDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vHeizungDialogClose', false, true);
                     }, DialogTimeout*1000);
                 // Klima
                 } else if(deviceType == 'Klima') {
                     // alten Klimalevel in vis darstellen
                     setState(Vis+'vKlimaLevel', getState(aktor).val);
                     setState(Vis+'vKlimaState', getState(aktorK).val);
                     x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                     y= y+KlimaLevelHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-KlimaLevelHeight;
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vKlimaDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     unsubscribe(kDialogOnID);
                     kDialogOnID=on({id: [Vis+'vKlimaLevel', Vis+'vKlimaState'], change: 'ne'}, level => {
                         debug('vHD113 Klima: '+device+' = '+aktor+', Level: '+level.state.val);
                         // Klimalevel setzen
                         if(level.id == Vis+'vKlimaLevel') {
                             setState(aktor, level.state.val);
                         } else if(level.id == Vis+'vKlimaState') {
                             setState(aktorK, level.state.val);
                         }
                         clearTimeout(kDialogToID);
                         kDialogToID=setTimeout(() => {
                             unsubscribe(kDialogOnID);
                             unsubscribe(kCloseOnID);
                             setState(Vis+'vKlimaDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vKlimaDialogClose', false, true);
                         }, DialogTimeout*1000);
                     });
                     unsubscribe(kCloseOnID);
                     kCloseOnID=on({id: Vis+'vKlimaDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(kDialogOnID);
                         clearTimeout(kDialogToID);
                         setState(Vis+'vKlimaDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vKlimaDialogClose', false, true);
                     });
                     clearTimeout(kDialogToID);
                     kDialogToID=setTimeout(() => {
                         unsubscribe(kDialogOnID);
                         unsubscribe(kCloseOnID);
                         setState(Vis+'vKlimaDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vKlimaDialogClose', false, true);
                     }, DialogTimeout*1000);
                 // Rolladen
                 } else if(deviceType == 'Rolladen') {
                     // alte Rolladenposition in vis darstellen
                     setState(Vis+'vRolloLevel', getState(aktor+'_CURRENT').val);
                     if(aktView == '4_Rollos') {
                         x= x+ViewRollos.buttonWidth+DialogWidth+2*distance < ViewRollos.width ? x+ViewRollos.buttonWidth/2+distance : x-distance-DialogWidth;
                         y= y+RolloLevelHeight+distance < ViewRollos.height ? y : y+ViewRollos.buttonHeight-RolloLevelHeight;
                     } else {
                         x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                         y= y+RolloLevelHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-RolloLevelHeight;
                     }
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vRolloDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     unsubscribe(rDialogOnID);
                     rDialogOnID=on({id: Vis+'vRolloLevel', change: 'ne'}, level => {
                         debug('vHD106 Rolladen: '+device+' = '+aktor+', Level: '+level.state.val);
                         // Rolladenposition setzen
                         setState(aktor, level.state.val);
                         clearTimeout(rDialogToID);
                         rDialogToID=setTimeout(() => {
                             unsubscribe(rDialogOnID);
                             unsubscribe(rCloseOnID);
                             setState(Vis+'vRolloDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vRolloDialogClose', false, true);
                         }, DialogTimeout*1000);
                     });
                     unsubscribe(rCloseOnID);
                     rCloseOnID=on({id: Vis+'vRolloDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(rDialogOnID);
                         clearTimeout(rDialogToID);
                         setState(Vis+'vRolloDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vRolloDialogClose', false, true);
                     });
                     clearTimeout(rDialogToID);
                     rDialogToID=setTimeout(() => {
                         unsubscribe(rDialogOnID);
                         unsubscribe(rCloseOnID);
                         setState(Vis+'vRolloDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vRolloDialogClose', false, true);
                     }, DialogTimeout*1000);
                 // Jalousien
                 } else if(deviceType == 'Jalousie') {
                     // alte Jalousienposition in vis darstellen
                     setState(Vis+'vBlindLevel', getState(aktor).val);
                     x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                     y= y+BlindLevelHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-BlindLevelHeight;
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vBlindDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     unsubscribe(bDialogOnID);
                     bDialogOnID=on({id: Vis+'vBlindLevel', change: 'ne'}, level => {
                         debug('vHD107 Jalousie: '+device+' = '+aktor+', Level: '+level.state.val);
                         // Jalousieposition setzen
                         setState(aktor, level.state.val);
                         clearTimeout(bDialogToID);
                         bDialogToID=setTimeout(() => {
                             unsubscribe(bDialogOnID);
                             unsubscribe(bCloseOnID);
                             setState(Vis+'vBlindDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vBlindDialogClose', false, true);
                         }, DialogTimeout*1000);
                     });
                     unsubscribe(bCloseOnID);
                     bCloseOnID=on({id: Vis+'vBlindDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(bDialogOnID);
                         clearTimeout(bDialogToID);
                         setState(Vis+'vBlindDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vBlindDialogClose', false, true);
                     });
                     clearTimeout(bDialogToID);
                     bDialogToID=setTimeout(() => {
                         unsubscribe(bDialogOnID);
                         unsubscribe(bCloseOnID);
                         setState(Vis+'vBlindDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vBlindDialogClose', false, true);
                     }, DialogTimeout*1000);
                 // Markise
                 } else if(deviceType == 'Markise') {
                     // alte Rolladenpositionl in vis darstellen
                     setState(Vis+'vRolloLevel', getState(aktor).val);
                     if(aktView == '4_Rollos') {
                         x= x+ViewRollos.buttonWidth+DialogWidth+2*distance < ViewRollos.width ? x+ViewRollos.buttonWidth/2+distance : x-distance-DialogWidth;
                         y= y+RolloLevelHeight+distance < ViewRollos.height ? y : y+ViewRollos.buttonHeight-RolloLevelHeight;
                     } else {
                         x= x+ViewHaus.buttonWidth+DialogWidth+2*distance < ViewHaus.width ? x+ViewHaus.buttonWidth+distance : x-distance-DialogWidth;
                         y= y+RolloLevelHeight+distance < ViewHaus.height ? y : y+ViewHaus.buttonHeight-RolloLevelHeight;
                     }
                     setState(Vis+'vDialogX', x);
                     setState(Vis+'vDialogY', y);
                     setStateDelayed(Vis+'vRolloDialog', true, true, BouncingTime);
                     viewReAkt(aktView);
                     unsubscribe(rDialogOnID);
                     rDialogOnID=on({id: Vis+'vRolloLevel', change: 'ne'}, level => {
                         debug('vHD108 Markise: '+device+' = '+aktor+', Level: '+level.state.val);
                         // Markisenposition setzen
                         setState(aktor, level.state.val);
                         clearTimeout(rDialogToID);
                         rDialogToID=setTimeout(() => {
                             unsubscribe(rDialogOnID);
                             unsubscribe(rCloseOnID);
                             setState(Vis+'vRolloDialog', false, true);
                             setState(Vis+'vDeviceSelect', '');
                             setState(Vis+'vRolloDialogClose', false, true);
                         }, DialogTimeout*1000);
                     });
                     unsubscribe(rCloseOnID);
                     rCloseOnID=on({id: Vis+'vRolloDialogClose', change: 'ne', val: true}, () => {
                         unsubscribe(rDialogOnID);
                         clearTimeout(rDialogToID);
                         setState(Vis+'vRolloDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vRolloDialogClose', false, true);
                     });
                     clearTimeout(rDialogToID);
                     rDialogToID=setTimeout(() => {
                         unsubscribe(rDialogOnID);
                         unsubscribe(rCloseOnID);
                         setState(Vis+'vRolloDialog', false, true);
                         setState(Vis+'vDeviceSelect', '');
                         setState(Vis+'vRolloDialogClose', false, true);
                     }, DialogTimeout*1000);
                 } else {
                     log('vDL002 Aktor '+aktor+' not defined!', 'warn');
                 }
             }
         }
         if(!lock) {
             clearTimeout(dlgToID);
             // Nochmal alle Dialoge schließen, falls etwas nicht geklappt hat
             dlgToID=setTimeout(() => {
                 setState(Vis+'vDimmerDialog', false, true);
                 setState(Vis+'vDimmerDialogClose', false, true);
                 setState(Vis+'vSchalterDialog', false, true);
                 setState(Vis+'vSchalterDialogClose', false, true);
                 setState(Vis+'vTasterDialog', false, true);
                 setState(Vis+'vTasterDialogClose', false, true);
                 setState(Vis+'vRolloDialog', false, true);
                 setState(Vis+'vRolloDialogClose', false, true);
                 setState(Vis+'vBlindDialog', false, true);
                 setState(Vis+'vBlindDialogClose', false, true);
                 setState(Vis+'vHeizungDialog', false, true);
                 setState(Vis+'vHeizungDialogClose', false, true);
                 setState(Vis+'vKlimaDialog', false, true);
                 setState(Vis+'vKlimaDialogClose', false, true);
                 setState(Vis+'vDeviceSelect', '');
                 lock=false;
             }, 1.5*DialogTimeout*1000);
         }
         lock=true;
         clearTimeout(lckToID);
         lckToID=setTimeout(() => {
             lock=false;
         }, LockTime);
      }, );
      
      
      /**
      * View nochmal aufrufen, da Fehler in Vis: Dialog ist manchmal leer
      * @param   {string}    aView   Viewname
      */
      function viewReAkt(aView) {
         debug('vDH109 viewReAkt('+aView+')');
         setState('vis.0.control.instance', VisInstance);
         setStateDelayed('vis.0.control.data', VisName+'/'+aView, ReViewTime);
         setStateDelayed('vis.0.control.command', 'changeView', ReViewTime+BouncingTime);
      }
      
      
      // ___|\/|
      //  |
      
      
      

      1 Antwort Letzte Antwort
      0
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      642

      Online

      32.7k

      Benutzer

      82.3k

      Themen

      1.3m

      Beiträge
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
      ioBroker Community 2014-2025
      logo
      • Anmelden

      • Du hast noch kein Konto? Registrieren

      • Anmelden oder registrieren, um zu suchen
      • Erster Beitrag
        Letzter Beitrag
      0
      • Home
      • Aktuell
      • Tags
      • Ungelesen 0
      • Kategorien
      • Unreplied
      • Beliebt
      • GitHub
      • Docu
      • Hilfe