NEWS
Fragen / Antworten rund um die neue Alias Funktion
-
@hg6806
Dann kopiere das Script, passe die Alias-ID und den Namen an und starte das Script.// Original-Datenpunkt const idOrigin = 'smartmeter.0.1-0:1_8_0_255.value'; // Alias-Datenpunkt const idAlias = 'smartmeter.zaehler_1.bezug_total'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Zähler 1 Bezug total'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 20 ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch // write = "val ? 'Ein' : 'Aus'"; // role = 'indicator'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! function createAlias(idSrc, idDst) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; obj.common.alias.id = idSrc; if(typeAlias) obj.common.type = typeAlias; if(obj.common.read !== false && read) obj.common.alias.read = read; if(obj.common.write !== false && write) obj.common.alias.write = write; if(nameAlias) obj.common.name = nameAlias; if(role) obj.common.role = role; if(desc) obj.common.desc = desc; if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj); if(raum && getObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && getObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias(idOrigin, 'alias.0.' + idAlias);
Anschließend die Instanz admin.0 neu starten (nicht stoppen !).
-
@paul53
Danke, aber wohin kopieren? Als normales Javascript? -
-
Danke, hat soweit geklappt.
Nun habe ich doch angefangen alle Smartmeterwerte in Alias zu schreiben.
Damit ich einen Überblick bekomme habe ich sogar mal eine Excel Übersicht darüber erstellt.Fragen dazu, kann man hier die Alias-Werte auch runden, bzw die Nachkommastellen angeben?
Ich habe mit den original Smartmeterwerten immer das Problem, dass durch die vielen Nachkommastellen die History-Werte immer sehr groß werden.Noch etwas off-topic. Kann man bei den Datenwerten irgendwie herausfinden wo die Werte überall benutzt werden? Vis, Flot, Javascript, etc.
-
@hg6806 sagte:
kann man hier die Alias-Werte auch runden, bzw die Nachkommastellen angeben?
Ja, siehe hier.
-
Moin!
Hat soweit alles geklappt, habe für die meisten Smartmeter Werte Aliases angelegt.
Doch seltsamerweise werden dieses irgendwann nicht mehr aktualisiert.
Aber alle Wert zur gleichen Zeit.
Wenn ich den Admin neu starte geht wieder alles für ein paar Stunden, dann stoppt das Ganze wieder.Woran liegt das und wie kann ich das fixen?
-
Nach einem 2. Neustart läuft nun alles stabil für einige Tage.
Noch eine Frage zu Alias. Kann man von einem Datenpunkt zwei Aliase erstellen oder gibt das irgendwo einen Konflikt.
Der Monteur hat leider den Stromzähler falsch deklariert und jetzt wollte ich ein 2. Alias erstellen und dann wenn Sourceanalytix mit diesem Punkt parallel läuft und genügend Daten vorhanden sind den alten löschen.
Sollte doch gehen, oder? -
@hg6806
Du kannst beliebig viele aliase für einen Datenpunkt erstellen.
Es kann sogar Sinn machen, das zu tun und zwar, wenn du verschiedene Funktionen in read/write hast. So könntest du für einen Tür-Kontakt, nur einen Datenpunkt closed=true, wenn geschlossen ist zwei aliase machen, einen einfach für closed und einen für opened mir read: !val -> schon hättest du beide.Das ist sehr hilfreich, wenn man seine Geräte auf diese Weise etwas angleicht. (habe ich bei einigen Schließkontakten bereits gemacht und ich habe zwei Dachfenster, die unterschiedlicher Meinung waren ob sie jetzt bei 100% offen oder zu sind -> habe ich im vis irgendwie immer falsch gemacht, jetzt sind sie gleich und ich kriege es endlich hin, yeah. ).
-
Ok, danke für die Info.
Hatte das parallel schon gestartet und läuft auch.
Manchmal muss man aber komischerweise den Admin 2x restarten. -
Hi, ich würde gerne einen alias für den fibaro RGWB adapter anlegen. der benötigt einen string mit #RRGGBBWW und ich würde das gerne jeweils auf einen alias für R/G/B/W getrennt und jeweils einem integer im range 0-100 mappen.
hat das schon jemand von euch probiert?
-
@manmac sagte:
hat das schon jemand von euch probiert?
Nein, aber als Ansatz z.B. für grün versuche mal
"read": "Math.round(parseInt(val.substring(3, 5), 16) / 2.55)"
Mit "write" wird es aber per Alias nicht funktionieren, da nur einer von 4 erforderlichen Werten vorliegt.
-
@paul53 said in Fragen / Antworten rund um die neue Alias Funktion:
"read": "Math.round(parseInt(val.substring(3, 5), 16) / 2.55)"
danke , das hilft schonmal sehr. jetzt muss ich nur mehr das "write" kommando hinbekommen ... das muss ich mir noch überlegen kann man eigentlich den alias wert auch über ein script befüllen lassen?
-
@manmac sagte:
beim schreiben auch den aktuellen wert der anderen farben brauche, sonst überschreibe ich ja beim setzen einer farbe den wert der andern
Das meinte ich mit
da nur einer von 4 erforderlichen Werten vorliegt.
-
du hast schneller geantwortet, als ich dachte
kann man eigentlich den alias wert auch über ein script befüllen lassen? -
@manmac sagte:
kann man eigentlich den alias wert auch über ein script befüllen lassen?
Ja, dafür ist der Alias gedacht, dass man per Script nicht auf Adapter-Datenpunkte zugreifen muss. Möchtest Du allerdings auch schreibend den #RRGGBBWW-Wert ändern, wirst Du um ein Script nicht herum kommen.
-
ja, da bin ich grad dran.
hab mich nur gefragt, ob ich statt dem "write":"val = ..." auch "write":"<get return value from script>" machen kann.
-
@manmac
Nein, das geht bisher nicht. Es geht auch bisher nicht in read/write auf andere states zuzugreifen, leider. Damit könnte man dein Problem lösen.Im Moment würde ich stark empfehlen ein skript mit eigenen datenpunkten dazwischen zu schalten. Also dann Alias tatsächlich nur alias von javascript.x.irgendwas.green -> da dann im skript den RGBW Datenpunkt abonieren und den eigenen Datenpunkt befüllen bzw. umgekehrt vom eigenen Datenpunkt aus den RGBW Datenpunkt setzen (da kannst du ja alle 4 Datenpunkte im Skript leicht abfragen).
-
Noch eine Frage zu Alias.
Ich habe mehrere Datenpunkte aus MQTT wie Flowmeter oder ein induktiver Sensor für die Wasseruhr. Wenn ich den ESP dann neustartet ist "Total Count" dann wieder Null.
Kann man aus dem MQTT Datenpunkt kein Alias erstellen, der das erkennt und nach einem Reboot oder Reset die Werte dann aufaddiert?
Wenn ja, wie? -
@hg6806 sagte:
Kann man aus dem MQTT Datenpunkt kein Alias erstellen, der das erkennt
Nein, für solche (speziellen) Anforderungen benötigt man ein Script, da der Alias ein "Abbild" des Original-Datenpunktes mit nur geringen, vordefinierten Abweichungen ist.
-
@hg6806
Das hört sich etwas nach einem Anwendungsfall für Sourceanalytix an.