Fhem mit LED Statusanzeige / LED-Stripe WD2812B / MySensors

Ich hatte Euch in einem früheren Blog-Beitrag (-> Fhem mit LED Statusanzeige / LED-Stripe WD2812B / 433 MHz Übertragung) einen LED-Bilderrahmen vorgestellt, welche auch sehr oft nachgebaut wurde.
Problem bei dem LED-Rahmen mit 433 MHz war, das der 433 MHz Empfänger relativ teuer ist und es ab und an Probleme mit der Reichweite gab. Ich muss sagen, bei mir gab es wegen der Reichweite keine Probleme (2 dicke Wände).
Das MySensors-Prinzip hat den Vorteil, das die nRF-Transceiver sich untereinander die Daten austauschen können, also quasi ein eigenes Netz bilden. Obwohl das sich im 2.4 GHz (WLAN) Bereich abspielt, hat es nichts mit dem eigentlichen WLAN-Netz zu tun. Außerdem sind die nRF-Transceiver etwas preiswerter als der 433 MHz Empfänger. Wichtig ist zu wissen, das man einen nRF-MySensors Gateway als zusätzlicher Hardware an Fhem angeschlossen haben muss. Darüber hab ich damals schon einen Blog-Beitrag geschrieben (-> siehe hier). Ich empfehle jedoch anstatt die WLAN-Version eine USB-MySensors Version zu bauen. Zumindest bei mir läuft die stabiler. Wiederrum habe ich bei mir schon einige MySensors-Module in Betrieb. Auch ein MySensors-Lan Gateway habe ich damals schon gebaut (-> Blogbeitrag hier).

LED-rahmen mit mysensors

 

Szenarios:
Ich wurde öfter gefragt, was die Anwendungsgebiete für einen solchen Rahmen sind. Mit Fhem kann man ja so gut wie alles abfragen. So frage ich beispielsweise den aktuellen Stromverbrauch ab (-> Blogbeitrag). Wenn der höher als 500 W ist dann leuchtet bei mir eine von den 8 LED in Rot auf.
Weitere Möglichkeit: Fenster offen / geschlossen, kann man damit auch anzeigen lassen, die Zustandsänderung sieht man sofort auf dem LED-Rahmen.
Mülltonnen: Wann wird welche Mülltonne abgeholt? Gelb, Blau, Grau. Hier zeige ich einen Tag vorher in Form von einer gelben LED an das morgen eine Mülltonne geleert wird. Am selben Tag ist die LED dann rot
Temperaturen. Mit meinen LaCrosse Thermosensoren leuchtet bei mir eine LED-Blau, wenn die Tempertur unter 5 Grad fällt.
Wie gesagt, alles nur Beispiele, die ich eingebaut habe. Grundsätzlich kann man alles anzeigen lassen … Wenn Euer Hamster die 1000ste Runde in dem Hamsterrad gedreht hat, Euer Aquarium die kritische Temperatur von 30 Grad erreicht hat und, und und.

Benötigte Bauteile:
Das Prototyping Board habe ich von Itead-Studio gekauft (leider nicht mehr verfügbar, ich habe noch eins, falls Interesse, einfach melden).

Wer einen Bausatz benötigt, kann sich bei mir melden: WLAN – Gateway (NodeMCU) komplett 29,90  Euro inkl. Versand oder das USB-Serial Gateway mit Arduino Nano, NRF zum Selberlöten 19,90 inkl. Versand. Das nRF ist bei dem WLAN-Gateway und USB-Serial-Gateway mit einer 868 MHz-Antenne versehen zum besseren Senden / Empfangen. Beim Serial Gateway sind noch 3 Dioden dabei / Senden / Empfangen / Error. Auf Bausätze gebe ich keinen Installations-Support.

Die nachfolgenden Links führen zu amazon.de

      Die LED-Stripes habe ich bei

Ali-Express

Wer noch das LED-Stripe, wie auf dem Video gesehen,  haben möchte, kann es für 8,90 Euro inkl. Versand bei mir bestellen. Ich werde an dem Stripe für Euch noch auf Wunsch Steckbrücken anlöten damit ihr sofort loslegen könnt. Die Stripes sind klasse, schön hell. Die können natürlich auch mit set LEDRahmenSwitch 5 011100 abgedunkelt werden. (Wertebereich 00 bis FF).

