Cześć.
Przeglądam przykłady programów z Arduino Studio i nie mogę dotrzeć do jednej rzeczy - jak z poziomu kodu wymusić kontrolę nad urządzeniem?
Chciałbym sam włączyć sobie urządzenie, a do serwera wyłącznie przesłać info "urządzenie włączone".
Chciałbym sam sczytać temperaturę, czy jakiś parametr i samemu wysłać do serwera info: "urządzenie X, wartość Y".
Jest gdzieś to opisane, czy pozostaje mi reverse engineering kodu?
---
Tak w ogóle, cześć, jestem nowy.
Planuję remont i wpięciu kilku urządzeń w puszki oraz podpięcie kilku termometrów.
Dokumentacja API
Jeśli użyjesz biblioteki SuplaDevice, to w większej części kod składa się z tworzenia klas odpowiednich typów, które reprezentują poszczególne elementy Twojego urządzenia.
Jeśliz zrobisz np. instancję Supla::Control::Relay to ona może sterować np. światłem.
Jak dodasz do tego instancję Supla::Control::Button i odpowiednio powiążesz ją z wcześniej stworzonym przekaźnikiem, to używając przycisku na ścianie zmienisz stan przekaźnika i serwer Supli dostanie odpowiednią wiadomość.
Odnośnie termometrów, to jest trochę gotowych implementacji różnych czujników. Jeśli nie znajdziesz tam swojego, to najlepiej napisać własną klasę dziedziczącą po Supla::Sensor::Thermometer i nadpisać metodę "getValue()", która powinna zwracać odczyt z Twojego termometru. Ta metoda będzie wywoływana przez program co 10 s i będzie wysyłać dane do serwera Supli.
Zadałeś bardzo ogólne pytania, więc ciężko jest sensownie odpowiedzieć i pomóc.
Jeśliz zrobisz np. instancję Supla::Control::Relay to ona może sterować np. światłem.
Jak dodasz do tego instancję Supla::Control::Button i odpowiednio powiążesz ją z wcześniej stworzonym przekaźnikiem, to używając przycisku na ścianie zmienisz stan przekaźnika i serwer Supli dostanie odpowiednią wiadomość.
Odnośnie termometrów, to jest trochę gotowych implementacji różnych czujników. Jeśli nie znajdziesz tam swojego, to najlepiej napisać własną klasę dziedziczącą po Supla::Sensor::Thermometer i nadpisać metodę "getValue()", która powinna zwracać odczyt z Twojego termometru. Ta metoda będzie wywoływana przez program co 10 s i będzie wysyłać dane do serwera Supli.
Zadałeś bardzo ogólne pytania, więc ciężko jest sensownie odpowiedzieć i pomóc.
Widzimy się na Supla Offline Party vol. 2
Dokumentacji do biblioteki dla Arduino nie ma ponieważ dopiero co zakończyły się prace nad przebudową starej biblioteki. Mam nadzieje, że wraz z rozwojem tej nowej, znaczenie powstawać również dokumentacja na github wiki.
Dziękuję. Jest to jakiś pomysł. Chyba po prostu będę kombinował na sucho zanim wepnę to w instalację.klew pisze: ↑pn maja 03, 2021 9:13 pmOdnośnie termometrów, to jest trochę gotowych implementacji różnych czujników. Jeśli nie znajdziesz tam swojego, to najlepiej napisać własną klasę dziedziczącą po Supla::Sensor::Thermometer i nadpisać metodę "getValue()", która powinna zwracać odczyt z Twojego termometru.
Przyznam, że przy braku dokumentacji, szybkość odpowiedzi na forum jest budująca.
Jeszcze raz dzięki.
Pierwsze co mi przychodzi do głowy, to wyłącznik czasowy światła u dzieciaków - szczególnie w połączeniu z czujnikiem ruchu. Tzn. jeżeli nic się nie rusza przez godzinę, to światło się wyłącza.
Druga rzecz - obsługa dwóch/trzech źródeł światła za pomocą jednego przełącznika:
- click: włącza się nr 1
- click+click: włącza się nr 1+2
- click+click+click: włącza się nr 1+2+3
po kilku sekundach przełącznik z trybu "wyboru światła" przechodzi w tryb "wyłączania". Click powoduje wyłączenie wszystkiego.
Gdy światło jest wyłączone, "click" powoduje włączenie ostatniej konfiguracji.
Na jakim sprzęcie chcesz to robić?
Ten włącznik czasowy ma też zapalać światło na czujkę ruchu?
Przy tych wieloklikach łatwiej by było gdyby była zdefiniowana konkretną akcja na daną sekwencję. Np w opisanym przez Ciebie przykładzie pojedyncze kliknięcie jest niejednoznaczne - raz oznacza włączenie nr 1, a innym razem włączenie ostatniego stanu.
Ten włącznik czasowy ma też zapalać światło na czujkę ruchu?
Przy tych wieloklikach łatwiej by było gdyby była zdefiniowana konkretną akcja na daną sekwencję. Np w opisanym przez Ciebie przykładzie pojedyncze kliknięcie jest niejednoznaczne - raz oznacza włączenie nr 1, a innym razem włączenie ostatniego stanu.
Widzimy się na Supla Offline Party vol. 2
NodeMCU albo Wroom32
Nie, ma tylko służyć do wyłączenia
Jeżeli chodzi o oprogramowanie tego, to jest banalnie proste. Tylko jak to podpiąć do Supli?
Gdybym miał możliwość komunikowania się z serwerem i przekazywać mu tylko informacje "1,2,3 - zostały włączone", to nie miałbym żadnego problemu.
Chyba, że na jednym wejściu obsłużę swój "magiczny przełącznik", który będzie sterował za pomocą 3 wyjść trzema wejściami, które będzie monitorować Supla... ale to chyba trochę dziwne.
SuplaDevice ma obsługę przekaźników oraz przycisków z wieloklikami.czort pisze: ↑wt maja 04, 2021 7:45 pm Jeżeli chodzi o oprogramowanie tego, to jest banalnie proste. Tylko jak to podpiąć do Supli?
Gdybym miał możliwość komunikowania się z serwerem i przekazywać mu tylko informacje "1,2,3 - zostały włączone", to nie miałbym żadnego problemu.
Chyba, że na jednym wejściu obsłużę swój "magiczny przełącznik", który będzie sterował za pomocą 3 wyjść trzema wejściami, które będzie monitorować Supla... ale to chyba trochę dziwne.
Natomaist zestaw dostępnych akcji jest dość prosty i nie ma tam aktualnie możliwości zrobienia bezpośrednio takich sekwencji - ale da się to prosto rozbudować, o ile programowanie obiektowe nie jest Ci straszne.
W bibliotece SuplaDevice, wszystkie obiekty, które mogą wyzwalać jakąś akcję (np. Button po kliknięciu, albo jakiś Sensor binarny po zmianie stanu, albo Relay po zmianie stanu) dziedziczą po klasie Supla::LocalAction i w ich implementacji dla konkretnych zdarzeń, jest wywoływana metoda "runAction(int)". Np. Button woła runAction(ON_CLICK_4) w momencie gdy wykryje kliknięcie 4 razy.
Z drugiej strony są obiekty dziedziczące po Supla::ActionHandler, które powinny implementować metodę handleAction(event, akcja). Np. przekaźniki reagują na akcję TURN_ON lub TURN_OFF.
Obiekty dziedziczące po LocalAction posiadają metodę "addAction", która pozwala na zarejestrowanie "odbiorcy" (ActionHandler) na dane zdarzenie. Np:
Kod: Zaznacz cały
button1->addAction(Supla::TURN_ON, relay1, Supla::ON_CLICK_2);
Tyle tytułem wstępu.
Aby dołożyć tam dodatkową logikę, czy coś na podobieństwo maszyny stanów, to wystarczy, że dodasz swoją klasę, która dziedziczy po ActionHandler i w "handleAction" zaimplementujesz bardziej zaawansowaną obsługę i logikę.
Trochę przykładów znajdziesz na forum wrzucając w google: "site:forum.supla.org addAction"
W ciągu ostatniego roku biblioteka była dość intensywnie rozwijana i akurat ten obszar "addAction" się kilka razy mocno zmieniał. Także w przykładach na forum może się zdażyć inna kolejność argumentów metod, albo inne nazwy klas basowych (np. ActionHandler nazywał się wcześniej Triggerable, "addAction" nazywało się kiedyś "willTrigger" itd.)
Tutaj (viewtopic.php?t=7630) znajdziesz gotowy przykład jak wstawić takiego "pośrednika" o nazwie "OneByOne" (po staremu dziedziczy po Triggerable, aktualnie powinno być ActionHandler).
Odnośnie do protokołu Supli, to raczej jest on trochę bardziej skomplikowany niż "wyślij stan 1, 2, 3". Supla utrzymuje stałe połączenie między urządzeniami wykonawczymi a serwerem. Urządzenie musi się rejestrować, utrzymywać połączenie (np. wiadomości przypominające ping), i na bierząco aktualizować stan, a także reagować na polecenia z Supli.
Protokół jest realizowany na prostych binarnych strukturach - możesz je znaleźć w pliku proto.h.
Także najłatwiej będzie używać gotowych klas do obsługi różnych elementów programu i dokładać samemu logikę wedle uznania. Niestety wymaga to zapoznania się trochę z biblioteką, ale jest prostsze niż pisanie wszystkiego od zera.
Te gotowe klasy mają z reguły wystawione interfejsy, aby robić z nimi co się zechce.
Widzimy się na Supla Offline Party vol. 2