[Project] NeopixelBusFX - WS2812 Effekt-Plugin für ESPEasy

Begonnen von djcysmic, 05 Juli 2017, 21:19:46

Vorheriges Thema - Nächstes Thema

RockFan

Wow, das ging ja mega flott  :)
Vielen Dank!

Hab das neue bin geflasht:
Die Kommandos one und faketv funktionieren nun korrekt bis 300 bzw. bei mir bis 296, da ich nach Vorgehen entsprechend Deinem Ratschlag keine Änderung bzgl. der letzten 4 LEDs feststellen konnte. Ich werde sie einfach abschneiden. Gut, dass es nur 4 sind  ;)

Das Attribut parseCmdResponse hatte ich weggelassen, da es in der commandref als deprecated ausgewiesen ist. Nachdem ich es gesetzt habe bekomme ich etwas mehr bzw. genauere Readings (count ist dabei und bgcolor wird korrekt gesetzt).
Trotzdem ändert sich beim Setzen von count bei mir nichts - oder ich weiß zumindest nicht, bei welchen Effekten sich etwas ändern sollte  ::)
Ist aber nicht so dringend.

Viele Grüße
Dieter   
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...

djcysmic

Zitat von: RockFan am 27 Oktober 2018, 17:57:59
Wow, das ging ja mega flott  :)
Vielen Dank!

Hab das neue bin geflasht:
Die Kommandos one und faketv funktionieren nun korrekt bis 300 bzw. bei mir bis 296, da ich nach Vorgehen entsprechend Deinem Ratschlag keine Änderung bzgl. der letzten 4 LEDs feststellen konnte. Ich werde sie einfach abschneiden. Gut, dass es nur 4 sind  ;)

Sehr schön, das freut mich :)

Zitat von: RockFan am 27 Oktober 2018, 17:57:59
Das Attribut parseCmdResponse hatte ich weggelassen, da es in der commandref als deprecated ausgewiesen ist. Nachdem ich es gesetzt habe bekomme ich etwas mehr bzw. genauere Readings (count ist dabei und bgcolor wird korrekt gesetzt).
Trotzdem ändert sich beim Setzen von count bei mir nichts - oder ich weiß zumindest nicht, bei welchen Effekten sich etwas ändern sollte  ::)

Der count-Parameter wird aktuell nur von den Effekten theatre und twinklefade verarbeitet...

undeat

Das ist ein wirklich tolles Projekt. Ich frage mich, warum es nicht standardmäßig im ESP Easy drin ist. Mit den dort vorhandenen Neopixel Bibliotheken kann man gar nichts machen. Das NepPixelBusFx image habe ich mir das erste Mal vor einem halben Jahr geflasht. Damals war noch ein Fehler, dass der Fade effekt bei größeren Stripes nicht überall funktionierte. Das haut jetzt ja ganz gut hin. Ich hab den Stripe an einem Wemos und das ganze über FHEM am IOBroker. Über die VIS kann ich Farben picken oder Mode Auswählen etc.

Was mir noch fehlt, ist die Möglichkeit quasi eigene Animationen vom IO-Broker an den Stripe zu übertragen.
Man kann ja mit den nfx Befehlen jeder einzelne LED oder auch Bereichen eine bestimmte Farbe zuweisen. Leider übernimmt er dieses sofort auf den Stripe. Man sieht also, wie sich meine Muster aufbauen, wenn sie aus mehreren Befehlen zusammen gesetzt sind. Man müsste einen "SchattenStripe" haben, den ich in Ruhe parametrieren und mit einem Befehl in den richtigen Stripe laden kann.

Für Aufwändigere Muster müsste ich eventuell jede einzelne LED übertragen. Dazu immer der Befehl und die Nummer etc als Overhead. Schön wäre es, wenn ich einen riesigen String Laden könnten, in dem die Farbe jeder LED hintereinander weg übergeben wird. Vielleicht noch mit Start LED (nfx Array 10 FF0000 00FF00 0000FF FF0000 ...)

