Symulator urządzenia w DELPHI

greg
Posty: 16
Rejestracja: śr sty 15, 2020 8:11 am

czw sty 23, 2020 9:50 pm

Witam kolegów.

To mój pierwszy post na forum.

Parę tygodni temu odkryłem SUPLE. Fajna rzecz. Najważniejsze, że Supla jest projektem typu opensource, co dla mnie jest kluczowe ponieważ pozwala na pokonywanie kolejnych trudności, które pojawiają się podczas uruchomiania poszczególnych elementów.

Akurat mam trochę czasu i postanowiłem zrobić symulator Supli w DELPHI (taki stary, chyba już nieco zapomniany język programowania).
Poniżej zrzut ekranu ze skonfigurowanymi urządzeniami i kanałami.
Wykorzystałem ikony z projektu dla Androida. Czy Wasza licencja pozwala na takie wykorzystanie tych ikon ? Nie znam się na tych zasadach.

Udało mi się połączyć z serwerem i zasymulować pracę podstawowych typów urządzeń. Jako odniesienie wziąłem projekt dla ESP - supla-espressif-esp-master. Nie ma w nim jednak zaimplementowanych dwóch najciekawszych typów: SUPLA_CHANNELTYPE_ELECTRICITY_METER i SUPLA_CHANNELTYPE_THERMOSTAT.

Gdzie szukać ich implementacji ?

I na koniec moje GRATULACJE dla autorów Supli.
Załączniki
SuplaScreen.png
SuplaScreen.png (110.09 KiB) Przejrzano 637 razy
Awatar użytkownika
pzygmunt
Posty: 7694
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontaktowanie:

czw sty 23, 2020 10:16 pm

DEPLHI.... aż łezka się w oku kręci ;) kilka projektów jeszcze mam gdzieś głęboko na dysku napisane w tym języku/IDE.
Przykład licznika energii za chwilę będziesz miał w SuplaDevice dla ArduinoIDE.
Swoją drogą wygodniej byłoby Ci użyć C++Builder. (Pierwotnie też narzędzie Borland-a - używam do dziś od 2000r.)

Jeśli chodzi o bibliotekę dla esp to implementacja sprowadza się do umieszczenia w plikach swojej płytki jednej funkcji, gdzie należy
podstawić dane pod strukturę określoną przez wskaźnik *value.

twoja_plytka.c

Kod: Zaznacz cały

char ICACHE_FLASH_ATTR supla_esp_board_get_measurements(
    unsigned char channel_number, TElectricityMeter_ExtendedValue *value) {
    // Uzupełniamy value
    return 1
}
W twoja_plytka.h

Kod: Zaznacz cały

#define ELECTRICITY_METER_COUNT 1
greg
Posty: 16
Rejestracja: śr sty 15, 2020 8:11 am

ndz sty 26, 2020 2:52 pm

Dzięki za info. Już coś zaczyna działać.
wsosniak
Posty: 398
Rejestracja: sob cze 02, 2018 8:02 am

ndz sty 26, 2020 4:10 pm

Greg - to jest niesamowite że ktoś jeszcze może mieć zainstalowane u siebie Delphi :)
powodzenia :)
patrz wiadomośc na priv
greg
Posty: 16
Rejestracja: śr sty 15, 2020 8:11 am

pn sty 27, 2020 5:49 pm

Mam zainstalowane i używam. Wersja 10.2.3 (Tokyo)
Bardzo mnie cieszy fakt, że ten język pozostał w pamięci kolegów. :)

Mam pytanie do rekordu TElectricityMeter_ExtendedValue.

1. W skład tego rekordu wchodzi maksymalnie 5 rekordów TElectricityMeter_Measurement.
Po co aż tyle? Pokazywane są dane tylko z pierwszego rekordu. Po co pozostałe 4 ?

2. Jakie jest znaczenie pól period i measured_values ?
greg
Posty: 16
Rejestracja: śr sty 15, 2020 8:11 am

pn sty 27, 2020 8:34 pm

Chciałbym się jeszcze dobrać do termostatu.

Czy jest gdzieś opis struktury TThermostat_ExtendedValue ?
Wydaje mi się, że to dość nowa sprawa. Nic nie mogę znaleźć.
Awatar użytkownika
pzygmunt
Posty: 7694
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontaktowanie:

pn sty 27, 2020 10:16 pm

Co w niej jest niejasne ?
greg
Posty: 16
Rejestracja: śr sty 15, 2020 8:11 am

wt sty 28, 2020 2:08 pm

Chyba dam sobie radę. Zaglądnąłem do kodów z pliku supla-client_jni.c i trochę mi się rozjaśniło.

A przy okazji takie pytanie dotyczące przesyłania rekordu TSC_SuplaChannelExtendedValue.

Czy rekordy tego typu po wysłaniu z urządzenia docierają w całości do urządzenia klienta (np. Androida) ?
Awatar użytkownika
pzygmunt
Posty: 7694
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontaktowanie:

wt sty 28, 2020 2:23 pm

Zależy co rozumiesz "w całości". Jeśli chodzi o rozmiar to może się on różnić w zależności od danych jakie tam siedzą.
Mogą też być modyfikowane po drodze przez serwer np. w tym przypadku:

https://github.com/SUPLA/supla-core/blo ... oto.h#L976
Zwróć też uwagę na poniższą konwersję:

https://github.com/SUPLA/supla-espressi ... nn.c#L1556
greg
Posty: 16
Rejestracja: śr sty 15, 2020 8:11 am

wt sty 28, 2020 7:59 pm

"W całości" w tym przypadku rozumie tak: tyle ile określa pole TSuplaChannelExtendedValue.size.

Gdy analizuję kod klienta to wydaje mi się, ze dane nie są modyfikowane (chyba) bo odzyskujecie je z powrotem np w tym miejscu:

https://github.com/SUPLA/supla-core/blo ... jni.c#L550

czyli odtworzenie rekordu TElectricityMeter_ExtendedValue wysłanego z urządzenia

serwer może zaglądnąć do środka (i zapewne tak robi) jeśli zna format danych, w zależności od pola

TSuplaChannelExtendedValue.type

ale jeśli nie zna formatu danych (inna nie zdefiniowana wartość tego pola) to co się dzieje? Czy dane są puszczane do klienta ?
Muszę spróbować :)
ODPOWIEDZ