Tryb konfiguracyjny bez przycisku

User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

Cześć, mam takie pytanko. Chciałbym przeprogramować żarówkę RGBW. Oryginalnie pracuje z softem TUYA. W tryb konfiguracyjny wchodzi się włączając jej 3 razy zasilanie. Czy Supla ma coś podobnego? chodzi mi o zaprogramowanie poprzez Arduino takiego trybu. Teoretycznie nie programując przycisku konfiguracyjnego powinniśmy mieć dostęp do urządzenia przez webserwer, działa to podobno (nie sprawdzałem) w sofcie generowanym poprzez GUI Generic Builder, a jak to jest w programie Arduino? Choć wolałbym, aby żarówka nie nadawała mi cały czas sieci. Wiem, że z poziomu Clouda mogę wymusić tryb konfiguracyjny, ale jeśli przenoszę urządzenie z jednej sieci wifi na drugą, nawet nie zmieniając adresów serwerów, to nie będzie jak wprowadzić nowych konfiguracji wifi nie mając dostępu do urządzenia.
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 135 times
Been thanked: 137 times

Post

Jeśli chcesz, to GG wgrasz przez Arduino IDE :)

Robiąc program "od podstaw" w np. Arduino IDE, sam definiujesz kiedy ma wchodzić w tryb konfiguracji.

Nie wiem czy przełączanie zasilania 3x na żarówce to najlepszy pomysł. W końcu to jest żarówka i ją się często całkowicie odcina od zasilania, a dzieci bawiące się światłami potrafią migać dużo więcej niż 3x ;)

Jeśli chodzi o to "jak to zrobić", to mógłbyś do flasha zapisywać taki licznik uruchomień, który jest resetowany np. po 5 s od włączenia zasilania. Przy każdym kolejnym wyłączeniu i włączeniu zasilania, licznik zwiększasz o 1 i jeśli jest >= 3, to przełączasz urządzenie w tryb konfiguracyjny.

Bazując na przykładzie "WebInterface" z biblioteki SuplaDevice można to zrobić np. tak:

Code: Select all

// w setup, pod SuplaDevice.begin()
  auto cfg = Supla::Storage::ConfigInstance();
  if (cfg) {
    int8_t resetCounter = 0;
    cfg->getInt8("resetCounter", &resetCounter));
    resetCounter++;
    if (resetCounter >= 3) {
      SuplaDevice.requestCfgMode(Supla::Device::WithTimeout);
      cfg->setInt8("resetCounter", 0);
    } else {
      cfg->setInt8("resetCounter", resetCounter);
    }
    cfg->commit();
  }

// w iterate
  static bool resetCountTimedOut = false;
  if (!resetCountTimedOut && millis() > 5000) {
    resetCountTimedOut = true;
    auto cfg = Supla::Storage::ConfigInstance();
    if (cfg) {
      cfg->setInt8("resetCounter", 0);
      cfg->commit();   // to można pominąć, bo urządzenie samo wywoła commit, ale może to być po kilku sekundach, więc realnie te 5s by się wydłużyło
    }
  }
Powyższego kodu nie kompilowałem, ani nie testowałem, więc coś może nie działać ;)
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

klew wrote: Wed Jan 04, 2023 10:26 am Jeśli chcesz, to GG wgrasz przez Arduino IDE :)

Robiąc program "od podstaw" w np. Arduino IDE, sam definiujesz kiedy ma wchodzić w tryb konfiguracji.

Nie wiem czy przełączanie zasilania 3x na żarówce to najlepszy pomysł. W końcu to jest żarówka i ją się często całkowicie odcina od zasilania, a dzieci bawiące się światłami potrafią migać dużo więcej niż 3x ;)

Jeśli chodzi o to "jak to zrobić", to mógłbyś do flasha zapisywać taki licznik uruchomień, który jest resetowany np. po 5 s od włączenia zasilania. Przy każdym kolejnym wyłączeniu i włączeniu zasilania, licznik zwiększasz o 1 i jeśli jest >= 3, to przełączasz urządzenie w tryb konfiguracyjny.

Bazując na przykładzie "WebInterface" z biblioteki SuplaDevice można to zrobić np. tak:

Code: Select all

// w setup, pod SuplaDevice.begin()
  auto cfg = Supla::Storage::ConfigInstance();
  if (cfg) {
    int8_t resetCounter = 0;
    cfg->getInt8("resetCounter", &resetCounter));
    resetCounter++;
    if (resetCounter >= 3) {
      SuplaDevice.requestCfgMode(Supla::Device::WithTimeout);
      cfg->setInt8("resetCounter", 0);
    } else {
      cfg->setInt8("resetCounter", resetCounter);
    }
    cfg->commit();
  }

// w iterate
  static bool resetCountTimedOut = false;
  if (!resetCountTimedOut && millis() > 5000) {
    resetCountTimedOut = true;
    auto cfg = Supla::Storage::ConfigInstance();
    if (cfg) {
      cfg->setInt8("resetCounter", 0);
      cfg->commit();   // to można pominąć, bo urządzenie samo wywoła commit, ale może to być po kilku sekundach, więc realnie te 5s by się wydłużyło
    }
  }
Powyższego kodu nie kompilowałem, ani nie testowałem, więc coś może nie działać ;)
Z tymi dziećmi to masz rację ;-). Chyba będzie lepiej wcisnąć w obudowę małego microswitcha.
Kod się skompilował poprawnie, znaczy się po:

Code: Select all

cfg->getInt8("resetCounter", &resetCounter));
jeden nawias jest za dużo ;-).
Jutro będę kod testował, bo wszystkie testy robię w pracy (poprostu więcej czasu tam mam ;-)), a później urządzenia zabieram do domu, żeby mi już tam pracowały docelowo, dlatego potrzebowałem jakoś ogarnąć tryb konfiguracyjny.
Dzięki wielkie, dam jutro znać jak poszły testy.
Pozdrawiam
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

Powiem tak. Krzysztof jesteś wielki, wszystko chodzi tak jak powinno. W moim wątku, który założyłem o tej żarówce opiszę cały proces zmiany softu. Tak dla potomnych jakby ktoś chciał sobie sam coś zmienić.
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005

Return to “Arduino IDE”