Leider habe ich nicht die Zeit selbst ein Plug In zu schreiben bzw. dieses hier zu erweitern. Ich müsste mir dazu noch zu viele Grundlagen aneignen. Ich kann zwar Grundsätzlich was Programmieren aber ich bekomme mit dem Arduino IDE nicht einmal die runtergeladene source compiliert. Wenn ich es selbst machen würde, dann würde ich eine art Video Mode einführen, bei dem ich eine bestimmte FPS Zahl angeben. Ich übertrage dann alle "Bilder", also Zustände des gesamten Stripes in einen Puffer auf dem ESP. Der Puffer wird dann entsprechend der FPS Zahl abgearbeitet, sofern neue Einträge vorhanden sind. Wenn der Puffer voll ist, müsste dies natürlich noch gemeldet werden, damit keine Frames verloren gehen.

Ich weiß nicht, wo da beim ESP wohl die Grenzen liegen 30 fps mit 300LED mit je 24Bit ist vielleicht etwas viel. Das wären 216 kBit/s bzw. 27kByte/s. Für das WLAN Netz wäre das ja kein Problem. Damit würde ich dann eventuell Ambi Light/Sound To Light oder sonst irgendwelche Animationen umsetzten können. Mit 30 fps könnten sogar die Fadings immer vom Master (IoBroker oder so) übertragen werden.

djcysmic

Zitat von: undeat am 02 November 2018, 23:34:14
Das ist ein wirklich tolles Projekt. Ich frage mich, warum es nicht standardmäßig im ESP Easy drin ist. Mit den dort vorhandenen Neopixel Bibliotheken kann man gar nichts machen. Das NepPixelBusFx image habe ich mir das erste Mal vor einem halben Jahr geflasht. Damals war noch ein Fehler, dass der Fade effekt bei größeren Stripes nicht überall funktionierte. Das haut jetzt ja ganz gut hin. Ich hab den Stripe an einem Wemos und das ganze über FHEM am IOBroker. Über die VIS kann ich Farben picken oder Mode Auswählen etc.

Was mir noch fehlt, ist die Möglichkeit quasi eigene Animationen vom IO-Broker an den Stripe zu übertragen.
Man kann ja mit den nfx Befehlen jeder einzelne LED oder auch Bereichen eine bestimmte Farbe zuweisen. Leider übernimmt er dieses sofort auf den Stripe. Man sieht also, wie sich meine Muster aufbauen, wenn sie aus mehreren Befehlen zusammen gesetzt sind. Man müsste einen "SchattenStripe" haben, den ich in Ruhe parametrieren und mit einem Befehl in den richtigen Stripe laden kann.

Für Aufwändigere Muster müsste ich eventuell jede einzelne LED übertragen. Dazu immer der Befehl und die Nummer etc als Overhead. Schön wäre es, wenn ich einen riesigen String Laden könnten, in dem die Farbe jeder LED hintereinander weg übergeben wird. Vielleicht noch mit Start LED (nfx Array 10 FF0000 00FF00 0000FF FF0000 ...)

Leider habe ich nicht die Zeit selbst ein Plug In zu schreiben bzw. dieses hier zu erweitern. Ich müsste mir dazu noch zu viele Grundlagen aneignen. Ich kann zwar Grundsätzlich was Programmieren aber ich bekomme mit dem Arduino IDE nicht einmal die runtergeladene source compiliert. Wenn ich es selbst machen würde, dann würde ich eine art Video Mode einführen, bei dem ich eine bestimmte FPS Zahl angeben. Ich übertrage dann alle "Bilder", also Zustände des gesamten Stripes in einen Puffer auf dem ESP. Der Puffer wird dann entsprechend der FPS Zahl abgearbeitet, sofern neue Einträge vorhanden sind. Wenn der Puffer voll ist, müsste dies natürlich noch gemeldet werden, damit keine Frames verloren gehen.

Ich weiß nicht, wo da beim ESP wohl die Grenzen liegen 30 fps mit 300LED mit je 24Bit ist vielleicht etwas viel. Das wären 216 kBit/s bzw. 27kByte/s. Für das WLAN Netz wäre das ja kein Problem. Damit würde ich dann eventuell Ambi Light/Sound To Light oder sonst irgendwelche Animationen umsetzten können. Mit 30 fps könnten sogar die Fadings immer vom Master (IoBroker oder so) übertragen werden.

Die Ideen und Anregungen, die du da hast, sind super. Leider fehlt mir momentan auch die Zeit, da ich gerade ein Haus baue.
Ursprünglich habe ich einen ESP zu laufen gehabt, den ich per UDP mit Animationen "gefüttert" habe - ich weiß allerdings nicht, ob sich das so einfach mit ESP Easy kombinieren lässt. Da werde ich mich mal ran setzen, wenn etwas Luft ist.
Diese Art der Animation wäre dann komplett Server-gestützt, aber noch vergleichsweise einfach umzusetzen.
Wenn man Animationen auf den ESP laden möchte, wird es schon deutlich umfangreicher...