Grundsätzlich benötigt man ein MySensors – Gateway, entweder in der WLAN-Ausstattung oder in der USB-Ausstattung (also direkt am Raspi angeschlossen).

 

Quellcodehier

 

Praktische Beispiele in Fhem

Angenommen, man benutzt ESA2000 und möchte eine grüne LED leuchten haben, wenn derzeitig weniger als 500 W verbraucht wird, und die LED soll auf Rot umschalten, wenn die Leistung darüber liegt. In diesem Beispiel leuchtet dann die siebte LED:

esa2000WZ_43CB:actual.* {
if ($EVTPART1 < 0.5)
{
fhem("set LEDRahmenSwitch 7 011100");
}
else
{
fhem("set LEDRahmenSwitch 7 440000");
}
}

 

Als zweites Beispiel soll eine grüne LED leuchten, wenn das Fenster geschlossen ist (TFK-Sensor vom MySensor) und rot, wenn das Fenster geöffnet ist
In diesem Beispiel leuchtet dann die fünfte LED:

Fenster_1:tripped3.* {
if ($EVTPART1 == 0)
{
fhem("set LEDRahmenSwitch 5 011100");
}
else
{
fhem("set LEDRahmenSwitch 5 440000");
}
}

Wie man sieht, der Prozedur-Aufruf geschieht nach dem Muster: LEDRahmen, LED auf dem LED-Stripe, RGB-Wert (hex). Möchte man eine LED komplett weiß haben, übergibt man FFFFFF , ausschalten mit 000000.

Update: 30.06.2016 Lest auch den Blogbeitrag für die LED-Statusanzeige für Fhem mit 8266 – Modulen durch! Den Blog-Beitrag findet ihr hier!

Das könnte Euch auch interessieren:
WLAN – MySensors Gateway – ohne zu löten (-> Blogbeitrag)
LED-Rahmen mit LED-Stripe WD2812B und 433 MHz Datenübertragung

Fhem mit LED Statusanzeige, Übertragung per WLAN mit 8266 Modulen (NodeMCU, WeMos, ESP 8266-01)

Dieser Beitrag wurde unter Fhem-Hausautomation veröffentlicht. Setze ein Lesezeichen auf den Permalink.

