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.
Symulator urządzenia w DELPHI
-
greg
- Posts: 17
- Joined: Wed Jan 15, 2020 8:11 am
You do not have the required permissions to view the files attached to this post.
-
pzygmunt
- Posts: 20302
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
- Been thanked: 59 times
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
W twoja_plytka.h
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
}
Code: Select all
#define ELECTRICITY_METER_COUNT 1SUPLA.... Nareszcie w domu.
-
greg
- Posts: 17
- Joined: Wed Jan 15, 2020 8:11 am
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 ?
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
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źć.
Czy jest gdzieś opis struktury TThermostat_ExtendedValue ?
Wydaje mi się, że to dość nowa sprawa. Nic nie mogę znaleźć.
-
greg
- Posts: 17
- Joined: Wed Jan 15, 2020 8:11 am
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) ?
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) ?
-
pzygmunt
- Posts: 20302
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
- Been thanked: 59 times
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
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
"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ć
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ć
