NEWS
[gelöst] LOGO! & Wochenschaltuhr
-
Hallo Vumer,
genau diese Funktion habe ich auch gesucht!! Bin ja auch mit der LOGO 8 unterwegs.
Allerdings kriege ich die beiden Scripts nicht zum laufen. Habe die beiden Funktionen (logotime2str und str2logotime) als separate Globale Scripte angelegt. Dann das Script zum Aufrufen der beiden Funktionen als Common-Script angelegt. Die beiden Variablen darin habe ich für meine Bedürfnisse angepasst. Hier habe ich schon die erste Frage: –> die Konstante idLogo ist soweit klar aber die folgende const idVis muss die "von Hand" angelegt werden?
Die Scripte laufen scheinbar ohne Fehler (Objektansicht ioBroker zeigt beim Common.Script true, bei den beiden Globalen Scripten jedoch false) aber es wird keine Variable erzeugt bzw. diese hat den Wert "null".
Steff
-
Hallo Steff,
Hast du auch einen Datenpunkt angelegt?
So habe ich das gemacht
Unter global habe ich mit dem name Converter
function logotime2str(time) { var x = parseInt(time, 10).toString(16); if(parseInt(x) < 10) return '0:0' + x; if(parseInt(x) < 100) return '0:' + x; if(parseInt(x) < 1000) return x.slice(0, 1) + ':' + x.slice(1, 3); return x.slice(0, 2) + ':' + x.slice(2, 4); } function str2logotime(str) { // str im Format "hh:mm:ss" var x = str.split(':'); x = parseInt(x[0] + x[1], 16).toString(10); return parseInt(x); } ````angelegt. Unter common habe ich eine neue Gruppe mit dem Name LOGO erstellt Unter die Gruppe LOGO einen Skrip für die erste Uhr mit dem Name Uhr1-1_Ein
createState("LOGO.Uhr1-1_Ein", 0);
const idLogo = 's7.0.DBs.DB1.B023-a1';
const idVis = 'javascript.0.LOGO.Uhr1-1_Ein';on(idLogo, function(dp) {
setStateDelayed(idVis, logotime2str(dp.state.val), 5000);
});on(idVis, function(dp) {
setState(idLogo, str2logotime(dp.state.val));
});Unter dem Name Uhr1-1_Aus
createState("LOGO.Uhr1-1_Aus", 0);
const idLogo = 's7.0.DBs.DB1.B023-b1';
const idVis = 'javascript.0.LOGO.Uhr1-1_Aus';on(idLogo, function(dp) {
setStateDelayed(idVis, logotime2str(dp.state.val), 5000);
});on(idVis, function(dp) {
setState(idLogo, str2logotime(dp.state.val));
});und so weiter, erstellt Schöne Grüße
-
Hallo Vumer,
schon gesehen…., ich habe noch ordentlich was aufzuholen in Sachen JScript :oops:
Die Datenpunkte waren das Problem. Jetzt werden die zwar angelegt allerdings immer noch mit "0"-Werten. :shock: Ist das so normal?
Gruß
-
ender mal im Datenpunkte unter Objekte die 0 in 9:30
-
Jackpot!!
Das ist echt genial.
…und wieder was gelernt - die Datenpunkte wurden ja mit 0 angelegt. Macht das Sinn die Punkte gleich mit einem "richtigen" Wert sprich Uhrzeit anzulegen?
Gruß
-
Falsches Gedanke
Der Script macht nur was wenn sich der Wert verendert, damit er nicht immer leuft. z.B wenn du in der LOGO die Zeit verenderst dann aktualisiert der Skript das. Oder du nimms im vis dem Widget "Jqui ctrl Input Datetime" umd stellst die Uhr im vis ein
2071_zwischenablage01.jpg -
OK, das macht Sinn.
Ich dachte das gibt ein Problem beim Neustarten von ioBroker. Habe aber gerade mal neu gestartet, ist alle so wie es
sein soll!
Dann kann ich mich jetzt ja an die Wochentage der Schaltuhr ranmachen.
Danke nochmals!
-
Macht das Sinn die Punkte gleich mit einem "richtigen" Wert sprich Uhrzeit anzulegen? `
Sauberer ist es.const idLogo = 's7.0.DBs.DB1.B023-a1'; const nameVis = 'LOGO.Uhr1-1_Ein'; const idVis = 'javascript.' + instance + '.' + nameVis; createState(nameVis, '0:00', {type: 'string'}); on(idLogo, function(dp) { setStateDelayed(idVis, logotime2str(dp.state.val), 5000); }); on(idVis, function(dp) { setState(idLogo, str2logotime(dp.state.val)); });
-
Hallo paul53,
danke für die Rückmeldung, bin gerade unterwegs. Sobald ich wieder vor meiner Kiste sitze probiere ich das aus.
Gruß Steffen
-
Hallo paul53,
wie immer genial! Danke!
ich habe aber die '0:00' rausgenommen, der Grund ist: wenn man dem Skript startet überschreibt er die Zein in der LOGO in 0:00. Das ist nicht gut.
Es reicht die LOGO neu zu starten, danach greift der Skript und wir haben die richtige Zeit.
const idLogo = 's7.0.DBs.DB1.B023-a1'; const nameVis = 'LOGO.Uhr1-1_Ein'; const idVis = 'javascript.' + instance + '.' + nameVis; createState(nameVis, {type: 'string'}); on(idLogo, function(dp) { setStateDelayed(idVis, logotime2str(dp.state.val), 5000); }); on(idVis, function(dp) { setState(idLogo, str2logotime(dp.state.val)); });
es reicht im LOGO!Soft "LOGO -> PC" auszuführen
Schöne Grüße
-
-
es reicht aber auch die LOGO für ein Paar sek zustopen und danach startenso das neue/aktualisierte Werte am Skript ankommen. Weil werend des Anhaltens gehen die Werte im S7 Adapter auf "0"
-
Hallo Vumer,
habe das gerade mit dem Stoppen und Starten ausprobiert. Bei mir wird die zuvor eingegebene Zeit trotzdem gespeichert.
Ich werde das mal im Auge behalten. In jedem Fall ist das mit den Schaltuhren eine Super Lösung geworden!!
Gruß
-
bei mir sieht es während des Anhaltens so aus
2071_logo-stop.jpg -
Hi,
Sieht bei mir auch so aus.
Nach dem Starten der Logo habe ich wieder den alten Wert drin!
Evtl. liegt es daran, das meine Schaltuhren nur auf Impulsausgabe parametriert sind.
Gruß
-
Nach dem Starten der Logo habe ich wieder den alten Wert drin! `
so soll es auch sein. Deine LOGO's sind ja alle programmiert und die Zeiten ungefähr richtig eingestellt. Jetzt kannst du die im vis oder unter Objekte wenn nötig anpassen.Wenn du jetzt einen neuen Skript für eine andere Uhr erstellst hast zuerst dem Wert "null". Nach LOGO anhalten und starten hast du die aktuelle Zeiten aus die LOGO.
-
Servus
wie machst du das mit den Checkboxen für die Wochentage???
Falsches Gedanke
Der Script macht nur was wenn sich der Wert verendert, damit er nicht immer leuft. z.B wenn du in der LOGO die Zeit verenderst dann aktualisiert der Skript das. Oder du nimms im vis dem Widget "Jqui ctrl Input Datetime" umd stellst die Uhr im vis ein `
-
Hat sich erledigt, bin selber drauf gekommen
Servus
wie machst du das mit den Checkboxen für die Wochentage???
zeitschaltuhr.png
Falsches Gedanke
Der Script macht nur was wenn sich der Wert verendert, damit er nicht immer leuft. z.B wenn du in der LOGO die Zeit verenderst dann aktualisiert der Skript das. Oder du nimms im vis dem Widget "Jqui ctrl Input Datetime" umd stellst die Uhr im vis ein
-
Hat sich erledigt, bin selber drauf gekommen `
Hidas ist der basic - Bool Checkbox, aber der basic - Bool Select ist auch interessant
Schöne Grüße
-
Hier die beiden Funktionen:
function logotime2str(time) { var x = parseInt(time, 10).toString(16); if(parseInt(x) < 10) return '0:0' + x; if(parseInt(x) < 100) return '0:' + x; if(parseInt(x) < 1000) return x.slice(0, 1) + ':' + x.slice(1, 3); return x.slice(0, 2) + ':' + x.slice(2, 4); } function str2logotime(str) { // str im Format "hh:mm:ss" var x = str.split(':'); x = parseInt(x[0] + x[1], 16).toString(10); return parseInt(x); }
EDIT: Habe das Skript noch für Zeiten < 0:10 Uhr und < 1:00 Uhr angepasst. `
hab es für mich ein bisschen angepasst. Damit im vis anstatt 7:00, 07:00 angezeigt wird. So kann man das z.B mit 21:00 zentrieren.function logotime2str(time) { var x = parseInt(time, 10).toString(16); if(parseInt(x) < 10) return '00:0' + x; if(parseInt(x) < 100) return '00:' + x; if(parseInt(x) < 1000) return '0' + x.slice(0, 1) + ':' + x.slice(1, 3); return x.slice(0, 2) + ':' + x.slice(2, 4); } function str2logotime(str) { // str im Format "hh:mm:ss" var x = str.split(':'); x = parseInt(x[0] + x[1], 16).toString(10); return parseInt(x); }
Hoffe dass ich nichts falsch gemacht habe, angezeigt wird das richtig und Fehler im Log sind auch keine.
Schöne Grüße