Termostat plus drugi wemos wykonawczy

User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

mmiikk wrote: Wed Feb 26, 2025 9:01 am Z drugiej strony od 3 lat korzystam z wirtualnego termostatu supla scripts i tylko 2 ray byl problem z internetem ze zrobilo sie w domu za zimno na 3 h :)
Też korzystałem ale sukcesywnie przechodzę na zwykły termostat, gdzie termometr jest na linku bezpośrednim. Jest to pewniejsze, ponieważ w przypadku problemu z netem skrypt już nie sprawdza czy grzanie jest włączone tylko wysyła komendę załączenia jednorazowo. Termostat na linku pracuje cały czas. Polecam
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
rysieks
Posts: 30
Joined: Tue Feb 25, 2025 12:22 pm

Post

Witam, może się dołączę do dyskusji;
Popełniłem podobną komunikacją pomiędzy ESP32 Supla a ESP32 klientem.
UDP ma tą zaletę że pakiety sobie krążą po lokalnej sieci, i każde urządzenie w sieci może tą informację wykorzystać i swoją przesłać (np. temperaturę z czujnika).
Natomiast ESP-NOW ma w stosunku do UDP dwie niekiedy bardzo pożądane cechy ;
1. jeżeli chodzi o zużycie enrgii urządzenia bateryjnego (czujnik temperatury w uśpieniu, średni czas od wybudzenia do końca potwierdzonej transmisji dwukierunkowej 85-120 ms., nieosiągalny na WiFi, co przekłada się na żywotność baterii.)
2. jeżeli chodzi o zasięg (zdecydowanie większy zasięg pewnego działania, w trybie WiFi miejsca nieosiągalne, lub z częstymi przerwami komunikacji).
Oczywiście są i wady jakie były tu wyszczególnione - znajomość MAC-adresu, oraz praca na 1 kanale - którą łatwo można obejść szukając po
kanałach NOW (ok 10 ms) a nie po sieci WiFi (czasem i 6 sek.).

I tutaj mam pytanie do bardzej kumatych w Supli; Przekazuję dane z Supli metodą taką jak na początku dyskusji,
odczytując stan GPIO;

Code: Select all

  
  relayData.relayState = digitalRead(OUTPUT_GPIO);
  esp_now_send(broadcastAddress, (uint8_t *) &relayData, sizeof(relayData));
Czy można podłączyć się do Supli i wykonać moją transmisję opakowaną w funkcję() przy zmianie stanu OUTPUT_GPIO,
aby cały czas nie sprawdzać stanu OUTPUT_GPIO ?
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

rysieks wrote: Wed Feb 26, 2025 11:48 pm Przekazuję dane z Supli metodą taką jak na początku dyskusji,
odczytując stan GPIO;

Code: Select all

  
  relayData.relayState = digitalRead(OUTPUT_GPIO);
  esp_now_send(broadcastAddress, (uint8_t *) &relayData, sizeof(relayData));
Czy można podłączyć się do Supli i wykonać moją transmisję opakowaną w funkcję() przy zmianie stanu OUTPUT_GPIO,
aby cały czas nie sprawdzać stanu OUTPUT_GPIO ?
Nie rozumiem
Najlepsze suple dla Twojego domu :mrgreen:
rysieks
Posts: 30
Joined: Tue Feb 25, 2025 12:22 pm

Post

Ok. postaram się wyjaśnić to na przykładzie.

Nie mogłem odszukać tej dyskusji, ale dzisiaj wreszcie na nią wpadłem viewtopic.php?t=3403

w pliku io.h obecnej biblioteki jest komentarz;
// Ta klasa może być używana do nadpisywania metod digitalRead i digitalWrite.
// Jeśli chcesz dodać niestandardowe zachowanie, np. podczas odczytu/zapisu z jakiegoś
// cyfrowego pinu, możesz dziedziczyć po klasie Supla::Io, implementować
// własne metody customDigitalRead i customDigitalWrite i utworzyć instancję
// tej klasy. Zostanie ona automatycznie zarejestrowana, a SuplaDevice będzie jej używać.
// Przykład użycia: implementacja dodatkowej logiki, gdy stan przekaźnika
// zostanie zmieniony.

z przykładu w dyskusji z linku;

Code: Select all

void supla_DigitalWrite(int channelNumber, uint8_t pin, uint8_t val) {
  //coś tam robię 
}

void setup(){
  ...
  SuplaDevice.setDigitalWriteFuncImpl(&supla_DigitalWrite); 
  ...
}
obecnie to byłoby chyba coś w ten deseń;

Code: Select all

void customDigitalWrite(int channelNumber, uint8_t pin, uint8_t val) {
  //coś tam robię 
}

void setup(){
  ...
  ???(&customDigitalWrite);    // aby ta moja funkcja nadpisała tą z klasy
  ...
}
W efekcie - jeżeli dobrze rozumuję;
ESP_Supla jeżeli chce zmienić stan pinu, czy to z powodu naciśniecia przycisku fizycznego, czy też kliknięcia w Apce, ew. harmonogramu - uruchamia przy okazji moją funkcję customDigitalWrite, gdzie mogę wprwadzić swoją reakcję na to zdarzenie (np. wysłać komunikat NOW).

