KPOP w supla-device

User avatar
klew
Posts: 10431
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Jak wiecie, Kanał Pomiarowy Ogólnego Przeznaczenia (KPOP) jest już blisko: viewtopic.php?t=14671

W supla-device pojawił się prosty przykład z użyciem KPOP w wariancie "writualny czujnik", czyli ustawiasz jakąkolwiek wartość liczbową i ona leci do serwera. Kod jest na githubie, ale jeszcze nie jest oficjalnie wydany, więc w managerze bibliotek w Arduino tego jeszcze nie ma.
Przykład dla Arduino IDE jest tutaj: https://github.com/SUPLA/supla-device/b ... rement.ino

Cały kod specyficzny dla KPOP sprowadza się do:

Code: Select all

// plik nagłówkowy:
#include <supla/sensor/general_purpose_measurement.h>

// dodajemy wskaźnik do kanału, jako zmienną globalną (aby mieć do niego dostęp w setup i w loop):
Supla::Sensor::GeneralPurposeMeasurement *gpm = nullptr;

// w setup tworzymy instancję kanału:
gpm = new Supla::Sensor::GeneralPurposeMeasurement();

// i przykładowy loop wygląda tak:
void loop() {
  SuplaDevice.iterate();

  static uint32_t lastTime = 0;
  if (millis() - lastTime > 1000) {
    lastTime = millis();
    // set some new value on gpm:
    gpm->setValue(millis() / 1000.0);
  }
}
Kanał będzie przesyłał do serwera "pomiar" czasu w sekundach (z millis).
To co wstawiamy do setValue może być dowolną liczbą (typ double), pobieraną z dowolnego źródła.

Starałem się, aby przykład był minimalistyczny. Mamy tutaj aż 4 linijki kodu dotyczące KPOP :P

Kanał potrafi dużo więcej. Tutaj jest plik nagłówkowy klasy, z metodami, które wspiera KPOP:
https://github.com/SUPLA/supla-device/b ... nel_base.h

Przy setterach jest trochę opisu z tym co one robią. Odpowiednich getterów już nie opisywałem, bo by masło maślane wyszło.

Chętnie odpowiem na wszelkie pytania oraz dam bardziej rozbudowane przykłady, jeśli ktoś jest zainteresowany :)
User avatar
klew
Posts: 10431
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Jeśli ktoś byłby zainteresowany implementacją własnego kanału pomiarowego opartego o KPOP, to tu są trzy przykłady z biblioteki.
- https://github.com/SUPLA/supla-device/b ... ree_heap.h - chyba najprostszy przykład - czyli przesyłanie wolnej pamięci jako wartość kanału w bajtach
- https://github.com/SUPLA/supla-device/b ... max44009.h - obsługa sensora MAX44009 (natężenie światła)
- https://github.com/SUPLA/supla-device/b ... r/bh1750.h - obsługa sensora BH1750 (natężenie światła)

Powyższe kanały są dość nieelegancko zaimplementowano w pliku nagłówkowym. Wynia to głównie z build systemu w Arduino IDE. Gdyby implementacja była dodana do plików cpp, to trzeba by się nagimnastykować z ifdefami i dodatkowo zawsze instalować wszystkie potrzebne biblioteki - nawet jeśli ich akruat nie chcemy używać na swoim urządzeniu.
rafalekkalwak@wp.pl
Posts: 835
Joined: Mon Feb 06, 2023 8:56 am

Post

Przykłady zawsze spoko :)
SOYER
Posts: 1302
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry

Post

Dziękuję.👍
To wygląda bardzo dobrze. Prosto i dobrze.
Jeśli dobrze rozumiem, te wszystkie metody, dzielniki, multiplikatory itd to będzie można w cloud ustawić, bez grzebania w kodzie?
Kiedy wydanie?
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
User avatar
klew
Posts: 10431
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

SOYER wrote: Tue Jan 23, 2024 9:30 am Dziękuję.👍
To wygląda bardzo dobrze. Prosto i dobrze.
Jeśli dobrze rozumiem, te wszystkie metody, dzielniki, multiplikatory itd to będzie można w cloud ustawić, bez grzebania w kodzie?
Kiedy wydanie?
Większość bajerów opisanych w tym innym temacie, ustawia się z poziomu Clouda.
Z poziomu urządzenia też możesz to ustawić (konfiguracja jest synchronizowana między urządzeniami a serwerem).

Urządzenie też zna konfigurację, więc na urządzeniu możesz odczytać "obliczoną wartość", a nawet pobrać gotowy ciąg znaków (z jednostkami, formatowaniem etc.) i np. wyświetlić to sobie na wyświetlaczu.

Jak już pisałem, nie wiem kiedy będzie wydanie. Mam nadzieję, że niedługo.
krycha88
Posts: 5452
Joined: Fri Nov 16, 2018 7:25 am

Post

Jeszcze nie testowałem. Ale czyli jak na urządzeniu ustawię np. setDefaultUnitAfterValue("lx") to w cloud nie będę mógł tego zmienić na "kg"? :)
https://gui-generic-builder.supla.io/
User avatar
pzygmunt
Posts: 19420
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Będziesz mógł
User avatar
klew
Posts: 10431
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Domyślne parametry są po to, aby mając kanał "natężenia światła" oparty o KPOP, można było poza gołą liczbą, ustawić także domyślne jednostki.

Tego typu kanały nie będą wymagały od użytkownika dalszej konfiguacji, natomiast parametry domyślne nie są "narzucane" i można je dowolnie edytować w Cloud, jeśli ktoś ma taką potrzebę.
User avatar
pzygmunt
Posts: 19420
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Dodam, że użytkownik w cloud będzie miał też dostępny przycisk "Przywróć ustawienia domyślne"
krycha88
Posts: 5452
Joined: Fri Nov 16, 2018 7:25 am

Post

pzygmunt wrote: Tue Jan 23, 2024 12:23 pm Dodam, że użytkownik w cloud będzie miał też dostępny przycisk "Przywróć ustawienia domyślne"
Ta opcja rozwiewa wszystkie moje wątpliwości. Wygląda to bardzo dobrze!
https://gui-generic-builder.supla.io/

Return to “supla-dev”