NEWS
[gelöst]Widget mit getrennter Statusvariable und Steuervar.
-
Hallo ,
Suche ein Widget das mir nach schalten mit einem Taster den aktuellen Ausgang signalisiert !
Arbeite mit einer s7 300 und habe mir bis jetzt mit einem Widget zum schalten und einem zum signalisieren beholfen.
man kann auch 2 Widgets übereinander legen und mit der Sichtbarkeit arbeiten aber es muss doch eine einfacherer Möglichkeit geben !
Wäre sehr Dankbar für eure Unterstützung !!
Gruß -
Hallo ,
Suche ein Widget das mir nach schalten mit einem Taster den aktuellen Ausgang signalisiert !
Arbeite mit einer s7 300 und habe mir bis jetzt mit einem Widget zum schalten und einem zum signalisieren beholfen.
man kann auch 2 Widgets übereinander legen und mit der Sichtbarkeit arbeiten aber es muss doch eine einfacherer Möglichkeit geben !
Wäre sehr Dankbar für eure Unterstützung !!
Gruß@AchimB Widget mit getrennter Statusvariable und Steuervariable
Man kann Kommando- und Status-Datenpunkt in einem Alias zusammenführen.
-
@paul53
Danke für die schnelle Antwort aber leider kann ich dir nicht folgen !
Im Grunde möchte ich ja nur eine Lampe schalten und anschließend die korrekte Rückmeldung haben !
Also M13.0 als Steuer variabel und A8.0 Status variabel.
Und das nach Möglichkeit in einem einfachen Lampen-Widget !
Vielleicht gibt es ja auch die Möglichkeit über ein Blockly und einen Datenpunkt das Widget auszutricksen ?
Wenn es nur die von dir aufgezeigte Möglichkeit gibt werde ich das nicht realisieren können !
Gruß -
@paul53
Danke für die schnelle Antwort aber leider kann ich dir nicht folgen !
Im Grunde möchte ich ja nur eine Lampe schalten und anschließend die korrekte Rückmeldung haben !
Also M13.0 als Steuer variabel und A8.0 Status variabel.
Und das nach Möglichkeit in einem einfachen Lampen-Widget !
Vielleicht gibt es ja auch die Möglichkeit über ein Blockly und einen Datenpunkt das Widget auszutricksen ?
Wenn es nur die von dir aufgezeigte Möglichkeit gibt werde ich das nicht realisieren können !
Gruß@AchimB sagte:
Vielleicht gibt es ja auch die Möglichkeit über ein Blockly und einen Datenpunkt das Widget auszutricksen ?
Das geht auch mit Blockly und einem eigenen Datenpunkt für Vis (unter 0_userdata.0). Die Verwendung eines Alias ist aber einfacher.
-
@paul53
Einfacher ist relativ ;)
Habe überhaupt keinen Ansatz wo ich was eintragen müsste und was ich nachher im Widget aufrufen sollte !
Bin Vielleicht noch nicht soweit !
Werde mich mal durch den gesamten Chat kämpfen und es versuchen zu verstehen ! -
Hallo ,
Suche ein Widget das mir nach schalten mit einem Taster den aktuellen Ausgang signalisiert !
Arbeite mit einer s7 300 und habe mir bis jetzt mit einem Widget zum schalten und einem zum signalisieren beholfen.
man kann auch 2 Widgets übereinander legen und mit der Sichtbarkeit arbeiten aber es muss doch eine einfacherer Möglichkeit geben !
Wäre sehr Dankbar für eure Unterstützung !!
Gruß -
Taster True => Ausgang => True beim nächsten Flankenwechsel Ausgang => False !
Taste also immer mit "1" und erzeuge dann einen wechsel des Ausgangs !
Habe Quasi einen Stromstoßschalter in S7 programmiert und übernehme nur die Werte !@AchimB sagte:
Taste also immer mit "1" und erzeuge dann einen wechsel des Ausgangs !
Also toggled der Taster. Dann kann Alias nicht verwendet werden, sondern man muss den Datenpunkt für Vis per Skript verarbeiten.
// IDs anpassen const idButton = 's7.0.DBs.DB1.NI02'; const idActor = 's7.0.DBs.DB1.Q02'; const js = 'system.adapter.javascript.' + instance; const common = getObject(idButton).common; const idVis = '0_userdata.0.s7-0.' + common.name.replace(/\s/g, '_'); // Anpassen ! common.read = true; if(!existsState(idVis)) createState(idVis, getState(idActor).val, common); on({id: idVis, change: 'ne', fromNe: js}, function() { setState(idButton, true); }); on(idActor, function(dp) { setState(idVis, dp.state.val, true); });Für die Verwendung des Skripts müssen nur die 3 IDs angepasst werden.
-
@AchimB sagte:
Taste also immer mit "1" und erzeuge dann einen wechsel des Ausgangs !
Also toggled der Taster. Dann kann Alias nicht verwendet werden, sondern man muss den Datenpunkt für Vis per Skript verarbeiten.
// IDs anpassen const idButton = 's7.0.DBs.DB1.NI02'; const idActor = 's7.0.DBs.DB1.Q02'; const js = 'system.adapter.javascript.' + instance; const common = getObject(idButton).common; const idVis = '0_userdata.0.s7-0.' + common.name.replace(/\s/g, '_'); // Anpassen ! common.read = true; if(!existsState(idVis)) createState(idVis, getState(idActor).val, common); on({id: idVis, change: 'ne', fromNe: js}, function() { setState(idButton, true); }); on(idActor, function(dp) { setState(idVis, dp.state.val, true); });Für die Verwendung des Skripts müssen nur die 3 IDs angepasst werden.
@paul53 sagte:
Dann kann Alias nicht verwendet werden
Muss mich korrigieren, denn ich habe es gerade getestet. Es funktioniert auch mit Alias:
"alias": { "id": { "read": "knx.0.Wohnen.Licht.Esstisch_Status", "write": "knx.0.Wohnen.Licht.Esstisch_Taster" }, "write": "val ? true : true" } -
@paul53
Danke für deine Hilfe aber leider fehlt mir wohl noch einiges an Grundwissen !
Wenn ich es halbwegs richtig verstanden habe soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.
Habe also einen Aussgang z.B. : s7.2.Outputs.8.7 und einen Eingang : s7.2.Markers.17.S7_Merker_15 so das ich den Alias mit dem Taster beschreiben kann und gleichzeitig den aktuellen Ausgang lesen kann !
Ist das soweit richtig ?
Wenn das soweit richtig ist frage ich mich nur wo ich das Script anlege bzw. wo ich den Alias erzeuge ? Im Widget selber unter Scripte oder muss ich ein separates Script erstellen in JS oder TS ?
Und wie würde das dann komplett aussehen ?
Habe bisher nur mit Blockly gearbeitet und da weiß ich das ich einen Datenpunkt erzeugen kann den ich nachher wieder abholen kann aber das ist für mich absolut neuland ! Deshalb verzeih meine dummen Fragen !
Gruß -
@paul53
Danke für deine Hilfe aber leider fehlt mir wohl noch einiges an Grundwissen !
Wenn ich es halbwegs richtig verstanden habe soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.
Habe also einen Aussgang z.B. : s7.2.Outputs.8.7 und einen Eingang : s7.2.Markers.17.S7_Merker_15 so das ich den Alias mit dem Taster beschreiben kann und gleichzeitig den aktuellen Ausgang lesen kann !
Ist das soweit richtig ?
Wenn das soweit richtig ist frage ich mich nur wo ich das Script anlege bzw. wo ich den Alias erzeuge ? Im Widget selber unter Scripte oder muss ich ein separates Script erstellen in JS oder TS ?
Und wie würde das dann komplett aussehen ?
Habe bisher nur mit Blockly gearbeitet und da weiß ich das ich einen Datenpunkt erzeugen kann den ich nachher wieder abholen kann aber das ist für mich absolut neuland ! Deshalb verzeih meine dummen Fragen !
Gruß@AchimB sagte:
soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.
Ja.
@AchimB sagte in Widget mit getrennter Statusvariable und Steuervariable:
ein separates Script erstellen in JS
Ja, folgendes Javascript einmal ausführen, nachdem idAlias und nameAlias angepasst sind ('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)
// Original-Datenpunkt const idOrigin = 's7.2.Markers.17.S7_Merker_15'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = 's7.2.Outputs.8.7'; // Alias-Datenpunkt const idAlias = 'Wohnen.Licht.Esstisch'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Lampe Esstisch'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 20 ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch write = "val ? true : true"; role = 'switch'; // 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(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 && 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('alias.0.' + idAlias, idOrigin, idRead);Nach Anpassung von idOrigin, idRead, idAlias, nameAlias kann es für weitere Aliasse zu S7-Datenpunkten mit Taster/Status verwendet werden.
-
@AchimB sagte:
soll ich einen Alias anlegen der aus Taster und Rückmeldung erzeugt wird und diesen dann als Objekt_ID ins Widget eintragen.
Ja.
@AchimB sagte in Widget mit getrennter Statusvariable und Steuervariable:
ein separates Script erstellen in JS
Ja, folgendes Javascript einmal ausführen, nachdem idAlias und nameAlias angepasst sind ('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)
// Original-Datenpunkt const idOrigin = 's7.2.Markers.17.S7_Merker_15'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = 's7.2.Outputs.8.7'; // Alias-Datenpunkt const idAlias = 'Wohnen.Licht.Esstisch'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Lampe Esstisch'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 20 ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch write = "val ? true : true"; role = 'switch'; // 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(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 && 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('alias.0.' + idAlias, idOrigin, idRead);Nach Anpassung von idOrigin, idRead, idAlias, nameAlias kann es für weitere Aliasse zu S7-Datenpunkten mit Taster/Status verwendet werden.
@paul53 said in Widget mit getrennter Statusvariable und Steuervariable:
('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)
Ja korrekt !
Als idAlias habe ich dann einen Ordner aus Javascript.0
'Beleuchtung'
genommen und nameAlias einen freien Namen
'Lampe Büro'funktioniert aber nicht !
18:02:34.768 error javascript.0 (23398) script.js.Licht.Licht_Büro: /opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913
18:02:34.771 error javascript.0 (23398) at createAlias (script.js.Licht.Licht_Büro:50:7)
18:02:34.772 error javascript.0 (23398) at script.js.Licht.Licht_Büro:64:1 -
@paul53 said in Widget mit getrennter Statusvariable und Steuervariable:
('s7.2.Markers.17.S7_Merker_15' ist der Taster ?)
Ja korrekt !
Als idAlias habe ich dann einen Ordner aus Javascript.0
'Beleuchtung'
genommen und nameAlias einen freien Namen
'Lampe Büro'funktioniert aber nicht !
18:02:34.768 error javascript.0 (23398) script.js.Licht.Licht_Büro: /opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:1913
18:02:34.771 error javascript.0 (23398) at createAlias (script.js.Licht.Licht_Büro:50:7)
18:02:34.772 error javascript.0 (23398) at script.js.Licht.Licht_Büro:64:1@AchimB sagte:
Als idAlias habe ich dann einen Ordner aus Javascript.0 'Beleuchtung' genommen
Alias-Datenpunkte werden im Ordner "alias.0" erstellt, also z.B.
idAlias = 'Beleuchtung.Buero'; // Ordner: alias.0.BeleuchtungWas ist das für ein Skript "Licht.Licht_Büro" ?
-
@AchimB sagte:
Als idAlias habe ich dann einen Ordner aus Javascript.0 'Beleuchtung' genommen
Alias-Datenpunkte werden im Ordner "alias.0" erstellt, also z.B.
idAlias = 'Beleuchtung.Buero'; // Ordner: alias.0.BeleuchtungWas ist das für ein Skript "Licht.Licht_Büro" ?
-
@AchimB sagte:
Als idAlias habe ich dann einen Ordner aus Javascript.0 'Beleuchtung' genommen
Alias-Datenpunkte werden im Ordner "alias.0" erstellt, also z.B.
idAlias = 'Beleuchtung.Buero'; // Ordner: alias.0.BeleuchtungWas ist das für ein Skript "Licht.Licht_Büro" ?
-
@paul53 said in Widget mit getrennter Statusvariable und Steuervariable:
Was ist das für ein Skript "Licht.Licht_Büro" ?
Das ist das Script das ich angelegt habe !
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden