Pomoc s WLED

Integrace a HACS
Jezinka
Začínající autor
Začínající autor
Příspěvky: 40
Registrován: 06. leden 2022, 09:34
Dal poděkování: 2 poděkování
Dostal poděkování: 1 poděkování

Re: Pomoc s WLED

Příspěvek od Jezinka »

kiklhorn píše: 18. leden 2022, 03:45 Nemám tu žádný pásek, potřeboval bych si to odkrokovat

Ale můžeš hned za řádky

Kód: Vybrat vše

void userLoop()
{
doplnit

Kód: Vybrat vše

   Serial.println((String)"userVar0:"+userVar0+" previousUserVar0:"+previousUserVar0+" wipeState:"+wipeState);
a poslat log ze sériového portu s komentářem co to vypisovalo když jsi sepnul čidlo v okamžiku kdy to zhasínalo

Teoreticky by mělo stačit pak na základě toho výpisu upravit začátek smyčky - podmínka "něco" aby zhasínání změnil na rozsvěcení. Možná ještě s voláním resetTimebase();

Kód: Vybrat vše

  if (userVar0 > 0)
  {
    if ((wipeState == 3) && něco ) wipeState = 1;
    if ((previousUserVar0 == 1 && userVar0 == 2) || (previousUserVar0 == 2 && userVar0 == 1)) wipeState = 3; //turn off if other PIR triggered
Tak se zdá, že asi umíš cčko že. No problém je, že nejsem schopný připojit serial port abych viděl log, protože to je vše namontované. POkud bych to připojil na pc tak bych pak zase neviděl co to dělá na schodech. Pokud by to nevadilo.
Včera jsem ale dumal nad tím kodem a pochopil jsem co se tam děje, Já spouštím světla vždy příkazem U0=1 nebo 2 a vypínám vždy U0=0. Což odskočí vždy v kodu někam dolu a pak dochází k zhasínání. Takže nápad bych měl, že pokud by se ještě při zhasínací smyčce udělal další wipeState který by byl zapsán před spuštěním zhasínání a pak po zhasnutí by se přepsal na ten který tam je nyní, tak by se při spuštění příkazu 0 mohlo kontrolovat, zda je hodnota wipeState ta ještě před zhasnutím a na základě toho pak buď znovu spustit kod který ukazuje že je plno rozsvíceno (asi nejjednoduší) nebo udělat kod který by od pozice kde schody zhasínají, se otočil směr a začali se od toho bodu rozsvěcet. Asi by se muselo k kodu nějak spočítat v kterém čase se to při vstoupení do schodiště nacházelo. Co myslíš?

Jezinka
Začínající autor
Začínající autor
Příspěvky: 40
Registrován: 06. leden 2022, 09:34
Dal poděkování: 2 poděkování
Dostal poděkování: 1 poděkování

Re: Pomoc s WLED

Příspěvek od Jezinka »

To testování není možné, protože seriová linka je v kodu nejspíš nepovolena. Ten hlavní kod je celý WLED a bylo by složité to povolit.
Ale podle toho co vím, jak se to chová, tak nejspíš při vypínání je stav wipeState == 3 protože když stisknu opět příkaz U0=0 tak to znovu skočí na sekvenci zhasínání. Toho by se mohlo v kodu využít podmínkou, že pokud je aktivován příkaz U0=1 nebo U0=2 tak by tam mohla být podmínka if wipeState == 3 rozsviť světla a nastav wipeState == 2. Tím by to pak bylo zase ve stádiu, jako když se světla rozsvítila.
Mělo by to teoreticky fungovat, protože opětovným příkazem 0 se také přeruší zhasínání a spustí se znovu. Jen jak ten kod napsat :-)

Jezinka
Začínající autor
Začínající autor
Příspěvky: 40
Registrován: 06. leden 2022, 09:34
Dal poděkování: 2 poděkování
Dostal poděkování: 1 poděkování

Re: Pomoc s WLED

Příspěvek od Jezinka »

Možná tak?

if (wipeState == 3)
effectCurrent = FX_MODE_STATIC;
timeStaticStart = millis();
colorUpdated(CALL_MODE_NOTIFICATION);
wipeState = 2;
else
if ((previousUserVar0 == 1 && userVar0 == 2) (previousUserVar0 == 2 && userVar0 == 1)) wipeState = 3;

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: Pomoc s WLED

Příspěvek od kiklhorn »

Mělo by stačit co už jsem napsal, když změním wipeState na 1 tak se zas přepne do rozsvěcení (v kódu už to je). Jen v té smyčce nedám z hlavy dohromady podmínky, proto jsem chtěl vidět ty stavy...
Wled diody tu mám 100 ks, nechce se mi to pájet, koupím nějaký pásek. Jen ne v nejbližších dnech.

Zatím si smaž na ř. 15 ten # na začátku.

Kód: Vybrat vše

#define STAIRCASE_WIPE_OFF
Sice bez efektů, ale i bez tvého problému.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Jezinka
Začínající autor
Začínající autor
Příspěvky: 40
Registrován: 06. leden 2022, 09:34
Dal poděkování: 2 poděkování
Dostal poděkování: 1 poděkování

Re: Pomoc s WLED

Příspěvek od Jezinka »

Včera jsem zkusil změnit na řádku 34 právě z té trojky na 0 a i na dvojku. Tak nějaká změna byla vidět ale chce to ještě doladit protože to nedělá ještě přesně co chci, jsou tam chyby...
Ale věřím, že se to podaří společnými silami nějak doladit :-)

