NEWS
[Vorlage] Variable Zeitsteuerung mit VIS Editor
-
@Rand
Solche Fälle sind hilfreich, werde meine Doku ergänzen und diesen Fall "true/false" als String erläutern. Evtl. kann nicht jeder die States einfach auf boolean umstellen. -
Neues Update hochgeladen:
Changelog v1.2.0 22.11.2020 (Skript + VIS[optional] )
- Offsets können nun auch größer 59 Minuten gewählt werden
- Bugfix: Es wurden unnötige States unter Timer.Devices.States.x erstellt
- Alle Widgets im Editor-View benamt
Habe zusätzlich in der Readme die Funktionalität mit dem Mapping erläutert. Da ich in der letzten Woche Urlaub hatte, war ich fleißiger als üblich. Das wird nun wieder nachlassen
Da nun Werte >59 als Offset genutzt werden können, habe ich in der VIS eben diese Werte ergänzt:
Könnt ihr bei Bedarf auch machen. Anbei das geänderte Widget:
offset_widget.txtHabe im Editor-View alle Widgets benamt. Teilweise überdecken sich die Widgets gegenseitig, somit ist eine Auswahl des Widgets über das Dropdown-Feld einfacher möglich. Wer das komplette View updaten möchte, kann es von Github laden.
-
Uiui, das Skript hier kannte ich ja noch gar nicht, da sind wir wohl am doppelt moppeln. Ich weise mal hierauf hin, evtl. kann man sich ja gegenseitig was abguggen, Ideen holen etc.
https://github.com/Pittini/iobroker-Timer -
@Pittini
Im Sommer letzten Jahres hatte ich das Skript erstmalig öffentlich bereit gestellt. Aber es stimmt, bis auf vereinzelte Einträge auf Facebook gab es nicht viel Werbung. Die Reichweite kann nie so groß sein wie bei Adaptern.
Von meinem "Programmierstil" kann man sich wahrscheinlich bei diesem Skript nicht viel abschauen. Würde es heutzutage definitiv Objekt orientiert lösen.
Ansonsten kannst du dich von diesem Skript gern funktionell bedienen bzw inspirieren lassen (z.B. Bedienung über HTML Buttons).
Grundsätzlich würde ich eher ein merge beider Skripte vorschlagen, damit die Arbeit tatsächlich nicht doppelt gemacht wird. -
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Ansonsten kannst du dich von diesem Skript gern funktionell bedienen bzw inspirieren lassen (z.B. Bedienung über HTML Buttons).
Du, mein Skript ist "fertig", es macht alles was es sollte, Bedienung geht komplett via Vis, inkl. anlegen/ändern/löschen von Timern, alle FeatureRequests sind soweit eingearbeitet und es gab jetzt schon längere Zeit keine Bugmeldungen mehr.
Das Skript nie die Reichweite von Adaptern haben ist sicherlich pauschal korrekt, das setzt aber vorraus dasses entsprechende Adapter überhaupt gibt.Grundsätzlich würde ich eher ein merge beider Skripte vorschlagen, damit die Arbeit tatsächlich nicht doppelt gemacht wird.
Grundsätzlich gerne, muß mir mal anschauen wie Dein Skript arbeitet, ich glaub das könnte aufgrund unterschiedlicher Ansätze komplex werden. Aber ich schau mir mal Deins an und Du schaust mal in meins rein, dann reden wir nochmal würd ich sagen. Das wir das überhaupt doppelt machen liegt dran dass Du nicht auf Git published hattest, ich such dort immer ob es für iobroker mein geplantes Projekt schon gibt und wenn nein fang ich an.
-
@Pittini sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
ich schau mir mal Deins an und Du schaust mal in meins rein, dann reden wir nochmal würd ich sagen.
Und daraus entsteht ein wunderbarer Adapter.
-
@Pittini
Ich schaue mir deine Umsetzung mal genauer an, dann reden wir nochmal
Dass die programmatische Umsetzung unterschiedlich ist, unterschreibe ich sofort. Hatte mit diesem Timer meine ersten Schritte in Richtung Programmierung + JavaScript gemacht. Mir würde es bei dem merge eher um funktionelle Inhalte gehen. Wie es im Hintergrund abläuft, wäre egal.Was mir noch einfällt: mic hat mittlerweile einen Adapter entwickelt, der glaube auch Timer beinhaltet. Finde den gerade nicht auf die schnelle. Aber da war wohl die VIS noch außen vor.
-
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Was mir noch einfällt: mic hat mittlerweile einen Adapter entwickelt, der glaube auch Timer beinhaltet. Finde den gerade nicht auf die schnelle. Aber da war wohl die VIS noch außen vor.
Ja, Du meinst sicher SmartControl. Das Ding ist als eierlegende Wollmilchsau konzipiert und nicht mal ich blick noch bei der Konfig durch, weis ned ob des was für Anfänger wär. Meine Skripte sind vom Konzept her so dass, wenn man sich an die Anleitung hält, das auchn Einsteiger bewältigen kann, dafür sind se auch gemacht. Ich hab mir Dein Skript jetzt mal genauer angesehen und glaube nicht das wir das gemixt bekommen, sollten wir imho auch nicht.
Dein Skript hat nen anderen Ansatz glaub ich und wir haben recht unterschiedliche Programmierstile (ich bin was proggen angeht ein Dinosaurier, als ich anfing gabs sowas wie oop noch nicht, deswegen mach ich alles mit Arrays etc.). DEin Skript kann mehr als meines, dafür ist meines imho leichter zu installieren. Finde ich nicht schlecht, so haben Einsteiger schnell was laufen und wer mehr braucht kann ja dann zu Deinem Skript wechseln, den Ansatz mit kenntlichmachen der Ziele via Aufzählung haben wir ja gleich. -
Hallo zusammen,
hat jemand von euch die Zeitsteuerung mit angelegten Alias in Betrieb? Bei mir geht immer mal wieder ein 433Mhz Baumarkt Zwischenstecker kaputt, jetzt wo die Weihnachtsdeko wieder raus kommt hab ich nach 10 Monaten im Speicher rumliegen wieder eine die nicht mehr geht.
Um das in Zukunft einfacher zu halten wollte ich mich mit der Alias Funktion bzw. dem Adapter beschäftigen. Leider wird der Aliasname im Timerskript nicht richtig ausgelesen und nur mit [object Object] ausgegeben:
-
@micklafisch
An sich ist das Zielgerät nicht wichtig. Es ist nur relevant, dass in der verwendeten Aufzählung ausschließlich States verwendet werden, keine darüber liegenden Gruppen.
Um sicher zu gehen, ob alles richtig ist, kannst du vom ioBroker Objektbaum ein Screenshot machen, worin die 433Mhz Stecker zu sehen sind. -
@micklafisch
Was mir gerade noch einfällt: verwende für einen Teil meiner Rollläden auch die Alias Funktion. Funktioniert einwandfrei. -
Moin zusammen,
echt ein toles Skript! Für meine Steckdoesen läuft es einwandfrei.
Ich möcht nun eine zweite Instanz für meine Rolläden adaptieren. Die Steuerung ist hier leider nicht ganz so einfach., da ich keine %-Werte angeben kann, sondern nur "UP/DOWN", wobei der Wert aber nur kurzzeitig anstehen darf und wieder auf "" gesetzt werden muss.Nun habe ich mir in dem Skript einen Wolf gesucht (JS ist nicht so ganz meine Welt), wo denn die eigentliche Aktion ausgeführt, i.e. der DatenPunkt gesetzt wird. Ich müsste dort dort irgendwie eine Callback Funktion einbauen, die den DP verzögert wieder auf "" setzt.
So habe ich das ggw. in meinen Skript, welches ich durch die Variable Zeitsteuereung ersetzten möchte
setStateDelayed(shutter[i], "DOWN", delay, false, function (){ log(shutter[i] + "DOWN"); setStateDelayed(shutter[i], "", 1000); });
Kann mir da bitte jemand den Weg weisen?
-
@GiuseppeS
Danke für den Hinweis, genau das war das Problem.Wenn ich bei der Alias Erzeugung eine Aufzählung mit angebe, dann fügt der Adapter den channel mitsamt state ein und nicht nur den state. Habe den channel aus der Aufzählung entfernt und den state manuell rein, schon klappt das ganze auch. Danke!
-
@boehmgui
Freut mich, dass du das Skript gleich mehrfach nutzen möchtest
UP & DOWN kannst du hoffentlich dank der erweiterten github Anleitung selbstständig definieren, ansonsten einfach hier nachfragen.
Zum Punkt, dass die Vorgaben nur kurzzeitig anliegen dürfen:
Ich würde dueses Skript gar nicht ändern und ein weiteres Skript anlegen. Dort würde ich es wie folgt umsetzen.- Trigger über alle Rollläden
- wenn Trigger Wert ungleich "", dann setze Trigger ID auf "" nach 1000 ms
Der riesige Vorteil: das funktioniert global, d.h. auch wenn über weitere Skripte deine Rollläden gesteuert werden. Außerdem kannst du so weitere Updates des Skripts einfach über copy/paste hochziehen ohne individuelle Anpassungen nachzutragen.
Falls du die Vorgehensweise gut findest, aber bei der Umsetzung Unterstützung benötigst, einfach fragen. -
Jetzt habe ich leider ein neues Problem. Obwohl ich am parallel laufenden Timerskript für meine Rollläden nichts geändert habe kommen nach einem Neustart folgende Fehler im Log:
javascript.0 2020-11-30 12:21:41.683 error (636) at processTimers (internal/timers.js:492:7) javascript.0 2020-11-30 12:21:41.683 error (636) at listOnTimeout (internal/timers.js:549:17) javascript.0 2020-11-30 12:21:41.682 error (636) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2024:34) javascript.0 2020-11-30 12:21:41.682 error (636) at Object.main (script.js.common.Zeitschaltuhren_Rollos:1833:49) javascript.0 2020-11-30 12:21:41.682 error (636) at Array.forEach (<anonymous>) javascript.0 2020-11-30 12:21:41.681 error (636) at script.js.common.Zeitschaltuhren_Rollos:1842:71 javascript.0 2020-11-30 12:21:41.681 error (636) Error in callback: TypeError: Cannot read property 'common' of null javascript.0 2020-11-30 12:21:41.675 warn (636) Object "undefined" does not exist javascript.0 2020-11-30 12:21:40.154 info (636) script.js.common.Zeitschaltuhren_Rollos: registered 0 subscriptions and 0 schedules javascript.0 2020-11-30 12:21:40.072 info (636) Start javascript script.js.common.Zeitschaltuhren_Rollos
Bisher hatte ich nur am Steckdosen Timer mit den Alias Namen experimentiert. Dort kommt nach einem Neustart auch kein Fehler
Nachtrag: Habe bei beiden die Version 1.2.0 im Einsatz.
-
@GiuseppeS
uuuhhhh, warum denke ich eigentlich immer so kmpliziert?
Danke für den Denkanstoß - das bekomme ich hin -
@micklafisch
Hmm, ich kann anhand der Fehlerzeilen nichts in Bezug auf "common" finden. Hast du oben im Skript Teile raus gelöscht?
Ansonsten, wegen dem Fehler "common": stimmen noch die Namen der oben verwendeten Aufzählungen?Bin gleich wieder an der Arbeit, daher werde ich erst heute Abend weiter unterstützen können.
-
@GiuseppeS
ich habe jetzt zur Sicherheit das alte Skript abgeschaltet und ein neues erstellt und deine aktuelle Vorlage reinkopiert. Dazu habe ich dann nur die wichtigsten Variablen geändert (Aufzählung, Pfad, Logging etc) - das Skript ist sonst unverändert. Die Fehlercodezeilen sind jetzt andere:javascript.0 2020-11-30 13:08:22.725 error (636) at processTimers (internal/timers.js:492:7) javascript.0 2020-11-30 13:08:22.725 error (636) at listOnTimeout (internal/timers.js:549:17) javascript.0 2020-11-30 13:08:22.725 error (636) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2024:34) javascript.0 2020-11-30 13:08:22.724 error (636) at Object.main (script.js.common.Zeitschaltuhren_Rollos:1614:49) javascript.0 2020-11-30 13:08:22.724 error (636) at Array.forEach (<anonymous>) javascript.0 2020-11-30 13:08:22.724 error (636) at script.js.common.Zeitschaltuhren_Rollos:1623:71 javascript.0 2020-11-30 13:08:22.723 error (636) Error in callback: TypeError: Cannot read property 'common' of null javascript.0 2020-11-30 13:08:22.718 warn (636) Object "undefined" does not exist javascript.0 2020-11-30 13:08:21.208 info (636) script.js.common.Zeitschaltuhren_Rollos: registered 0 subscriptions and 0 schedules javascript.0 2020-11-30 13:08:21.168 info (636) Start javascript script.js.common.Zeitschaltuhren_Rollos javascript.0 2020-11-30 13:08:20.906 info (636) Stop script script.js.common.Zeitschaltuhren_Rollos
Die Aufzählung stimmt noch, ich hatte lediglich mal die Sortierung über den State "DropDownDevice" geändert. Wenn du weitere Infos brauchst, sag bescheid.
-
@micklafisch
Hast du auch die Aufzählung deiner Bedingungen kontrolliert? Dort steigt das Skript aus. -
@GiuseppeS
ja hab ich. Da ist der Standardeintrag drin:
Diese Aufzählung sieht so aus:
Das komische ist, das zweite Skript mit den Steckdosen zieht ebenfalls auf die gleiche Aufzählung ab und erzeugt keine Fehler. Darf da nur ein Skript auf eine Aufzählung zugreifen?