Auf den array-Befehl werde ich auch mal ein bisschen rumdenken - aus dem Bauch heraus würde ich sagen, dass das auch nicht so kompliziert sein dürfte.

Wenn ich wieder etwas Zeit finde, werde ich versuchen, die Wünsche einzubauen und mich dann nochmal hier melden. Das könnte allerdings etwas dauern.

Helmut-NSU

Hallo,

ich suche eine Möglichkeit die Hintergrundfarbe der "simpleclock" beeinflussen zu können.

Am liebsten würde ich dies über das Einstellen von "bgcolor" machen, wie es bei einigen anferen Effekten ja auch geht.

Mir ist es gelungen durch Änderungen im Programm die Hintergrundfarbe "fest" zu vergeben, aber ich finde (bisher) keine Möglichkeit im Nachinein darauf einfluss zu nehmen.

Kann mir jemand weiterhelfen?

Viele Grüße
Helmut

djcysmic

Zitat von: Helmut-NSU am 12 November 2018, 20:57:01
Hallo,

ich suche eine Möglichkeit die Hintergrundfarbe der "simpleclock" beeinflussen zu können.

Am liebsten würde ich dies über das Einstellen von "bgcolor" machen, wie es bei einigen anferen Effekten ja auch geht.

Mir ist es gelungen durch Änderungen im Programm die Hintergrundfarbe "fest" zu vergeben, aber ich finde (bisher) keine Möglichkeit im Nachinein darauf einfluss zu nehmen.

Kann mir jemand weiterhelfen?

Viele Grüße
Helmut

Hallo Helmut,

vielen Dank für die Anregung. Habe es gerade eingebaut und im Github eingecheckt:

nfx simpleclock [bigtickcolor] [smalltickcolor] [hourcolor] [minutecolor] [secondcolor] [backgroundcolor]
o bigtickcolor, default: 505050
o smalltickcolor, default: 101010
o hourcolor, default: 0000FF
o minutecolor, default: 00FF00
o secondcolor, default: FF0000 - color of the second hand - can be set to "off" to turn the second hand completly off
o backgroundcolor, default: 000000


Im laufenden Betrieb kann die Hintergrundfarbe auch über

nfx bgcolor [backgroundcolor]

angepasst werden.

Viele Grüße
Nico

Helmut-NSU

#276
Hallo Nico,

das war ja "schneller als doe Polizei erlaubt".
Ich bin mal gespannt wie es gelöst ist.

Erst mal herzlichen Dank, aber zum Testen komme ich esrt morgen.

Schönen Abend
Helmut

Helmut-NSU

Hallo,

ja, es klappt prima.

Ich hatte dennoch eine zunächst eine weitere Änderung entdeckt:

Im Colorpocker waren untereinander 3 horizontale Balken mit Farbe, Weiss und Helligkeit.
Vorher hatte ich ein Rechteck für Farbe und einen senkrechten Balken für Helligkeit.

Nach Einstellung auf
colopicker RGB

klappt jedoch wieder alles so wie vorher. Vermutlich hat sich irgendwo im Gesamtsystem noch was geändert.

Vielen Dank
Helmut

gluefunk

Hallo,

ich bin sehr angetan von ESPEasy und besonders dem NeopixelBusFX und habe auch erfolgreich für RGB- Streifen kompiliert.
Nur die Umänderung auf das define GRBW (Sk6812-Streifen) meldet Fehler beim Compilieren (auch mit verschiedenen Fastled Versionen)
z.B.:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'void Plugin_124_simpleclock()':
_P124_NeoPixelBusFX:1455:45: error: no matching function for call to 'RgbColor::RgbColor(RgbwColor&)'
   Plugin_124_pixels->ClearTo(RgbColor(rrggbb));

oder:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna\src/internal/RgbColor.h:39:8: note:   no known conversion for argument 1 from 'RgbwColor' to 'const RgbColor&'
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna\src/internal/RgbColor.h:39:8: note: constexpr RgbColor::RgbColor(RgbColor&&)
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna\src/internal/RgbColor.h:39:8: note:   no known conversion for argument 1 from 'RgbwColor' to 'RgbColor&&'

