NEWS
Wie current werte und in target werte schreiben
-
Hallo zusammen,
ich würde gerne die current Werte in die target Werte schreiben.... wie muss ich da vorgehen ?Grund ist folgendes Problem ich nutze den Zwave 2 Adapter in verbindung mit Fibaro Modulen.
Leider passiert es immer wieder das wenn ich den PI neustarte oder wenn ich den Adapter neustarte verschieden Traget Wert den Wert (null) zugewiesen bekommen. Diese lassen sich dann natürch nicht mehr wie gewohnt steuern und ich fange an die Werte händisch nachzutragen, was aber nicht im Sinn des Erfinders sein kann.
Ich dachte da evtl. an eine Blockly Lösung oder eine alias Lösung wie die auch immer sein Mag,,,,,,,,,,,
Hierzu würd ich gern um eure Hilfe bitten ..im muss dazu sagen das ich kein Profi bin im Blockly und auch der Bereich Alias ist für mich Neuland.
Evtl hat ja wer schon eine Lösung die ich nutzen kann... bzw. die ich mir dann so umbaue wie ich es benötige.
Vielen Dank
-
@Flopsi
Poste bitte die ID eines "target" und des dazugehörigen "current" und die Funktion (Namen) des Gerätes (z.B. Fernseher Wohnzimmer). Dann zeige ich an diesem Beispiel, wie man Alias-Datenpunkte per Script erzeugt. -
Das habe ich mal probiert so ohne Erfolg
-
@Flopsi sagte:
Das habe ich mal probiert
Daraus kann ich leider keine IDs erkennen, sondern nur Namen. Poste bitte die beiden IDs zu Node_24.
-
-
@Flopsi
Welche Instanz ? "zwave.0" ? -
-
@paul53
Ich hab schon Alias im Einsatz und zwar nutze ich das als Platzhalter für meine Module..Soll ich das Javaskript mal Posten .....
-
Statt "steuere" müsste mindestens "aktualisiere" verwendet werden. Sonst löst nachher jedes Update von currentValue einen neuen Schaltvorgang aus.
@paul53 Die Überlegung war, das durch einen Alias wegzukapseln, da es für @Flopsi ein Anzeigeproblem in VIS darstellt. Lesen immer aus
currentValue
, Schreiben immer intargetValue
. -
@Flopsi
Das folgende Script in das Javascript-Editor-Fenster kopieren und starten:// Original-Datenpunkt const idOrigin = 'zwave2.0.Node_24.Binary_Switch.targetValue_002'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = 'zwave2.0.Node_24.Binary_Switch.currentValue_002'; // Alias-Datenpunkt const idAlias = 'Wohnzimmer.Fernseher'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Fernseher Wohnzimmer'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch // write = "val ? true : true"; // role = 'value'; // 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 ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; 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; 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 && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead);
Für weitere Alias-Datenpunkte müssen idOrigin, idRead, idAlias und nameAlias angepasst werden.
-
@AlCalzone Ne nicht im VIS sondern im Datenpunkt selber.....da steht dann bei Current der Wert
true
und im targte steht
(null)
kann man zwei alias skripte laufen lassen wie gesagt habe ich schon ein am laufen ...
-
@Flopsi Das ist doch vollkommen egal, wenn der Alias so konfiguriert ist, dass er den currentValue liest und den targetValue schreibt!
Das Alias-Skript ist auch nur zum Anlegen des Alias-Datenpunkts. Diesen Alias-DP nutzt du dann in VIS etc.
-
@Flopsi sagte:
kann man zwei alias skripte laufen lassen
Die Skripte zur Erzeugung von Alias-DP laufen nicht ständig, sondern werden nur kurz gestartet und nach Erledigung wieder gestoppt. Deshalb können auch mehrere Skripte existieren.
-
Ok ich werde es mal testen sobald ich meinen Pi neustarten muss was ich mal am Wochende mache, unter der Woche das bewust machen ist immer so ne sache ...mit der Zeit
Auf jeden fall erstmal vielen Dank