Symulator urządzenia w DELPHI

greg
Posts: 17
Joined: Wed Jan 15, 2020 8:11 am

Post

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.
You do not have the required permissions to view the files attached to this post.
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

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

Code: Select all

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

Code: Select all

#define ELECTRICITY_METER_COUNT 1
SUPLA.... Nareszcie w domu.
greg
Posts: 17
Joined: Wed Jan 15, 2020 8:11 am

Post

Dzięki za info. Już coś zaczyna działać.
wsosniak
Posts: 764
Joined: Sat Jun 02, 2018 8:02 am
Been thanked: 1 time

Post

Greg - to jest niesamowite że ktoś jeszcze może mieć zainstalowane u siebie Delphi :)
powodzenia :)
patrz wiadomośc na priv
greg
Posts: 17
Joined: Wed Jan 15, 2020 8:11 am

Post

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
Posts: 17
Joined: Wed Jan 15, 2020 8:11 am

Post

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źć.
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Co w niej jest niejasne ?
SUPLA.... Nareszcie w domu.
greg
Posts: 17
Joined: Wed Jan 15, 2020 8:11 am

Post

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) ?
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

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
SUPLA.... Nareszcie w domu.
greg
Posts: 17
Joined: Wed Jan 15, 2020 8:11 am

Post

"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ć :)

Return to “Ogólna dyskusja”