- ioBroker Community Home
- Deutsch
- Visualisierung
- VIS(1): Ein PopUp für mehrere Lampen
NEWS
VIS(1): Ein PopUp für mehrere Lampen
-
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? -
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:

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:

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:

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:

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); } // ___|\/| // |