Skip to content

ioBroker ALIAS Definitionen

Armilar edited this page Dec 21, 2022 · 147 revisions

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

Einleitung:

Alias-Hilfsmittel

Welche Hilfsmittel werden zur Erstellung eines Alias benötigt?:

Der "Geräte verwalten"-Adapter für die meisten Alias-Typen:
image

Der "Alias-Manager"-Adapter für spezielle Alias-Typen, wie dem Alias "Media":
image

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. image image

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.

"Geräte verwalten"-Adapter

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.
image

Alias erzeugen - Schritt 1 - Tab "Allgemein"

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:
image
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)):

image

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

Alias erzeugen - Schritt 2 - Tab "Zustände"

Alarm - cardAlarm

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

image


Dimmer (channel dimmer)

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):
image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung. image

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:

image

Das zugehörige PageItem im TypeScript:
image
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)

Farbtemperatur (channel ct)

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): image

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:

image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung. image

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: image

Das zugehörige PageItem im TypeScript:
image
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


Fenster (channel window)

Der Alias "Fenster" hat 1 relevante Eigenschaft.

  • Zustand (offen/geschlossen) über Adapter-Datenpunkte open, etc.

Darstellung in einer "cardGrid"
image Darstellung in einer "cardEntities"
image

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:
image
Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
image

Das zugehörige PageItem im TypeScript:
image


Feuchtigkeit (channel humidity)

Der Alias "Feuchtigkeit" hat 1 relevante Eigenschaft.

  • Zustand (Sensorwert)

image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:

image

Das zugehörige PageItem im TypeScript:
image

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.


HUE-Licht (channel hue)

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)

image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
image

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: image image


Info (channel info)

image image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
image

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:


Jalousien (channel blind)

image

Und die zugehörige Detailseite
image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung: image

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


Klimaanlage - cardThermo - (channel airCondition)

image


Lautstärke (channel volume)

image

Analog zum Alias "Lautstärkegruppe", jedoch mit dem Alias-Gerätetypen "Lautstärke"


Lautstärke-Gruppe (channel volumeGroup)

image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung: image

Das zugehörige PageItem im TypeScript:
image

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)


Licht (channel light)

image
image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
image


Medien - cardMedia

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!

image 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

Spotify-Premium-Adapter

Skript zum Anlegen eines Spotify-Premium - media-Alias (ab Version 3.3.2)

image

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

image

Alexa2-Adapter

Skript zum Anlegen eines Alexa2 - media-Alias

image

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

image

Sonos-Adpter

Skript zum Anlegen eines Sonos - media-Alias (ab Version 3.3.2)

image

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

image

Chromecast-Adpter (Google home)

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

image

Logitech SqueezeBoxRPC-Adapter

Skript zum Anlegen eines SqueezeBoxRPC - media-Alias (ab Version 3.4.0.6)

image

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
    image

image

  • unter Objekte zu den Aliasen (alias.0.) gehen:
    image
    image
    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):
    image
    image

Jetzt sollte der spueezeboxrpc korrekt arbeiten

image

RGB-Licht (channel rgb)

image

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:
image
image

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: image

Das zugehörige PageItem im TypeScript:
image

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: image

image


RGB-Licht-einzeln (channel rgbSingle)

image

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:
image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung: image

Das zugehörige PageItem im TypeScript:
image

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: image

image


Schieberegler (channel slider)

image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
image

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:


Steckdose (channel socket)

image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung:
image

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


Taste (channel button)

image

Beschreibung für den Alias Taste folgt...


Tastensensor (channel buttonSensor)

Beschreibung für den Alias Tastensenso folgt...


Temperatur (channel temperature)

image

Beschreibung für den Alias Temperatur folgt...


Thermostat - cardThermo - (channel thermostat)

image

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:

image

Im unteren Teil können ebenfalls Indikatoren eingeblendet werden:
image
z.B.
image
oder
image
etc.

Wenn der Thermostat über Mode verfügt und dieser auch genutzt werden soll:
image

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:
image

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:
image

Jetzt speicherst du den neu erstellten Alias. Unter ioBroker Objekte (Verzeichnisbaum alias.0.NSPanel.X...) siehst du jetzt folgende Darstellung: image

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:
image

Parameter:
name: Vom Alias abweichender Name
minValue: Minimaltemperatur Beispiel 5°C = 50
maxValue: Minimaltemperatur Beispiel 30°C = 300


Timer - popUpTimer - (level.timer)

Ab Release 3.7.0

image

image
image

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 image

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 Blockly image
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>

Tür (channel door)

image

Analog Alias Fenster. Im "Schritt 1" wird jedoch der Alias-Gerätetyp Tür gewählt


Verschluss (channel lock)

image

Beschreibung für den Alias Verschluss folgt...


Warnung (channel warning)

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

image


Wettervorhersage

image

image 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.
image 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.


Clone this wiki locally