Jezinka
Začínající autor
Začínající autor
Příspěvky: 40
Registrován: 06. leden 2022, 09:34
Dal poděkování: 2 poděkování
Dostal poděkování: 1 poděkování

Re: Pomoc s WLED

Příspěvek od Jezinka »

Takže se mi podařilo dostat na serial monitor ale asi to tam neukazuje to co bys chtěl vidět... Ukazuje to spíš systémové věci, příkazy atd ale to co se děje v tom kodu to ne.
Malá ukázka:

Kód: Vybrat vše

Free heap: 185832
Wifi state: 3
State time: 0
NTP last sync: 999000000
Client IP: 10.10.20.239
Loops/sec: 2778
Max UM time[ms]: 1
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
---DEBUG INFO---
Runtime: 330050
Unix time: 330,050
Free heap: 185832
Wifi state: 3
State time: 0
NTP last sync: 999000000
Client IP: 10.10.20.239
Loops/sec: 2777
Max UM time[ms]: 1
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Local time: 00:06
---DEBUG INFO---
Runtime: 360055
Unix time: 360,055
Free heap: 185832
Wifi state: 3
State time: 0
NTP last sync: 999000000
Client IP: 10.10.20.239
Loops/sec: 2777
Max UM time[ms]: 1
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
JSON buffer released. (11)
JSON buffer released. (12)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
---DEBUG INFO---
Runtime: 390060
Unix time: 390,060
Free heap: 184804
Wifi state: 3
State time: 0
NTP last sync: 999000000
Client IP: 10.10.20.239
Loops/sec: 2780
Max UM time[ms]: 1
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Local time: 00:07
---DEBUG INFO---
Runtime: 420065
Unix time: 420,065
Free heap: 185832
Wifi state: 3
State time: 0
NTP last sync: 999000000
Client IP: 10.10.20.239
Loops/sec: 2779
Max UM time[ms]: 1
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
Not-Found HTTP call:
URI: /presets.json
FileRead: /presets.json
JSON buffer size: 1687
JSON buffer released. (17)
MQTT msg: wled/test/api
U0=1
API req: win&U0=1
JSON buffer released. (12)
Publish MQTT
MQTT msg: wled/test/api
U0=0
API req: win&U0=0
JSON buffer released. (12)
Publish MQTT

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: Pomoc s WLED

Příspěvek od kiklhorn »

Budu si tu delat poznamky, pak si je projdu:

Necham probehnout uplne rozsviceni a zhasnuti

Na zacatku loop()

Kód: Vybrat vše

userVar0:1 previousUserVar0:0 wipeState:0  - posilam prikaz U0=1  // pri zhasnuto, dostal prikaz k rozsviceni
userVar0:1 previousUserVar0:1 wipeState:1 - po poslani prikazu se nastavi promenne takto // okamzite nastavuje a rozveci se
userVar0:1 previousUserVar0:1 wipeState:2 - a po rozsviceni uplne celeho (trva nejaky cas) se nastavi takto //rosviceno
dalsi U0=1 ignoruje

dame U0=0

Kód: Vybrat vše

userVar0:0 previousUserVar0:1 wipeState:2 // dostava prikaz k rozviceni
userVar0:1 previousUserVar0:0 wipeState:3 // okamzite
userVar0:1 previousUserVar0:1 wipeState:4 // zhasina
userVar0:0 previousUserVar0:0 wipeState:0  // a nez nastavi zhasinanim toto tak to chvili trva
------------------------------

Zkusim ze stavu zhasnuto prerusit rozsveceni, to funguje
tedy u0 = 1 a jeste pred koncem rozsviceni = opet 0

Kód: Vybrat vše

Zmena> userVar0 z:0 na:1
D> userVar0:1 previousUserVar0:0 wipeState:0

D> userVar0:1 previousUserVar0:1 wipeState:1
tady posilam do rozsveceni 0

Kód: Vybrat vše

Zmena> userVar0 z:1 na:0
D> userVar0:0 previousUserVar0:1 wipeState:1

Zmena> userVar0 z:0 na:1
D> userVar0:1 previousUserVar0:0 wipeState:3

D> userVar0:1 previousUserVar0:1 wipeState:4

Zmena> userVar0 z:1 na:0
D> userVar0:0 previousUserVar0:0 wipeState:0
----------------------
Zkusim prerusit zhasinani

ted stav sviti, tj wipestate =2

poslu 0

Kód: Vybrat vše

Zmena> userVar0 z:1 na:0
D> userVar0:0 previousUserVar0:1 wipeState:2

Zmena> userVar0 z:0 na:1
D> userVar0:1 previousUserVar0:0 wipeState:3

D> userVar0:1 previousUserVar0:1 wipeState:4
tady poslu 1, je ignorovana protoze uz je nastavena automaticky kodem
a zhasinani se dokonci a dostanu opet

Kód: Vybrat vše

Zmena> userVar0 z:1 na:0
D> userVar0:0 previousUserVar0:0 wipeState:0


Ta logika mi přide poněkud zvrácená, vypadá to že při zhasínání si nastaví userVar0 = 1 jen proto aby mu to v příští smyčce vůbec prošlo ifem v loopu.Jiný důvod tam nevidím...

Rozpleteme to nebo je to na přepsání? Zkusím se zamyslet.
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Jezinka
Začínající autor
Začínající autor
Příspěvky: 40
Registrován: 06. leden 2022, 09:34
Dal poděkování: 2 poděkování
Dostal poděkování: 1 poděkování

Re: Pomoc s WLED

Příspěvek od Jezinka »

Už jsem v režimu serial print, dokonce mohu nadefinovat proměnnou pomocí DEBUG_PRINTLN(wipeState); ale problém je v tom, že to potom po spuštění vyhazuje stovky hodnot za vteřinu a nevím jak to změnit. Místo toho aby to vypsalo hodnotu pouze jednou, tak se neustále opakuje, oak zase jiná hodnota pokud je změněna atd... Nevíš prosím co s tím?
Přílohy
Image 6.png

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: Pomoc s WLED

Příspěvek od kiklhorn »

Přihodil jsem si tam tři pomocné proměnné a loguji jen při jejich změně

Kód: Vybrat vše

#include "wled.h"

/*
 * Usermods allow you to add own functionality to WLED more easily
 * See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
 * 
 * This is Stairway-Wipe as a v2 usermod.
 * 
 * Using this usermod:
 * 1. Copy the usermod into the sketch folder (same folder as wled00.ino)
 * 2. Register the usermod by adding #include "stairway-wipe-usermod-v2.h" in the top and registerUsermod(new StairwayWipeUsermod()) in the bottom of usermods_list.cpp
 */

class StairwayWipeUsermod : public Usermod {
  private:
    //Private class members. You can declare variables and functions only accessible to your usermod here
    unsigned long lastTime = 0;
    byte wipeState = 0; //0: inactive 1: wiping 2: solid
    unsigned long timeStaticStart = 0;
    uint16_t previousUserVar0 = 0;
    uint16_t uv0 = 0;
    uint16_t puv0 = 0;
    byte wipest = 0;
    byte prvni_vypis = 1;

//comment this out if you want the turn off effect to be just fading out instead of reverse wipe
#define STAIRCASE_WIPE_OFF
  public:

