NEWS
S7 Adapter LOGO Datenpunkte zusammenführen button + state
-
Hi,
damals, 2019 hatte ich schon mal ein Thema erstellt, ist mittlerweile geschlossen:https://forum.iobroker.net/topic/26024/datenpunkte-zusammenführen-switch-state/18?_=1766396252103
Es ging darum, dass die LOGO für eine Leuchte z.B. ein Datenpunkt (button) zum Schalten und ein Datenpunkt für den Status der Leuchte hat.
Da das sonst immer schlecht in Vis und co einzubinden ist,
deshalb das Script:
// IDs anpassen const idButton = 's7.0.DBs.DB1.NI13'; const idActor = 's7.0.DBs.DB1.Q13'; const js = 'system.adapter.javascript.' + instance; const common = getObject(idButton).common; const idVis = 'LOGO.s7-0.' + common.name.replace(' ', '_'); common.read = true; createState(idVis, getState(idActor).val, common); on({id: 'javascript.0.' + idVis, change: 'ne', fromNe: js}, function() { setState(idButton, true); }); on(idActor, function(dp) { setState(idVis, dp.state.val, true); });Das Script hat die Datenpunkte zusammengeführt und einen neuen erstellt den ich dann problemlos einbinden konnte.
Die neuen Datenpunkte wurden dann in javascript.0.LOGO.s7-0
(je nach s7 Instanz s7-x) erstellt.Jetzt bin ich dabei meine ioBroker Installation ein bisschen aufzuräumen und habe schon einige manuell erzeugte Datenpunkte in den Ordner 0_userdata.0 verschoben.
Da man ja in Zukunft nur noch da eigene Datenpunkte ablegen sollte.In den Blocklys war das kein Problem, aber bei dem Script von damals reicht es nicht javascript.0 durch 0_userdata.0 auszutauschen.
Lange Rede kurzer Sinn, wie muss ich das Script bearbeiten damit der Datenpunkt entsprechend im neuen Verzeichnis erstellt wird?
Oder bin ich nicht mehr up to Date und es gibt mittlerweile eine neue/andere Lösung für das "LOGO" Problem? Vielleicht ein Adapter oder in Vis?
Vielen Dank im voraus!
-
so sollte es gehen:
// IDs anpassen const idButton = 's7.0.DBs.DB1.NI13'; const idActor = 's7.0.DBs.DB1.Q13'; const js = 'system.adapter.javascript.' + instance; const common = getObject(idButton).common; const idVis = '0_userdata.0.LOGO.s7-0.' + common.name.replace(' ', '_'); common.read = true; 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); }); -
so sollte es gehen:
// IDs anpassen const idButton = 's7.0.DBs.DB1.NI13'; const idActor = 's7.0.DBs.DB1.Q13'; const js = 'system.adapter.javascript.' + instance; const common = getObject(idButton).common; const idVis = '0_userdata.0.LOGO.s7-0.' + common.name.replace(' ', '_'); common.read = true; 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); });Hi, danke erstmal für die schnelle Antwort, der Datenpunkt wird zwar im richtigen Verzeichnis angelegt aber er funktioniert nicht richtig. Er wird als Button angelegt aber es soll ja ein switch sein.