Nie jestem biegły w języku obiektowym, dopiero zgłębiam tajniki wiedzy w tym zakresie.
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

rysieks wrote: Thu Feb 27, 2025 11:20 am W efekcie - jeżeli dobrze rozumuję;
ESP_Supla jeżeli chce zmienić stan pinu, czy to z powodu naciśniecia przycisku fizycznego, czy też kliknięcia w Apce, ew. harmonogramu - uruchamia przy okazji moją funkcję customDigitalWrite, gdzie mogę wprwadzić swoją reakcję na to zdarzenie (np. wysłać komunikat NOW).
Czyli chodzi o to, że masz kanał Supla::Control::Relay (btw. jeśli nie potrzebujesz zmieniać faktycznie stanu na GPIO, a tylko mieć kanał i móc nim sterować, to użyj VirtualRelay).
Gdy coś zasteruje tym kanałem, to chcesz wykonać jakąś własną metodę, która coś wyśle na ESP Now.

Zgadza się?

Jeśli tak, to tutaj lukfud wrzucił przykład jak to zrobić: viewtopic.php?p=105778#p105778

Zamiast "Serial.write" wstawiasz swoje wysyłanie po ESP Now.
Tylko klasę nazwij jakoś lepiej niż "addedActionsClass" :P
Najlepsze suple dla Twojego domu :mrgreen:
rysieks
Posts: 30
Joined: Tue Feb 25, 2025 12:22 pm

Post

Ok.
Wielkie Dzięki.
O coś takiego mi chodziło !

Mam normalny kanał, normalnie działający na ESP_Supla,
a poprzez komunikację ESP-NOW z klientem robię jakby wyniesienie przekaźnika i przycisku do miejsca zdalnego.
Przekaźnik i przycisk są jakby powielone (zdublowane, połączone równolegle).

A, i wygląda zdecydowanie ładniej niż sprawdzanie stanu przekaźnika w pętli głównej :), nie mówiąc o szybkości.

Przetestuję jeszcze działanie przycisku.
Mam nadzieję że wystawiając w ESP_Supla komendy;
relay1->turnOn();
relay1->turnOff();
relay1->toggle();
na podstawie polecenia z komunikacji ESP-NOW, będzie to automatycznie aktualizowane w Apce.
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

rysieks wrote: Thu Feb 27, 2025 1:35 pm Ok.
Wielkie Dzięki.
O coś takiego mi chodziło !

Mam normalny kanał, normalnie działający na ESP_Supla,
a poprzez komunikację ESP-NOW z klientem robię jakby wyniesienie przekaźnika i przycisku do miejsca zdalnego.
Przekaźnik i przycisk są jakby powielone (zdublowane, połączone równolegle).

A, i wygląda zdecydowanie ładniej niż sprawdzanie stanu przekaźnika w pętli głównej :), nie mówiąc o szybkości.

Przetestuję jeszcze działanie przycisku.
Mam nadzieję że wystawiając w ESP_Supla komendy;
relay1->turnOn();
relay1->turnOff();
relay1->toggle();
na podstawie polecenia z komunikacji ESP-NOW, będzie to automatycznie aktualizowane w Apce.
Tak, zaktualizuje się.
Ale jeśli ten "relay1" to ten sam, co przed chwilą pisaliśmy, to te polecenia również wygenerują komunikat po ESP now.
Najlepsze suple dla Twojego domu :mrgreen:
rysieks
Posts: 30
Joined: Tue Feb 25, 2025 12:22 pm

Post

Ok. I powinien się generować komunikat, bo stan przekaźnika klienta NOW ma być odzwierciedleniem stanu ESP_Supla.

Czyli z tego wynika, że wszystko będzie współpracowało według mojego założenia.

Jeszcze raz Wielkie Dzięki.
Jak napotkam jakiś problem, o którym jeszcze nie wiem, to pozwolę sobie odświeżyć temat.
User avatar
george1255
Posts: 426
Joined: Fri Sep 02, 2022 8:48 pm
Location: Włodawa
Has thanked: 12 times
Been thanked: 7 times

Post

Duch__ wrote: Sun Feb 16, 2025 5:28 am Wadą tego softu jest to że trzeba znać adres MAC docelowego modułu esp.
rysieks wrote: Wed Feb 26, 2025 11:48 pm
Oczywiście są i wady jakie były tu wyszczególnione - znajomość MAC-adresu
Panowie, jest tryb brodcast w ktoym nie trzeba adresowac po mac, dane sa wysylane w eter i odpowiednio skonstruowana widomosc jest odbierana przez inne urządzenie, ale tylko konkretne ja rozumie i wykonuje, np przełączenie przekaźnika
User avatar
Duch__
Posts: 2199
Joined: Wed Aug 24, 2016 7:26 pm
Location: Opole
Been thanked: 6 times

Post

Odgrzewamy kotleta z ziemniaczkami na obiad? :lol:

Return to “Pomoc”