lukfud wrote: Wed Feb 19, 2020 8:08 am Źle się wyraziłem
Chodziło mi o to, że nie znam się na metodach, klasach (jeszcze) i trudno mi ogarnąć, gdzie mogę użyć ten kawałek kodu. Co mogę dzięki niemu osiągnąć?Znalazłem przykład zastosowania https://es-forum.supla.org/viewtopic.php?p=61190#p61190, ale niestety nie wiem co tam się wydarza.Code: Select all
#include <supla/io.h> class MyDigitalRead : public Supla::Io { public: int customDigitalRead(int channelNumber, uint8_t pin) { if (channelNumber == MY_EXTRA_VIRTUAL_CHANNEL) { return someCustomSourceOfData.getValue(); } else { return ::digitalRead(pin); } } } MyDigitalRead instanceMyDigitalRead;
To co udało mi się ogarnąć, to różnica międzyaCode: Select all
SuplaDevice.relayOn(channel, value);gdzie przekazujemy dane np. z utworzonej naszej zmiennej dla przekaźnika.Code: Select all
turnOn()
a napiszesz mi jak i jak po nowemu ogarnąć bme280?RSSI można wrzucić do klasy jakiegoś sensora (zamiast czytania wirtualnego pinu). Będzie zgrabniej. Do jakiego typu kanału chciałbyś to wrzucić?
Aktualizacja SuplaDevice
-
lukfud
- Posts: 2480
- Joined: Thu Nov 23, 2017 11:33 pm
- Location: Warszawa
- Has thanked: 13 times
- Been thanked: 11 times
Przeklejam z priva do @klew
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 135 times
- Been thanked: 137 times
To ja też przeklejam priva
SuplaDevice po staremu była napisana bardzo w stylu tzw. programowania strukturalnego. Jest ono na pierwszy rzut oka łatwiejsze do zrozumienia, bo widać wszystko co się dzieje.
Niestety im bardziej złożony program, tym kod zaczyna być mniej czytelny, wprowadzanie zmian dla jednego czujnika, może wysadzić inną funkcjonalność i ogólnie robi bałagan trudny do rozbudowy i ogarnięcia.
SuplaDevice po nowemu jest napisana w stylu Object Oriented. Czyli wszystko co jest, to w miarę odizolowane od siebie obiekty.
W pliku readme.md powoli nadrabiam zaległości dokumentacyjne i tam opiszę jak to działa, ale w skrócie, każdy "Element" (i wszystkie klasy, które dziedizczą po Element) same się rejestrują w odpowiedniej liście i SuplaDevice w kółko odpala różne metody na każdym z tych elementów. Każdy element jest oddzielny, więc bez problemu można dodać 4 czujniki DHT22 bez ingerencji w kod. W programowaniu strukturalnym trafialiśmy w jedną metodę, którą trzeba było rozbudowywać na każdy przypadek (u nas były to callbacki).
Wszystkie klasy dziedziczące po Element, mają cechy tej klasy bazowej. Dzięki temu SuplaDevice nie zna szczegółów tego co się dzieje w każdym elemencie, ale każdy z nich zainicjalizuje (metoda onInit) i każdy będzie iterowała w loop() - np metoda "iterateAlways" oraz "iterateConnected" (wywoływana tylko gdy mamy połączenie z serwerem Supli).
Tyle tytułem wstępu
MyDigitalRead - jak dla mnie to stary wytrych na trudne elementy starej biblioteki. Pozwalał wpiąć różne rzeczy w miarę prosty sposób. Aktualnie ta klasa wg mnie powinna być używana tylko gdy mamy jakieś ekspandery portów - ale i to może nie działać bardzo dobrze, bo jeszcze trochę brakuje
Odnośnie RSSI - czytać można np. do klasy termometru (dopóki nie mamy kanału general purpose). Np:
BME będę niedługo robił u siebie. Też to trudne nie będzie, ale będą do ogarnięcia dwa kanały (bo dochodzi ciśnienie). Także najlepiej chwilę poczekać
SuplaDevice po staremu była napisana bardzo w stylu tzw. programowania strukturalnego. Jest ono na pierwszy rzut oka łatwiejsze do zrozumienia, bo widać wszystko co się dzieje.
Niestety im bardziej złożony program, tym kod zaczyna być mniej czytelny, wprowadzanie zmian dla jednego czujnika, może wysadzić inną funkcjonalność i ogólnie robi bałagan trudny do rozbudowy i ogarnięcia.
SuplaDevice po nowemu jest napisana w stylu Object Oriented. Czyli wszystko co jest, to w miarę odizolowane od siebie obiekty.
W pliku readme.md powoli nadrabiam zaległości dokumentacyjne i tam opiszę jak to działa, ale w skrócie, każdy "Element" (i wszystkie klasy, które dziedizczą po Element) same się rejestrują w odpowiedniej liście i SuplaDevice w kółko odpala różne metody na każdym z tych elementów. Każdy element jest oddzielny, więc bez problemu można dodać 4 czujniki DHT22 bez ingerencji w kod. W programowaniu strukturalnym trafialiśmy w jedną metodę, którą trzeba było rozbudowywać na każdy przypadek (u nas były to callbacki).
Wszystkie klasy dziedziczące po Element, mają cechy tej klasy bazowej. Dzięki temu SuplaDevice nie zna szczegółów tego co się dzieje w każdym elemencie, ale każdy z nich zainicjalizuje (metoda onInit) i każdy będzie iterowała w loop() - np metoda "iterateAlways" oraz "iterateConnected" (wywoływana tylko gdy mamy połączenie z serwerem Supli).
Tyle tytułem wstępu
MyDigitalRead - jak dla mnie to stary wytrych na trudne elementy starej biblioteki. Pozwalał wpiąć różne rzeczy w miarę prosty sposób. Aktualnie ta klasa wg mnie powinna być używana tylko gdy mamy jakieś ekspandery portów - ale i to może nie działać bardzo dobrze, bo jeszcze trochę brakuje
Odnośnie RSSI - czytać można np. do klasy termometru (dopóki nie mamy kanału general purpose). Np:
Code: Select all
#include <supla/sensor/thermometer.h>
class RssiChannel : public Supla::Sensor::Thermometer {
RssiChannel() {}
onInit() {
channel.setNewValue(getValue() ));
}
double getValue() {
return rssiValueTakenFromSomewhere();
}
}
// w setup:
new RssiChannel;
Najlepsze suple dla Twojego domu 
-
lukfud
- Posts: 2480
- Joined: Thu Nov 23, 2017 11:33 pm
- Location: Warszawa
- Has thanked: 13 times
- Been thanked: 11 times
Dziękuję za obszerną odpowiedź! 
a jak dodaje w setup: new RssiChannel;
dostaje błąd przy wierszu onInit()klew wrote: Wed Feb 19, 2020 9:22 am Odnośnie RSSI - czytać można np. do klasy termometru (dopóki nie mamy kanału general purpose). Np:Code: Select all
#include <supla/sensor/thermometer.h> class RssiChannel : public Supla::Sensor::Thermometer { RssiChannel() {} onInit() { channel.setNewValue(getValue() )); } double getValue() { return WiFi.RSSI(); } } // w setup: new RssiChannel;
Code: Select all
ISO C++ forbids declaration of 'onInit' with no type [-fpermissive]Code: Select all
expected type-specifier before 'RssiChannel'https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 135 times
- Been thanked: 137 times
Powinno byćlukfud wrote: Wed Feb 19, 2020 9:42 am Dziękuję za obszerną odpowiedź!
dostaje błąd przy wierszu onInit()klew wrote: Wed Feb 19, 2020 9:22 am Odnośnie RSSI - czytać można np. do klasy termometru (dopóki nie mamy kanału general purpose). Np:Code: Select all
#include <supla/sensor/thermometer.h> class RssiChannel : public Supla::Sensor::Thermometer { RssiChannel() {} onInit() { channel.setNewValue(getValue() )); } double getValue() { return WiFi.RSSI(); } } // w setup: new RssiChannel;a jak dodaje w setup: new RssiChannel;Code: Select all
ISO C++ forbids declaration of 'onInit' with no type [-fpermissive]Code: Select all
expected type-specifier before 'RssiChannel'
Code: Select all
void onInit()Najlepsze suple dla Twojego domu 
-
lukfud
- Posts: 2480
- Joined: Thu Nov 23, 2017 11:33 pm
- Location: Warszawa
- Has thanked: 13 times
- Been thanked: 11 times
Code: Select all
Powinno być [code]void onInit()Ok, to poszło, ale nadal jest błąd przy wierszu new RssiChanel:
Code: Select all
expected type-specifier before 'RssiChannel'Poprawiony kod klasy:
Code: Select all
class RssiChannel : public Supla::Sensor::Thermometer {
public: RssiChannel() {}
void onInit() { channel.setNewValue(getValue()); }
double getValue() { return WiFi.RSSI(); }
};
Last edited by lukfud on Wed Feb 19, 2020 8:32 pm, edited 1 time in total.
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
-
lukfud
- Posts: 2480
- Joined: Thu Nov 23, 2017 11:33 pm
- Location: Warszawa
- Has thanked: 13 times
- Been thanked: 11 times
Testując dalej natknąłem się na następny problem: odczyty kanału termometru nie pokazują się w Cloud własnej instancji (w androidowej app, tak). W oficjalnym Cloud wartości są widoczne.klew wrote: Wed Feb 12, 2020 11:58 pmPo kilku priwach okazało się, że problem nie jest w implementacji przekaźników, tylko trafiliśmy jeszcze raz na pewien drobny błąd po stronie supla-server.lukfud wrote: Wed Feb 12, 2020 9:59 pm Testowy wemos leży koło routera. Przed chwilą wgrałem raz jeszcze prosty sketch i niestety to samo..
@pzygmunt czy supla-server z poprawkami na odbieranie wiadomości z kolejek jest dostępna w dockerach? lukfud zaktualizował swój prywatny cloud do 2.3.19 i problem występuje nadal.
@pzygmunt
Czy przed 2.4 przewidujecie aktualizację dockera?
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
-
andrew01
- Posts: 163
- Joined: Fri May 24, 2019 6:49 am
Jest jakiś problem z serialem z nową biblioteką przy ESP, w sensie przy starcie działa, ale od SuplaDevice.begin już nie ma żadnego komunikatu na porcie szeregowym.
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 135 times
- Been thanked: 137 times
A nie ustawiłeś przypadkiem jakiegoś urządzenia na GPIO TX lub RX?andrew01 wrote: Sat Feb 22, 2020 10:14 pm Jest jakiś problem z serialem z nową biblioteką przy ESP, w sensie przy starcie działa, ale od SuplaDevice.begin już nie ma żadnego komunikatu na porcie szeregowym.
Najlepsze suple dla Twojego domu 
-
andrew01
- Posts: 163
- Joined: Fri May 24, 2019 6:49 am
Aaaa widzisz, mądrego to aż dobrze posłuchać
ustawiłem GATE_OPEN_PIN 1 - to by wiele tłumaczyło, dzięki bardzo 
-
themechanos
- Posts: 36
- Joined: Tue Oct 01, 2019 10:52 am
@klew A jak idzie przeróbka rolet na nowo ? 
