NEWS
ESP8266 RGB LEDs wia MQTT ansteuern und dimmen HILFE!
-
Hallo Kollegen, benötige mal wieder Hilfe.
Versuche mich diesesmal an einem RGB Kontroller für einen RGB LED Schlauch 12V und komme an einer Stelle nicht weiter…
Ich habe mich hier bedient:
https://github.com/corbanmailloux/esp-mqtt-rgb-led
sketch:
! /*
! * ESP8266 MQTT Lights for Home Assistant.
! *
! * This file is for RGB (red, green, and blue) lights.
! *
! * See https://github.com/corbanmailloux/esp-mqtt-rgb-led
! /
! // Set configuration options for pins, WiFi, and MQTT in the following file:
! #include "config.h"
! // https://github.com/bblanchon/ArduinoJson
! #include <arduinojson.h>#include <esp8266wifi.h>// http://pubsubclient.knolleary.net/
! #include <pubsubclient.h>const int redPin = CONFIG_PIN_RED;
! const int txPin = 1; // On-board blue LED
! const int greenPin = CONFIG_PIN_GREEN;
! const int bluePin = CONFIG_PIN_BLUE;
! const char ssid = CONFIG_WIFI_SSID;
! const char* password = CONFIG_WIFI_PASS;
! const char* mqtt_server = CONFIG_MQTT_HOST;
! const char* mqtt_username = CONFIG_MQTT_USER;
! const char* mqtt_password = CONFIG_MQTT_PASS;
! const char* client_id = CONFIG_MQTT_CLIENT_ID;
! // Topics
! const char* light_state_topic = CONFIG_MQTT_TOPIC_STATE;
! const char* light_set_topic = CONFIG_MQTT_TOPIC_SET;
! const char* on_cmd = CONFIG_MQTT_PAYLOAD_ON;
! const char* off_cmd = CONFIG_MQTT_PAYLOAD_OFF;
! const int BUFFER_SIZE = JSON_OBJECT_SIZE(10);
! // Maintained state for reporting to HA
! byte red = 255;
! byte green = 255;
! byte blue = 255;
! byte brightness = 255;
! // Real values to write to the LEDs (ex. including brightness and state)
! byte realRed = 0;
! byte realGreen = 0;
! byte realBlue = 0;
! bool stateOn = false;
! // Globals for fade/transitions
! bool startFade = false;
! unsigned long lastLoop = 0;
! int transitionTime = 0;
! bool inFade = false;
! int loopCount = 0;
! int stepR, stepG, stepB;
! int redVal, grnVal, bluVal;
! // Globals for flash
! bool flash = false;
! bool startFlash = false;
! int flashLength = 0;
! unsigned long flashStartTime = 0;
! byte flashRed = red;
! byte flashGreen = green;
! byte flashBlue = blue;
! byte flashBrightness = brightness;
! WiFiClient espClient;
! PubSubClient client(espClient);
! void setup() {
! pinMode(redPin, OUTPUT);
! pinMode(greenPin, OUTPUT);
! pinMode(bluePin, OUTPUT);
! pinMode(txPin, OUTPUT);
! digitalWrite(txPin, HIGH); // Turn off the on-board LED
! analogWriteRange(255);
! // Serial.begin(115200);
! setup_wifi();
! client.setServer(mqtt_server, 1883);
! client.setCallback(callback);
! }
! void setup_wifi() {
! delay(10);
! // We start by connecting to a WiFi network
! Serial.println();
! Serial.print("Connecting to ");
! Serial.println(ssid);
! WiFi.mode(WIFI_STA);
! WiFi.begin(ssid, password);
! while (WiFi.status() != WL_CONNECTED) {
! delay(500);
! Serial.print(".");
! }
! Serial.println("");
! Serial.println("WiFi connected");
! Serial.println("IP address: ");
! Serial.println(WiFi.localIP());
! }
! /*
! SAMPLE PAYLOAD:
! {
! "brightness": 120,
! "color": {
! "r": 255,
! "g": 100,
! "b": 100
! },
! "flash": 2,
! "transition": 5,
! "state": "ON"
! }
! /
! void callback(char topic, byte* payload, unsigned int length) {
! Serial.print("Message arrived [");
! Serial.print(topic);
! Serial.print("] ");
! char message[length + 1];
! for (int i = 0; i < length; i++) {
! message = (char)payload;
! }
! message[length] = '\0';
! Serial.println(message);
! if (!processJson(message)) {
! return;
! }
! if (stateOn) {
! // Update lights
! realRed = map(red, 0, 255, 0, brightness);
! realGreen = map(green, 0, 255, 0, brightness);
! realBlue = map(blue, 0, 255, 0, brightness);
! }
! else {
! realRed = 0;
! realGreen = 0;
! realBlue = 0;
! }
! startFade = true;
! inFade = false; // Kill the current fade
! sendState();
! }
! bool processJson(char* message) {
! StaticJsonBuffer <buffer_size>jsonBuffer;
! JsonObject& root = jsonBuffer.parseObject(message);
! if (!root.success()) {
! Serial.println("parseObject() failed");
! return false;
! }
! if (root.containsKey("state")) {
! if (strcmp(root["state"], on_cmd) == 0) {
! stateOn = true;
! }
! else if (strcmp(root["state"], off_cmd) == 0) {
! stateOn = false;
! }
! }
! // If "flash" is included, treat RGB and brightness differently
! if (root.containsKey("flash")) {
! flashLength = (int)root * 1000;
! if (root.containsKey("brightness")) {
! flashBrightness = root["brightness"];
! }
! else {
! flashBrightness = brightness;
! }
! if (root.containsKey("color")) {
! flashRed = root["r"];
! flashGreen = root["g"];
! flashBlue = root**;
! }
! else {
! flashRed = red;
! flashGreen = green;
! flashBlue = blue;
! }
! flashRed = map(flashRed, 0, 255, 0, flashBrightness);
! flashGreen = map(flashGreen, 0, 255, 0, flashBrightness);
! flashBlue = map(flashBlue, 0, 255, 0, flashBrightness);
! flash = true;
! startFlash = true;
! }
! else { // Not flashing
! flash = false;
! if (root.containsKey("color")) {
! red = root["r"];
! green = root["g"];
! blue = root**;
! }
! if (root.containsKey("brightness")) {
! brightness = root["brightness"];
! }
! if (root.containsKey("transition")) {
! transitionTime = root["transition"];
! }
! else {
! transitionTime = 0;
! }
! }
! return true;
! }
! void sendState() {
! StaticJsonBuffer <buffer_size>jsonBuffer;
! JsonObject& root = jsonBuffer.createObject();
! root["state"] = (stateOn) ? on_cmd : off_cmd;
! JsonObject& color = root.createNestedObject("color");
! color["r"] = red;
! color["g"] = green;
! color = blue;
! root["brightness"] = brightness;
! char buffer[root.measureLength() + 1];
! root.printTo(buffer, sizeof(buffer));
! client.publish(light_state_topic, buffer, true);
! }
! void reconnect() {
! // Loop until we're reconnected
! while (!client.connected()) {
! Serial.print("Attempting MQTT connection…");
! // Attempt to connect
! if (client.connect(client_id, mqtt_username, mqtt_password)) {
! Serial.println("connected");
! client.subscribe(light_set_topic);
! } else {
! Serial.print("failed, rc=");
! Serial.print(client.state());
! Serial.println(" try again in 5 seconds");
! // Wait 5 seconds before retrying
! delay(5000);
! }
! }
! }
! void setColor(int inR, int inG, int inB) {
! analogWrite(redPin, inR);
! analogWrite(greenPin, inG);
! analogWrite(bluePin, inB);
! Serial.println("Setting LEDs:");
! Serial.print("r: ");
! Serial.print(inR);
! Serial.print(", g: ");
! Serial.print(inG);
! Serial.print(", b: ");
! Serial.println(inB);
! }
! void loop() {
! if (!client.connected()) {
! reconnect();
! }
! client.loop();
! if (flash) {
! if (startFlash) {
! startFlash = false;
! flashStartTime = millis();
! }
! if ((millis() - flashStartTime) <= flashLength) {
! if ((millis() - flashStartTime) % 1000 <= 500) {
! setColor(flashRed, flashGreen, flashBlue);
! }
! else {
! setColor(0, 0, 0);
! // If you'd prefer the flashing to happen "on top of"
! // the current color, uncomment the next line.
! // setColor(realRed, realGreen, realBlue);
! }
! }
! else {
! flash = false;
! setColor(realRed, realGreen, realBlue);
! }
! }
! if (startFade) {
! // If we don't want to fade, skip it.
! if (transitionTime == 0) {
! setColor(realRed, realGreen, realBlue);
! redVal = realRed;
! grnVal = realGreen;
! bluVal = realBlue;
! startFade = false;
! }
! else {
! loopCount = 0;
! stepR = calculateStep(redVal, realRed);
! stepG = calculateStep(grnVal, realGreen);
! stepB = calculateStep(bluVal, realBlue);
! inFade = true;
! }
! }
! if (inFade) {
! startFade = false;
! unsigned long now = millis();
! if (now - lastLoop > transitionTime) {
! if (loopCount <= 1020) {
! lastLoop = now;
! redVal = calculateVal(stepR, redVal, loopCount);
! grnVal = calculateVal(stepG, grnVal, loopCount);
! bluVal = calculateVal(stepB, bluVal, loopCount);
! setColor(redVal, grnVal, bluVal); // Write current values to LED pins
! Serial.print("Loop count: ");
! Serial.println(loopCount);
! loopCount++;
! }
! else {
! inFade = false;
! }
! }
! }
! }
! // From https://www.arduino.cc/en/Tutorial/ColorCrossfader
! / BELOW THIS LINE IS THE MATH -- YOU SHOULDN'T NEED TO CHANGE THIS FOR THE BASICS
! *
! * The program works like this:
! * Imagine a crossfade that moves the red LED from 0-10,
! * the green from 0-5, and the blue from 10 to 7, in
! * ten steps.
! * We'd want to count the 10 steps and increase or
! * decrease color values in evenly stepped increments.
! * Imagine a + indicates raising a value by 1, and a -
! * equals lowering it. Our 10 step fade would look like:
! *
! * 1 2 3 4 5 6 7 8 9 10
! * R + + + + + + + + + +
! * G + + + + +
! * B - - -
! *
! * The red rises from 0 to 10 in ten steps, the green from
! * 0-5 in 5 steps, and the blue falls from 10 to 7 in three steps.
! *
! * In the real program, the color percentages are converted to
! * 0-255 values, and there are 1020 steps (2554).
! *
! * To figure out how big a step there should be between one up- or
! * down-tick of one of the LED values, we call calculateStep(),
! * which calculates the absolute gap between the start and end values,
! * and then divides that gap by 1020 to determine the size of the step
! * between adjustments in the value.
! /
! int calculateStep(int prevValue, int endValue) {
! int step = endValue - prevValue; // What's the overall gap?
! if (step) { // If its non-zero,
! step = 1020/step; // divide by 1020
! }
! return step;
! }
! / The next function is calculateVal. When the loop value, i,
! * reaches the step size appropriate for one of the
! * colors, it increases or decreases the value of that color by 1.
! * (R, G, and B are each calculated separately.)
! /
! int calculateVal(int step, int val, int i) {
! if ((step) && i % step == 0) { // If step is non-zero and its time to change a value,
! if (step > 0) { // increment the value if step is positive...
! val += 1;
! }
! else if (step < 0) { // ...or decrement it if step is negative
! val -= 1;
! }
! }
! // Defensive driving: make sure val stays in the range 0-255
! if (val > 255) {
! val = 255;
! }
! else if (val < 0) {
! val = 0;
! }
! return val;
! }*</buffer_size></buffer_size>____</pubsubclient.h></esp8266wifi.h></arduinojson.h> __****__Dort sind zwei Sketche-RGB (3 Kanal mit MQTT
-Brightness (1 Kanal mit MQTT)
ich habe mein ESP8266 mit RGB Sketch betankt. In der Datei config-sample.h sollen Netz, Passwörter und die Ausgänge des ESP´s konfiguriert werden.
Beim kompilieren gab es nen Fehler, da die Datei im Sketch als config.h und nicht config-sample.h eingetragen ist. Dies nur als Hinweiss für Leute, die es nachbauen möchten.
Nach einem Reboot des ESP´s wird eine Verbindung mit MQTT Adapter hergestellt!
Unter Admin/Objekte/MQTT - tauche zwei neue Ordner auf.
Weiterhin im Link ist die Konfiguration an einem Home Assistant Programm beschrieben, was ich nicht nutzen möchte.
Ich würde gerne den ESP Kontroller aus dem MQTT Adapter steuern können. Leider fehlen noch States und die ganzen Werte für RGB, brightness und transition…
Im Text weiter unten steht noch dies hier:
By sending a JSON payload (in an MQTT message), Home Assistant can include whichever fields are necessary, reducing the round trips from 3 to 1. For example, this is a sample payload including all of the fields:__
By sending a JSON payload (in an MQTT message), Home Assistant can include whichever fields are necessary, reducing the round trips from 3 to 1\. For example, this is a sample payload including all of the fields: { "state": "ON", "brightness": 120, "color": { "r": 255, "g": 100, "b": 100 }, "transition": 5 }
Wer von den schlauen Kollegen kann mir da weiterhelfen und sagen wie und vor allem was noch unter MQTT/Home/rgb1 dort eizutragen ist, damit ich da den ESP´vom Server aus ansteuern kann?
Den Home Assistant möchte ich nicht nutzen. Der serieller Monitor vom IDE schein auch keine Befehle anzunehmen…. Möglicherweise würden die Werte von alleine unter MQTT Adapter auftauchen, sobald man die ESP von Außen angesteuert hätte...
Wer kann helfen Kollegen?__ __1526_esp_rgb_led_bb.png
1526_unbenannt1.jpg******__ -
In dem Ordner MQTT.0/home/rgb1 ist wirklich nichts weiter drin??? Ist ja schließlich ein Dreieck davor, so als ob's da noch was aufzuklappen gäbe…
Hast du mal die Baumansicht aktualisiert?
-
In dem Ordner MQTT.0/home/rgb1 ist wirklich nichts weiter drin??? Ist ja schließlich ein Dreieck davor, so als ob's da noch was aufzuklappen gäbe…
Hast du mal die Baumansicht aktualisiert? `
Ja Baumstruktur war bereits aufgeklappt, trotzdem nichts sichbares vorgefunden.
Heute noch mal von einem anderen Rechner probiert und siehe da, es ist etaws drin es sieht wirklich danach aus, dass die Seite sich nicht aktualisiert hatte.
Jetzt ist aber mein Wemo nicht am Netz. Sobald ich zu Hause bin probiere ich es nochmal aus, ob noch andere Werte dort auftauchen mögen….
Ich melde mich mal...
1526_unbenannt1.jpg -
so, jetzt mal eben alles angeschlossen. Die Kanäle sind zur Zeit aus…. bekomme sie aber nicht an
Unter MQTT Adapter sieht man nur das, was ich oben als Bild hinzugefügt habe.
Kann man es vom Sketch ableiten, wie ich das Teil aus dem MQTT Server ansprechen kann ???
-
Sicher kann man aus dem Sketch ableiten womit du den Datenpunkt füttern musst um Einstellungen an den ESP zu senden - im Prinzip hast du das ja auch schon rausgefunden nämlich indem man ein JSON in die MQTT-Message packt.
Aber das ist der zweite Schritt. Erstmal musst du eine Verbindung haben über die du überhaupt was schicken kannst. Kannst du mal noch die Einstellungen deines MQTT-Adapters posten?
-
anbei das Bild mit der Einstellung.
1526_unbenannt2.png -
Einstellungen scheinen erstmal OK. Wobei du die beiden Haken die drin sind mal probeweise rausnehmen kannst, ich hab die bei mir jedenfalls nicht drin. Dafür kannst du mal den untersten Haken mit dem "Chunking" setzen, der ist für ein Problem gut was glaube ich sogar irgendwie mit dem ESP zu tun hatte - gibt's hier irgendwo einen Thread dazu.
Nächste Frage, wieso gehst du überhaupt davon aus dass du keine Verbindung hast? Was steht denn in dem Datenpunkt "mqtt.0.info.connection"? Ist da dein ESP mit aufgeführt?
-
Einstellungen scheinen erstmal OK. Wobei du die beiden Haken die drin sind mal probeweise rausnehmen kannst, ich hab die bei mir jedenfalls nicht drin. Dafür kannst du mal den untersten Haken mit dem "Chunking" setzen, der ist für ein Problem gut was glaube ich sogar irgendwie mit dem ESP zu tun hatte - gibt's hier irgendwo einen Thread dazu.
Nächste Frage, wieso gehst du überhaupt davon aus dass du keine Verbindung hast? Was steht denn in dem Datenpunkt "mqtt.0.info.connection"? Ist da dein ESP mit aufgeführt? `
Hi, Danke…
Der Haken "Chunking" bewirkt ein ständiges Neustarten des Adapters:
hier ein Log:
host.orangepiplus2e 2017-07-06 05:29:20.204 error instance system.adapter.mqtt.0 terminated with code 0 (OK) mqtt.0 2017-07-06 05:29:20.128 info terminating mqtt.0 2017-07-06 05:29:19.613 info Client [ESPRGBLED] closed mqtt.0 2017-07-06 05:29:19.598 error at writeOrBuffer (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/readable-stream/lib/_stream_writable.js:395:5) mqtt.0 2017-07-06 05:29:19.598 error at doWrite (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/readable-stream/lib/_stream_writable.js:406:64) mqtt.0 2017-07-06 05:29:19.598 error at Connection.Duplexify._write (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/duplexify/index.js:201:22) mqtt.0 2017-07-06 05:29:19.598 error at Writable.write (_stream_writable.js:243:11) mqtt.0 2017-07-06 05:29:19.598 error at writeOrBuffer (_stream_writable.js:317:5) mqtt.0 2017-07-06 05:29:19.598 error at doWrite (_stream_writable.js:331:12) mqtt.0 2017-07-06 05:29:19.598 error at Writable.write [as _write] (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/lib/writeToStream.js:10:9) mqtt.0 2017-07-06 05:29:19.598 error at generate (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-packet/writeToStream.js:32:14) mqtt.0 2017-07-06 05:29:19.598 error at suback (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-packet/writeToStream.js:385:23) mqtt.0 2017-07-06 05:29:19.598 error at Function.Buffer.concat (buffer.js:304:24) mqtt.0 2017-07-06 05:29:19.598 error TypeError: Cannot read property 'length' of undefined mqtt.0 2017-07-06 05:29:19.597 error uncaught exception: Cannot read property 'length' of undefined mqtt.0 2017-07-06 05:29:19.556 info Client [ESPRGBLED] subscribes on topic "home/rgb1/set" mqtt.0 2017-07-06 05:29:19.437 info Client [ESPRGBLED] connected mqtt.0 2017-07-06 05:29:18.436 info Starting MQTT authenticated server on port 1883 mqtt.0 2017-07-06 05:29:17.073 info starting. Version 1.3.2 in /opt/iobroker/node_modules/iobroker.mqtt, node: v6.11.0 host.orangepiplus2e 2017-07-06 05:29:14.888 info instance system.adapter.mqtt.0 started with pid 10386
Habe den Haken wieder herausgenommen. Verbindung zum ESP ist gegeben! Die LED des Adaptes wird auch grün und im Log gibt es auch ein Eintrag dass ein Client konecktet ist.
Ich kann es leider aus dem MQTT Server nicht ansteuern, da ich die Befehle nicht kenne. Das ist mein Problem.
Es macht den Eindruck dass noch andere Parameter dort unten fehlen…
brightness, state, color RGB, transition... schue Dir mal das Bild an, wie die Parameter des AC Dimmers aussehen.... Dort ist alles notwendige um es komplett bedienen zu können.
Beim RGB Kontroller sieht es mau aus...
1526_unbenannt2.png
1526_unbenannt3.png -
Ah - OK. Sorry, dann hatte ich deine obigen Posts falsch verstanden weil du geschrieben hattest dass die Kanäle nicht an sind…
Dann ist ja soweit erstmal alles gut. Dann musst Du jetzt lediglich die Variable "home/rgb1/set" mit dem entsprechenden Inhalt befüllen. Ein Beispiel dafür steht ja im Script:
{
"state": "ON",
"brightness": 120,
"color": {
"r": 255,
"g": 100,
"b": 100
},
"transition": 5
}
Ich würde einfach erstmal dieses Beispiel händisch in den Datenpunkt kopieren und schauen was passiert und ggf. ein bisschen mit den Werten spielen.
Wie du den Inhalt dann automatisch bzw. gesteuert befüllst ist eigentlich auch kein Hexenwerk. Bist du schon ein wenig mit Javascript befreundet?
-
leider nicht, bin aber gerne durchaus bereit ein wenig zu lernen. Ich habe einiges in Blockly geschrieben. Kannst Du mir nen Tipp geben wie ich die Variable "home/rgb1/set" mit dem entsprechenden Inhalt befülle ???
-
Hm - naja mit Blockly bin ich wieder draußen, solche grafischen WYSIWYG-Dingsdas sind mir ein Graus. Aber wir werden das schon hinbekommen…
Wie du die Variable befüllst? Für den Anfang ganz einfach. Du markierst das in meinem letzten Post enthaltenen Beispiel-JSON von "{" bis "}" und nimmst den mittels rechter Maustaste und "Kopieren" in die Zwischenablage. Dann gehst du in den ioBroker.admin.Objekte auf deine entsprechende Zeile und klickst hinten in die Spalte "Wert" (da wo jetzt noch nichts steht). Damit sollte der Wert editierbar werden. Dann fügst du einfach die Daten aus der Zwischenablage ein und bestätigst die Eingabe. Und dann hoffen wir dass sich in deinem RGB-Controller was tut...
-
excellent
esss geeeehhhhtttt :mrgreen:
Bekomme jetzt mit ON und OFF das Teil ein und aus geschaltet, mit brightness gedimmt und mit den farbwerten die Farbe eingestellt. Selbst das Faden lässt sich einstellen.
Ich versuchte gerade nur mit einem Kanal. Heute Abend werden noch die zusätzliche zwei Kanäle angeschlossen und an einer RGB LED ausprobiert.
Jetzt muß ich mir mal gedanken machen wie ich ein Virtual Taster oder ähnliches erstellen kann, damit ich das Teil noch vom VIS steuern kann. Für den Anfang reicht ein EIN/AUS. Damit währe ich zufrieden. Kannst Du mir noch nen Tip geben?
Danke auf jeden Fall, keiner wollte so richtig helfen.
-
Na siehste - geht doch
Für die komfortable Ansteuerung versuche ich dir heute Abend mal was zu basteln. Wird aber sicherlich ein Script werden…
-
Danke, freu mich schon drauf…
ich mach schon mal provisorisch ein paar Mosfet´s ran...
1526_img_20170706_163920.jpg -
so, jetzt mal provisorisch die Schaltung aufgebaut und optimiert. Ich hatte leider nur zwei Mosfet´s, so dass ich nur mit zwei Kanälen testen konnte. Mehr ist unterwegs :mrgreen:
Ich habe dazu die IRLZ44N Mosfets verwendet. Um das Faden noch geschmeidiger zu geschalten, wurden noch drei 47K Widerständer zwischen Gate und GND als (pulldown) eingebaut.
Die seltsamen Widerstände im Bild zwischen VCC 3,3V und Gate habe ich weggelassen. Einer eine Idee wofür soetwas gut ist? Es funktioniert in jedem Fall ohne. :lol:
1526_1.jpg
1526_esp_rgb_led_bb.png -
So, ich habe dir mal ein Script gebastelt.
! ````
var idRGB1_state = 'javascript.0.RGB1.state';
var idRGB1_brightness = 'javascript.0.RGB1.brightness';
var idRGB1_red = 'javascript.0.RGB1.red';
var idRGB1_green = 'javascript.0.RGB1.green';
var idRGB1_blue = 'javascript.0.RGB1.blue';
var idRGB1_transition = 'javascript.0.RGB1.transition';
var idRGB1_MQTT_Set = 'mqtt.0.home.rgb1.set' //ggf. korrigieren
! createState(idRGB1_state, {type: 'boolean',def: false});
createState(idRGB1_brightness, {type: 'number',def: 0});
createState(idRGB1_red, {type: 'number',def: 0});
createState(idRGB1_green, {type: 'number',def: 0});
createState(idRGB1_blue, {type: 'number',def: 0});
createState(idRGB1_transition, {type: 'number',def: 0});
! var objRGB = {
"state": "ON",
"brightness": 120,
"color": {
"r": 255,
"g": 100,
"b": 100
},
"transition": 5
};
! on({id: /^javascript.0.RGB1./}, function (obj) {
objRGB.state = (getState(idRGB1_state).val ? "ON" : "OFF");
objRGB.brightness = getState(idRGB1_brightness).val;
objRGB.color.red = getState(idRGB1_red).val;
objRGB.color.green = getState(idRGB1_green).val;
objRGB.color.blue = getState(idRGB1_blue).val;
objRGB.transition = getState(idRGB1_transition).val;
log("RGB1 -- neue Werte: " + JSON.stringify(objRGB));
setState(idRGB1_MQTT_Set,JSON.stringify(objRGB),true);
});Ich gehe mal davon aus dass du weißt wie und wo du das Script einfügen musst? Wenn nicht einfach nochmal nachfragen! Wenn das Script läuft hast du dann in den Objekten unter javascript.0…. die entsprechenden Objekte die du direkt in VIS verwenden kannst. Ich hoffe das wird was... ;)
-
Hi Thisoft,
ja, das Script bekomme ich schon eingefügt. Vielen Dank dafür. Bin momentan Arbeiten und werde das Script heute noch testen und eine Rückmeldung geben.
Ich schulde Dir ein großes Bier. Danke Dir jedenfalls für deine Zeit die Du geopfert hast. Jetzt kann ich wenigsten ein paar schöne RGB Controller fürs Zuhause bauen.
Bin jetzt noch gespannt, ob ich mein AC-Dimmer ans laufen bekomme. Warte noch momentan auf die Teile aus China. Damit wäre das wichtigste für Zuhause abgedeckt. Ein paar simple ESP´s mit einem Relai bekomme ich mitlerweile auch über VIS und Alexa geschaltet. Das sparrt Geld und eröffnet ganz viele Möglichkeiten
Gruß Lukas
-
Hallo, ich hab mich grad mal extra wegen diesem thread angemeldet, da ich das selbe bereits gebaut habe… :lol:
Also ich hab das grade mal ausprobiert und musste das Script noch etwas anpassen, wenn das bei dir nicht klappt, versuch mal meine angepasste Version.
var idRGB1_state = 'javascript.0.RGB1.state'; var idRGB1_brightness = 'javascript.0.RGB1.brightness'; var idRGB1_r = 'javascript.0.RGB1.red'; var idRGB1_g = 'javascript.0.RGB1.green'; var idRGB1_b = 'javascript.0.RGB1.blue'; var idRGB1_transition = 'javascript.0.RGB1.transition'; var idRGB1_MQTT_Set = 'mqtt.0.home.rgb1.set'; //ggf. korrigieren createState(idRGB1_state, {type: 'boolean',def: false}); createState(idRGB1_brightness, {type: 'number',def: 0}); createState(idRGB1_r, {type: 'number',def: 0}); createState(idRGB1_g, {type: 'number',def: 0}); createState(idRGB1_b, {type: 'number',def: 0}); createState(idRGB1_transition, {type: 'number',def: 0}); var objRGB = { "state": "ON", "brightness": 120, "color": { "r": 255, "g": 100, "b": 100 }, "transition": 5 }; on({id: /^javascript\.0\.RGB1\./}, function (obj) { objRGB.state = (getState(idRGB1_state).val ? "ON" : "OFF"); objRGB.brightness = getState(idRGB1_brightness).val; objRGB.color.r = getState(idRGB1_r).val; objRGB.color.g = getState(idRGB1_g).val; objRGB.color.b = getState(idRGB1_b).val; objRGB.transition = getState(idRGB1_transition).val; log("RGB1 -- neue Werte: " + JSON.stringify(objRGB)); setState(idRGB1_MQTT_Set,JSON.stringify(objRGB),true); });
Ich habe dann noch ein paar Slider mit dazugenommen um es zu testen… Perfeck!!!
Wären eigentlich auch Effecte oder so möglich? also so random fade, das er sozusagen immer langsam von einer zur anderen Farbe fadet? blinken ist übrigens auch möglich... { "flash": 5 } damit blinkt er dann 5 mal 8-)
und vielen dank nochmal @Thisoft
-
Hallo @Dotmaster 5,
schön dass es läuft. Natürlich gut möglich dass noch kleine Fehler im Script waren - hab's schließlich nur ins Blaue hinein geschrieben ohne zu testen…
Wobei, wenn ich mir das so anschaue - was hast du denn geändert? Mir fällt jetzt auf Anhieb gar nichts auf...?
Übrigens - das große Bier spendiert mal lieber den Machern von ioBroker. Die haben da schon viel mehr Arbeit investiert als ich... Es gibt da ganz oben auf dieser Seiter einen unauffällig gelben Button dafür Was nicht heißen soll dass ich diversen Gerstensäften abgeneigt gegenüber stehe wenn wir uns mal treffen sollten... :lol:
Und - ja, Effekte wie Fading etc. sind sicher auch noch möglich. Könnte man per Javascript machen was aber dann immer zu etwas "Funkfeuer" führen würde da ja jede Änderung übers WLAN gesendet werden muss. Ich würde es deshalb für besser halten das in den ESP zu packen. Wobei, wenn ich mir den ESP-Sketch so anschaue - wird Fading nicht eben über die Eingenschaft "Transition" gesteuert?
-
Also ich sehe auch keine Änderung bis auf:
die Kanäle mit der Bezeichnung r,g,b hast Du vollständig ausgeschrieben… red,green,blue
Rest ist gleich geblieben.
Wenn ich mir das hier anschaue:
{ "state": "ON", "brightness": 120, "color": { [color]"r"[/color]: 255, [color]"g"[/color]: 100, [color] "b"[/color]: 100 }, "transition": 5 }
so könnte das Script vom Dotmaster eher auf die Parameter passen. @Thisoft.
Kannst Du schauen ob es evtl. ein Fehler bei Dir im Script eingesclichen ist ???
n({id: /^javascript.0.RGB1./}, function (obj) {
objRGB.state = (getState(idRGB1_state).val ? "ON" : "OFF");
objRGB.brightness = getState(idRGB1_brightness).val;
objRGB.color.r = getState(idRGB1_r).val;
objRGB.color.g = getState(idRGB1_g).val;
objRGB.color.b = getState(idRGB1_b).val;
objRGB.transition = getState(idRGB1_transition).val;
log("RGB1 – neue Werte: " + JSON.stringify(objRGB));
setState(idRGB1_MQTT_Set,JSON.stringify(objRGB),true);
n({id: /^javascript.0.RGB1./}, function (obj) {
objRGB.state = (getState(idRGB1_state).val ? "ON" : "OFF");
objRGB.brightness = getState(idRGB1_brightness).val;
objRGB.color.red = getState(idRGB1_red).val;
objRGB.color.green = getState(idRGB1_green).val;
objRGB.color.blue = getState(idRGB1_blue).val;
objRGB.transition = getState(idRGB1_transition).val;
log("RGB1 – neue Werte: " + JSON.stringify(objRGB));
setState(idRGB1_MQTT_Set,JSON.stringify(objRGB),true);
});
Zum Thema transition habe ich folgendes gefunden:
https://home-assistant.io/components/light.mqtt_json/
This platform supports on/off, brightness, RGB colors, XY colors, color temperature, transitions, short/long flashing and white values. The messages sent to/from the lights look similar to this, omitting fields when they aren’t needed:
{ "brightness": 255, "color_temp": 155, "color": { "r": 255, "g": 255, "b": 255, "x": 0.123, "y": 0.123 }, "effect": "colorloop", "state": "ON", "transition": 2, "white_value": 150 }
also ein kurzen oder langsames Faden… Richtig?