NEWS
Lichteten durch Skript starten?
-
Hallo Leute,
erst einmal vielen Dank an alle die einen hier so genial supporten.Folgende Ausgangssituation für meine nächste Aufgabe, die unter dem Motto steht:"Frau wünscht sich ein Mülllicht":
In die Visualisierung eingebunden ist schon der ical-Adapter mit entsprechenden Ereignisauswertungen. Dies mit dem Ergebnis, dass in der Visualisierung dann ein farbiger Balken am Tag vor der Müllabholung in der entsprechenden Farbe (gelb, grün, blau, grau, rot) leuchtet. Jeder Farbbalken ist ein eigenständiges html-Objekt, was sichtbar geschaltet wird wenn der iCal für die betreffende Müllsorte am morgigen Tag ein True auswirft.
Ich hoffe, Ihr könnt mir soweit folgen.
In der Küche steht nun noch eine LED-Lampe mit rgb-Farbwahl. RM4-Mini ist Dank des Supports hier schon am Laufen und Szenen sind in diesem nun auch hinterlegt.
Frage: wie kann ich nun die jeweilige Szene aufrufen? Mein Gedankenansatz wäre das über das sichtbarwerdende html-Objekt zu machen aber wo muss ich dann welchen Code einsetzen? Reicht es den im html-Objekt ins Skript zu setzen? Wird dieser nur bei Sichtbarkeit aufgerufen oder generell? Müsste hier ggf. noch eine Bedingungsabfrage a la "siehst Du mich? Wenn ja dann,..." rein? Und wie würde der Befehl lauten um die Broadlink-szene zu starten?
Gruß
Markus -
@mathopa1973 Zeig mal bitte das Html-Objekt und die Objektstruktur für die Szenen.
-
@mcu das html-Objekt ist das Standard aus der vis-Bibliothek der ich einfach unter Sichtbarkeit die Verknüpfung zum ical-Event in einem Tag = true gegeben habe (kann ich Dir gerne aber heute Nachmittag, wenn ich zu Hause bin, als Bild nochmals einstellen).
Bei den Szenen handelt es sich um die des broadlink-Adapters die nach dem Anlernen im Adapter selbst zusammengestellt werden können (z.B.: lampe_an, lampe_rot). Hinter "lampe_an" oder "lape_rot" verbirgt sich ja nur der angelernte Sendecode, welcher sonst über die Fernbedienung gesendet werden würde.
Ich habe mein Ziel aktuell über Szenen des ioBroker-Szenen-Adapters "zusammengestrickt", welche ebenfalls durch das ical-Event ausgelöst werden. Funktioniert soweit auch - dies zumindest wenn an einem Tag eben nur eine Müllsorte (gelber Sack, blauer Tonne, Biotonne, Restmülltonne, Schadstoffmobil) im Kalender steht. Es gibt aber eben auch Tage, an denen z.B. die Papiertonne und die gelben Säcke abgeholt werden. Lässt man es über den Szenen-Adapter von ioBroker laufen arbeitet der seine Protokolle einfach der Reihe nach ab, wenn also in der Reihenfolge für den Tag dann z.B. erst die gelben Säcke stehen und dann die balue Tonne, so würde ioBroker erst die Lampe an und auf gelb stellen, dann aber sofort auf blau - und das war es dann. Hier würde ich es aber dann gerne so haben, dass entsprechender der Kalenderkonstellation die entsprechenden Farben abwechseln blinken. Mit ein Grund, weshalb ich das ganze gerne nicht über den Szenen-Adapter, sondern eben hartprogrammiert machen wollen würde.
Daher die Frage, wie ich die Szene des broadlink-Adapters per JS-Code auslösen kann wenn ein Trigger dies entsprechend fordert?
Gruß
Markus -
// Trigger auswählen on({id: 'default', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("Object ID", true); }); // Lampe Rot auswählen
-
@mcu danke vielmals. An welcher stelle setze ich den Text dann ein? Im Script-Reiter des html-Objektes oder würde dass übergeordnet ins Script geschrieben werden und direkt als Trigger das Kalender-Event (wenn true) gesetzt?
-
@mathopa1973 Wie erkennst du denn jetzt das Gelbe Tonne dran ist? Mit einem Datenpunkt im ical?
Welchen Text willst du wo rein schreiben?
Zeig mal ein paar Bilder von den Sachen die du hast, damit man nicht aneinander vorbeiredet. ical Einträge , Script, Script Reiter des html-Objektes? -
@mcu aktuell wird der jeweilige Farbbalken (einfaches html-objekt mit Sichtbarkeitsbedingung) durch das ical-event getriggert (sichtbar wenn iCal true). Ebenso wird aktuell die broadlink-szene durch das ical-Event True getriggert. Alles aktuell rein ohne harte Programmierung.
-
@mathopa1973 Zeig mal bitte ein Beispiel mit Bildern. Danke.
-
@mcu hier mal ein paar Bilder...
Als erstes die Ansicht im Editor mit markiertem Balken und die Eigenschaften (Sichtbsrkeitsbedingungen)
Als nächstes im Admin die betreffenden ical-Objekte.
Und als letztes die Szenen-Objekte, welche die Lampe ansteuern.
-
@mathopa1973 Leider keine Bilder angekommen. Manchmal verliert der Browser die Verbindung, dann F5 drücken und das Bild nochmal laden. Die andere Zeile komplett löschen (.....Lade 100% hoch).
-
@mathopa1973 Wenn jetzt die Leichtverpackungen dran sind, dann geht im ical der DP auf true und es wird in der VIS der gelbe Balken angezeigt. Und zurzeit wird direkt über Broadlink eine RGB-Lampe auf gelb gesetzt und leuchtet dann den ganzen Tag gelb?
Und du möchtest jetzt, wenn die gelbe und blaue Tonne dran sind, dass das RGB-Licht abwechselnd blau und gelb leuchtet? Wie lange den ganzen Tag?Wie lange läuft eine Szene für eine Farbe bzw Abfallsorte?
Was setzt die DP auf false? Die Szene Lampe aus? -
@mcu ja, soweit richtig. Aber keine Sorge -es leuchtet nicht den ganzen Tag. Sieh mal im Auszug der Visualisierung. Unterhalb des Bereiches wo die Farbbalken erscheinen ist ein Schalter, der wird automatisch bei aktivem Balken und Licht auf True gesetzt. Über diesen kann ich dann (im Idealfall nachdem ich die betreffende Müllsorte an die Straße gestellt haben, das Licht dann ausschalten.
Klar führt die Art aktuell noch dazu, das bei Neuaufruf der Visualisierung alles von vorne beginnt und das Licht wieder angeht - aber ich brauche ja nicht extra aufstehen um das Licht dann wieder auszumachen. Außerdem würde ja dann nochmals erinnern, wenn man das Licht ausgemacht hat ohne den Müll an die Straße zu stellen. Aber Deine Sorge, dass das Licht dann ganztägig brennen würde kann ich nehmen.
Sicherlich könnte man noch irgendwie einen Tagesmerker programmieren (würde die Lampe am heutigen Datum schon einmal ausgeschaltet = True dann lass das Licht aus, automatisch wieder auf False bei Tageswechsel), aber was eben, wenn man eben das Licht einfach nur ausschaltet ohne sich um den Müll zu kümmern. Insofern würde ich die bestehende Variante diesbezüglich rst einmal belassen.
Und ja, mein primäres Ziel verfolgt die Fragestellung, was wenn an einem Tag z.B. Leichtveroackubfen und Papiertonnenan die Straße müssen? Hier würde ich dann gerne einen abwechselnden Blinken zwischen gelb und blau gaben wollen. Aber wie?
Hier nochmal die Struktur der iCal.objekt-Events und die der Broadlink-Szenen.
Und nun, bitte nicht lachen, hab ich mal mit einfachen Worten einen Logikablauf aufgeschrieben, wie ich mir vorstellen könnte, dass mein Vorhaben funktioniert...
Er soll dann quasi, wenn mehr als einmal True bei den ical-Events steht eine Schleife so lange durchlaufen bis der Aus-Schalter betätigt wird. In der Schleife soll über wenn/dann der Reihe nach die Events abgefragt werden und wenn truedas betreffende Licht/Farbe einschalten und z.b. 10 Sekunden warten ehe der Code weiter verarbeitet wird (der Timer nur wenn True und daher und-verknüpft in der Dann-Phrase).
So müsste es dann doch rein theoretisch funktionieren, dass egal ob 2 oder 3 Müllsorten an die Strasse gestellt werden müssten, dann eben 2 oder 3 Lichter immer abwechselnd für 10 Sekunden leuchten. Oder habe ich da einen Logikfehler drin?
Und wie Und wo müsste ich das dann als Java-Skript reinsetzen? Mit je kenne ich mich nicht sonderlich aus, meine Programmierkenntnisse beschränken sich überwiegend auf vb/hab und ein bisschen html/php/CSS.
Die Anzeige in der Visualisierung kann ja auch ruhig den ganzen Tag an sein, damit die Lampe nicht ab Mitternacht leuchtet könnte man das Einschalten dieser ja auch mit einer zeitlichen UND-Verknüpfung versehen: Wenn iCal.event.zähler => 1 und aktuelle Zeit =6 Uhr oder wenn iCal.event.zähler => 1 und aktuelle Zeit =16 Uhr dann Lichtfunktion starten. So müssten es ja wohl von der Logik sein damit einmal um 6 und 16 Uhr jeweils das Lichtsignal angestellt wird. Oder geht sowas nicht in js ?
-
Du musst den SzenenPfad und AusID anpassen.
Es funktioniert jetzt so, dass du mit der ID START (true), die BLINK-Funktion startest. Dann wird geprüft, welche Müllsorten in ical.0.events.1 auf true stehen und entsprechend für das BLINKEN genutzt.
Setzt du die Lampe aus auf TRUE so wird das Intervall abgebrochen.
Sobald du wieder ID START auf true setzt fängt er mit dem Intervall wieder an.
So kannst selbst entscheiden, ob du es mehrfach einschalten möchtest.
Dies kann also auch ein Sensor sein, der das entsprechend auslöst_> START-ID auf true setzen.
ID LISTE zeigt nur die Namen der Müllsorten an, die aktiv sind. -
@mcu vielen Dank für Deine Hilfe. Mit Blockly habe zwar noch wirklich überhaupt keine Berührungspunkte gehabt aber das werde ich auf jeden Fall probieren. Danke.