-
Hi,
damals, 2019 hatte ich schon mal ein Thema erstellt, ist mittlerweile geschlossen:https://forum.iobroker.net/topic/26024/datenpunkte-zusammenführen-switch-state/18?_=1766396252103
Es ging darum, dass die LOGO für eine Leuchte z.B. ein Datenpunkt (button) zum Schalten und ein Datenpunkt für den Status der Leuchte hat.
Da das sonst immer schlecht in Vis und co einzubinden ist,
deshalb das Script:
// IDs anpassen const idButton = 's7.0.DBs.DB1.NI13'; const idActor = 's7.0.DBs.DB1.Q13'; const js = 'system.adapter.javascript.' + instance; const common = getObject(idButton).common; const idVis = 'LOGO.s7-0.' + common.name.replace(' ', '_'); common.read = true; createState(idVis, getState(idActor).val, common); on({id: 'javascript.0.' + idVis, change: 'ne', fromNe: js}, function() { setState(idButton, true); }); on(idActor, function(dp) { setState(idVis, dp.state.val, true); });Das Script hat die Datenpunkte zusammengeführt und einen neuen erstellt den ich dann problemlos einbinden konnte.
Die neuen Datenpunkte wurden dann in javascript.0.LOGO.s7-0
(je nach s7 Instanz s7-x) erstellt.Jetzt bin ich dabei meine ioBroker Installation ein bisschen aufzuräumen und habe schon einige manuell erzeugte Datenpunkte in den Ordner 0_userdata.0 verschoben.
Da man ja in Zukunft nur noch da eigene Datenpunkte ablegen sollte.In den Blocklys war das kein Problem, aber bei dem Script von damals reicht es nicht javascript.0 durch 0_userdata.0 auszutauschen.
Lange Rede kurzer Sinn, wie muss ich das Script bearbeiten damit der Datenpunkt entsprechend im neuen Verzeichnis erstellt wird?
Oder bin ich nicht mehr up to Date und es gibt mittlerweile eine neue/andere Lösung für das "LOGO" Problem? Vielleicht ein Adapter oder in Vis?
Vielen Dank im voraus!
@Elektroniker86 sagte: ein Datenpunkt (button) zum Schalten und ein Datenpunkt für den Status der Leuchte hat.
Man kann die DP ohne Skript in einem Alias mit Schreibkonvertierung zusammenführen:
val ? true : true@Elektroniker86 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:
damals, 2019 hatte ich schon mal ein Thema erstellt
Da gab es den Alias noch nicht.
-
@Elektroniker86 sagte: ein Datenpunkt (button) zum Schalten und ein Datenpunkt für den Status der Leuchte hat.
Man kann die DP ohne Skript in einem Alias mit Schreibkonvertierung zusammenführen:
val ? true : true@Elektroniker86 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:
damals, 2019 hatte ich schon mal ein Thema erstellt
Da gab es den Alias noch nicht.
@paul53
Ahh super, das ist ja interessant. Meinst du den Adapter Alias Manager?
-
@paul53
Ahh super, das ist ja interessant. Meinst du den Adapter Alias Manager?
@Elektroniker86 sagte: Meinst du den Adapter Alias Manager?
Nein, ich meinte Alias unter "alias.0", die der js-controller verwaltet.
Erstellung eines Alias:- im Tab "Objekte" den Status-DP "s7.0.DBs.DB1.Q13" selektieren
- Rechte Maustaste über der ID und "Alias erstellen" auswählen
- im öffnenden Fenster die Alias-ID und den Namen anpassen, die Rolle auf "switch" ändern und "schreiben" erlauben
- "Konvertierungsfunktionen benutzen" anhaken
- Schreibkonvertierung eintragen: val ? true : true
Anschließend noch per "Unterschiedliche IDs für Lesen und Schreiben" die Button-ID "s7.0.DBs.DB1.NI13" für Schreiben eintragen.
-
@Elektroniker86 sagte: Meinst du den Adapter Alias Manager?
Nein, ich meinte Alias unter "alias.0", die der js-controller verwaltet.
Erstellung eines Alias:- im Tab "Objekte" den Status-DP "s7.0.DBs.DB1.Q13" selektieren
- Rechte Maustaste über der ID und "Alias erstellen" auswählen
- im öffnenden Fenster die Alias-ID und den Namen anpassen, die Rolle auf "switch" ändern und "schreiben" erlauben
- "Konvertierungsfunktionen benutzen" anhaken
- Schreibkonvertierung eintragen: val ? true : true
Anschließend noch per "Unterschiedliche IDs für Lesen und Schreiben" die Button-ID "s7.0.DBs.DB1.NI13" für Schreiben eintragen.
Ahh ok, super, diese Funktion kannte ich überhaupt nicht. Danke für die Info. Funktioniert genau so wie du es beschrieben hast.
Gibt es auch eine Möglichkeit, wenn ich alle Einträge gemacht habe das zu sichern? Also außerhalb von Backitup?
Ich frage deshalb weil ich meine ioBroker Installation mal gerne neu aufsetzen möchte und mir mit Backitup nicht die ganzen Altlasten rein holen will.
Ich habe von fast allen Adaptern die Config exportiert. Gibt es so was ähnliches auch bei alias?
-
Ahh ok, super, diese Funktion kannte ich überhaupt nicht. Danke für die Info. Funktioniert genau so wie du es beschrieben hast.
Gibt es auch eine Möglichkeit, wenn ich alle Einträge gemacht habe das zu sichern? Also außerhalb von Backitup?
Ich frage deshalb weil ich meine ioBroker Installation mal gerne neu aufsetzen möchte und mir mit Backitup nicht die ganzen Altlasten rein holen will.
Ich habe von fast allen Adaptern die Config exportiert. Gibt es so was ähnliches auch bei alias?
@Elektroniker86 sagte: Gibt es so was ähnliches auch bei alias?
Du kannst den Objektbaum unter "alias.0" als JSON-Datei speichern und in einer neuen Installation wieder hinzufügen.
-
Das hört sich gut an, aber ich finde die Funktion nicht unter Objekte. Wahrscheinlich geht das nur per SSH?
-
Das hört sich gut an, aber ich finde die Funktion nicht unter Objekte. Wahrscheinlich geht das nur per SSH?
-
@paul53 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:
Pfeil runter ganz rechts.
Ups, peinlich sorry, habe vor lauter Wald die Bäume nicht gesehen.
Klasse funktioniert.
Das ist eine super Lösung. Vielen lieben Dank dafür!Ich wünsche ein frohes Fest! <3
-
@Elektroniker86 sagte: Meinst du den Adapter Alias Manager?
Nein, ich meinte Alias unter "alias.0", die der js-controller verwaltet.
Erstellung eines Alias:- im Tab "Objekte" den Status-DP "s7.0.DBs.DB1.Q13" selektieren
- Rechte Maustaste über der ID und "Alias erstellen" auswählen
- im öffnenden Fenster die Alias-ID und den Namen anpassen, die Rolle auf "switch" ändern und "schreiben" erlauben
- "Konvertierungsfunktionen benutzen" anhaken
- Schreibkonvertierung eintragen: val ? true : true
Anschließend noch per "Unterschiedliche IDs für Lesen und Schreiben" die Button-ID "s7.0.DBs.DB1.NI13" für Schreiben eintragen.
Hi, ist es auch möglich die Datenpunkte der LOGO Schaltzeiten in ein alias, schon umgerechnet abzubilden? Dafür hatte ich auch für jede Schaltzeit ein eigens Script:
createState("LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1", 0); const idLogo = 's7.4.DBs.DB1.B024_Ausschaltz_1'; const idVis = 'javascript.0.LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1'; on(idLogo, function(dp) { setStateDelayed(idVis, logotime2str(dp.state.val), 5000); }); on(idVis, function(dp) { setState(idLogo, str2logotime(dp.state.val)); });'s7.4.DBs.DB1.B024_Ausschaltz_1'Dann gäbe es da noch die Temperaturen...
const idS7Temp = 's7.5.DBs.DB1.AM03'; // Datenpunkt-ID vom S7 eingeben ! const idTemp = 'LOGO.Temperaturen.Außentemperatur Westen2'; // neuer Datenpunkt unter javascript.0 createState(idTemp, 0, {type: 'number', unit: '°C', role: 'value.temperature'}); // Neuen Datenpunkt erzeugen on(idS7Temp, function(dp) { // Wertänderung setState(idTemp, dp.state.val / 10, true); }); // Skriptstart setState(idTemp, getState(idS7Temp).val / 10, true); function S7Celsius(val) { if(val > 32768) val = val - 65536; setState(idTemp, val / 10, true); } on(idS7Temp, function(dp) { // Wertänderung S7Celsius(dp.state.val); }); // Skriptstart S7Celsius(getState(idS7Temp).val);Lassen die sich auch über den alias lösen?
Dann könnte ich ja alle scripte rausschmeißen?
Vielen Dank vorab!
-
Hi, ist es auch möglich die Datenpunkte der LOGO Schaltzeiten in ein alias, schon umgerechnet abzubilden? Dafür hatte ich auch für jede Schaltzeit ein eigens Script:
createState("LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1", 0); const idLogo = 's7.4.DBs.DB1.B024_Ausschaltz_1'; const idVis = 'javascript.0.LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1'; on(idLogo, function(dp) { setStateDelayed(idVis, logotime2str(dp.state.val), 5000); }); on(idVis, function(dp) { setState(idLogo, str2logotime(dp.state.val)); });'s7.4.DBs.DB1.B024_Ausschaltz_1'Dann gäbe es da noch die Temperaturen...
const idS7Temp = 's7.5.DBs.DB1.AM03'; // Datenpunkt-ID vom S7 eingeben ! const idTemp = 'LOGO.Temperaturen.Außentemperatur Westen2'; // neuer Datenpunkt unter javascript.0 createState(idTemp, 0, {type: 'number', unit: '°C', role: 'value.temperature'}); // Neuen Datenpunkt erzeugen on(idS7Temp, function(dp) { // Wertänderung setState(idTemp, dp.state.val / 10, true); }); // Skriptstart setState(idTemp, getState(idS7Temp).val / 10, true); function S7Celsius(val) { if(val > 32768) val = val - 65536; setState(idTemp, val / 10, true); } on(idS7Temp, function(dp) { // Wertänderung S7Celsius(dp.state.val); }); // Skriptstart S7Celsius(getState(idS7Temp).val);Lassen die sich auch über den alias lösen?
Dann könnte ich ja alle scripte rausschmeißen?
Vielen Dank vorab!
@Elektroniker86 sagte: LOGO Schaltzeiten in ein alias, schon umgerechnet abzubilden?
Die beiden Konvertierungsfunktionen sind sicherlich komplexer? Ich weiß nicht, ob sie sich auch per Alias-Konvertierung abbilden lassen.
@Elektroniker86 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:
noch die Temperaturen...
Lesekonvertierung:
val > 32768 ? (val - 65536) / 10 : val / 10
