From d3e68dcb066e95014e4a50f1dd8f1340819bf90e Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:46:20 +0100
Subject: [PATCH 1/9] Create PopupTimer.xml
---
ioBroker/Blockly/PopupTimer.xml | 236 ++++++++++++++++++++++++++++++++
1 file changed, 236 insertions(+)
create mode 100644 ioBroker/Blockly/PopupTimer.xml
diff --git a/ioBroker/Blockly/PopupTimer.xml b/ioBroker/Blockly/PopupTimer.xml
new file mode 100644
index 00000000..0d74ccbf
--- /dev/null
+++ b/ioBroker/Blockly/PopupTimer.xml
@@ -0,0 +1,236 @@
+
+
+ vSTATE
+ vACTUAL
+ sec_timer
+ Intervall
+
+
+ vSTATE
+
+
+ 0_userdata.0.Timer.NSPanel.1.Countdown.Zustand
+
+
+
+
+ vACTUAL
+
+
+ 0_userdata.0.Timer.NSPanel.1.Countdown.Sekunden
+
+
+
+
+ sec_timer
+
+
+ val
+
+
+
+
+
+ vACTUAL
+
+
+
+
+
+
+
+ ne
+
+
+
+ default
+
+
+ 0_userdata.0.Timer.NSPanel.1.Countdown.Zustand
+
+
+
+
+
+
+
+ state.val
+
+
+
+
+ active
+
+
+
+
+ Intervall
+
+
+ Intervall
+ 1000
+ ms
+
+
+
+
+
+ GT
+
+
+ val
+
+
+
+
+
+ vACTUAL
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+ sec_timer
+
+
+ val
+
+
+
+
+
+ vACTUAL
+
+
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+ vACTUAL
+
+
+
+
+ TRUE
+
+
+ MINUS
+
+
+ 1
+
+
+ sec_timer
+
+
+
+
+ 1
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+ vACTUAL
+
+
+
+
+ TRUE
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+ vSTATE
+
+
+
+
+ TRUE
+
+
+ idle
+
+
+
+
+ 0
+
+
+
+
+ An dieser Stelle kann auch noch eine Meldung an Alexa oder Telegram, etc. erfolgen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Intervall
+
+
+
+
+
+
+
+
+
+
+
+
From c722f18193b8e4d572e3a0fe29a537ca8ba5abe9 Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:48:12 +0100
Subject: [PATCH 2/9] Create Spotify_Premium_Alias.js
---
ioBroker/Blockly/Spotify_Premium_Alias.js | 51 +++++++++++++++++++++++
1 file changed, 51 insertions(+)
create mode 100644 ioBroker/Blockly/Spotify_Premium_Alias.js
diff --git a/ioBroker/Blockly/Spotify_Premium_Alias.js b/ioBroker/Blockly/Spotify_Premium_Alias.js
new file mode 100644
index 00000000..37644540
--- /dev/null
+++ b/ioBroker/Blockly/Spotify_Premium_Alias.js
@@ -0,0 +1,51 @@
+const aliasPath = 'alias.0.NSPanel_1.Media';
+const aliasDevice = 'PlayerSpotifyPremium';
+//Ergibt alias.0.NSPanel_1.Media.PlayerSpotifyPremium.
+
+const spotifyPremiumInstanz = 'spotify-premium.0.'; //Falls abweichende Instanznummer, bitte ändern
+
+
+var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom;
+
+function createAlias(idDst, idName,idSrc, idRd, idType, idRole, idAliasType) {
+ if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
+ else {
+ var obj = {};
+ obj.type = idType;
+ obj.common = getObject(idSrc).common;
+ obj.common.alias = {};
+ if(idRd) {
+ obj.common.alias.id = {};
+ obj.common.alias.id.read = idRd;
+ obj.common.alias.id.write = idSrc;
+ obj.common.read = true;
+ } else obj.common.alias.id = idSrc;
+ obj.common.type = idAliasType;
+ if(obj.common.read !== false && read) obj.common.alias.read = read;
+ if(obj.common.write !== false && write) obj.common.alias.write = write;
+ obj.common.name = idName;
+ obj.common.role = idRole;
+ obj.common.desc = idDst;
+ if(min !== undefined) obj.common.min = min;
+ if(max !== undefined) obj.common.max = max;
+ if(unit) obj.common.unit = unit;
+ obj.common.states = states;
+ if(custom && obj.common.custom) obj.common.custom = custom;
+ obj.native = {};
+ setObject(idDst, obj);
+ }
+}
+
+createAlias(aliasPath + '.' + aliasDevice, '', spotifyPremiumInstanz + 'player', '', 'channel', 'media', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ALBUM', 'ALBUM', spotifyPremiumInstanz + 'player.album', '', 'state', 'media.album', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ARTIST', 'ARTIST', spotifyPremiumInstanz + 'player.artistName', '', 'state', 'media.artist', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.TITLE', 'TITLE', spotifyPremiumInstanz + 'player.trackName', '', 'state', 'media.title', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.CONTEXT_DESCRIPTION', 'CONTEXT_DESCRIPTION', spotifyPremiumInstanz + 'player.contextDescription', '', 'state', 'media.station', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.NEXT', 'NEXT', spotifyPremiumInstanz + 'player.skipPlus', '', 'state', 'button.next', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PREV', 'PREV', spotifyPremiumInstanz + 'player.skipMinus', '', 'state', 'button.prev', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PLAY', 'PLAY', spotifyPremiumInstanz + 'player.play', '', 'state', 'button.play', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PAUSE', 'PAUSE', spotifyPremiumInstanz + 'player.pause', '', 'state', 'button.pause', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STOP', 'STOP', spotifyPremiumInstanz + 'player.pause', '', 'state', 'button.stop', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STATE', 'STATE', spotifyPremiumInstanz + 'player.isPlaying', '', 'state', 'media.state', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME', 'VOLUME', spotifyPremiumInstanz + 'player.volume', '', 'state', 'level.volume', 'number');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME_ACTUAL', 'VOLUME_ACTUAL', spotifyPremiumInstanz + 'player.volume', '', 'state', 'value.volume', 'number');
From a5de459f81ee01f7c7baee6910d8054f0f8c4428 Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:48:40 +0100
Subject: [PATCH 3/9] Create Alexa2_Alias.js
---
ioBroker/Blockly/Alexa2_Alias.js | 50 ++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100644 ioBroker/Blockly/Alexa2_Alias.js
diff --git a/ioBroker/Blockly/Alexa2_Alias.js b/ioBroker/Blockly/Alexa2_Alias.js
new file mode 100644
index 00000000..36c68e8f
--- /dev/null
+++ b/ioBroker/Blockly/Alexa2_Alias.js
@@ -0,0 +1,50 @@
+const aliasPath = 'alias.0.NSPanel_1.Media';
+const aliasDevice = 'PlayerAlexa2';
+//Ergibt alias.0.NSPanel_1.Media.PlayerAlexa2.
+
+const alexaInstanz = 'alexa2.0.Echo-Devices.';
+const alexaDevice = 'G0XXXXXXXXXXXXXXXX'; //!!! Anpassen !!! Seriennummer des Primär Device (Kann auch Gruppe sein)
+
+var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom;
+
+function createAlias(idDst, idName,idSrc, idRd, idType, idRole, idAliasType) {
+ if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
+ else {
+ var obj = {};
+ obj.type = idType;
+ obj.common = getObject(idSrc).common;
+ obj.common.alias = {};
+ if(idRd) {
+ obj.common.alias.id = {};
+ obj.common.alias.id.read = idRd;
+ obj.common.alias.id.write = idSrc;
+ obj.common.read = true;
+ } else obj.common.alias.id = idSrc;
+ obj.common.type = idAliasType;
+ if(obj.common.read !== false && read) obj.common.alias.read = read;
+ if(obj.common.write !== false && write) obj.common.alias.write = write;
+ obj.common.name = idName;
+ obj.common.role = idRole;
+ obj.common.desc = idDst;
+ if(min !== undefined) obj.common.min = min;
+ if(max !== undefined) obj.common.max = max;
+ if(unit) obj.common.unit = unit;
+ obj.common.states = states;
+ if(custom && obj.common.custom) obj.common.custom = custom;
+ obj.native = {};
+ setObject(idDst, obj);
+ }
+}
+
+createAlias(aliasPath + '.' + aliasDevice, '', alexaInstanz + alexaDevice, '', 'channel', 'media', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ALBUM', 'ALBUM', alexaInstanz + alexaDevice + '.Player.currentAlbum', '', 'state', 'media.album', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ARTIST', 'ARTIST', alexaInstanz + alexaDevice + '.Player.currentArtist', '', 'state', 'media.artist', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.TITLE', 'TITLE', alexaInstanz + alexaDevice + '.Player.currentTitle', '', 'state', 'media.title', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.NEXT', 'NEXT', alexaInstanz + alexaDevice + '.Player.controlNext', '', 'state', 'button.next', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PREV', 'PREV', alexaInstanz + alexaDevice + '.Player.controlPrevious', '', 'state', 'button.prev', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PLAY', 'PLAY', alexaInstanz + alexaDevice + '.Player.controlPlay', '', 'state', 'button.play', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PAUSE', 'PAUSE', alexaInstanz + alexaDevice + '.Player.controlPause', '', 'state', 'button.pause', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STOP', 'STOP', alexaInstanz + alexaDevice + '.Commands.deviceStop', '', 'state', 'button.stop', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STATE', 'STATE', alexaInstanz + alexaDevice + '.Player.currentState', '', 'state', 'media.state', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME', 'VOLUME', alexaInstanz + alexaDevice + '.Player.volume', '', 'state', 'level.volume', 'number');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME_ACTUAL', 'VOLUME_ACTUAL', alexaInstanz + alexaDevice + '.Player.volume', '', 'state', 'value.volume', 'number');
From 3cd8f6a0f5c978269ef29c0a6619715d1ed35bf8 Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:49:11 +0100
Subject: [PATCH 4/9] Create Sonos_Alias.js
---
ioBroker/Blockly/Sonos_Alias.js | 51 +++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
create mode 100644 ioBroker/Blockly/Sonos_Alias.js
diff --git a/ioBroker/Blockly/Sonos_Alias.js b/ioBroker/Blockly/Sonos_Alias.js
new file mode 100644
index 00000000..8fc419f0
--- /dev/null
+++ b/ioBroker/Blockly/Sonos_Alias.js
@@ -0,0 +1,51 @@
+const aliasPath = 'alias.0.NSPanel_1.Media';
+const aliasDevice = 'PlayerSonos';
+//Ergibt alias.0.NSPanel_1.Media.PlayerSonos.
+
+const sonosInstanz = 'sonos.0.root.';
+const sonosIP = '192_168_1_212';
+
+var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom;
+
+function createAlias(idDst, idName,idSrc, idRd, idType, idRole, idAliasType) {
+ if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
+ else {
+ var obj = {};
+ obj.type = idType;
+ obj.common = getObject(idSrc).common;
+ obj.common.alias = {};
+ if(idRd) {
+ obj.common.alias.id = {};
+ obj.common.alias.id.read = idRd;
+ obj.common.alias.id.write = idSrc;
+ obj.common.read = true;
+ } else obj.common.alias.id = idSrc;
+ obj.common.type = idAliasType;
+ if(obj.common.read !== false && read) obj.common.alias.read = read;
+ if(obj.common.write !== false && write) obj.common.alias.write = write;
+ obj.common.name = idName;
+ obj.common.role = idRole;
+ obj.common.desc = idDst;
+ if(min !== undefined) obj.common.min = min;
+ if(max !== undefined) obj.common.max = max;
+ if(unit) obj.common.unit = unit;
+ obj.common.states = states;
+ if(custom && obj.common.custom) obj.common.custom = custom;
+ obj.native = {};
+ setObject(idDst, obj);
+ }
+}
+
+createAlias(aliasPath + '.' + aliasDevice, '', sonosInstanz + sonosIP, '', 'channel', 'media', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ALBUM', 'ALBUM', sonosInstanz + sonosIP + '.current_album', '', 'state', 'media.album', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ARTIST', 'ARTIST', sonosInstanz + sonosIP + '.current_artist', '', 'state', 'media.artist', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.TITLE', 'TITLE', sonosInstanz + sonosIP + '.current_title', '', 'state', 'media.title', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.CONTEXT_DESCRIPTION', 'CONTEXT_DESCRIPTION', sonosInstanz + sonosIP + '.current_station', '', 'state', 'media.station', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.NEXT', 'NEXT', sonosInstanz + sonosIP + '.next', '', 'state', 'button.next', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PREV', 'PREV', sonosInstanz + sonosIP + '.prev', '', 'state', 'button.prev', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PLAY', 'PLAY', sonosInstanz + sonosIP + '.play', '', 'state', 'button.play', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PAUSE', 'PAUSE', sonosInstanz + sonosIP + '.pause', '', 'state', 'button.pause', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STOP', 'STOP', sonosInstanz + sonosIP + '.stop', '', 'state', 'button.stop', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STATE', 'STATE', sonosInstanz + sonosIP + '.state_simple', '', 'state', 'media.state', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME', 'VOLUME', sonosInstanz + sonosIP + '.volume', '', 'state', 'level.volume', 'number');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME_ACTUAL', 'VOLUME_ACTUAL', sonosInstanz + sonosIP + '.volume', '', 'state', 'value.volume', 'number');
From c32c95e6d49dd84dd3d5f461dca63a6f3bc8bbd7 Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:49:45 +0100
Subject: [PATCH 5/9] Create Chrome_Alias.js
---
ioBroker/Blockly/Chrome_Alias.js | 50 ++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100644 ioBroker/Blockly/Chrome_Alias.js
diff --git a/ioBroker/Blockly/Chrome_Alias.js b/ioBroker/Blockly/Chrome_Alias.js
new file mode 100644
index 00000000..4cfef960
--- /dev/null
+++ b/ioBroker/Blockly/Chrome_Alias.js
@@ -0,0 +1,50 @@
+const aliasPath = 'alias.0.NSPanel_1.Media'; // ggfs. Anpassen
+const aliasDevice = 'PlayerChromecast'; // ggfs. Anpassen
+//Ergibt alias.0.NSPanel_1.Media.PlayerChromecast.
+
+const chromecastInstanz = 'chromecast.0.'; // Anpasssen, wenn nicht Instanz 0
+const chromecastDevice = 'GoogleHome3224'; // Anpassen an dein eigenes Devoice
+
+var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom;
+
+function createAlias(idDst, idName,idSrc, idRd, idType, idRole, idAliasType) {
+ if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
+ else {
+ var obj = {};
+ obj.type = idType;
+ obj.common = getObject(idSrc).common;
+ obj.common.alias = {};
+ if(idRd) {
+ obj.common.alias.id = {};
+ obj.common.alias.id.read = idRd;
+ obj.common.alias.id.write = idSrc;
+ obj.common.read = true;
+ } else obj.common.alias.id = idSrc;
+ obj.common.type = idAliasType;
+ if(obj.common.read !== false && read) obj.common.alias.read = read;
+ if(obj.common.write !== false && write) obj.common.alias.write = write;
+ obj.common.name = idName;
+ obj.common.role = idRole;
+ obj.common.desc = idDst;
+ if(min !== undefined) obj.common.min = min;
+ if(max !== undefined) obj.common.max = max;
+ if(unit) obj.common.unit = unit;
+ obj.common.states = states;
+ if(custom && obj.common.custom) obj.common.custom = custom;
+ obj.native = {};
+ setObject(idDst, obj);
+ }
+}
+
+createAlias(aliasPath + '.' + aliasDevice, '', chromecastInstanz + chromecastDevice, '', 'channel', 'media', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ALBUM', 'ALBUM', chromecastInstanz + chromecastDevice + '.album', '', 'state', 'media.album', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ARTIST', 'ARTIST', chromecastInstanz + chromecastDevice + '.artist', '', 'state', 'media.artist', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.TITLE', 'TITLE', chromecastInstanz + chromecastDevice + '.title', '', 'state', 'media.title', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.NEXT', 'NEXT', chromecastInstanz + chromecastDevice + '.next', '', 'state', 'button.next', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PREV', 'PREV', chromecastInstanz + chromecastDevice + '.prev', '', 'state', 'button.prev', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PLAY', 'PLAY', chromecastInstanz + chromecastDevice + '.play', '', 'state', 'button.play', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PAUSE', 'PAUSE', chromecastInstanz + chromecastDevice + '.pause', '', 'state', 'button.pause', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STOP', 'STOP', chromecastInstanz + chromecastDevice + '.stop', '', 'state', 'button.stop', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STATE', 'STATE', chromecastInstanz + chromecastDevice + '.state', '', 'state', 'media.state', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME', 'VOLUME', chromecastInstanz + chromecastDevice + '.volume', '', 'state', 'level.volume', 'number');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME_ACTUAL', 'VOLUME_ACTUAL', chromecastInstanz + chromecastDevice + '.volume', '', 'state', 'value.volume', 'number');
From 2106720fe42254e3d551232e34e9d6640518665d Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:50:29 +0100
Subject: [PATCH 6/9] Create SqueezeBoxRPC_Alias.js
---
ioBroker/Blockly/SqueezeBoxRPC_Alias.js | 51 +++++++++++++++++++++++++
1 file changed, 51 insertions(+)
create mode 100644 ioBroker/Blockly/SqueezeBoxRPC_Alias.js
diff --git a/ioBroker/Blockly/SqueezeBoxRPC_Alias.js b/ioBroker/Blockly/SqueezeBoxRPC_Alias.js
new file mode 100644
index 00000000..4a5ccd44
--- /dev/null
+++ b/ioBroker/Blockly/SqueezeBoxRPC_Alias.js
@@ -0,0 +1,51 @@
+const aliasPath = 'alias.0.Media.LMS'; // ggfs. Anpassen
+const aliasDevice = 'SqueezePlay'; // ggfs. Anpassen
+//Ergibt alias.0.NSPanel_1.Media.SqueezeBoxRPC
+
+const squeezeBoxInstanz = 'squeezeboxrpc.0.Players.'; // Anpasssen, wenn nicht Instanz 0
+const squeezeBoxDevice = 'SqueezePlay'; // Anpassen an dein eigenes Device
+
+var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom;
+
+function createAlias(idDst, idName,idSrc, idRd, idType, idRole, idAliasType) {
+ if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
+ else {
+ var obj = {};
+ obj.type = idType;
+ obj.common = getObject(idSrc).common
+ obj.common.alias = {};
+ if(idRd) {
+ obj.common.alias.id = {};
+ obj.common.alias.id.read = idRd;
+ obj.common.alias.id.write = idSrc;
+ obj.common.read = true;
+ } else {
+ obj.common.alias.id = idSrc;
+ }
+ obj.common.type = idAliasType;
+ if(obj.common.read !== false && read) obj.common.alias.read = read;
+ if(obj.common.write !== false && write) obj.common.alias.write = write;
+ obj.common.name = idName;
+ obj.common.role = idRole;
+ obj.common.desc = idDst;
+ if(min !== undefined) obj.common.min = min;
+ if(max !== undefined) obj.common.max = max;
+ if(unit) obj.common.unit = unit;
+ obj.common.states = states;
+ if(custom && obj.common.custom) obj.common.custom = custom;
+ obj.native = {};
+ setObject(idDst, obj);
+ }
+}
+
+createAlias(aliasPath + '.' + aliasDevice + '.ALBUM', 'ALBUM', squeezeBoxInstanz + squeezeBoxDevice + '.Album', '', 'state', 'media.album', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.ARTIST', 'ARTIST', squeezeBoxInstanz + squeezeBoxDevice + '.Artist', '', 'state', 'media.artist', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.TITLE', 'TITLE', squeezeBoxInstanz + squeezeBoxDevice + '.Title', '', 'state', 'media.title', 'string');
+createAlias(aliasPath + '.' + aliasDevice + '.NEXT', 'NEXT', squeezeBoxInstanz + squeezeBoxDevice + '.btnForward', '', 'state', 'button.forward', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PREV', 'PREV', squeezeBoxInstanz + squeezeBoxDevice + '.btnRewind', '', 'state', 'button.reverse', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PLAY', 'PLAY', squeezeBoxInstanz + squeezeBoxDevice + '.state', '', 'state', 'media.state', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.PAUSE', 'PAUSE', squeezeBoxInstanz + squeezeBoxDevice + '.state', '', 'state', 'media.state', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STOP', 'STOP', squeezeBoxInstanz + squeezeBoxDevice + '.state', '', 'state', 'media.state', 'boolean');
+createAlias(aliasPath + '.' + aliasDevice + '.STATE', 'STATE', squeezeBoxInstanz + squeezeBoxDevice + '.Power', '', 'state', 'switch', 'number');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME', 'VOLUME', squeezeBoxInstanz + squeezeBoxDevice + '.Volume', '', 'state', 'level.volume', 'number');
+createAlias(aliasPath + '.' + aliasDevice + '.VOLUME_ACTUAL', 'VOLUME_ACTUAL', squeezeBoxInstanz + squeezeBoxDevice + '.Volume', '', 'state', 'value.volume', 'number');
From 1877b49b5bd2a57005a94bdafb20723f5b33acf5 Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:55:48 +0100
Subject: [PATCH 7/9] Create CardPower_Emulator_Skript.xml
---
.../Blockly/CardPower_Emulator_Skript.xml | 1965 +++++++++++++++++
1 file changed, 1965 insertions(+)
create mode 100644 ioBroker/Blockly/CardPower_Emulator_Skript.xml
diff --git a/ioBroker/Blockly/CardPower_Emulator_Skript.xml b/ioBroker/Blockly/CardPower_Emulator_Skript.xml
new file mode 100644
index 00000000..a7ec606a
--- /dev/null
+++ b/ioBroker/Blockly/CardPower_Emulator_Skript.xml
@@ -0,0 +1,1965 @@
+
+
+ Debug
+ dpValues
+ dpValuesMax
+ valueDirection
+ iconString
+ dpValueUnit
+ iconColors
+ j
+ vSpeed
+ outJSON
+ i
+ bat_loading
+ bat_temp
+
+
+ Debug
+
+
+ TRUE
+
+
+
+
+ * * * * *
+
+
+
+ 0_userdata.0.Test.CardPowerExample.DP2Value
+ FALSE
+
+
+ 1
+
+
+ 3.1234
+
+
+ ADD
+
+
+ 1
+
+
+
+
+ 4
+
+
+
+
+ 6
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ 0_userdata.0.Test.CardPowerExample.DP3Value
+ FALSE
+
+
+ 1
+
+
+ 3.1234
+
+
+ ADD
+
+
+ 1
+
+
+
+
+ 3
+
+
+
+
+ 4
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ 0_userdata.0.Test.CardPowerExample.DP4Value
+ FALSE
+
+
+ 1
+
+
+ 3.1234
+
+
+ ADD
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 6
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+ 0_userdata.0.Test.CardPowerExample.DP6Value
+ FALSE
+
+
+ 1
+
+
+ 3.1234
+
+
+ ADD
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 2
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ any
+
+
+
+ default
+
+
+ 0_userdata.0.Test.CardPowerExample.DP1Value
+
+
+
+
+ default
+
+
+ 0_userdata.0.Test.CardPowerExample.DP2Value
+
+
+
+
+ default
+
+
+ 0_userdata.0.Test.CardPowerExample.DP3Value
+
+
+
+
+ default
+
+
+ 0_userdata.0.Test.CardPowerExample.DP4Value
+
+
+
+
+ default
+
+
+ 0_userdata.0.Test.CardPowerExample.DP5Value
+
+
+
+
+ default
+
+
+ 0_userdata.0.Test.CardPowerExample.DP6Value
+
+
+
+
+ dpValues
+
+
+
+
+
+ val
+ 0_userdata.0.Test.CardPowerExample.DP1Value
+
+
+
+
+ val
+ 0_userdata.0.Test.CardPowerExample.DP2Value
+
+
+
+
+ val
+ 0_userdata.0.Test.CardPowerExample.DP3Value
+
+
+
+
+ val
+ 0_userdata.0.Test.CardPowerExample.DP4Value
+
+
+
+
+ val
+ 0_userdata.0.Test.CardPowerExample.DP5Value
+
+
+
+
+ val
+ 0_userdata.0.Test.CardPowerExample.DP6Value
+
+
+
+
+
+
+ dpValuesMax
+
+
+
+
+
+ 3
+
+
+
+
+ 7
+
+
+
+
+ 5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 4.6
+
+
+
+
+
+
+ valueDirection
+
+
+
+
+
+ both
+
+
+
+
+ in
+
+
+
+
+ in
+
+
+
+
+ out
+
+
+
+
+ both
+
+
+
+
+ out
+
+
+
+
+
+
+ iconString
+
+
+
+
+
+ battery-charging-60
+
+
+
+
+ solar-power-variant
+
+
+
+
+ wind-turbine
+
+
+
+
+ shape
+
+
+
+
+ transmission-tower
+
+
+
+
+ car
+
+
+
+
+
+
+ dpValueUnit
+
+
+
+
+
+ kW
+
+
+
+
+ kW
+
+
+
+
+ kW
+
+
+
+
+ kW
+
+
+
+
+ kW
+
+
+
+
+ kW
+
+
+
+
+
+
+ iconColors
+
+
+
+
+
+
+
+ j
+
+
+ 0
+
+
+
+
+ vSpeed
+
+
+ 1
+
+
+
+
+ outJSON
+
+
+ [
+
+
+
+
+ i
+
+
+ dpValues
+
+
+
+
+ iconColors
+
+
+ 10
+
+
+
+
+ j
+
+
+ 1
+
+
+ 1
+
+
+
+
+ vSpeed
+
+
+ 1
+
+
+
+
+
+
+
+ j
+
+
+
+
+ 1
+
+
+
+
+ i
+
+
+ MINUS
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 2
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 4
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 6
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LT
+
+
+ i
+
+
+
+
+ 0
+
+
+
+
+
+
+ i
+
+
+ MULTIPLY
+
+
+ 1
+
+
+ i
+
+
+
+
+ -1
+
+
+
+
+
+
+ valueDirection
+
+
+ out
+
+
+
+
+ bat_loading
+
+
+ FALSE
+
+
+
+
+
+
+
+
+
+
+ valueDirection
+
+
+ in
+
+
+
+
+ bat_loading
+
+
+ TRUE
+
+
+
+
+
+
+
+
+
+
+ GT
+
+
+ i
+
+
+
+
+
+ GET
+ FROM_START
+
+
+ dpValuesMax
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ i
+
+
+
+ GET
+ FROM_START
+
+
+ dpValuesMax
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ iconColors
+
+
+ DIVIDE
+
+
+ 1
+
+
+ MULTIPLY
+
+
+ 1
+
+
+ i
+
+
+
+
+ 10
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValuesMax
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+ EQ
+
+
+ valueDirection
+
+
+
+
+ out
+
+
+
+
+
+
+ vSpeed
+
+
+ iconColors
+
+
+
+
+
+
+ vSpeed
+
+
+ DIVIDE
+
+
+ 1
+
+
+ iconColors
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+ bat_temp
+
+
+ i
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ iconColors
+
+
+ MINUS
+
+
+ 10
+
+
+
+
+ 1
+
+
+ DIVIDE
+
+
+ 1
+
+
+ MULTIPLY
+
+
+ 1
+
+
+ i
+
+
+
+
+ 10
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValuesMax
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+ vSpeed
+
+
+ MINUS
+
+
+ 10
+
+
+
+
+ 1
+
+
+ iconColors
+
+
+
+
+
+
+
+
+ EQ
+
+
+ i
+
+
+
+
+ 0
+
+
+
+
+
+
+ vSpeed
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ 3
+
+
+
+
+ iconColors
+
+
+ MINUS
+
+
+ 10
+
+
+
+
+ 1
+
+
+ DIVIDE
+
+
+ 1
+
+
+ MULTIPLY
+
+
+ 1
+
+
+ i
+
+
+
+
+ 10
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValuesMax
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+
+
+ vSpeed
+
+
+ MINUS
+
+
+ 10
+
+
+
+
+ 1
+
+
+ iconColors
+
+
+
+
+
+
+
+
+ EQ
+
+
+ i
+
+
+
+
+ 0
+
+
+
+
+
+
+ vSpeed
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+ iconColors
+
+
+ DIVIDE
+
+
+ 1
+
+
+ MULTIPLY
+
+
+ 1
+
+
+ i
+
+
+
+
+ 10
+
+
+
+
+
+
+ 1
+
+
+ i
+
+
+
+
+
+
+ vSpeed
+
+
+ iconColors
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+ bat_loading
+
+
+
+
+ i
+
+
+ MINUS
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 2
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+ bat_temp
+
+
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 4
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ i
+
+
+ MINUS
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+ bat_temp
+
+
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 2
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ ADD
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 4
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValues
+
+
+
+
+ 6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LT
+
+
+ i
+
+
+
+
+ 0
+
+
+
+
+
+
+ i
+
+
+ MULTIPLY
+
+
+ 1
+
+
+ i
+
+
+
+
+ -1
+
+
+
+
+
+
+ valueDirection
+
+
+ out
+
+
+
+
+
+
+
+
+ valueDirection
+
+
+ in
+
+
+
+
+
+
+
+
+
+ EQ
+
+
+ valueDirection
+
+
+
+
+ in
+
+
+
+
+
+
+ iconColors
+
+
+ 0
+
+
+
+
+ vSpeed
+
+
+ 5
+
+
+
+
+
+
+
+
+ iconColors
+
+
+ 10
+
+
+
+
+ vSpeed
+
+
+ -5
+
+
+
+
+
+
+
+
+
+
+ EQ
+
+
+ i
+
+
+
+
+ 0
+
+
+
+
+
+
+ vSpeed
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 6
+
+
+
+
+ iconColors
+
+
+ DIVIDE
+
+
+ 1
+
+
+ MULTIPLY
+
+
+ 1
+
+
+ i
+
+
+
+
+ 10
+
+
+
+
+
+
+ 1
+
+
+
+ GET
+ FROM_START
+
+
+ dpValuesMax
+
+
+
+
+ 6
+
+
+
+
+
+
+
+
+ vSpeed
+
+
+ MINUS
+
+
+ 10
+
+
+
+
+ 1
+
+
+ DIVIDE
+
+
+ 1
+
+
+ iconColors
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+ outJSON
+
+
+
+
+
+ outJSON
+
+
+
+
+
+
+
+ { "id" :
+
+
+
+
+ j
+
+
+
+
+ , "value":
+
+
+
+
+ 1
+
+
+ 3.1234
+
+
+ i
+
+
+
+
+
+
+ , "unit": "
+
+
+
+
+
+ GET
+ FROM_START
+
+
+ dpValueUnit
+
+
+
+
+ j
+
+
+
+
+
+
+ " , "direction" : "
+
+
+
+
+ valueDirection
+
+
+
+
+ " , "icon" : "
+
+
+
+
+
+ GET
+ FROM_START
+
+
+ iconString
+
+
+
+
+ j
+
+
+
+
+
+
+ " , "iconColor" :
+
+
+
+
+ ROUND
+
+
+ 3.1
+
+
+ iconColors
+
+
+
+
+
+
+ , "speed" :
+
+
+
+
+ ROUND
+
+
+ 3.1
+
+
+ DIVIDE
+
+
+ 1
+
+
+ vSpeed
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+ LT
+
+
+ j
+
+
+
+
+ 6
+
+
+
+
+
+
+ outJSON
+
+
+
+
+
+ outJSON
+
+
+
+
+ ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outJSON
+
+
+
+
+
+ outJSON
+
+
+
+
+ ]
+
+
+
+
+
+
+
+ 0_userdata.0.Test.CardPowerExample.cardPower_1_JSON
+ FALSE
+
+
+ outJSON
+
+
+
+
+
+
+ Debug
+
+
+
+
+ log
+
+
+ test
+
+
+ outJSON
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From fdd7d971786df401da2961422c6d56b9957fafcc Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:56:50 +0100
Subject: [PATCH 8/9] Create CardChart.xml
---
ioBroker/Blockly/CardChart.xml | 704 +++++++++++++++++++++++++++++++++
1 file changed, 704 insertions(+)
create mode 100644 ioBroker/Blockly/CardChart.xml
diff --git a/ioBroker/Blockly/CardChart.xml b/ioBroker/Blockly/CardChart.xml
new file mode 100644
index 00000000..77bd19bb
--- /dev/null
+++ b/ioBroker/Blockly/CardChart.xml
@@ -0,0 +1,704 @@
+
+
+ sourceDP
+ targetDP
+ AxisXHours
+ AxisXTicks
+ Debug
+ flux
+ AxisTickCounter
+ i
+ queryStunde
+ queryOutput
+ queryValue
+ AxisTicksBool
+ result
+
+
+ Example String
+
+
+ 7^2:00~7~6^4:00~6~7^6:00~0~7^8:00~5~1^10:00~1~10^12:00~5~6^14:00~8
+
+
+ Start Parameter
+
+
+ sourceDP
+
+
+ sonoff.0.DZG_DWSB20_2H.DZG_Leistung_Aktuell
+
+
+
+
+ targetDP
+
+
+ 0_userdata.0.Test.cardChart.txt
+
+
+
+
+ AxisXHours
+
+
+ 24
+
+
+
+
+ AxisXTicks
+
+
+ 5
+
+
+
+
+ Debug
+
+
+ FALSE
+
+
+
+
+ Ende Parameter
+
+
+
+ ne
+
+
+
+ default
+
+
+ sourceDP
+
+
+
+
+ flux
+
+
+
+
+
+ from(bucket: "iobroker")
+
+
+
+
+ |> range(start: -24h, stop: now())
+
+
+
+
+ |> filter(fn: (r) => r["_measurement"] == "
+
+
+
+
+ sourceDP
+
+
+
+
+ ")
+
+
+
+
+ |> filter(fn: (r) => r["_field"] == "value")
+
+
+
+
+ |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
+
+
+
+
+ |> yield(name: "mean")
+
+
+
+
+
+
+
+ influxdb.1
+ query
+
+ TRUE
+
+
+
+
+
+ flux
+
+
+
+
+ AxisTickCounter
+
+
+ 0
+
+
+
+
+ i
+
+
+ 1
+
+
+ 1
+
+
+
+
+ 24
+
+
+ AxisXHours
+
+
+
+
+ 1
+
+
+
+
+ AxisTickCounter
+
+
+ 1
+
+
+ 1
+
+
+
+
+ queryStunde
+
+
+
+ h
+
+
+
+
+ result.0.0._value
+
+
+
+
+
+ result.0.
+
+
+
+
+ i
+
+
+
+
+ ._time
+
+
+
+
+
+
+ TRUE
+
+
+ result
+
+
+
+
+
+
+
+
+
+
+ queryValue
+
+
+ ROUND
+
+
+ 3.1
+
+
+ DIVIDE
+
+
+ 1
+
+
+
+
+
+
+ result.0.0._value
+
+
+
+
+
+ result.0.
+
+
+
+
+ i
+
+
+
+
+ ._value
+
+
+
+
+
+
+ TRUE
+
+
+ result
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+
+
+ EQ
+
+
+ i
+
+
+
+
+ 1
+
+
+
+
+
+
+ AxisTicksBool
+
+
+ TRUE
+
+
+
+
+
+
+ EQ
+
+
+ AxisTickCounter
+
+
+
+
+ AxisXTicks
+
+
+
+
+
+
+ AxisTicksBool
+
+
+ TRUE
+
+
+
+
+ AxisTickCounter
+
+
+ 1
+
+
+
+
+
+
+
+
+ AxisTicksBool
+
+
+ FALSE
+
+
+
+
+
+
+
+
+
+ EQ
+
+
+ i
+
+
+
+
+ AxisXHours
+
+
+
+
+
+
+
+
+
+ AxisTicksBool
+
+
+
+
+ queryOutput
+
+
+
+
+
+ queryOutput
+
+
+
+
+ queryValue
+
+
+
+
+ ^
+
+
+
+
+ queryStunde
+
+
+
+
+ :00
+
+
+
+
+
+
+
+
+ queryOutput
+
+
+
+
+
+ queryOutput
+
+
+
+
+ queryValue
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AxisTicksBool
+
+
+
+
+ queryOutput
+
+
+
+
+
+ queryOutput
+
+
+
+
+ queryValue
+
+
+
+
+ ^
+
+
+
+
+ queryStunde
+
+
+
+
+ :00
+
+
+
+
+ ~
+
+
+
+
+
+
+
+
+ queryOutput
+
+
+
+
+
+ queryOutput
+
+
+
+
+ queryValue
+
+
+
+
+ ~
+
+
+
+
+
+
+
+
+
+
+
+
+ EQ
+
+
+ i
+
+
+
+
+ AxisXHours
+
+
+
+
+
+
+ queryStunde
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+ Debug
+
+
+
+
+ log
+
+
+ test
+
+
+
+
+
+ i
+
+
+
+
+ -
+
+
+
+
+ queryValue
+
+
+
+
+ -
+
+
+
+
+ queryStunde
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+ targetDP
+
+
+
+
+ TRUE
+
+
+ queryOutput
+
+
+
+
+ 0
+
+
+
+
+
+
+ Debug
+
+
+
+
+ log
+
+
+ test
+
+
+ queryOutput
+
+
+
+
+
+
+ queryOutput
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 4ce76ea5ef4fd95187f07b2d8842306b641f4cd9 Mon Sep 17 00:00:00 2001
From: kuckuckmann <99131208+kuckuckmann@users.noreply.github.com>
Date: Tue, 27 Dec 2022 13:57:41 +0100
Subject: [PATCH 9/9] Create PopupNotify_layout2_Emulator.xml
---
.../Blockly/PopupNotify_layout2_Emulator.xml | 838 ++++++++++++++++++
1 file changed, 838 insertions(+)
create mode 100644 ioBroker/Blockly/PopupNotify_layout2_Emulator.xml
diff --git a/ioBroker/Blockly/PopupNotify_layout2_Emulator.xml b/ioBroker/Blockly/PopupNotify_layout2_Emulator.xml
new file mode 100644
index 00000000..feebde07
--- /dev/null
+++ b/ioBroker/Blockly/PopupNotify_layout2_Emulator.xml
@@ -0,0 +1,838 @@
+
+
+ 0_userdata_Path
+ Sensor_Temperatur
+ Sensor_Lutfeuchte
+ Sensor_Luftdruck
+ Button1Text
+ Button2Text
+ HeadingTextColor
+ TextColor
+ Button1TextColor
+ Button2TextColor
+ IconColor
+ i
+ HeadingText
+ Icon
+ FontSize
+ Text
+
+
+ 0_userdata_Path
+
+
+ 0_userdata.0.NSPanel.1.popupNotify.
+
+
+
+
+ Sensor_Temperatur
+
+
+ val
+ deconz.0.Sensors.65.temperature
+
+
+
+
+ Sensor_Lutfeuchte
+
+
+ val
+ deconz.0.Sensors.64.humidity
+
+
+
+
+ Sensor_Luftdruck
+
+
+ val
+ deconz.0.Sensors.66.pressure
+
+
+
+
+ Button1Text
+
+
+
+
+
+
+
+ Button2Text
+
+
+ OK
+
+
+
+
+ Color Picker für RGB565
+
+
+ http://www.barth-dev.de/online/rgb565-color-picker/
+
+
+ HeadingTextColor
+
+
+ 65535
+
+
+
+
+ TextColor
+
+
+ 65535
+
+
+
+
+ Button1TextColor
+
+
+ 2016
+
+
+
+
+ Button2TextColor
+
+
+ 63488
+
+
+
+
+ IconColor
+
+
+ 2000
+
+
+
+
+ Zähler für Loop
+
+
+ i
+
+
+ 1
+
+
+
+
+ Überschrift
+
+
+ HeadingText
+
+
+
+
+
+ Zeit
+
+
+
+
+ Temperatur
+
+
+
+
+ Luftfeuchte
+
+
+
+
+ Luftdruck
+
+
+
+
+
+
+ Icons
+
+
+ Icon
+
+
+
+
+
+ clock
+
+
+
+
+ thermometer
+
+
+
+
+ water-percent
+
+
+
+
+ car-speed-limiter
+
+
+
+
+
+
+ Font 0 - Default - Size 24 (No Icons, Support for various special chars from different langs)
+
+
+ Font 1 - Size 32 (Icons and limited chars)
+
+
+ Font 2 - Size 32 (No Icons, Support for various special chars from different langs)
+
+
+ Font 3 - Size 48 (Icons and limited chars)
+
+
+ Font 4 - Size 80 (Icons and limited chars)
+
+
+ Font 5 - Size 128 (ascii only)
+
+
+ FontSize
+
+
+
+
+
+ 4
+
+
+
+
+ 4
+
+
+
+
+ 4
+
+
+
+
+ 4
+
+
+
+
+
+
+ Text oder Sensordaten
+
+
+ Text
+
+
+
+
+
+
+
+
+ hh:mm
+
+
+
+
+
+
+
+
+
+ Sensor_Temperatur
+
+
+
+
+ °C
+
+
+
+
+
+
+
+
+
+ Sensor_Lutfeuchte
+
+
+
+
+ %
+
+
+
+
+
+
+
+
+
+ Sensor_Luftdruck
+
+
+
+
+ hPa
+
+
+
+
+
+
+
+
+ */5 * * * * *
+
+
+
+ SET
+ FROM_START
+
+
+ Text
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ hh:mm
+
+
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyHeading
+
+
+
+
+
+
+ TRUE
+
+
+
+ GET
+ FROM_START
+
+
+ HeadingText
+
+
+
+
+ i
+
+
+
+
+
+
+ 0
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyText
+
+
+
+
+
+
+ TRUE
+
+
+
+ GET
+ FROM_START
+
+
+ Text
+
+
+
+
+ i
+
+
+
+
+
+
+ 0
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyButton1Text
+
+
+
+
+
+
+ TRUE
+
+
+ Button1Text
+
+
+
+
+ 0
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyButton2Text
+
+
+
+
+
+
+ TRUE
+
+
+ Button2Text
+
+
+
+
+ 0
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyIcon
+
+
+
+
+
+
+ TRUE
+
+
+
+ GET
+ FROM_START
+
+
+ Icon
+
+
+
+
+ i
+
+
+
+
+
+
+ 0
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyFontIdText
+
+
+
+
+
+
+ TRUE
+
+
+
+ GET
+ FROM_START
+
+
+ FontSize
+
+
+
+
+ i
+
+
+
+
+
+
+ 0
+
+
+
+
+ Farben
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyHeadingColor
+
+
+
+
+
+
+ TRUE
+
+
+ HeadingTextColor
+
+
+
+
+ 0
+
+
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyTextColor
+
+
+
+
+
+
+ TRUE
+
+
+ TextColor
+
+
+
+
+ 0
+
+
+
+
+ Zum Schuss InternalName (Trigger)
+
+
+ false
+ FALSE
+
+
+ Object ID
+
+
+
+
+
+ 0_userdata_Path
+
+
+
+
+ popupNotifyInternalName
+
+
+
+
+
+
+ TRUE
+
+
+
+ GET
+ FROM_START
+
+
+ HeadingText
+
+
+
+
+ i
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+ EQ
+
+
+ i
+
+
+
+
+
+
+ HeadingText
+
+
+
+
+
+
+
+
+ i
+
+
+ 1
+
+
+
+
+
+
+ i
+
+
+ 1
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+