18 Antworten zu Fhem mit LED Statusanzeige / LED-Stripe WD2812B / MySensors

  1. stebar sagt:

    Hallo Robin und Andreas,

    vielen Dank für den interessanten Beitrag!

    Ich wollte nun den LED Rahmen mithilfe von MySensors (V2.1.1) und einem NRF24L01 nachbauen. Nun habe ich das selbe Problem wie Andreas. Ist es möglich, dass man den Sketch entsprechend der neuen Version anpasst? Würde es super finden, da die Hardware dazu schon vorhanden ist. Den Beitrag zu WeMos habe ich gelesen. Ich favorisiere im Augenblick MySensors.

    Viele Grüße

  2. Robin sagt:

    Hallo Andreas,

    wie auch in meinem Blog erwähnt, gibt es eine bessere Möglichkeit, die LED-Stripes anzusteuern:
    https://blog.moneybag.de/fhem-mit-led-statusanzeige-led-stripe-wd2812b-esp-8266/
    Ich kann dir den notwendigen WeMos / NodeMCU auch flashen, wenn du damit Probleme hast.

    LG
    /robin

  3. Andreas sagt:

    Hallo, ich finde die Idee großartig und hatte nun endlich Zeit das Nachzubauen aber der Sketch funktioniert leider mit den neuen MySensors Libs nicht. Soweit ich weiß ist dieser Aufruf nicht mehr möglich: „MySensor gw;“
    Ich habe die Zeile entfernt und alle „gw.“. Der Sketch kompiliert dann aber leider kann ich über fhem nichts steuern. Ich musste auch
    void loop() {
    process();
    }
    auskommentieren. Vielleicht liegt es daran? Kann mir jemand beim „Übersetzen“ auf die neuen Libs helfen?

  4. Pingback: Fhem mit LED Statusanzeige / LED-Stripe WD2812B / ESP 8266 | Robins Blog – Technik und Multimedia

  5. Robin sagt:

    Hallo Thomas,
    wir sollten da einen gesonderten Beitrag machen, sonst kommen die Blogleser durcheinander.
    Wie ist die Beschaltung vom ESP8266, welchen hast du genommen usw.
    vielleicht kannst du mir die Infos per mail senden.

    LG
    /robin

  6. Thomas Cristo sagt:

    Hallo Robin,
    Fotos reiche ich noch nach. Ich hab allerdings einen ESP8266 genommen und ändere die Farben über MQTT-Publishes. Das funktioniert prima.
    Hier der Code:

    https://github.com/tom71/MQTT/tree/master/FastLED_MQTT

    Gruss Thomas

  7. Robin sagt:

    Hallo Thomas,
    ist noch nicht vom Christian angedacht worden.
    Hast Du was sinnvolles mit dem Rahmen gemacht? Kannst du ein Foto schicken? Email- siehe Impressum. Dann baue ich das in meinem Blog rein.
    Ich habe immer noch meinen 433 MHz – LED-Rahmen im Einsatz.

    LG
    /robin

  8. Thomas Cristo sagt:

    Hallo,
    habt ihr eine Möglichkeit gefunden, den Status der LEDs nach einem Power Off wieder herzustellen? Müsste ich den gesetzten Status in den EEprom schreiben und beim setup wieder auslesen?
    Gruss Thomas

  9. Christian sagt:

    Hallo Stefan,

    ich bin mir nicht ganz Sicher ob die Daten die Du sendest auch richtig ankommen. Ich würde dich Robin kurz darum bitten dies mal gegen zu prüfen, da ich gerade kein Lauffähiges System habe….

    Wenn du dir die Methode (in FHEM) sendLEDColor genau ansiehst passiert dort folgendes…
    Der Befehl: fhem(„set LEDRahmenSwitch 5 FF0000“); wird wie folgt aufgelöst. Die HexZahl wird an jeder zweiten stelle getrennt. Somit wird zuerst FF 00 00 getrennt. Wobei dann FF als Zahl interpretiert wird also: 255 0 0. Dies wird dann mit – getrennt und zu einem String verbunden also: 255-0-0.

    Genau das sollte dann auch übertragen werden. Wie im Beispiel genannt:
    fhem(„set LEDRahmenSwitch 5 FF0000“);
    sollte dann im Arduino LEDID: 5
    Color: 255-0-0 stehen.
    im Programmcode steht folgendes dazu:
    Serial.print(„Color: „);
    Serial.println(message.getString());
    Die zweite Zeile zeigt genau das an, was übertragen wurde ohne Änderung!

    Erst dann wird anhand der – getrennt und verarbeitet. Als Erklärung:
    leds[message.sensor-1].r = getValue(message.getString(), ‚-‚, 0).toInt();
    Hinter dem Gleichheitsszeichen:
    Nehme die Variable, trenne Sie mit dem Symbol – und hole dir davon den 0. Teil des Arrays. Genau dieser Teil wird dann zu einer Zahl als Datentyp umgewandelt. Dafür steht das .toInt(). Also Wie im Beispiel:
    255-0-0 ==> 0.er Teil: 255.toInt() ==> 255 (Als Zahlentyp und nicht mehr als Texttyp). Dieses wird dann auf die LED gesetzt. Damit leuchtet dann die LED.

    Ich hoffe ich konnte dir mit diesem Ablauf weiterhelfen.
    Robin wenn du Chance hast, Teste doch mal bitte wie angesprochen ob dann im Protokoll auch wirklich 255-0-0 zu sehen ist. Wenn dies nicht der Fall ist, werden die Daten falsch zum Arduino gesendet, und der Code kann die Zahlen nicht trennen. Dies könnte dann der Fehler sein.

    Viele Grüße
    Christian

  10. Robin sagt:

    Hallo Stefan,

    ich nutze das USB-Serial-Gateway.

    LG
    /robin

  11. Stefan sagt:

    Hallo,

    Habe das jetzt auch mal nachgebaut.
    Bei
    //TEST
    //leds[9].g=1;
    //leds[9].b=255;
    //leds[10].r=255;
    //leds[11].b=255;
    //FastLED.show();
    Zeigt auch blau rot blau ……….
    Ich kann auch on und off, aber egal was ich mache 440000 oder 011100 die angesteuerte LED leuchtet immer rot 🙁
    Welches Gateway in welcher Version nutzt du? Ich verwende das WLAN Gateway in 1.5.4
    Hier mal ein Teil der Ausgabe vom Serial Monitor.
    10
    …….
    1
    read: 0-0-100 s=11,c=1,t=17,pt=0,l=2,sg=0:1

    11
    …….
    1
    read: 0-0-100 s=1,c=1,t=17,pt=0,l=2,sg=0:1

    1
    …….
    1
    read: 0-0-100 s=12,c=1,t=17,pt=0,l=2,sg=0:1

    12
    …….
    1
    read: 0-0-100 s=11,c=1,t=2,pt=0,l=7,sg=0:440000

    11
    …….
    -18752
    LED ID #: 11
    Color: 440000

    read: 0-0-100 s=11,c=1,t=2,pt=0,l=7,sg=0:011100

    11
    …….
    11100
    LED ID #: 11
    Color: 011100

    read: 0-0-100 s=1,c=1,t=2,pt=0,l=7,sg=0:111100

    1
    …….
    -19972
    LED ID #: 1
    Color: 111100

  12. Robin sagt:

    Hallo Edi,
    Yep, die Platine beinhaltet 8 LEDs Typ WD2812B, einfach durch Hintereinanderlöten auf 16 Stück zu erweitern.
    Über Pin 3 habe ich den angebunden.
    Nein, alles über den Arduino Nano, wobei ich sagen muss, das bei mir nicht alle LEDs leuchten und die LEDs nicht mit voller Kraft leuchten lasse (also nicht FF FF FF), sondern 33 33 33). Läuft seit einem Monat an meinem USB-MySensors Gateway störungsfrei. Und man kann interessante Sachen damit machen: Ein Blog-Leser wird damit in Verbindung mit MySensors-Feuchtigkeits-Sensoren sein Bewässerung-Monitoring von seinen Jung-Pflanzen machen.

    LG
    /robin

  13. Edi sagt:

    Hallo Robin,

    Genau auf das habe ich gewartet 🙂
    Das ist doch eine WD2812B Strip?
    Hast du den Strip über Pin3 angeschlossen?
    Externe Spannungsversorgung?

  14. Robin sagt:

    Hallo Thomas,

    meine LED-Streifen haben 8 LEDs auf der Platine, die man aber mit hintereinander löten aber auf 16 erweitern kann. Die 8 Leds sind auf einer Länge von ungefähr 5 cm – 6 cm.

    LG
    /robin

  15. Thomas Cristo sagt:

    Hallo Robin,
    welchen LED-Streifen hast du genommen? Ich habe jetzt einen in China bestellt und da sind die LEDs sehr weit auseinander. 🙁
    Wieviele LEDs sind dabei, wenn ich sie bei dir bestelle?
    Gruss

  16. Thomas Cristo sagt:

    Hallo Robin,
    welchen LED-Streifen hast du genommen? Ich habe jetzt einen in China bestellt und da sind die LEDs sehr weit auseinander. 🙁
    Wieviele LEDs sind dabei, wenn ich sie bei dir bestelle?
    Gruss

  17. Robin sagt:

    Hallo Extruder,
    ich wollte mal testen, ob jemand überhaupt den Blog-Beitrag liest :-).
    Richtig, der Programm-Code fehlt.
    ist online! Bitte Foto schicken, was du damit gemacht hast 🙂

    LG
    /robin

  18. Extruder sagt:

    Hallo Robin,
    eine Ergänzung mit Sketch wäre ganz cool 😉

    Es kribbeln die Finger wenn man das liest und irgendwie nicht starten kann 😀

    Gruß

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.