NEWS
Let's Bastel LED Lampe steuern
-
Im Discord hat @nox309 gefragt ob es eine Möglichkeit gibt die Let's Bastel LED Lampe mit ioBroker zu steuern.
Da ich das ganz Interessant fand hab ich mir das mal angesehen und dieses Skript zum Steuern geschrieben.Die Lampe gibt ihren Status nicht zurück, was bedeutet wird sie von der Weboberfläche aus gesteuert weis ioBroker nichts davon.
Außerdem muss man Prüfen ob die Lampe erreichbar ist oder nicht. Falls nicht muss das Skript neu gestartet werden.
Die Überwachung kann per Ping mit Net-Tools oder Ping Adapter realisiert werden.Edit: Ich hab für die Verbindungsprüfung einen boolschen Datenpunkt vorgesehen. Wenn man den einträgt wird die Verbindung neu hergstellt wenn der Datenpunit von false auf true wechselt.
Edit 1: Neue Version beinhaltet Error handling bei Fehlgeschlagenem Verbindungsversuch der zum Absturz der JavaScript instanz führt. Und die States bekommen jetzt ein ack = true wenn der Befehl vom Skript angenommen wurde.
Hier ist das Skript:
/* Skript zum Steuern der "Let's Bastel LED Lampe" Version: 1.2.0 Author: Jey Cee Date: 06.01.2023 */ /* Vorraussetzungen: - Modul "ws" muss in den Eistellungen der Javascript Adapter instanz eingetragen sein - setObject muss in den Einstellungen der Javascript Adapter instanz Aktiviert sein Einschränkungen: - Die Lampe gibt keine Rückmeldung über ihren Zustand. */ const ip = "192.168.0.245" // Hier die IP Adresse der Lampe angeben. const port = 81 // Nur ändern wenn es im code der Lampe geändert wurde. const baseId = "0_userdata.0.LetsBastelLEDLampe" // Muss immer in 0_userdata.0 sein. const alive = "" // Datenpunkt zur Überwachung ob die Lampe noch erreichbar ist. Wenn nichts eingetragen wird gibt es keine Überwachung. /*-----------------------------------------------------------------------------------------------------------*/ const WebSocket = require('ws'); main(); async function main() { let ws; // Objekte anlegen await createObjects(); // Verbindung aufbauen ws = new WebSocket(`ws://${ip}:${port}`); if(alive !== ""){ log("Verbindung Überwachen"); // Neu verbinden wenn die Verbindung verloren wurde on({id: alive}, (obj) => { if(obj.state.val === false) { log("Verbindung verloren"); ws.terminate(); setState(`${baseId}.connected`, false); } else if (obj.state.val === true) { ws = new WebSocket(`ws://${ip}:${port}`); } }) } ws.on("open",() => { setState(`${baseId}.connected`, true); }); ws.on("close", () => { setState(`${baseId}.connected`, false); }) ws.on("error", (error) => { log(error); }) on({id: `${baseId}.on`, ack: false}, (obj) => { setState(`${baseId}.on`, {val: obj.state.val, ack: true}); ws.send('{"type":"control","value":0,"id":"on","date": ' + Date.now() + '}'); }) on({id: `${baseId}.off`, ack: false}, (obj) => { setState(`${baseId}.off`, {val: obj.state.val, ack: true}); ws.send('{"type":"control","value":1,"id":"off","date": ' + Date.now() + '}'); }) on({id: `${baseId}.dimDown`, ack: false}, (obj) => { setState(`${baseId}.dimDown`, {val: obj.state.val, ack: true}); ws.send('{"type":"control","value":3,"id":"dunkel","date": ' + Date.now() + '}'); }) on({id: `${baseId}.dimUp`, ack: false}, (obj) => { setState(`${baseId}.dimUp`, {val: obj.state.val, ack: true}); ws.send('{"type":"control","value":2,"id":"hell","date": ' + Date.now() + '}'); }) on({id: `${baseId}.flash`, ack: false}, (obj) => { setState(`${baseId}.flash`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":1,"id":"FLASH","date": ' + Date.now() + '}'); }) on({id: `${baseId}.smooth`, ack: false}, (obj) => { setState(`${baseId}.smooth`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":2,"id":"SMOOTH","date": ' + Date.now() + '}'); }) on({id: `${baseId}.fade`, ack: false}, (obj) => { setState(`${baseId}.fade`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":3,"id":"FADE","date": ' + Date.now() + '}'); }) on({id: `${baseId}.rainbow`, ack: false}, (obj) => { setState(`${baseId}.rainbow`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":4,"id":"Rainbow","date": ' + Date.now() + '}'); }) on({id: `${baseId}.push`, ack: false}, (obj) => { setState(`${baseId}.push`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":5,"id":"Push","date": ' + Date.now() + '}'); }) on({id: `${baseId}.wave`, ack: false}, (obj) => { setState(`${baseId}.wave`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":6,"id":"Wave","date": ' + Date.now() + '}'); }) on({id: `${baseId}.swipe`, ack: false}, (obj) => { setState(`${baseId}.swipe`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":7,"id":"Swipe","date": ' + Date.now() + '}'); }) on({id: `${baseId}.cycles`, ack: false}, (obj) => { setState(`${baseId}.cycles`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":8,"id":"Cycles","date": ' + Date.now() + '}'); }) on({id: `${baseId}.pictures`, ack: false}, (obj) => { setState(`${baseId}.pictures`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":9,"id":"Pictures","date": ' + Date.now() + '}'); }) on({id: `${baseId}.random`, ack: false}, (obj) => { setState(`${baseId}.random`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":10,"id":"Random","date": ' + Date.now() + '}'); }) on({id: `${baseId}.theater`, ack: false}, (obj) => { setState(`${baseId}.theater`, {val: obj.state.val, ack: true}); ws.send('{"type":"function","value":11,"id":"Theater","date": ' + Date.now() + '}'); }) on({id: `${baseId}.allRandom`, ack: false}, (obj) => { setState(`${baseId}.allRandom`, {val: obj.state.val, ack: true}); ws.send('{"type":"random","value":1,"id":"AllRandom","date": ' + Date.now() + '}'); }) on({id: `${baseId}.speed`, ack: false}, (obj) => { setState(`${baseId}.speed`, {val: obj.state.val, ack: true}); ws.send('{"type":"Slider","value":' + obj.state.val + ',"id":"Slider","date": ' + Date.now() + '}'); }) on({id: `${baseId}.color`, ack: false}, (obj) => { setState(`${baseId}.color`, {val: obj.state.val, ack: true}); ws.send('{"type":"color","value":' + obj.state.val + ',"date": ' + Date.now() + '}'); }) } async function createObjects() { // Geräte Objekt await setObject(baseId, { type: "device", common: { name: "Lets Bastel LED Lampe", desc: "https://www.youtube.com/watch?v=_dnkPRUN0KQ", role: "", icon: "" } }) // Connected setObject(`${baseId}.connected`, { type: "state", common: { name: "Verbunden", role: "indicator", type: "boolean", read: true, write: true, def: false }, native: {} }) // An setObject(`${baseId}.on`, { type: "state", common: { name: "Ein", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Aus setObject(`${baseId}.off`, { type: "state", common: { name: "Aus", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Dunkler setObject(`${baseId}.dimDown`, { type: "state", common: { name: "Dimmen Dunkler", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Heller setObject(`${baseId}.dimUp`, { type: "state", common: { name: "Dimmen Heller", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) /*---- Effekte ----*/ // Flash setObject(`${baseId}.flash`, { type: "state", common: { name: "Effekt Flash", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Smooth setObject(`${baseId}.smooth`, { type: "state", common: { name: "Effekt Smooth", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Fade setObject(`${baseId}.fade`, { type: "state", common: { name: "Effekt Fade", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Rainbow setObject(`${baseId}.rainbow`, { type: "state", common: { name: "Effekt Rainbow", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Push setObject(`${baseId}.push`, { type: "state", common: { name: "Effekt Push", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Wave setObject(`${baseId}.wave`, { type: "state", common: { name: "Effekt wave", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Swipe setObject(`${baseId}.swipe`, { type: "state", common: { name: "Effekt swipe", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Cycles setObject(`${baseId}.cycles`, { type: "state", common: { name: "Effekt Cycles", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Pictures setObject(`${baseId}.pictures`, { type: "state", common: { name: "Effekt Pictures", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Random setObject(`${baseId}.random`, { type: "state", common: { name: "Effekt Zufällig", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Theater setObject(`${baseId}.theater`, { type: "state", common: { name: "Effekt Theater", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // All Random setObject(`${baseId}.allRandom`, { type: "state", common: { name: "Zufällig", role: "button", type: "boolean", read: false, write: true, def: false }, native: {} }) // Slider setObject(`${baseId}.speed`, { type: "state", common: { name: "Effekt Geschwindigkeit", role: "level", type: "number", read: false, write: true, def: 500, min: 10, max: 1000 }, native: {} }) // Color setObject(`${baseId}.color`, { type: "state", common: { name: "Effekt Geschwindigkeit", role: "state", type: "number", read: false, write: true, def: 3, states: { 0: "Rot", 1: "Grün", 2: "Blau", 3: "Weiß", 4: "Rot 1", 5: "Grün 1", 6: "Blau 1", 7: "Rot 2", 8: "Grün 2", 9: "Blau 2", 10: "Rot 3", 11: "Grün 3", 12: "Blau 3", 13: "Rot 4", 14: "Grün 4", 15: "Blau 4" } }, native: {} }) }
-
@jey-cee naja, schön, daß du dir die arbeit gemacht hast. allerdinx gibts da halt schon WLED, auch als adapter.
was man in das dingens vom michl einbaut...
https://www.youtube.com/watch?v=rrR0ZK5PIcI&t=6s vom OsLee540i -
@da_woody schaut ja nett aus, aber wielange hält man das aus, wenn diese lichter non-stop so durchblinken - wie bei ihm im video am schluß - kannst gleich den therapeuten anrufen und einen termin machen wegen plötzlich-unerklärbarer hyperaktivität
-
@da_woody sagte in Let's Bastel LED Lampe steuern:
allerdinx gibts da halt schon WLED, auch als adapter.
Das ist mir durchaus bewusst, benutze ich ja auch selbst.
Aber das ist kein Grund das nicht zu machen. -
@liv-in-sky nuja, vor langer, langer zeit hats in der disco nicht genug blinken können...
muss ja nicht, kann aber. -
@jey-cee sagte in Let's Bastel LED Lampe steuern:
Aber das ist kein Grund das nicht zu machen.
okido, klar, ist kein grund. ich dachte nur, weil das video doch schon einige jahre am buckel hat.
-
@da_woody
wie werden alle älter