    void loop() {
  //userVar0 (U0 in HTTP API):
  //has to be set to 1 if movement is detected on the PIR that is the same side of the staircase as the ESP8266
  //has to be set to 2 if movement is detected on the PIR that is the opposite side
  //can be set to 0 if no movement is detected. Otherwise LEDs will turn off after a configurable timeout (userVar1 seconds)
  if (prvni_vypis) {
    Serial.println((String)"Start:");
    Serial.println((String)"userVar0:"+userVar0+" previousUserVar0:"+previousUserVar0+" wipeState:"+wipeState);
    prvni_vypis = 0;
  }
  if ((previousUserVar0 != puv0) || (userVar0 != uv0) || (wipeState != wipest)) {
    Serial.println();
    if (userVar0 != uv0) Serial.println((String)"Zmena> userVar0 z:"+uv0+" na:"+userVar0);
    Serial.println((String)"D> userVar0:"+userVar0+" previousUserVar0:"+previousUserVar0+" wipeState:"+wipeState);
    puv0 = previousUserVar0;
    uv0 = userVar0;
    wipest = wipeState;
  }

  if (userVar0 > 0)
  {
    if ((previousUserVar0 == 1 && userVar0 == 2) || (previousUserVar0 == 2 && userVar0 == 1)) wipeState = 3; //turn off if other PIR triggered
    previousUserVar0 = userVar0;
    
    if (wipeState == 0) {
      startWipe();
      wipeState = 1;
    } else if (wipeState == 1) { //wiping
      uint32_t cycleTime = 360 + (255 - effectSpeed)*75; //this is how long one wipe takes (minus 25 ms to make sure we switch in time)
      if (millis() + strip.timebase > (cycleTime - 25)) { //wipe complete
        effectCurrent = FX_MODE_STATIC;
        timeStaticStart = millis();
        colorUpdated(CALL_MODE_NOTIFICATION);
        wipeState = 2;
      }
    } else if (wipeState == 2) { //static
      if (userVar1 > 0) //if U1 is not set, the light will stay on until second PIR or external command is triggered
      {
        if (millis() - timeStaticStart > userVar1*1000) wipeState = 3;
      }
    } else if (wipeState == 3) { //switch to wipe off
      #ifdef STAIRCASE_WIPE_OFF
      effectCurrent = FX_MODE_COLOR_WIPE;
      strip.timebase = 360 + (255 - effectSpeed)*75 - millis(); //make sure wipe starts fully lit
      colorUpdated(CALL_MODE_NOTIFICATION);
      wipeState = 4;
      #else
      turnOff();
      #endif
    } else { //wiping off
      if (millis() + strip.timebase > (725 + (255 - effectSpeed)*150)) turnOff(); //wipe complete
    }
  } else {
    wipeState = 0; //reset for next time
    if (previousUserVar0) {
      #ifdef STAIRCASE_WIPE_OFF
      userVar0 = previousUserVar0;
      wipeState = 3;
      #else
      turnOff();
      #endif
    }
    previousUserVar0 = 0;
  }
}

    void readFromJsonState(JsonObject& root)
    {
      userVar0 = root["user0"] | userVar0; //if "user0" key exists in JSON, update, else keep old value
      //if (root["bri"] == 255) Serial.println(F("Don't burn down your garage!"));
    }

    uint16_t getId()
    {
      return USERMOD_ID_EXAMPLE;
    }


    void startWipe()
    {
    bri = briLast; //turn on
    transitionDelayTemp = 0; //no transition
    effectCurrent = FX_MODE_COLOR_WIPE;
    resetTimebase(); //make sure wipe starts from beginning

    //set wipe direction
    WS2812FX::Segment& seg = strip.getSegment(0);
    bool doReverse = (userVar0 == 2);
    seg.setOption(1, doReverse);

    colorUpdated(CALL_MODE_NOTIFICATION);
    }

    void turnOff()
    {
    #ifdef STAIRCASE_WIPE_OFF
    transitionDelayTemp = 0; //turn off immediately after wipe completed
    #else
    transitionDelayTemp = 4000; //fade out slowly
    #endif
    bri = 0;
    colorUpdated(CALL_MODE_NOTIFICATION);
    wipeState = 0;
    userVar0 = 0;
    previousUserVar0 = 0;
    }



   //More methods can be added in the future, this example will then be extended.
   //Your usermod will remain compatible as it does not need to implement all methods from the Usermod base class!
};
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

Jezinka
Začínající autor
Začínající autor
Příspěvky: 40
Registrován: 06. leden 2022, 09:34
Dal poděkování: 2 poděkování
Dostal poděkování: 1 poděkování

Re: Pomoc s WLED

Příspěvek od Jezinka »

Ještě mě nyní napadlo, pokud bys mohl a měl čas, mohl by ses připojit přímo ke mě a zkusit to u mě přímo s kodem a připojením a vidět to ladění.
Případně se můžeme spojit nějak online abychom se na to mrkli a rovnou prováděli změny (fcb nebo něco jiného)

Odpovědět

Zpět na „Integrace“