Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. WS2812b einzeln steuern

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

WS2812b einzeln steuern

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
36 Beiträge 6 Kommentatoren 3.7k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Labersack

    @jan1
    Die LEDs sind alle an einem GPIO. Gibt auch in Bezug auf die Performance keinen Sinn den auf zwei GPIOs aufzuteilen, der Rechenenaufwand wird dadurch ja auch nicht geringer.
    Habe einen NodeMCU mit ESP32 für SoundReactive mit vielen LEDs und Wemos D1 Mini für kleinere Sachen im Einsatz.
    Firmware: WLED_0.14.0_ESP32_audioreactive.bin

    SBC-NodeMCU-ESP32-01-1816667783.png

    J Offline
    J Offline
    Jan1
    schrieb am zuletzt editiert von
    #27

    @labersack
    Die Aufteilung wird auf der oben verlinkten Seite so angegeben wobei ich da genau Deiner Meinung bin, was das Berechnen angeht. Hier hast dann aber ein deutlich kürzeren String der durch muss und das hat bei einer seriellen Anbindung eben doch einige Performanz Vorteile. Ich teste mal obs wirklich was ausmacht.
    Die 8266 hatte ich vorher auch laufen, ebenfalls WEMOS D1 und ein NodeMUC. Gerade beim Ambi am TV mit 107 LEDs läufts mit dem ESP32 deutlich runder. Kann aber auch am WLAN Teil liegen, da der ESP32 hier auch deutlich schneller ist. Die WEMOS nerven auch etwas mit der blauen LED, was die 32er S2 mini nicht verbaut haben. Der Preis ist beim Ali für beide ESP eh fast identisch ;)

    L 1 Antwort Letzte Antwort
    0
    • J Jan1

      @labersack
      Ich schreib ja, 60 LED/m.
      Hast die 865 LED an einem GPIO oder aufgeteilt wie empfohlen? Die Sync Geschichte hatte ich schon probiert und komm da nur zu dem Ergebnis, dass beide Strippen dann zur selben Zeit das selbe tun, aber eben nicht wie ein langer Stripe laufen. Ich versuchs einfach mal mit einem Controller und schau wie es läuft bevor ich es fest verbaue.
      Der Vermutung, dass es langsam wird, hatte ich nach dem Test mit der LED Matrix was dann 768 LEDs sind und da hatte der ESP8266 eben sehr deutliche Einbußen.

      L Offline
      L Offline
      Labersack
      schrieb am zuletzt editiert von
      #28

      @jan1
      Ich sehe gerade, du schreibst abwechselnd von ESP32 und ESP8266.
      Das ist ein Unterschied, und bei paarhundert LEDs wird der 8266 durchaus an seine Grenzen kommen, der ESP32 schafft das aber locker.

      1 Antwort Letzte Antwort
      0
      • J Jan1

        @labersack
        Die Aufteilung wird auf der oben verlinkten Seite so angegeben wobei ich da genau Deiner Meinung bin, was das Berechnen angeht. Hier hast dann aber ein deutlich kürzeren String der durch muss und das hat bei einer seriellen Anbindung eben doch einige Performanz Vorteile. Ich teste mal obs wirklich was ausmacht.
        Die 8266 hatte ich vorher auch laufen, ebenfalls WEMOS D1 und ein NodeMUC. Gerade beim Ambi am TV mit 107 LEDs läufts mit dem ESP32 deutlich runder. Kann aber auch am WLAN Teil liegen, da der ESP32 hier auch deutlich schneller ist. Die WEMOS nerven auch etwas mit der blauen LED, was die 32er S2 mini nicht verbaut haben. Der Preis ist beim Ali für beide ESP eh fast identisch ;)

        L Offline
        L Offline
        Labersack
        schrieb am zuletzt editiert von Labersack
        #29

        @jan1 sagte in WS2812b einzeln steuern:

        @labersack
        Die WEMOS nerven auch etwas mit der blauen LED, was die 32er S2 mini nicht verbaut haben.

        Die blaue LED kann dem Lötkolben nur wenige Sekunden standhalten... ;-)
        Ist für die Funktion nicht wichtig.
        (Und für Ungeduldige: Auch ein Seitenschneider macht das Ding schnell dunkel.)

        J 1 Antwort Letzte Antwort
        0
        • L Labersack

          @jan1 sagte in WS2812b einzeln steuern:

          @labersack
          Die WEMOS nerven auch etwas mit der blauen LED, was die 32er S2 mini nicht verbaut haben.

          Die blaue LED kann dem Lötkolben nur wenige Sekunden standhalten... ;-)
          Ist für die Funktion nicht wichtig.
          (Und für Ungeduldige: Auch ein Seitenschneider macht das Ding schnell dunkel.)

          J Offline
          J Offline
          Jan1
          schrieb am zuletzt editiert von
          #30

          @labersack
          ich weiß, aber wenn der bessere ESP den Mist erst gar nicht mit drauf hat, dann doch lieber gleich den.
          Die ESP32 S2 mini laufen mittlerweile mit WLED. Hab mir aus Spaß dann noch die minimal ESP32 C3 bestellt, der Kamerad hat ein paar Probleme bei den Effekten und wie blöd, auch ne LED verbaut.

          L 1 Antwort Letzte Antwort
          0
          • J Jan1

            @labersack
            ich weiß, aber wenn der bessere ESP den Mist erst gar nicht mit drauf hat, dann doch lieber gleich den.
            Die ESP32 S2 mini laufen mittlerweile mit WLED. Hab mir aus Spaß dann noch die minimal ESP32 C3 bestellt, der Kamerad hat ein paar Probleme bei den Effekten und wie blöd, auch ne LED verbaut.

            L Offline
            L Offline
            Labersack
            schrieb am zuletzt editiert von
            #31

            @jan1
            Komm jetzt langsam nicht mehr mit...

            @jan1 sagte in WS2812b einzeln steuern:

            Der Vermutung, dass es langsam wird, hatte ich nach dem Test mit der LED Matrix was dann 768 LEDs sind und da hatte der ESP8266 eben sehr deutliche Einbußen.

            Welche Hardware war denn das genau, die da in die Knie ging?

            J 1 Antwort Letzte Antwort
            0
            • L Labersack

              @jan1
              Komm jetzt langsam nicht mehr mit...

              @jan1 sagte in WS2812b einzeln steuern:

              Der Vermutung, dass es langsam wird, hatte ich nach dem Test mit der LED Matrix was dann 768 LEDs sind und da hatte der ESP8266 eben sehr deutliche Einbußen.

              Welche Hardware war denn das genau, die da in die Knie ging?

              J Offline
              J Offline
              Jan1
              schrieb am zuletzt editiert von
              #32

              @labersack
              War ein WEMOS D1 mini. Konnte aber nicht wirklich lange testen, da mir ja der Stecker geschmolzen ist und das ganze nur ein Testaufbau war. Eine Matrix alleine lief noch ganz passabel, aber bei 3 kann man schon nicht mehr wirklich von Effekten sprechen.

              L 1 Antwort Letzte Antwort
              0
              • J Jan1

                @labersack
                War ein WEMOS D1 mini. Konnte aber nicht wirklich lange testen, da mir ja der Stecker geschmolzen ist und das ganze nur ein Testaufbau war. Eine Matrix alleine lief noch ganz passabel, aber bei 3 kann man schon nicht mehr wirklich von Effekten sprechen.

                L Offline
                L Offline
                Labersack
                schrieb am zuletzt editiert von
                #33

                @jan1
                Der ist für ~600 LEDs natürlich wirklich zu schwach.
                Aber eine NodeMCU (mit ESP32, nicht ESP8266) kann das ohne Schwierigkeiten leisten, und es genügt ein GPIO dazu.

                1 Antwort Letzte Antwort
                0
                • W Online
                  W Online
                  Worlik
                  schrieb am zuletzt editiert von Worlik
                  #34

                  Ich habe die Ansteuerung von WLED soweit fertig. Ich werde da für mich noch dran weiter schreiben (die user kommen bei mir dann beispielsweise aus Datenobjekten und angrenzende Streifen sollen LINKS und RECHTS vom gewünschten Punkt leuchten). Ich mache es aber hier für das Forum mal nicht noch komplizierter.

                  @ticaki Die Zeile verstehe ich übrigens in deinem Skript nicht:

                  p.push([0,0,0]) // die erste und letzte LED sind nicht sichtbar
                  

                  WLED scheint die weg zu ignorieren, zumindest macht es in meinem Test komischerweise keinen Unterschied - ich vermute das wird zu 0 und dann als Index interpretiert? Das Array i besteht entweder aus Farben oder aus Bereichen. Dabei wiederholen sich dann immer wieder 3 Werte: Startindex, Endindex (exklusiv) und Farbe (dieser entweder als Array oder als Hex-Code). Aber vielleicht bezieht sich das bei dir ja auch auf eine unsichtbare LED wegen der Bauweise deines Leuchtobjekts. :) Ich nutze die Indizes zur Optimierung, um den Traffic zu reduzieren. In der Regel ist bei mir fast alles Schwarz, bis auf wenige LEDs. In der API-Dokumentation wird auch die Verwendung von hexadezimal Schreibweise für die Farben präferiert. Ich vermute das spart etwas traffic und WLED arbeitet vermutlich intern auch mit den Hex Zahlen. Geht aber natürlich beides.

                  So sind die Segmente bei mir in WLED konfiguriert:
                  Bild_2023-11-28_103225570.png

                  // Hier können alle WLED Instanzen und die entsprechenden Segmente einmal mit Namen versehen werden. Wenn für einen Namen mehrere LEDs leuchten sollen, kann der Name beliebig oft wiederholt werden, dann gehen alle LEDs mit dem entsprechenden Namen an.
                  let instances = [
                      {
                          id: 'wled.0.a0b765587278', 
                          segments: [
                              ['AA01', 'AA02', 'AA03', 'AA04', 'AA05', 'AA06', 'AA07', 'AA08', 'AA09', 'AA10', 'AA11', 'AA12', 'AA13', 'AA14', 'AA15', 'AA16', 'AA17', 'AA18', 'AA19', 'AA20', 'AA21'],
                              ['AB01', 'AB02', 'AB03', 'AB04', 'AB05', 'AB06', 'AB07', 'AB08', 'AB09', 'AB10', 'AB11', 'AB12', 'AB13', 'AB14', 'AB15', 'AB16', 'AB17', 'AB18', 'AB19', 'AB20'],
                              ['AC01', 'AC02', 'AC03', 'AC04', 'AC05', 'AC06', 'AC07', 'AC08', 'AC09', 'AC10', 'AC11', 'AC12', 'AC13', 'AC14', 'AC15', 'AC16', 'AC17', 'AC18', 'AC19', 'AC20'],
                              ['AD01', 'AD02', 'AD03', 'AD04', 'AD05', 'AD06', 'AD07', 'AD08', 'A109', 'AD10', 'AD11', 'AD12', 'AD13', 'AD14', 'AD15', 'AD16', 'AD17', 'AD18', 'AD19', 'AD20', 'AD21'],
                          ]
                      },
                  ];
                  
                  // Das Objekt hier könnte man vorab mit Datenobjekten füllen. Jeder User hat eine eigene Farbe. Die Farben werden "gemischt", wenn zwei User gleichzeitig LEDs aktivieren.
                  let users = {
                      person1: {
                          color: 'ff0000',
                          storage: 'AB03',
                      },
                      person2: {
                          color: '00ff00',
                          storage: 'AC01',
                      }
                  };
                  
                  // -------------------------------------------------------------------------------------------------------------------
                  
                  function hexToRgb(h) {
                      return [
                          Number('0x' + h[0] + h[1]) | 0, 
                          Number('0x' + h[2] + h[3]) | 0,
                          Number('0x' + h[4] + h[5]) | 0
                      ];
                  }
                  
                  function rgbToHex(r, g, b) {
                      return ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
                  }
                  
                  function avgHex(h1, h2) {
                      let a = hexToRgb(h1);
                      let b = hexToRgb(h2);
                      
                      return rgbToHex(
                          ~~((a[0] + b[0]) / 2), 
                          ~~((a[1] + b[1]) / 2), 
                          ~~((a[2] + b[2]) / 2)
                      );
                  }
                  
                  function getActiveLights(users) {
                      let activeLights = {};
                  
                      for(const [username, opts] of Object.entries(users)) {
                          if(activeLights[opts.storage])
                              activeLights[opts.storage] = avgHex(activeLights[opts.storage], opts.color);
                          else
                              activeLights[opts.storage] = opts.color;
                      }
                  
                      return activeLights;
                  }
                  
                  function initInstances() {
                      for(let s = 0; s < instances.length; s++) {
                          instances[s]['name'] = getState(instances[s]['id'] + '._info.name').val;
                          instances[s]['ipAddress'] = getState(instances[s]['id'] + '._info.ip').val;
                      }
                  
                      resetInstancesData();
                  }
                  
                  function resetInstancesData() {
                      for(let s = 0; s < instances.length; s++) {
                          instances[s]['data'] = {
                              bri: 255,
                              seg: [],
                          };
                      }
                  }
                  
                  function updateInstancesData() {
                      let activeLights = getActiveLights(users);
                  
                      resetInstancesData();
                  
                      for(let s = 0; s < instances.length; s++) {
                          for(let sl = 0; sl < instances[s].segments.length; sl++) {
                              let i = [];
                              
                              for(let led = 0; led < instances[s].segments[sl].length; led++) {
                                  if(activeLights[instances[s].segments[sl][led]])
                                      i.push(activeLights[instances[s].segments[sl][led]]);
                                  else
                                      i.push('000000');
                              }
                  
                              instances[s].data.seg.push({i: i});
                          }
                      }
                  }
                  
                  // Optimiert die Daten so, dass gleiche Farben in Farbbereiche zusammengefasst werden und reduziert so den Traffic zu den WLED Instanzen:
                  function optimizeInstancesData() {
                      for(let s = 0; s < instances.length; s++) {
                          if(!instances[s].data.seg)
                              continue;
                  
                          for(let sg = 0; sg < instances[s].data.seg.length; sg++) {
                              if(!instances[s].data.seg[sg].i)
                                  continue;
                  
                              let oldI = instances[s].data.seg[sg].i;
                  
                              if(oldI && oldI.length > 0 && typeof oldI[0] !== 'number') {
                                  let optI = [0, 1, oldI[0]];
                                  
                                  for(let k = 1; k < oldI.length; k++) {
                                      if(optI[optI.length - 1] == oldI[k])
                                          optI[optI.length - 2]++;
                                      else {
                                          let idx = optI[optI.length - 2];
                                          
                                          optI.push(idx);
                                          optI.push(idx + 1);
                                          optI.push(oldI[k]);
                                      }
                                  }
                  
                                  instances[s].data.seg[sg].i = optI;
                              }
                          }
                      }
                  }
                  
                  async function submitInstancesData() {
                      optimizeInstancesData();
                  
                      for(let s = 0; s < instances.length; s++) {
                          try {
                              let {data} = await axios.post(
                                  'http://' + instances[s].ipAddress + '/json',
                                  instances[s].data, { 
                                      headers: {
                                          'Content-Type': 'application/json'
                                      }
                                  }
                              )
                  
                              if(data.success === true)
                                  console.log('Daten wurden zu WLED Instanz "' + instances[s].name + '" übertragen.');
                              else
                                  console.error('Die WLED Instanz "' + instances[s].name + '" hat die Daten abgelehnt: ' + JSON.stringify(data));
                          } 
                          catch(error) {
                              console.error('WLED Instanz "' + instances[s].name + '" ist nicht erreichbar: ' + error);
                          }
                      }
                  }
                  
                  // -------------------------------------------------------------------------------------------------------------------
                  
                  const axios = require('axios');
                  
                  initInstances();
                  updateInstancesData();
                  submitInstancesData();
                  
                  
                  T 1 Antwort Letzte Antwort
                  0
                  • W Worlik

                    Ich habe die Ansteuerung von WLED soweit fertig. Ich werde da für mich noch dran weiter schreiben (die user kommen bei mir dann beispielsweise aus Datenobjekten und angrenzende Streifen sollen LINKS und RECHTS vom gewünschten Punkt leuchten). Ich mache es aber hier für das Forum mal nicht noch komplizierter.

                    @ticaki Die Zeile verstehe ich übrigens in deinem Skript nicht:

                    p.push([0,0,0]) // die erste und letzte LED sind nicht sichtbar
                    

                    WLED scheint die weg zu ignorieren, zumindest macht es in meinem Test komischerweise keinen Unterschied - ich vermute das wird zu 0 und dann als Index interpretiert? Das Array i besteht entweder aus Farben oder aus Bereichen. Dabei wiederholen sich dann immer wieder 3 Werte: Startindex, Endindex (exklusiv) und Farbe (dieser entweder als Array oder als Hex-Code). Aber vielleicht bezieht sich das bei dir ja auch auf eine unsichtbare LED wegen der Bauweise deines Leuchtobjekts. :) Ich nutze die Indizes zur Optimierung, um den Traffic zu reduzieren. In der Regel ist bei mir fast alles Schwarz, bis auf wenige LEDs. In der API-Dokumentation wird auch die Verwendung von hexadezimal Schreibweise für die Farben präferiert. Ich vermute das spart etwas traffic und WLED arbeitet vermutlich intern auch mit den Hex Zahlen. Geht aber natürlich beides.

                    So sind die Segmente bei mir in WLED konfiguriert:
                    Bild_2023-11-28_103225570.png

                    // Hier können alle WLED Instanzen und die entsprechenden Segmente einmal mit Namen versehen werden. Wenn für einen Namen mehrere LEDs leuchten sollen, kann der Name beliebig oft wiederholt werden, dann gehen alle LEDs mit dem entsprechenden Namen an.
                    let instances = [
                        {
                            id: 'wled.0.a0b765587278', 
                            segments: [
                                ['AA01', 'AA02', 'AA03', 'AA04', 'AA05', 'AA06', 'AA07', 'AA08', 'AA09', 'AA10', 'AA11', 'AA12', 'AA13', 'AA14', 'AA15', 'AA16', 'AA17', 'AA18', 'AA19', 'AA20', 'AA21'],
                                ['AB01', 'AB02', 'AB03', 'AB04', 'AB05', 'AB06', 'AB07', 'AB08', 'AB09', 'AB10', 'AB11', 'AB12', 'AB13', 'AB14', 'AB15', 'AB16', 'AB17', 'AB18', 'AB19', 'AB20'],
                                ['AC01', 'AC02', 'AC03', 'AC04', 'AC05', 'AC06', 'AC07', 'AC08', 'AC09', 'AC10', 'AC11', 'AC12', 'AC13', 'AC14', 'AC15', 'AC16', 'AC17', 'AC18', 'AC19', 'AC20'],
                                ['AD01', 'AD02', 'AD03', 'AD04', 'AD05', 'AD06', 'AD07', 'AD08', 'A109', 'AD10', 'AD11', 'AD12', 'AD13', 'AD14', 'AD15', 'AD16', 'AD17', 'AD18', 'AD19', 'AD20', 'AD21'],
                            ]
                        },
                    ];
                    
                    // Das Objekt hier könnte man vorab mit Datenobjekten füllen. Jeder User hat eine eigene Farbe. Die Farben werden "gemischt", wenn zwei User gleichzeitig LEDs aktivieren.
                    let users = {
                        person1: {
                            color: 'ff0000',
                            storage: 'AB03',
                        },
                        person2: {
                            color: '00ff00',
                            storage: 'AC01',
                        }
                    };
                    
                    // -------------------------------------------------------------------------------------------------------------------
                    
                    function hexToRgb(h) {
                        return [
                            Number('0x' + h[0] + h[1]) | 0, 
                            Number('0x' + h[2] + h[3]) | 0,
                            Number('0x' + h[4] + h[5]) | 0
                        ];
                    }
                    
                    function rgbToHex(r, g, b) {
                        return ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
                    }
                    
                    function avgHex(h1, h2) {
                        let a = hexToRgb(h1);
                        let b = hexToRgb(h2);
                        
                        return rgbToHex(
                            ~~((a[0] + b[0]) / 2), 
                            ~~((a[1] + b[1]) / 2), 
                            ~~((a[2] + b[2]) / 2)
                        );
                    }
                    
                    function getActiveLights(users) {
                        let activeLights = {};
                    
                        for(const [username, opts] of Object.entries(users)) {
                            if(activeLights[opts.storage])
                                activeLights[opts.storage] = avgHex(activeLights[opts.storage], opts.color);
                            else
                                activeLights[opts.storage] = opts.color;
                        }
                    
                        return activeLights;
                    }
                    
                    function initInstances() {
                        for(let s = 0; s < instances.length; s++) {
                            instances[s]['name'] = getState(instances[s]['id'] + '._info.name').val;
                            instances[s]['ipAddress'] = getState(instances[s]['id'] + '._info.ip').val;
                        }
                    
                        resetInstancesData();
                    }
                    
                    function resetInstancesData() {
                        for(let s = 0; s < instances.length; s++) {
                            instances[s]['data'] = {
                                bri: 255,
                                seg: [],
                            };
                        }
                    }
                    
                    function updateInstancesData() {
                        let activeLights = getActiveLights(users);
                    
                        resetInstancesData();
                    
                        for(let s = 0; s < instances.length; s++) {
                            for(let sl = 0; sl < instances[s].segments.length; sl++) {
                                let i = [];
                                
                                for(let led = 0; led < instances[s].segments[sl].length; led++) {
                                    if(activeLights[instances[s].segments[sl][led]])
                                        i.push(activeLights[instances[s].segments[sl][led]]);
                                    else
                                        i.push('000000');
                                }
                    
                                instances[s].data.seg.push({i: i});
                            }
                        }
                    }
                    
                    // Optimiert die Daten so, dass gleiche Farben in Farbbereiche zusammengefasst werden und reduziert so den Traffic zu den WLED Instanzen:
                    function optimizeInstancesData() {
                        for(let s = 0; s < instances.length; s++) {
                            if(!instances[s].data.seg)
                                continue;
                    
                            for(let sg = 0; sg < instances[s].data.seg.length; sg++) {
                                if(!instances[s].data.seg[sg].i)
                                    continue;
                    
                                let oldI = instances[s].data.seg[sg].i;
                    
                                if(oldI && oldI.length > 0 && typeof oldI[0] !== 'number') {
                                    let optI = [0, 1, oldI[0]];
                                    
                                    for(let k = 1; k < oldI.length; k++) {
                                        if(optI[optI.length - 1] == oldI[k])
                                            optI[optI.length - 2]++;
                                        else {
                                            let idx = optI[optI.length - 2];
                                            
                                            optI.push(idx);
                                            optI.push(idx + 1);
                                            optI.push(oldI[k]);
                                        }
                                    }
                    
                                    instances[s].data.seg[sg].i = optI;
                                }
                            }
                        }
                    }
                    
                    async function submitInstancesData() {
                        optimizeInstancesData();
                    
                        for(let s = 0; s < instances.length; s++) {
                            try {
                                let {data} = await axios.post(
                                    'http://' + instances[s].ipAddress + '/json',
                                    instances[s].data, { 
                                        headers: {
                                            'Content-Type': 'application/json'
                                        }
                                    }
                                )
                    
                                if(data.success === true)
                                    console.log('Daten wurden zu WLED Instanz "' + instances[s].name + '" übertragen.');
                                else
                                    console.error('Die WLED Instanz "' + instances[s].name + '" hat die Daten abgelehnt: ' + JSON.stringify(data));
                            } 
                            catch(error) {
                                console.error('WLED Instanz "' + instances[s].name + '" ist nicht erreichbar: ' + error);
                            }
                        }
                    }
                    
                    // -------------------------------------------------------------------------------------------------------------------
                    
                    const axios = require('axios');
                    
                    initInstances();
                    updateInstancesData();
                    submitInstancesData();
                    
                    
                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #35

                    @worlik

                    Bei mir ist es so das die erste und letzte LED unterhalb der Fräsung sitzen, und deshalb nicht angesteuert werden.

                    Über den Traffic hab ich mir keine gedanken gemacht, das ist unter 1kb alle 3 sekunden. Wenn ich den Wled mit Hyperion verbinde sind es die gleichen Daten nur 30-50 mal in der Sekunde.

                    EDIT: Link damit man weiß was ich meine https://docs.hyperion-project.org/de/user/leddevices/network/wled.html

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    W 1 Antwort Letzte Antwort
                    0
                    • T ticaki

                      @worlik

                      Bei mir ist es so das die erste und letzte LED unterhalb der Fräsung sitzen, und deshalb nicht angesteuert werden.

                      Über den Traffic hab ich mir keine gedanken gemacht, das ist unter 1kb alle 3 sekunden. Wenn ich den Wled mit Hyperion verbinde sind es die gleichen Daten nur 30-50 mal in der Sekunde.

                      EDIT: Link damit man weiß was ich meine https://docs.hyperion-project.org/de/user/leddevices/network/wled.html

                      W Online
                      W Online
                      Worlik
                      schrieb am zuletzt editiert von Worlik
                      #36

                      @ticaki Habe ich mir so ähnlich schon gedacht. :)

                      Weißt du zufälligerweise, wie man dann wieder in den "normalen" Modus zurückkehren kann? Nachdem man via API einmal LEDs direkt angesteuert hat, reagiert die Weboberfläche nicht mehr, auch die Datenpunkte in iobroker haben keinen Effekt mehr. Ich hätte gerne quasi noch die Möglichkeit einer Idle-Animation.

                      EDIT: Habs gefunden. Das Property heißt wled.0.ID.seg.0.sel und muss auf true, damit die normalen Animationen wieder laufen.

                      EDIT2: Oder auch nicht, man muss zusätzlich das Property frz auf false setzen. Das steht wohl für Freeze. Leider lässt sich der Datenpunkt nicht schreiben, sprich man benötigt dann wohl dafür auch einen separaten API-Call, um das wieder zurück zu setzen.

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      384

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe