@renderender
das Problem hatte ich auch, die Lösung ist du darfst den Alias nicht händisch erstellen, sondern machst es mit dem Script aus dem vorhergehenden post.
Mit hilfe des Scripts wird nämlich nur 1 Datenpunkt angelegt und nicht 2 wie bei dir (und bei mir... )
und dieser eine Alias datenpunkt vereint dann die 2 (den zu lesenden und den zu schreibenden)
ich häng das script noch mal mit ran (mit deinem beispiel) und versuche mal kurz zu beschreiben wie es geht
das Script kommt von @paul53 , siehe Link in meinem vorhergehenden post
// Original-Datenpunkt, der zu schreibende, der Taster
const idOrigin = 'hm-rpc.1.und.so.weiter';
// Optional: Status-Datenpunkt, wenn Kommando und Status getrennt, der zu lesende, der shellly
// Bei Nicht-Verwendung Leerstring '' zuweisen
const idRead = 'shelly.0.und.so.weiter';
// Name des neuen Alias-Datenpunkt
const idAlias = 'Licht.Garten.Wandlampe';
//Name des Alias
nameAlias = 'Wandlampe';
var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
desc = 'per Script erstellt';
// Folgende befehle auskommentieren, wenn keine Änderung der Eigenschaft erforderlich
// typeAlias = 'boolean'; // oder 'number'
// read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch
write = "val ? true : true"; //wichtig bei Tastern
// 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(obj.common.type == 'number') {
if(min !== undefined) obj.common.min = min;
if(max !== undefined) obj.common.max = max;
if(unit) obj.common.unit = unit;
} else {
if(obj.common.min !== undefined) delete obj.common.min;
if(obj.common.max !== undefined) delete obj.common.max;
if(obj.common.unit) delete obj.common.unit;
}
if(states) obj.common.states = states;
if(custom && obj.common.custom) obj.common.custom = custom;
obj.native = {};
setObject(idDst, obj, function() {
if(idRd) setState(idRd, getState(idRd).val, true);
else setState(idSrc, getState(idSrc).val, true);
});
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);
Die wichtigsten Punkte sind im Script kommentiert.
- du musst mindestens Zeile 2, 6, 9, 12 anpassen
- Zeile 21 hab ich schon angepasst, so läuft es bei mir. Hier sagst du, das er deinen Taster Datenpunkt beim "ein & ausschalten" immer mit true schreiben muss, weil Taster.
Ich weiß nur leider nicht wie es bei deinem hmIP Taster ist, da ich eine Siemens Logo nutze. Bei meinem S7-Adapter ist der Taster Datenpunkt auf "wp" = pulse eingestellt. D.h. ich steuere den Datenpunkt mit true an und er wird automatisch nach 250ms wieder auf false gesetzt. - du erstellst bei Skripte ein neues JS script und fügst den Code dort ein
- die Anpassung vornehmen und dann das script einmal starten (bei jedem mal starten wird ein Datenpunkt erstellt)