Gibt es Abhilfe ?
Vielen Dank
gluefunk

djcysmic

Zitat von: gluefunk am 22 November 2018, 17:12:44
Hallo,

ich bin sehr angetan von ESPEasy und besonders dem NeopixelBusFX und habe auch erfolgreich für RGB- Streifen kompiliert.
Nur die Umänderung auf das define GRBW (Sk6812-Streifen) meldet Fehler beim Compilieren (auch mit verschiedenen Fastled Versionen)
z.B.:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'void Plugin_124_simpleclock()':
_P124_NeoPixelBusFX:1455:45: error: no matching function for call to 'RgbColor::RgbColor(RgbwColor&)'
   Plugin_124_pixels->ClearTo(RgbColor(rrggbb));

oder:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna\src/internal/RgbColor.h:39:8: note:   no known conversion for argument 1 from 'RgbwColor' to 'const RgbColor&'
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna\src/internal/RgbColor.h:39:8: note: constexpr RgbColor::RgbColor(RgbColor&&)
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna\src/internal/RgbColor.h:39:8: note:   no known conversion for argument 1 from 'RgbwColor' to 'RgbColor&&'

Gibt es Abhilfe ?
Vielen Dank
gluefunk

Hallo gluefunk,

vielen Dank für den Hinweis. Da hat sich ein Bug eingeschlichen, als ich die Hintergrundfarbe für die Simple Clock eingebaut habe. Der sollte jetzt behoben sein - ich habe die aktualisierte Version ins Github eingecheckt.
Allerdings kann ich es momentan nicht testen, da ich keine Hardware hier habe. Melde dich bitte einfach nochmal, wenn etwas nicht funktionieren sollte.

Viele Grüße und einen schönen Abend noch...  ;)

gluefunk

Hallo djcysmic,
vielen Dank für die schnelle Reaktion.
Ich habe so neu compiert , die rgbw Fehler tauchen nicht mehr auf, dafür habe ich  "redefinition (of 'uint8_t random8()') "- Fehler z.B.:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'uint8_t random8()':
_P124_NeoPixelBusFX:1318:9: error: redefinition of 'uint8_t random8()'
uint8_t random8()
und:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'uint8_t random8(uint8_t)':
_P124_NeoPixelBusFX:1329:9: error: redefinition of 'uint8_t random8(uint8_t)'
uint8_t random8(uint8_t lim)
etc:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'uint8_t scale8_video(uint8_t, uint8_t)':
_P124_NeoPixelBusFX:1371:9: error: redefinition of 'uint8_t scale8_video(uint8_t, uint8_t)'
uint8_t scale8_video( uint8_t i, uint8_t scale)
Beispiel aus der Compierung:
Bibliothek NeoPixelBus_by_Makuna in Version 2.3.4 im Ordner: C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna  wird verwendet

Es wäre schön dies Problem auch lösen zu können
VielenDank
Gerhard (gluefunk)


djcysmic

Zitat von: gluefunk am 24 November 2018, 12:57:28
Hallo djcysmic,
vielen Dank für die schnelle Reaktion.
Ich habe so neu compiert , die rgbw Fehler tauchen nicht mehr auf, dafür habe ich  "redefinition (of 'uint8_t random8()') "- Fehler z.B.:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'uint8_t random8()':
_P124_NeoPixelBusFX:1318:9: error: redefinition of 'uint8_t random8()'
uint8_t random8()
und:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'uint8_t random8(uint8_t)':
_P124_NeoPixelBusFX:1329:9: error: redefinition of 'uint8_t random8(uint8_t)'
uint8_t random8(uint8_t lim)
etc:
C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\ESPEasy5\_P124_NeoPixelBusFX.ino: In function 'uint8_t scale8_video(uint8_t, uint8_t)':
_P124_NeoPixelBusFX:1371:9: error: redefinition of 'uint8_t scale8_video(uint8_t, uint8_t)'
uint8_t scale8_video( uint8_t i, uint8_t scale)
Beispiel aus der Compierung:
Bibliothek NeoPixelBus_by_Makuna in Version 2.3.4 im Ordner: C:\Users\Gerhard\Downloads\arduino-1.8.7-windows\arduino-1.8.7\portable\sketchbook\libraries\NeoPixelBus_by_Makuna  wird verwendet

Es wäre schön dies Problem auch lösen zu können
VielenDank
Gerhard (gluefunk)

