-
-
Notifications
You must be signed in to change notification settings - Fork 190
ioBroker ALIAS Definitionen
Seite befindet sich noch im Aufbau
Sollte aktuell ein Alias nicht vollständig beschrieben werden, dann gerne eine Frage am Ende des nachfolgenden Thread stellen: https://forum.iobroker.net/topic/50888/sonoff-nspanel
Welche Hilfsmittel werden zur Erstellung eines Alias benötigt?:
Der "Geräte verwalten"-Adapter für die meisten Alias-Typen:
Der "Alias-Manager"-Adapter für spezielle Alias-Typen, wie dem Alias "Media":
Ich habe die zwei Adapter installiert. Wie bekomme ich die in das ioBroker-Menü:
Über das Stift-Symbol im ioBroker-Hauptmenü lassen sich die Adapter individuell für jeden Benutzer ein- oder ausschalten.
Es sollte ein Haken bei Geräte und Alias-Manager gesetzt sein.
Was sind Aliase:
Aliase (Pseudonyme) sind die virtuellen Zustandsobjekte, die mit realen Zuständen (Datenpunkten) verknüpft sind.
Warum benötige ich im TS-Skript überhaupt Aliase und keine Datenpunkte?
Das TS-Script für das Sonoff NSPanel ist so aufgebaut, dass eigentlich jeder Adapter zur Steuerung benutzt werden kann. Hierbei haben die Entwickler von Adaptern für gleiche Funktionen unterschiedliche Namen verwendet:
Beispiel:
- Sonoff-Adapter: .power (aus Tasmota übertragen)
- MQTT-Adapter: .power (aus Tasmota übertragen)
- Shelly-Adapter: .switch
- KNX-Adapter: .switch
- Deconz-Adapter: .on
- etc.
Also immer der Wunsch, einen Zustand eines Aktors mit true/false zu verändern.
Innerhalb der Licht-Adapter wird das später noch deutlicher
Der Alias benötigt also anstatt .Power oder .Switch oder .On immer nur ein .SET, damit der Zustand des Schalt-Aktor's unabhängig vom installierten Adapter geschaltet werden kann. In diesem Fall meldet der im Skript eingebundene Alias ein true oder false in den Alias-Datenpunkt .SET und reicht den Zustandswert an den zugewiesenen spezifischen Adapter-Datenpunkt (ganz egal welcher Typ erwartet wird) weiter.
Zunächst sollt man sich überlegen, welche Aliase nur für ein bestimmtes NSPanel gelten sollen oder für mehrere NSPanels oder sogar innerhalb anderer Visualisierungsarten z.B. ioBroker VIS mitverwendet werden sollen. Dann kann man die Alias Struktur entsprechend mit Ordnern und Unterordnern verfeinern. Das Bürolicht soll z.B. nur über NSPanel_1 geschaltet werden, aber nicht über NS_Panel_2. Das Wetter hingegen ist für alle NSPanel gleich.
Der erste Schritt in der Alias Erstellung mit dem "Geräte verwalten"-Adapter ist fast immer der gleiche.
Es wird über die "+" Schaltfläche folgender Dialog aufgeschaltet:
Jetzt gibst vergibst du einen "sprechenden Namen" für den Alias in der Zeile "Gerätename" und wählst einen der nachfolgenden "Alias-Typen" unter Gerätetyp aus (Auswahlliste wird aufgeschaltet und beinhaltet auch noch weitere Typen als im Bild gezeigt (Momentaufnahme)):
Achtung:
Nicht jeder Gerätetyp (Alias-Typ) funktioniert mit dem NSPanel, sondern nur die, die entweder im weiteren Verlauf benannt sin, oder die im Header des TypeScript definiert sind.
Die Zeilen Funktion und Raum können ebenfalls ausgewählt werden, haben jedoch keinen Einfluss auf die Funktionalität des NSPAnel's
siehe auch das Beispiel zur vollständigen Integration der cardAlarm in den ioBroker:
https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker---FAQ-&-Anleitungen#2-alarm-page
Der Alias "Dimmer" hat 2 relevante Eigenschaften.
- Schalter (an/aus) über Adapter-Datenpunkte on, switch, power, etc.
- Helligkeit (dunkel/hell) über Adapter-Datenpunkte level, brightness, bri, etc.
Im Beispiel ist eine dimmbare Deckenbeleuchtung über den DeConz-Adapter (Zigbee)
Der Schalter im DeConz wird über den Datenpunkt "on" (true/false), d.h Datentyp "boolean" gesteuert. Die Helligkeit wird im Deconz-Adapter über "level" 0-100 oder "bri" 0-255 gesteuert. Für uns bietet sich also der Datenpunkt level an, da dieser bereits die Helligkeit in % von 0% bis 100% beinhaltet. Jedoch könnten wir auch mit dem Datentyp bri arbeiten und im TypeScript die Umrechnung von 255 (absolut) auf 100 (%) parametrieren.
Der Dimmer kann in einer cardEntities oder in einer cardGrid platziert werden. (Nachfolgende Abb. cardEntities):
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Dimmer an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des DeConz-Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung.
Der Schaltzustand (Lampe an/aus) kann direkt aus der cardEntities oder carGrid erfolgen. Für die Regelung der Helligkeit hat der Alias-Gerätetyp "Dimmer" bereits eine Unterseite (siehe nachfolgende Abb.). Diese kann über einen Klick auf den Dimmer-Bezeichner (in diesem Fall "Deckenbeleuchtung") aufgeschaltet werden:
Das zugehörige PageItem im TypeScript:
Mit dem Parameter "name" legen wir den Anzeigenamen fest.
Mit dem Parameter "interpolateColor" (optional), soll die abgebildete Lampe (Icon) den An/Aus und die Helligkeit emulieren.
Es können noch weitere Parameter übergeben werden:
- icon
- onColor
- offColor
- minValueBrightness (Default = 0)
- maxValueBrightness (Default = 100; im Beispiel mit dem Datenpunkt "bri" also 255)
Der Alias "Farbtemperatur" hat 3 relevante Eigenschaften.
- Schalter (an/aus) über Adapter-Datenpunkte on, switch, power, etc.
- Helligkeit (dunkel/hell) über Adapter-Datenpunkte level, brightness, bri, etc.
- Farbtemperatur (K = Kelvin) über Adapter-Datenpunkte ct, colortemp, etc.
Der Alias "Farbtemperatur" kann in einer cardEntities oder in einer cardGrid platziert werden. (Nachfolgende Abb. cardEntities):
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Farbtemperatur an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung.
Der Schaltzustand (Lampe an/aus) kann direkt aus der cardEntities oder carGrid erfolgen. Für die Regelung der Helligkeit und CT hat der Alias-Gerätetyp "Farbtemperatur" bereits eine Unterseite (siehe nachfolgende Abb.). Diese kann über einen Klick auf den Bezeichner (in diesem Fall "Farbtemperatur") aufgeschaltet werden:
Das zugehörige PageItem im TypeScript:
Mit dem Parameter "name" legen wir den Anzeigenamen fest.
Mit dem Parameter "interpolateColor" (optional), soll die abgebildete Lampe (Icon) den An/Aus und die Helligkeit emulieren.
Es können noch weitere Parameter übergeben werden:
- icon
- onColor
- offColor
- minValueBrightness (Default = 0)
- maxValueBrightness (Default = 100; im Beispiel mit dem Datenpunkt "bri" also 255)
- minValueColorTemp (z.B. 500 - in Abhängigkeit des jeweiligen Adapters)
- maxValueColorTemp: (z.B. 6500 - in Abhängigkeit des jeweiligen Adapters)
Hinweis: Es kann auch der HUE-CT verwendet werden
Der Alias "Fenster" hat 1 relevante Eigenschaft.
- Zustand (offen/geschlossen) über Adapter-Datenpunkte open, etc.
Darstellung in einer "cardGrid"
Darstellung in einer "cardEntities"
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Fenster an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt den Datenpunkt des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Das zugehörige PageItem im TypeScript:
Der Alias "Feuchtigkeit" hat 1 relevante Eigenschaft.
- Zustand (Sensorwert)
Im Beispiel ist ein Homatic IP Sensor über den hmip-Adapter (Funk). Es kann aber auch jeder andere Sensor (z.B. Zigbee oder WLAN) oder ein Datenpunkt aus einem Wetter-Adapter verwendet werden.
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Feuchtigkeit an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Das zugehörige PageItem im TypeScript:
Folgende Parameter können verwendet werden:
- name: legt den Anzeigenamen fest
- icon: Symbol
- unit: Einheit der Luftfeuchte
- onColor: Farbe des Icons
<PageItem>{ id: "alias.0.NSPanel_1.TestFeuchtigkeit", name: "Luftfeuchte außen", icon: "water-percent", unit: "%H", onColor: White}
Hinweis
Alternativ kann auch der Alias-Typ "Info" verwendet werden.
Der Alias Geräte-Typ HUE-Licht funktioniert mit und ohne dem Wert "HUE". Wenn der Datenpunkt .HUE nicht vorhanden ist, wird durch das TypeScript automatisch eine CT (ColorTemperature-Steuerung emuliert)
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ HUE-Licht an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Der Schaltzustand (Lampe an/aus) kann direkt aus der cardEntities oder carGrid erfolgen. Für die Regelung der Helligkeit, Farbtemperatur und (wenn vorhanden) Farbe hat der Alias-Gerätetyp "HUE-Licht" bereits eine Unterseite (siehe nachfolgende Abb.). Diese kann über einen Klick auf den Bezeichner aufgeschaltet werden:
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Info an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Beispiel für das PageItem
<PageItem>{ id: "alias.0.NSPanel_1.TestInfo", name: "Windstärke", icon: "wind-power-outline", offColor: MSRed, onColor: MSGreen, unit: "bft", minValue: 0, maxValue: 12, interpolateColor: true, useColor: true }
Parameter name: icon: offcolor: oncolor: unit: minValue: maxValue: interpolateColor: useColor:
Und die zugehörige Detailseite
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Jalousie an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Beispiel für das PageItem:
<PageItem>{ id: "alias.0.NSPanel_1.TestBlind", onColor: White, name: "IKEA Fyrtur", secondRow: "Hier Text für 2. Zeile"},
Bereits in der FAQ & Anleitung beschrieben: https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker---FAQ-&-Anleitungen#8-rolladen--jalousie--shutter
Analog zum Alias "Lautstärkegruppe", jedoch mit dem Alias-Gerätetypen "Lautstärke"
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ HUE-Licht an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Das zugehörige PageItem im TypeScript:
Parameter:
name: Vom Alias abweichender Name
offColor: wenn Muted
onColor: wenn nicht Muted
minValue: Minimale Lautstärkewert (Default 0)
maxValue: Minimale Lautstärkewert (Default 100)
Zur Steuerung von Leuchtmitteln ohne Farbtemperatur oder Farbeffekten (Alternativ kann auch Socket verwendet werden).
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Licht an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Der Alias-Medien für die cardMedia lässt sich mit dem Geräte-Manager nicht erstellen. Auch mit dem Alias-Manager unter "Automatisch erstellen" aus einem Player-Pfad ist das je nach Adapter eher eine Zufallsproduktion.
Es gibt von britzelpuf bereits einen noch offenen github-Issue: https://github.com/ioBroker/ioBroker.devices/issues/152 seit dem 17.03.2022
Der Alias gibt aktuell nur einen .ACTUAL her. Das ist jedoch für einen Media-Player definitiv zu wenig.
Daher bitte eines der nachfolgenden Skripte (je eingesetzten Adaptertyp) nutzen. In der Javascript Instanz muss "Kommando SetObject erlauben" aktiviert werden. Die Struktur sieht im Gerätemanager danach etwa so aus und sollte vernachlässigt werden, da der ALIAS dennoch funktioniert!
Obwohl das alles Aliase vom Typ Medien sind, sehen bis auf zwei alle anderen nicht korrekt aus, sind aber in der Objektstruktur korrekt und funktionieren auch mit dem NSPanel
Skript zum Anlegen eines Spotify-Premium - media-Alias (ab Version 3.3.2)
Spoiler: JavaScript Code für Erstellung eines Spotify-Premium-Alias
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');
Anleitung:
- Neues Skript (JavaScript JS) anlegen
- Code kopieren und einfügen
- Skript aktivieren und ausführen
- Danach wieder Deaktivieren
Skript zum Anlegen eines Alexa2 - media-Alias
Spoiler: JavaScript Code für Erstellung eines Alexa2-Alias
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');
Anleitung:
- Neues Skript (JavaScript JS) anlegen
- Code kopieren und einfügen
- Skript aktivieren und ausführen
- Danach wieder Deaktivieren
Skript zum Anlegen eines Sonos - media-Alias (ab Version 3.3.2)
Spoiler: JavaScript Code für Erstellung eines Sonos-Alias
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');
Anleitung:
- Neues Skript (JavaScript JS) anlegen
- Code kopieren und einfügen
- Skript aktivieren und ausführen
- Danach wieder Deaktivieren
Skript zum Anlegen eines Chromecast - media-Alias (ab Version 3.3.2)
Spoiler: JavaScript Code für Erstellung eines Chrome-Alias
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');
Anleitung:
- Neues Skript (JavaScript JS) anlegen
- Code kopieren und einfügen
- Skript aktivieren und ausführen
- Danach wieder Deaktivieren
Skript zum Anlegen eines SqueezeBoxRPC - media-Alias (ab Version 3.4.0.6)
Spoiler: JavaScript Code für Erstellung eines SqueezeBoxRPC -Alias
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');
Anleitung:
- Neues Skript (JavaScript JS) anlegen
- Code kopieren und einfügen
- Skript aktivieren und ausführen
- Danach wieder Deaktivieren
Jetzt kommt der spezielle Teil für diesen Adapter. Hierfür sind noch weitere Einstellungen erforderlich:
- Alias Manager öffnen, den neu erstellten Alias auswählen und unter "common.role" media eingeben
- unter Objekte zu den Aliasen (alias.0.) gehen:
Bei **PAUSE **und **PLAY **mit dem Stiftsymbol am Ende der Zeile den Dialog aufschalten und 3. Tab Alias die Konvertierungsfunktionen einschalten und analog der nachfolgenden Bilder anpassen (Konverter beim Lesen):
Jetzt sollte der spueezeboxrpc korrekt arbeiten
Der Alias RGB-Licht wird verwendet, wenn als Color Datenpunkte RED, GREEN, BLUE und WHITE vorliegen
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ RGB-Licht an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Für das Beispiel standen leider keine echten Adapter-Datenpunkte zur Verfügung, daher die Darstellung in 0_userdata.0...
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Das zugehörige PageItem im TypeScript:
Parameter:
name: Vom Alias abweichender Name
offColor: abweichende Farbe für aus
onColor: abweichende Farbe für an
minValueBrightness: Minimale Helligkeit (Default 0)
maxValueBrightness: Minimale Maxiamale Helligkeit (Default 100)
minValueColorTemp: Minimale Farbtemperatur je nach Leuchtmittel/Adapter (z.B. 500K)
maxValueColorTemp: Maximale Farbtemperatur je nach Leuchtmittel/Adapter (z.B. 6500K)
interpolateColor: Errechnet den Farbton und weist diesen dem Icon zu (Beispiel Pink)
Mit klick auf den Bezeichner wird das popUpLight aufgeschaltet:
Der Alias RGB-Licht wird verwendet, wenn als Color Datenpunkt (RGB) im Hexadezimal-Format (z.B. #7dff7e) vorliegt.
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ RGB-Licht an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Für das Beispiel standen leider keine echten Adapter-Datenpunkte zur Verfügung, daher die Darstellung in 0_userdata.0...
Alternativ kann dieser Alias auch via CIE, d.h über den XY Parameter (z.B. beim deConz-Adapter) gesteuert werden:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Das zugehörige PageItem im TypeScript:
Parameter:
name: Vom Alias abweichender Name
offColor: abweichende Farbe für aus
onColor: abweichende Farbe für an
minValueBrightness: Minimale Helligkeit (Default 0)
maxValueBrightness: Minimale Maxiamale Helligkeit (Default 100)
minValueColorTemp: Minimale Farbtemperatur je nach Leuchtmittel/Adapter (z.B. 500K)
maxValueColorTemp: Maximale Farbtemperatur je nach Leuchtmittel/Adapter (z.B. 6500K)
interpolateColor: Errechnet den Farbton und weist diesen dem Icon zu (Beispiel Grün)
colormode: "xy" oder "rgb" (default) zur Steuerung der CIE XY Color-Datenpunkte
Mit klick auf den Bezeichner wird das popUpLight aufgeschaltet:
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Schieberegler an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Das zugehörige PageItem im TypeScript:
<PageItem>{ id: "alias.0.NSPanel_1.Dimmode_BrightnessDay", name: "Brightness Tag", icon: "brightness-5", offColor: MSYellow, onColor: MSYellow, useColor: true, minValue: 5, maxValue: 10}
Parameter:
name: Vom Alias abweichender Name
offColor: abweichende Farbe für aus
onColor: abweichende Farbe für an
icon: zu visualisierendes Icon
minValue: Minimaler Sliderwert
maxValue: Maximaler Sliderwert
usecolor:
Alternativ kann der Alias Licht verwendet werden!
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Steckdose an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Das zugehörige PageItem im TypeScript:
<PageItem>{ id: "alias.0.NSPanel_1.Luftreiniger", icon: "power", icon2: "power",offColor: MSRed, onColor: MSGreen}
Parameter:
name: Vom Alias abweichender Name
offColor: abweichende Farbe für aus
onColor: abweichende Farbe für an
icon: zu visualisierendes Icon für On
icon2: zu visualisierendes Icon für Off
Beschreibung für den Alias Taste folgt...
Beschreibung für den Alias Tastensenso folgt...
Beschreibung für den Alias Temperatur folgt...
Zunächst legen wir analog "Schritt 1" (Tab Allgemein) einen Alias vom Typ Thermostat an. Im "Schritt 2" (Tab Zustände) weisen wir jetzt die Datenpunkte des Adapters zu:
Im unteren Teil können ebenfalls Indikatoren eingeblendet werden:
z.B.
oder
etc.
Wenn der Thermostat über Mode verfügt und dieser auch genutzt werden soll:
Mode wird über externe Datenpunkte gesteuert. Hierzu legst du dir unter 0_userdate.0. einen Ordner deiner Wahl an. In diesem Ordner können jetzt bis zu 5 Datenpunkte (Alle vom Typ boolean (true/false)) angelegt werden:
- AUTOMATIC
- MANUAL
- PARTY
- VACATION
- BOOST
Im Alias können "BOOST" und "PARTY" (sofern gewünscht) bereits den neu erstellten Datenpunkten zugewiesen werden:
Die Datenpunkte AUTOMATIC, MANUAL und VACATION können nicht sofort zugewiesen werden, da die ALIAS-Definition diese Objekte nicht vorsieht. In diesem Fall kannst du diese selbst hinzufügen und im Anschluss deine erstellten Datenpunkten zuordnen:
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
Es müssen nicht alle 5 Modi vorhanden sein. Das Skript liest die vorhandenen Modi ein und verarbeitet auch nur diese
Insgesamt stehen Icons im unteren Bereich zur Verfügung. Somit ist es nicht möglich 5 Modi-Icons und 7 Indikatoren-Icons gleichzeitig zu visualisieren. Die Modi (falls im Alias definiert) werden zuerst visualisiert (vorne) und dann, falls verfügbar mit Indikatoren (sofern im Alias definiert) auf insgesamt 8 Icons aufgefüllt.
Das zugehörige PageItem im TypeScript:
Parameter:
name: Vom Alias abweichender Name
minValue: Minimaltemperatur Beispiel 5°C = 50
maxValue: Minimaltemperatur Beispiel 30°C = 300
Ab Release 3.7.0
Für den Timer (Stopp-Uhr) gibt es weder im Geräte-Manager, noch im Alias-Manager einen vorgefertigten ALIAS Gerätetypen. Daher muss dieser eigenhändig erstellt werden.
Objekte
Der Timer greift auf selbsterstellte Datenpunkte zurück, welche (analog Beispiel) wie folgt angelegt werden müssen.
- 0_userdata.0...Timer_1.ACTUAL --> number --> Nimmt die eingestellte Zeit aus dem NSPanel in Sekunden auf und wird bei Ausführung durch das externe Script dekrementiert.
- 0_userdata.0...Timer_1.STATE --> string --> Erhält den Status vom Blockly und vom NSPanel
Korrekte Erstellung des ALIAS level.timer
Direkt unter Objekte --> alias.0. mit dem "+" die gewünschte Verzeichnisstruktur erzeugen
Dann mit dem "+" in der Menüleiste den Channel erzeugen:
Dann die States für ACTUAL dazu anlegen:
und die States für STATE anlegen:
PageItem zum Beispiel:
{ id: "alias.0.NSPanel_1.Countdown", icon: "timer-outline", name: "Timer", onColor: White}
Blockly
Der Timer wird über dieses Script-Beispiel (separates und Blockly) gesteuert
Spoiler: Blockly Script
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="QPiqoyWT$%Cp)OZ=|`*W">vSTATE</variable>
<variable id="!E]!o]+#iwtI}R=X+,zV">vACTUAL</variable>
<variable id="#BYGZV@hvwAL/]L2%/8w">sec_timer</variable>
<variable type="interval" id="Intervall">Intervall</variable>
</variables>
<block type="variables_set" id="XV2H4i,jWn`z+)|k#NJw" x="38" y="-263">
<field name="VAR" id="QPiqoyWT$%Cp)OZ=|`*W">vSTATE</field>
<value name="VALUE">
<block type="text" id="r,7fA;o:e.|28/,@0]JH">
<field name="TEXT">0_userdata.0.Timer.NSPanel.1.Countdown.Zustand</field>
</block>
</value>
<next>
<block type="variables_set" id="r4Cw8qj}45yA4j7D(^B-">
<field name="VAR" id="!E]!o]+#iwtI}R=X+,zV">vACTUAL</field>
<value name="VALUE">
<block type="text" id="nRXWb#VRyJS5cXNbhq0y">
<field name="TEXT">0_userdata.0.Timer.NSPanel.1.Countdown.Sekunden</field>
</block>
</value>
<next>
<block type="variables_set" id="57{xGHam)5G*~)???W)5">
<field name="VAR" id="#BYGZV@hvwAL/]L2%/8w">sec_timer</field>
<value name="VALUE">
<block type="get_value_var" id="s9stp?b253SRZwZo*b`t">
<field name="ATTR">val</field>
<value name="OID">
<shadow type="text" id="K,Lb1bBP41R.OE[NS)i1">
<field name="TEXT"></field>
</shadow>
<block type="variables_get" id="uqn`Azeg-~BoGAP`6l7c">
<field name="VAR" id="!E]!o]+#iwtI}R=X+,zV">vACTUAL</field>
</block>
</value>
</block>
</value>
<next>
<block type="on_ext" id="KTTXX_aR/l#vo.Oy!god">
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
<field name="CONDITION">ne</field>
<field name="ACK_CONDITION"></field>
<value name="OID0">
<shadow type="field_oid" id="[~]6MakRk81y;6T=D#E1">
<field name="oid">default</field>
</shadow>
<block type="text" id="99{OsQ*le2{H2clp=,[^">
<field name="TEXT">0_userdata.0.Timer.NSPanel.1.Countdown.Zustand</field>
</block>
</value>
<statement name="STATEMENT">
<block type="logic_switch_case" id="*DcmKGH^MzH`@|}$)`Vi">
<mutation xmlns="http://www.w3.org/1999/xhtml" default="1"></mutation>
<value name="CONDITION">
<block type="on_source" id="Kv#`7##ZlSfAaV9U*YlU">
<field name="ATTR">state.val</field>
</block>
</value>
<value name="CASECONDITION0">
<block type="text" id="jSK+-X9^LZ52;FZkF{N@">
<field name="TEXT">active</field>
</block>
</value>
<statement name="CASE0">
<block type="timeouts_clearinterval" id="H1?KT2GS=;m|lB4B[d9{">
<field name="NAME">Intervall</field>
<next>
<block type="timeouts_setinterval" id="OCAffLYx5xl2^)mb:1ON">
<field name="NAME">Intervall</field>
<field name="INTERVAL">1000</field>
<field name="UNIT">ms</field>
<statement name="STATEMENT">
<block type="controls_if" id="M:$D10b:c^VB7N-[zAAs">
<mutation else="1"></mutation>
<value name="IF0">
<block type="logic_compare" id="Y%K:Fww+C*D)mW_pAvb5" inline="false">
<field name="OP">GT</field>
<value name="A">
<block type="get_value_var" id="AkNnDdzS;{lm8`UsDA$a">
<field name="ATTR">val</field>
<value name="OID">
<shadow type="text" id="jvzl]}[mrPTl0ev@@~.i">
<field name="TEXT"></field>
</shadow>
<block type="variables_get" id="0}HonAc*HO)G!?xMBnx]">
<field name="VAR" id="!E]!o]+#iwtI}R=X+,zV">vACTUAL</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="math_number" id="E}Xx=@{9XDIhj5($(DXz">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="variables_set" id="[lc#LS]+_y3JU6;*iy/;">
<field name="VAR" id="#BYGZV@hvwAL/]L2%/8w">sec_timer</field>
<value name="VALUE">
<block type="get_value_var" id="()czu@y9l5__t%_~guQ4">
<field name="ATTR">val</field>
<value name="OID">
<shadow type="text" id="O~#Pq`;j8,}OcT/IMc2|">
<field name="TEXT"></field>
</shadow>
<block type="variables_get" id="B0a}HDdI9+PoN,71,$tV">
<field name="VAR" id="!E]!o]+#iwtI}R=X+,zV">vACTUAL</field>
</block>
</value>
</block>
</value>
<next>
<block type="control_ex" id="3I8#ZkQ(OTw*^t6-dpu6" inline="true">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid" id="YjjD8L[b+^gS7jV^+[Y~">
<field name="oid">Object ID</field>
</shadow>
<block type="variables_get" id="?r6MSEFq,iv61OR]$K6R">
<field name="VAR" id="!E]!o]+#iwtI}R=X+,zV">vACTUAL</field>
</block>
</value>
<value name="VALUE">
<shadow type="logic_boolean" id="G4EZc5H)j2Zdg:=;eu%n">
<field name="BOOL">TRUE</field>
</shadow>
<block type="math_arithmetic" id="0178UKVA@dcT|$46OmJx">
<field name="OP">MINUS</field>
<value name="A">
<shadow type="math_number" id="8Ymex9XyD-+Ouo]MD`8d">
<field name="NUM">1</field>
</shadow>
<block type="variables_get" id="RHFea=Bu!IabYuXBG:EX">
<field name="VAR" id="#BYGZV@hvwAL/]L2%/8w">sec_timer</field>
</block>
</value>
<value name="B">
<shadow type="math_number" id="sejG{?~!bE6~.u.4td%|">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="k:`kho).[#@/%ye+g.u?">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</next>
</block>
</statement>
<statement name="ELSE">
<block type="control_ex" id="QsmpsLDys?p|Hy=+M`nA" inline="true">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid" id=".74}mEqIO9M~:ek5U;R(">
<field name="oid">Object ID</field>
</shadow>
<block type="variables_get" id="f`@kho?65GVY~$;xysw3">
<field name="VAR" id="!E]!o]+#iwtI}R=X+,zV">vACTUAL</field>
</block>
</value>
<value name="VALUE">
<shadow type="logic_boolean" id="hkR7Dc_[$;{L`+JxicRa">
<field name="BOOL">TRUE</field>
</shadow>
<block type="math_number" id="4u6KIhWH@!VZ0*$MD;u7">
<field name="NUM">0</field>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="g]^hfC+$vJu[_o`O!8c1">
<field name="NUM">0</field>
</shadow>
</value>
<next>
<block type="control_ex" id="Bk@3kjR?T{Px,8U!3]{w" inline="true">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid" id="#GVc9+G/u85]l_vcm;zH">
<field name="oid">Object ID</field>
</shadow>
<block type="variables_get" id=":,.Z}O;]8X=;wj%SxO5w">
<field name="VAR" id="QPiqoyWT$%Cp)OZ=|`*W">vSTATE</field>
</block>
</value>
<value name="VALUE">
<shadow type="logic_boolean" id="5ne=aTSnU@7c$CGM9EUC">
<field name="BOOL">TRUE</field>
</shadow>
<block type="text" id="mm{`e;eblljVtUBz2(_!">
<field name="TEXT">idle</field>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="/.0#c4XU-@]c!Q{onR2T">
<field name="NUM">0</field>
</shadow>
</value>
<next>
<block type="comment" id="Uvi2,2[ruXRlYD.4c(=^">
<field name="COMMENT">An dieser Stelle kann auch noch eine Meldung an Alexa oder Telegram, etc. erfolgen</field>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</statement>
<statement name="ONDEFAULT">
<block type="timeouts_clearinterval" id="t*fh0y@^c/W:T/x#PS!g">
<field name="NAME">Intervall</field>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</xml>
Analog Alias Fenster. Im "Schritt 1" wird jedoch der Alias-Gerätetyp Tür gewählt
Beschreibung für den Alias Verschluss folgt...
Dieser Alias dient nur der Einbindung des dynamischen Abfallkalenders. Dieser ist hier ausführlich beschrieben:
https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker---FAQ-&-Anleitungen#4-abfallkalender
und die Temperatur (etwas tiefer). Weitere Datenpunkte, wie z.B. Min- und Max-Temperatur können ebenfalls verknüpft werden, finden jedoch im TypeScript keine Berücksichtigung.
In diesem Fall wird die Temperatur aus einem Datenpunkt einer Wetterstation visualisiert. Es kann natürlich auch ein Datenpunkt mit der aktuellen Außentemperatur aus einem anderen Adapter daswetter.0.xxxxx, accuweather.0.xxxxx, openweathermap.0.xxxxx, etc. ausgewählt werden.
Achtung:
Dieser Alias muss erstellt werden, damit die 4 kleineren Icons (Weather-Forecast und/oder 4 Sensordatenpunkte) im unteren Screensaver visualisiert werden können.