Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

CometBlue - aplikacja sterująca termostatem RT2000BT z Lidla [Bluetooth LE]

hub3 14 Mar 2016 11:40 15171 22
  • CometBlue - aplikacja sterująca termostatem RT2000BT z Lidla [Bluetooth LE]

    Cześć,
    Jakiś czas temu zakupiłem dwa „lidlowe” termostaty grzejnikowe RT2000BT (Comet Blue). W oryginalnej aplikacji EUROprog brakowało mi kilku funkcji. Wgryzłem się w temat „Bluetooth LE” i okazało się, że możliwe jest napisanie aplikacji na androida posiadającej funkcje, których nie ma fabryczny soft.

    Moja aplikacja posiada następujące funkcje:
    1. Pokazanie aktualnej temperatury na czujniku termostatu (uwzględnia offset).
    2. Pokazanie aktualnie ustawionej temperatury.
    3. Pokazanie zaprogramowanych temperatur (oszczędzania i grzania).
    4. Możliwość ręcznej zmiany ustawionej temperatury.
    5. Możliwość zmiany trybu pracy auto/manual.
    6. Pokazanie stanu naładowania baterii.
    7. Aplikacja pamięta ostatnio wprowadzony PIN (jeżeli mamy kilka urządzeń, to najlepiej ustawić na nich ten sam PIN).

    Wszystkie funkcje widać na poniższych obrazkach.
    CometBlue - aplikacja sterująca termostatem RT2000BT z Lidla [Bluetooth LE] CometBlue - aplikacja sterująca termostatem RT2000BT z Lidla [Bluetooth LE]

    Aplikację testowałem na dwóch urządzeniach jedno z androidem 5.1, drugie z androidem 4.4. Jeżeli będziecie mieli jakieś problemy to dajcie znać.

    Zasada działania:
    Nie będę tu opisywał zasad komunikacji BLE i kodu aplikacji w javie, przedstawię tylko, w jaki sposób można odczytać/zapisać dane do Comet Blue, które są uniwersalne dla wszystkich platform.
    Listę charakterystyk zawierających interesujące nas dane otrzymałem na dwa sposoby:
    - analiza logów z pliku btsnoop_hci.log za pomocą programu Wireshark.
    - za pomocą aplikacji na androida: nRF Master Control Panel (BLE)

    Najważniejsze dane są zawarte w charakterystykach serwisu 47e9ee00-47e9-11e4-8939-164230d1df67. Odczyt poniższych charakterystyk jest możliwy po podaniu PIN. W tym celu do charakterystyki 47e9ee30-47e9-11e4-8939-164230d1df67 musimy zapisać aktualny PIN ustawiony w aplikacji EUROprog.

    Lista dostępnych charakterystyk:
    Service: 47e9ee00-47e9-11e4-8939-164230d1df67
    CharacteristicDataValue
    47e9ee01-47e9-11e4-8939-164230d1df67Actual time37:11:12:01:10
    47e9ee10-47e9-11e4-8939-164230d1df67Monday25:84:00:00:00:00:00:00
    47e9ee11-47e9-11e4-8939-164230d1df67Tuesday25:84:00:00:00:00:00:00
    47e9ee12-47e9-11e4-8939-164230d1df67Wednesday25:84:00:00:00:00:00:00
    47e9ee13-47e9-11e4-8939-164230d1df67Thursday25:84:00:00:00:00:00:00
    47e9ee14-47e9-11e4-8939-164230d1df67Friday25:84:00:00:00:00:00:00
    47e9ee15-47e9-11e4-8939-164230d1df67Saturday2a:84:00:00:00:00:00:00
    47e9ee16-47e9-11e4-8939-164230d1df67Sunday2a:84:00:00:00:00:00:00
    47e9ee20-47e9-11e4-8939-164230d1df67Holiday_109:06:02:10:09:0d:02:10:00
    47e9ee21-47e9-11e4-8939-164230d1df67Holiday_200:00:00:00:00:00:00:00:00
    47e9ee22-47e9-11e4-8939-164230d1df67Holiday_300:00:00:00:00:00:00:00:00
    47e9ee23-47e9-11e4-8939-164230d1df67Holiday_400:00:00:00:00:00:00:00:00
    47e9ee24-47e9-11e4-8939-164230d1df67Holiday_500:00:00:00:00:00:00:00:00
    47e9ee25-47e9-11e4-8939-164230d1df67Holiday_600:00:00:00:00:00:00:00:00
    47e9ee26-47e9-11e4-8939-164230d1df67Holiday_700:00:00:00:00:00:00:00:00
    47e9ee27-47e9-11e4-8939-164230d1df67Holiday_800:00:00:00:00:00:00:00:00
    47e9ee2a-47e9-11e4-8939-164230d1df67status00:00:08
    47e9ee2b-47e9-11e4-8939-164230d1df67Settings34:2f:21:2f:fc:04:0a
    47e9ee2c-47e9-11e4-8939-164230d1df67Battery43
    47e9ee2d-47e9-11e4-8939-164230d1df67Softsoft cobl0126
    47e9ee2e-47e9-11e4-8939-164230d1df67unknown"1e-00"
    47e9ee30-47e9-11e4-8939-164230d1df67pin43:b1:01:00


    Jak zinterpretować dane zapisane w Hex:
    1. Aktualny czas (47e9ee01-47e9-11e4-8939-164230d1df67):
    NameValueData
    Actual time37:11:12:01:1016.01.18 17:55

    Wartości zamieniamy na DEC i czytamy od prawej.

    2. Dni tygodnia (4 przedziału czasu grzania, 2 bajty każdy przedział)
    NameValueData
    Mo-Su25:84:00:00:00:00:00:0006:10-22:00

    Zamieniam na DEC i mnożymy przez 10 min:
    h25 = d37 37*10min=370min=6h10min
    h84=d132 132*10min=1320min=22:00

    3. Urlop
    NameValueData
    Holiday 1-809:06:02:10:09:0d:02:10:189:00 6.02.16 do 9:00 13.02.16; 12°C

    Wartości zamieniamy na DEC i czytamy od lewej, ostatni bajt pomnożony przez 0,5 to temperatura.

    4. Aktualny status urządzenia (47e9ee2a-47e9-11e4-8939-164230d1df67)
    NameValue
    Status00:00:08

    Tej charakterystyki nie mam rozszyfrowanej w 100%, to co wiem to opiszę:
    - pierwszy bajt od lewej :
    00 - tryb automatyczny
    01 - tryb manualny
    08 - blokada rodzicielska
    10 - ochrona przed zamarzaniem
    - drugi bajt:
    00 - silnik w spoczynku
    01 - silnik w ruchu

    5. Ustawienia (47e9ee2b-47e9-11e4-8939-164230d1df67)
    NameValue
    Settings34:2f:21:2f:fc:04:0a


    bajthexdecwartośćopis
    00a1010czas otwarte okno[min]
    1040404czułość "okno" możliwe ustawienia 04,08,0c
    2fc252-2,5offset
    32f4723,5T comfort
    4213316,5T economy
    5395728,5T target
    6325064T actual


    Bajty 0 i 1 - ustawienia funkcji „otwarte okno:
    Bajt 2 – ustawienia offsetu temperatury mierzonej.
    Bajt 3 – zaprogramowana temperatura grzania/komfortowa
    Bajt 4 – zaprogramowana temperatura oszczędzania/ekonomiczna
    Bajt 5 – docelowa temperatura w danym momencie
    Bajt 6 – aktualnie zmierzona temperatura

    W przypadku temperatur wartości otrzymujemy mnożąc prze 0.5.

    6. Bateria (47e9ee2c-47e9-11e4-8939-164230d1df67)
    NameValueData
    Battery4367%


    7. PIN (47e9ee30-47e9-11e4-8939-164230d1df67)
    NameValueData
    pin43:b1:01:00 110 915

    Czytamy bajty od prawej: 0001b143, zamieniamy na DEC i otrzymujemy pin jaki ustawiliśmy w aplikacji EUROprog.

    Problemy/rzeczy do zrobienia.
    1. Niestety nie udało mi się w pełni rozszyfrować danych z charakterystyki „status”. Pokazywały się tam czasami inne wartości, ale jak na razie nie umiem ich zinterpretować.
    W lewym dolnym rogu aplikacji wyświetlają się aktualne wartości tej charakterystyki, więc może uda się kiedyś ustalić, co oznaczają te dane.
    2. Nie wiem, czy to wina mojej aplikacji, czy softu w termostacie, ale czasami samoistnie zmieniają się ustawienia zaprogramowanej temperatury dla soboty i niedzieli. Zapisane dane zachowują się jakby zostały przesunięte o jeden bajt.

    Kod źródłowy:
    Cały kod aplikacji udostępniam na GitHub. Może ktoś będzie miał chęć coś zmienić/dodać/ulepszyć.
    W celach niekomercyjnych, możecie korzystać do woli, ale jak coś wymyślicie to się pochwalcie ;)

    Źródła, które wykorzystałem w aplikacji:
    - BLE - Link
    - "licznik" - Link

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    hub3
    Poziom 11  
    Offline 
    hub3 napisał 25 postów o ocenie 46, pomógł 0 razy. Jest z nami od 2008 roku.
  • #2
    the4anoni
    Poziom 12  
    Szacun ,że autorowi tej apki chciało się pisać na termostat "lidlowski". Szacun :)
  • #3
    Sparrowhawk
    Poziom 21  
    Bardzo ładna aplikacja. Gratulacje. Fajnie, jak by była jeszcze możliwość przypisania nazw do poszczególnych termostatów.
  • #4
    Duch__
    Poziom 31  
    Chciałem kupić też te termostaty ale żona zabroniła bo po co, bo na co, bo beeee (kobiety :D ).

    Na poważnie teraz. Świetna apka. Jak się tobie one sprawują? Warte tej ceny czy może trzeba poszukać czegoś lepszego?
  • #5
    dvd79
    Poziom 14  
    Zadam może i proste pytanie które od jakiegoś czasu mnie nurtowało. Jak to jest przeliczane na postać czasową?

    hub3 napisał:
    Jak zinterpretować dane zapisane w Hex:
    1. Aktualny czas (47e9ee01-47e9-11e4-8939-164230d1df67):
    Actual time 37:11:12:01:10 16.01.18 17:55


    tak na marginesie - sorki za brak tabelki
  • #6
    hub3
    Poziom 11  
    Duch__ napisał:
    Jak się tobie one sprawują? Warte tej ceny czy może trzeba poszukać czegoś lepszego?


    Tak jak pisałem mam czasem problem z przestawiającymi się ustawieniami dla soboty i niedzieli. Może to jest wina mojej aplikacji, a może softu wewnątrz. Na dzień dzisiejszy nie wiem.
    Po za tym nie mam z nimi innych problemów. Przyczepić się można tylko do konstrukcji, która wydaje się bardzo delikatna. Ogólnie wart jest tych 89zł.

    dvd79 napisał:
    Jak to jest przeliczane na postać czasową?

    37:11:12:01:10 - czytasz od prawej i przeliczasz na DEC
    10=16
    01=01
    12=18
    11=17
    37=55
  • #7
    fundziel
    Poziom 2  
    Na wstępie chciałem pogratulować realizacji i postawy, coraz rzadziej spotykanej w świecie wszechobecnej komercji!

    Mam za mało postów dla tego linki w takiej formie :(

    Mam takie przemyślenia:
    - sensor temperatury przypisany do pokoju (w każdym pokoju po jednym beaconie lub dwa jeden bliżej źródła ciepła, a drugi daleko i uśrednienie temp.), RT2000BT na kaloryferach przypisane do pokoju (parowanie beacon-głowica RT2000BT):

    myweathercenter.net/use-cases-for-the-estimote-beacon/

    imm.org.pl/imm/plik/pliki-do-pobrania-beacons_nn351.pdf

    komunikacja po BLE MESH (zwiększenie zasięgu przez dołożenie kolejnego becona):
    infinitemonkeys.mobi/blog/mesh-beacon/

    'termostat przenośny' (mam na niego taki pomysł - jest nim... telefon!) telefon orientuje się, w którym pokoju jest (beacon proximity - youtu.be/6lkiblLfkVk) i grzeje tak długo aż osiągnie zadaną temperaturę (ustawioną ręcznie w aplikacji na telefon) - opcje są dwie - grzeje w innych pokojach też do tej temperatury i zamyka w tych, które już ją osiągnęły, lub zamyka grzejniki wszędzie i grzeje tylko w tym, gdzie jest termostat/telefon (przydatne podczas choroby lub gdy pokój, w którym się znajdujemy jest niedogrzewany - termostat stacjonarny w innym pomieszczeniu).

    Można też w to włączyć Raspberry Pi 3, w którym jest już WiFi i BLE...
  • #8
    fundziel
    Poziom 2  
    supla.org

    supla.org/download
  • #10
    metex_mm
    Poziom 10  
    Kolego gratuluję dobrej roboty.
    Czy mógłbyś ciut dokładniej opisać w jaki sposób interpretujesz wartości temperatur na termostatach?
    Według opisu temperaturę z odczytu dzieli się przez 2. Ale to i tak nie jest poprawna wartość temperatury na termostacie. Np. 32*C - a w odczycie na aplikacji jest 20*C.
    Jak więc prawidłowo zinterpretować dane?
  • #12
    metex_mm
    Poziom 10  
    hm u mnie z termostatu w hex odczytuje 0x43 co daje na dec 67.
    Offset mam 0x00 więc temeperatura 33,5*C to trochę za dużo by w ogóle było możliwe do uzyskania.
    Co więc może być nie tak?
  • #14
    metex_mm
    Poziom 10  
    20,5 *C. Zarówno na termostacie jak i w aplikacji na telefonie.
  • #16
    metex_mm
    Poziom 10  
    # gatttool -I
    [ ][LE]> connect F5:A3:52:72:BF:3E
    Attempting to connect to F5:A3:52:72:BF:3E
    Connection successful
    [F5:A3:52:72:BF:3E][LE]> char-write-req 0x0048 00000000
    Characteristic value was written successfully
    [F5:A3:52:72:BF:3E][LE]> char-read-hnd 0x003d
    Characteristic value/descriptor: 43 42 38 42 00 04 10
    [F5:A3:52:72:BF:3E][LE]> disconnect

    Co ciekawe po kilkunastu odczytach, głowicy przestaje pasować prawidłowy pin, a wymaga ona podania jako pin 0x00000000, a dopiero później prawidłowy pin.
    Nie wiem dlaczego tak się dzieje. Może to kwestia nowego oprogramowania w głowicy (0.0.10).
  • #18
    wini83
    Poziom 2  
    W Jaki sposób można przełączać pomiędzy trybem auto i manualnym.
    Próbuje wysyłać do charakterystyki: 47e9ee2a-47e9-11e4-8939-164230d1df67
    dane 01:80:80 dla przejscia w manualny i 00:80:80 dla auto.
    Problem w tym iż przy przełączaniu z auto na manual jest ok, a z manual na auto przełącza się na auto ale temperatura ustawia się na OFF.
  • #20
    wini83
    Poziom 2  
    Dzięki działa!
    Co wysyłać aby zmieniać bieżącą zadaną temperaturę?
  • #22
    wini83
    Poziom 2  
    Ok, rozumiem. Ale jakie wartości w pozostałych bajtach?