Hast du noch zusätzliche Plugins installiert? Vor allem welche, die die FastLED Library nutzen? Ich habe einige Funktionen daraus übernommen und anscheinend hat er jetzt Probleme mit Doppelbenennungen...

Bond246

#282
Zitat von: djcysmic am 05 Juli 2017, 21:19:46
Einen wunderschönen guten Abend,

da ich auf der Suche nach einer einfachen Implementierung von WS2812-Stripes in die Hausautomatisierung - ursprünglich für eine Treppenstufenbeleuchtung - nichts brauchbares gefunden habe, habe ich angefangen, ein eigenes Plugin für ESPEasy zu schreiben. Diese Effekte sind komplett ohne Delays programmiert und mittels Parameter sehr flexibel gestaltet. Das Plugin basiert auf der NeopixelBus-Library von Makuna und erlaubt eine prozessorschonende Ansteuerung der LEDs mittels ESP8266:


https://github.com/Makuna/NeoPixelBus


Zusätzlich wird die FastLED-Library für einige Berechnungen in dem Fire-Effekt benötigt:


https://github.com/FastLED/FastLED


Diese Libraries müssen nur in den /lib-Ordner von ESPEasy geclont werden

Das Plugin kommt in den /src-Ordner:


https://github.com/djcysmic/NeopixelBusFX


[...]

Liebe Leute,

ich komme mir etwas blöd vor aber ich muss jetzt doch fragen, weil ich selbst nicht auf die Lösung komme.
In dem ersten Post sind 3 Links. Aber ich verstehe nicht, was ich wo wann wie hinkopieren muss und wie die Abhängigkeiten dieser ganzen plugins sind, damit ich das erstmal auf meinen ESP flashen kann.

Ich hab hier einen NodeMCU v3 per USB am PC, COM-Port wird erkannt. Alles super. Aber wie bringe ich meine Arduino Umgebung dazu, das hier beschriebene erstmal auf den NodeMCU zu flashen?

Auf manchen der Gitbub Seiten sind firmware-Dateien (warum sind die überhaupt da?), brauche ich jetzt noch die ESPEasy firmware oder ist damit nur das FHEM Plugin gemeint? Ist NeoPixelBus von Makuna nur die Quelle und das brauche ich eigentlich gar nicht, weil es NeoPixelBus_FX gibt?
Ich sehe irgendwie nicht so richtig durch.

Besten Dank und sorry, falls ich die Lösung hier irgendwo finde. Aber ich weiß nicht so recht, wonach ich suchen soll.

\Edit: ich glaube so langsam steige ich dahinter.
Mir hat der Link hierzu https://www.letscontrolit.com/wiki/index.php/Tutorial_ESPEasy_Firmware_Upload gefehlt, um es von vorne zu verstehen. So irgendwie war das beim sonoff auch, langsam kommt die Erinnerung zurück :-)

sinus61

Du kannst ja auch einfach die .bin Datei nehmen und flashen, dann musst du dir zum den Rest keine Gedanken machen.
https://github.com/djcysmic/NeopixelBusFX

Bond246

Ich würde mich über zwei Dinge freuen:

Zum einen verwende ich einen sehr langen Stripe um mein Bett herum, 430 LEDs.  Es wäre schön, wenn das Plugin mehr Pixel unterstützen würde. Ich hab zwar jetzt im Code das MAX_ARRAY auf 500 gestellt und die einfachen Sachen kann ich damit abfeuern. Aber ich bin mir nicht sicher, bei welchen Effekten die Grenzen sind.

Zum anderen würde ich mich über einen anderen/zusätzlichen Feuer-Effekt freuen. Der jetztige startet einfach nur "eine Flamme" von vorne und wabert hinten raus mit roten Pixeln. Das ist ja nicht besonders cool, wie ich finde. Cooler fände ich da die Implementierung, die auch bei McLighting verwendet wird. Also in die Richtung gehend einer großen Flächen, die feurig wabert.

Ich würde mir das auch selbst implementieren, meine Programmierkenntnisse beschränken sich jedoch auf die niedigsten Basics. Wie diese arduino Programmierung funktioniert ist mir absolut "spanisch".

Dann noch eine ganz andere Frage, wie habt ihr denn hier eure Dummys gebaut? Ich denke die wenigsten benutzen die rudimentären Möglichkeiten des espeasy devices selbst.

Vielleicht hat ja jemand eine Anregung.
Grüße und besten Dank