NEWS
Dimmwert mit Zeitsteuerung
-
Hallo zusammen,
ich habe derzeit einen Homematic-Dimmer an dem 4 Wandtaster per Direktverknüpfung angelegt sind.
Besteht die Möglichkeit mittels Script folgendes zu realisieren:
1.) Wenn Uhrzeit zwischen 01:00 Uhr und 05:00 Uhr morgens dann bei Tastendruck nur auf 10% Helligkeit einschalten
2.) Wenn 1 nicht zutrifft auf 100% Helligkeit einschalten
Habt Ihr da eine Idee oder gar einen Code-Schnipsel zu?
Besteht die Möglichkeit das ohne jedesmal on… für jeden Taster zu nutzen?
-
Ich weiß leider nicht ob die Direktverknüpfung hinderlich ist, aber ansonsten geht das über ein Script.
Ich selbst nutze die CCU nur als Gerätepool. Programme oder Direktverknüpfungen hab ich dort nicht. die gesamt Logik mach ioBroker.
Vom Prinzip her brauchst du ein Script was auf den (oder die) Taster subscribt (on….)
Dann musst du die aktuelle Zeit gegen dein Zeitfenster prüfen und entsprechend den Dimmwert setzen.
Für die Prüfung gegen das Zeitfenster gibt es hier im Forum Beispiele. Such einfach mal nach "inRange"
Hier z. B. http://forum.iobroker.net/viewtopic.php … nge#p45419
Diese Funktion nutze ich derzeit als Funktion in einem globalen Script.
Ich übergebe der Funktion 2 Zeitwerte im Format HH:MM und erhalte ein True oder false zurück je nach dem ob im Zeitbereich oder nicht.
function nowIsBetween(min, max){ var now = new Date(); minDate = new Date((now.getMonth() + 1) + " " + now.getDate() + ", " + now.getFullYear() + " " + min + ":00"); maxDate = new Date((now.getMonth() + 1) + " " + now.getDate() + ", " + now.getFullYear() + " " + max + ":00"); if(now.getTime() < minDate.getTime()) return false; if(now.getTime() > maxDate.getTime()) return false; return true; }
-
Hi,
ob du da die Direktverknüpfungen beibehalten kannst bezweifle ich, da du ja eigentlich die Aktion bedingt durch die Uhrzeit ändern möchtest.
Und ob das ohne das on geht kann ich nicht sagen, dennoch hier mal eine Idee die ich jedoch nicht getestet habe:
function LichtSchalten(){ if(compareTime("01:00", "05:00", "between")) { setState("hm-rpc.0.NEQxxxxxx.1.LEVEL", 10); } else{ setState("hm-rpc.0.NEQxxxxxx.1.LEVEL", 100); } } on("Taster1", function(){ LichtSchalten(); }); on("Taster2", function(){ LichtSchalten(); }); on("Taster3", function(){ LichtSchalten(); }); on("Taster4", function(){ LichtSchalten(); });
Hoffe es klappt
Gruß
Peoples
Edit da war jemand schneller
-
Da ich leider nicht den Dimmer weiß, weiß ich auch nicht, ob mein geplanter Hinweis auf virtuelle Kanäle helfen würde.
Dein Vorhaben ist nämlich DAS Paradebeispiel für virtuelle Kanäle.
Und das alles auf der CCU. Ohne Skripte.
Gruß
Rainer
-
Es handelt sich um den Homematic UP LED Dimmer.
Wenn ich jetzt aber von Direktverknüpfung auf Script komplett umsteige, wie realisiere ich denn das Dimmen per Langem Tastendruck?
-
Die für mich entscheidende Frage wäre, ob Du ohne den Taster das Licht in dem Raum noch bedienen kannst.
Sprich: Was passiert, wenn die CCU und/oder der IOBroker mal so für ein paar Tage … abrauchen?
Soll in den besten Familien ja schon vorgekommen sein.
Deswegen sind bei mir alle "Komfortfunktionen" in der Zwischenzeit auf dem IOBroker realisiert, aber absolute Basics wie "Licht ein/ausschalten" funktioniert entweder mit dem Taster direkt am Aktor oder über Direktverknüpfungen.
Entsprechend find ich da den Tipp gut, mal in die virtuellen Kanäle reinzugraben, damit könnt das klappen.
-
Hallo zusammen,
also das Schalten mittels Tastendruck kurz und dem festen Dimmwert in der definierten Zeitspanne funktioniert schon mal perfekt.
Allerdings kann ich nicht über langen Tastendruck hoch bzw. unter dimmen.
Geht das dimmen per Script überhaupt?
Hier mal mein Script:
function DimmerEinAus_Licht_Flur_OG(){ if (getState("hm-rpc.0.NEQ1101060.1.LEVEL").val > 0) { setState("hm-rpc.0.NEQ1101060.1.LEVEL", 0); } else if(compareTime("01:00", "05:00", "between")) { setState("hm-rpc.0.NEQ1101060.1.LEVEL", 10); } else{ setState("hm-rpc.0.NEQ1101060.1.LEVEL", 100); } } function DimmerHochDimmen_Licht_Flur_OG(){ var timer = null; var level = getState("hm-rpc.0.NEQ1101060.1.LEVEL").val; if(level) { level = level + 5; if (level < 0) level = 0; setState("hm-rpc.0.NEQ1101060.1.LEVEL", level); } if(timer && level === 0) clearInterval(timer); } function DimmerRunterDimmen_Licht_Flur_OG(){ var timer = null; var level = getState("hm-rpc.0.NEQ1101060.1.LEVEL").val; if(level) { level = level - 5; if (level < 0) level = 0; setState("hm-rpc.0.NEQ1101060.1.LEVEL", level); } if(timer && level === 0) clearInterval(timer); } on({id: "hm-rpc.0.NEQ0890388.1.PRESS_SHORT", valNe: 2}, function() {DimmerEinAus_Licht_Flur_OG();}); on({id: "hm-rpc.0.NEQ0890388.2.PRESS_SHORT", valNe: 2}, function() {DimmerEinAus_Licht_Flur_OG();}); on({id: "hm-rpc.0.NEQ0890388.1.PRESS_LONG", valNe: 2}, function() {DimmerHochDimmen_Licht_Flur_OG();}); on({id: "hm-rpc.0.NEQ0890388.2.PRESS_LONG", valNe: 2}, function() {DimmerHochDimmen_Licht_Flur_OG();});
-
Das hoch/runterdimmen per Langen tastendruk legt man doch in der Verknüpfung per ccu fest anstaat Script ?
–-----------------------
Send from mobile device
-
Ja aber wenn ich hier wieder eine Direktverknüpfung erstelle, greift die Zetsteuerung ja nicht mehr
-
Hier mal mein Script: `
Du hast zwar Timer deklariert, verwendest sie aber nicht. Vesuche es mal so:var level = getState("hm-rpc.0.NEQ1101060.1.LEVEL").val; var timer = null; function setDimmer() { setState("hm-rpc.0.NEQ1101060.1.LEVEL", level); } function DimmerEinAus_Licht_Flur_OG(){ if (level > 0) level = 0; else if(compareTime("01:00", "05:00", "between")) level = 10; else level = 100; setDimmer(); } function DimmerHochDimmen_Licht_Flur_OG() { timer = setInterval(function() { if(level < 100) { level = level + 5; if (level > 100) level = 100; setDimmer(); } else if(timer) clearInterval(timer); }, 500); } function DimmerRunterDimmen_Licht_Flur_OG() { timer = setInterval(function() { if(level) { level = level - 5; if (level < 0) level = 0; setDimmer(); } else if(timer) clearInterval(timer); }, 500); } function DimmerStop_Licht_Flur_OG() { if(timer) clearInterval(timer); } on({id: "hm-rpc.0.NEQ0890388.1.PRESS_SHORT", valNe: 2}, DimmerEinAus_Licht_Flur_OG); on({id: "hm-rpc.0.NEQ0890388.2.PRESS_SHORT", valNe: 2}, DimmerStop_Licht_Flur_OG); on({id: "hm-rpc.0.NEQ0890388.1.PRESS_LONG", valNe: 2}, DimmerHochDimmen_Licht_Flur_OG); on({id: "hm-rpc.0.NEQ0890388.2.PRESS_LONG", valNe: 2}, DimmerRunterDimmen_Licht_Flur_OG);
-
Hmm, das scheint leider nicht zu funktionieren. ioBroker schmiert ab mit folgenden Log Einträgen:
hm-rpc.0 2017-07-03 18:52:03.959 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:03.959 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:52:03.959 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:03.959 error binrpc -> setValue ["1","LEVEL",0.95] FLOAT hm-rpc.0 2017-07-03 18:52:03.444 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:03.444 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:52:03.092 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:03.092 error binrpc -> setValue ["1","LEVEL",0.95] FLOAT hm-rpc.0 2017-07-03 18:52:02.936 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:02.936 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:52:02.583 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:02.583 error binrpc -> setValue ["1","LEVEL",0.95] FLOAT hm-rpc.0 2017-07-03 18:52:02.432 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:02.432 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:52:01.935 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:01.935 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:52:01.919 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:01.919 error binrpc -> setValue ["1","LEVEL",0.95] FLOAT hm-rpc.0 2017-07-03 18:52:01.404 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:01.404 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:52:01.388 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:01.388 error binrpc -> setValue ["1","LEVEL",0.95] FLOAT hm-rpc.0 2017-07-03 18:52:00.873 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:00.873 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:52:00.544 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:00.544 error binrpc -> setValue ["1","LEVEL",0.95] FLOAT hm-rpc.0 2017-07-03 18:52:00.388 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:52:00.370 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:51:59.837 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:51:59.837 error binrpc -> setValue ["1","LEVEL",1] FLOAT hm-rpc.0 2017-07-03 18:51:59.837 error Error: You are sending too fast hm-rpc.0 2017-07-03 18:51:59.837 error binrpc -> setValue ["1","LEVEL",0.95] FLOAT
Noch ne Idee dazu? Bin ich denn der einzige der über einen Taster via Script einen LED Dimmer dimmen will?
-
Der ständige Wechsel zwischen 0.95 und 1 sieht danach aus, als würde gleichzeitig hoch- und runtergedimmt. Dann sollte man vielleicht 2 unterschiedliche Timer Hoch und Runter verwenden ?
Wenn man den Bereich von 0…100 % in 5 % Schritten durchläuft, muss 20 mal gesendet werden. Damit überschreitet man schnell den Duty cycle.
Besser ist sicher eine Direkverknüpfung. Für das Einschalten lässt sich bestimmt eine Lösung finden, die den Dimmwert (10 % / 100 %) per ioBroker korrigiert.
on({id: "hm-rpc.0.NEQ1101060.1.LEVEL", valGt: 0, oldVal: 0}, function() { var level = 100; if(compareTime("01:00", "05:00", "between")) level = 10; setState("hm-rpc.0.NEQ1101060.1.LEVEL", level); });
-
Wird bei einer Direktverknüfung nicht mit einer Taste (PRESS_SHORT) eingeschaltet (lt. Bedienungsanleitung - ich habe keine HM-Dimmer) ? Dann sollte man diese zum Triggern der Übersteuerung nehmen.
-
Habe jetzt wieder Direktverknüpfungen eingerichtet und die Zeitsteuerung wie folgt im Script:
on({id: "hm-rpc.0.NEQ0890388.2.PRESS_SHORT", change: "any"}, function() { var level = 100; if (compareTime("18:00", "05:00", 'between')) level = 10; setState("hm-rpc.0.NEQ1101060.1.LEVEL", level); });
Problem ist jetzt allerdings, dass er bei kurzem Tastendruck kurz auf Level 100 geht (die LEDs also mit voller Lichtstärke brennen) und dann
erst auf Level 10 stellt.
Die Zeitsteuerung ist für nachts für die Flurbeleuchtung gedacht, damit man nicht gleich geblendet wird. Daher die Idee…
Nur so funktioniert das leider nicht. Ich vermute die Direktverknüpfung hat hier Vorrang?
Das wäre jetzt die erste unlösbare Aufgabe für ioBroker die ich kenne...
Bin für weitere Ratschläge offen.
-
Ich vermute die Direktverknüpfung hat hier Vorrang? `
Sie ist schneller. Hast Du vielleicht noch eine dritte Taste, um das Problem zu lösen ? -
Leider nicht
-
Kann man beim Dimmer nicht einstellen (evtl. bei der Direktverknüpfung), dass der Standardwert beim Einschalten 10 % beträgt ? In dem Fall würde er außerhalb der Zeit von 1:00 bis 5:00 Uhr erst auf 10 % gehen und kurz darauf durch das ioBroker-Programm auf 100 %.
-
Halo Paul,
erstmal vielen Dank für Deine Hilfe.
Habe das jetzt erstmal so gelöst dass der Dimmer 10% als Standardwert hat und nur via Script abhängig von der Zeit auf 100% geschaltet wird oder eher bei 10% geblieben wird.
Das ist zwar unschön, weil die Beleuchtung jetzt auf 10% angeht, dann für ca. 1 Sekunde da bleibt und dann auf 100% geht (wenn die Zeitspanne für dauerhaft-100% noch nicht ereicht ist), aber es tut erstmal was es soll.
Ich werde mal bezüglich des LED Dimmers einen neuen Thread erstellen, evtl. stimmt da ja was allgemein nicht.
Ich meine, wenn ich eh den Umweg über CCU-Direktverknüpfungen gehen muss find ich das blöd…
-
Das ist zwar unschön, weil die Beleuchtung jetzt auf 10% angeht, dann für ca. 1 Sekunde da bleibt und dann auf 100% geht `
Aber gegenüber der Variante, in der Nacht erst einmal geblendet zu werden, sicherlich das kleinere Übel. -
Ohne es jetzt getestet zu haben …
Wenn Du nur den Einschalt Press Short aus der Direktverknüpfung raus nimmst?
Man kann da mit den Expertensetting ziemlich viel machen.
https://homematic-forum.de/forum/viewtopic.php?t=7508
Ich würd den SHORT_ACTION_TYPE da einfach mal auf inactive stellen.
Theoretisch hast Du dann für die langen Tastendrücke die Direktverknüpfung und die kurzen steuerst Du mit IOBroker.
Hätte Charme ...