Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

p.kaczmarek2 23 May 2021 17:56 16296 29
Optex
  • Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Witajcie moi drodzy.
    Przedstawię tutaj krok po kroku proces pisania otwartego oprogramowania dla modułu WiFi XR809/XR3 na przykładzie czujnika otwarcia drzwi. Mój firmware dla niego będzie kompatybilny z Tasmota HTTP i pozwoli używać go niezależnie od serwerów producenta. Da nam to również kompatybilność z Home Assistant i Tasmota Control. Być może będzie to pierwszy taki firmware open source w sieci dla tego modułu, gdyż dużo wzmianek o nim nie znalazłem.
    Oprogramowanie to tutaj powstanie w języku C na ARM Cortex-M4F i będzie to moje pierwsze starcie z ARM.

    Co zyskamy z utworzenia otwartego oprogramowania?
    Tutaj jest identyczna sytuacja jak z ESP8266 i Tasmotą/Domoticzem w porównaniu do firmware producentów. Używając otwartego firmware zyskujemy:
    - niezależność od serwerów producenta (np. jak producent upadnie to nasze urządzenie może dalej działać)
    - brak śledzenia i zbierania danych ze strony producenta (kwestia nieco dyskusyjna, niektórym to nie przeszkadza, innym bardzo)
    - możliwość kompatybilności z innymi rozwiązaniami open source (np. tutaj będzie można było podłączyć łatwo urządzenie do Home Assistant, choć ogólnie to Home Assistant też wspiera komunikacje z eWeLinkIt/Smartlife itp. poprzez logowanie się na ich konto...)

    Produkt z tematu
    Ten temat dotyczy czujnika otwarcia drzwi zrealizowanego na XR809/XR3 opisanego tutaj:
    https://www.elektroda.pl/rtvforum/topic3771510.html
    Zdjęcie zestawu:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Zdjęcie w środku:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    XR809, czyli mikrokontroler ARM Cortex-M4F pracujący z częstotliwością do 160MHz, oferujący 384KB SRAM i 2MB Flash ROM, dodatkowo posiadający bogate peryferia, m. in. UART, TWI, SPI, PWM, IrDA (T/R), SDIO i ADC:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Sam moduł tutaj nazywa się XR3, jego pinout:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Co trzeba zrobić?
    Zastanówmy się jakie zadania składają się na tworzenie własnego wsadu.
    Zadania organizacyjne:
    - przygotowanie podłączenia hardware niezbędnego do wgrania wsadu (tutaj wystarczy przejściówka UART)
    - przygotowanie programu wgrywającego wsad na komputer (jest tutaj dostępny, phoenixMC.exe)
    - przygotowanie toolchainu (kompilatora) i SDK XR809
    Zadania do implementacji w kodzie:
    - nasz firmware musi oferować prostą stronę WWW (zarówno do konfiguracji, jak i dla Tasmota HTTP)
    - nasz firmware musi umieć odczytać stan przycisku i czujnika otwarcia drzwi
    - nasz firmware musi oferować funkcje parowania i RESET (by móc jakoś mu wpisać raz dane naszego WiFi)

    Protokół Tasmota HTTP
    Całe Tasmota HTTP można przedstawić obrazowo za pomocą jednego żądania GET wysyłanego poprzez HTTP od klienta (tutaj: telefon z Tasmota Control lub Home Assistant) do serwera (naszego urządzenia).
    Zapytanie GET:
    Quote:

    GET /cm?cmnd=status HTTP/1.1
    Host: 192.168.0.110
    User-Agent: HomeAssistant/2020.12.1 aiohttp/3.7.1 Python/3.8
    Accept: */*
    Accept-Encoding: gzip, deflate

    Przykładowa odpowiedź:
    Quote:


    HTTP/1.1 200 OK
    Content-type: application/json

    {"Status":{"Module":0,"DeviceName":"Tasmota","FriendlyName":["Tasmota","Tasmota2","Tasmota3","Tasmota4"],"Topic":"tasmota_EC3F8F","ButtonTopic":"0","Power":0,"PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0},"StatusFWR":{"Version":"0.1(pic18f)","BuildDateTime":"2020-11-07T11:57:45","Boot":6,"Core":"0","SDK":"0","CpuFrequency":80,"Hardware":"ESP8266EX","CR":"367/699"},"StatusNET":{"Hostname":"tasmota_EC3F8F-8079","IPAddress":"192.168.0.50","Gateway":"192.168.0.1","Subnetmask":"255.255.255.0","DNSServer":"192.168.0.1","Mac":"5C:CF:7F:EC:3F:8F","Webserver":2,"WifiConfig":4,"WifiPower":17.0},"StatusSNS":{"Time":"2021-01-10T19:27:53","DS18B20":{ "Temperature":16},"TempUnit":"C"},"StatusSTS":{"Time":"2021-01-10T19:27:54","Uptime":"0T00:41:19","UptimeSec":2479,"Heap":24,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":37,"MqttCount":0,"POWER1":"OFF","POWER2":"OFF","POWER3":"OFF","POWER4":"OFF","Wifi":{"AP":1,"SSId":"5G_FULL_POWER","BSSId":"30:B5:C2:5D:70:72","Channel":9,"RSSI":98,"Signal":-51,"LinkCount":1,"Downtime":"0T00:00:03"}}}

    Ta odpowiedź jest w formacie json.
    To jest takie niezbędne minimum. To pozwala odczytać stan urządzenia. Stan urządzenia jest w dwóch (!) miejscach:
    - Power":0 - tutaj te 0 to jest zakodowany bitowo stan kolejnych przekaźników (lub przycisków)
    - "POWER1":"OFF","POWER2":"OFF","POWER3":"OFF","POWER4":"OFF", - tu jest osobno, jako tekst, też ten sam stan
    Ilość stanów jest automatycznie określana na podstawie tablicy ["Tasmota","Tasmota2","Tasmota3","Tasmota4"].

    Szczegóły protokołu:
    https://tasmota.github.io/docs/Commands/

    Przygotowanie środowiska pracy - Cygwin
    Jeśli chcemy w pełni pracować na Windowsie to musimy zainstalować Cygwina. Cygwin to środowisko które mimikuje Linuxowy wiersz polecenia na Windowsie. Potrzebny jest tu dlatego, że makefile z XR809 SDK korzysta z Linuxowych komend, np. z cp do kopiowania rezultatów kompilacji bibliotek do danego folderu. Gdyby nie to, to Cygwin nie byłby potrzebny.
    Cygwina pobieramy stąd:
    https://cygwin.com/install.html
    Przy instalacji, po wybraniu instalowania z sieci (Download) i serwera z którego chcemy pobierać paczki, musimy wybrać komponenty które będą nam potrzebne:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Wyszukujemy i zaznaczamy tu make.
    Po zainstalowaniu Cygwina uruchamiamy plikiem bat:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Otrzymujemy w ten sposób Linuxową linię komend na Windowsie:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Poruszamy się w niej tak jak na Linuxie, z tym, że jak chcemy przejść np. na dysk D to wpisujemy "cd d:" i to działa, po prostu powstaje sztuczna ścieżka /cygdrive/d

    Przygotowanie środowiska pracy - toolchain ARM
    Potrzebny toolchain to gcc-arm-none-eabi-4_9-2015q2-20150609.
    Można go pobrać tutaj:
    https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q2-update
    Wybrałem wersję dla Windowsa i wypakowałem na dysk, jednocześnie poprawiając ścieżkę by nie było spacji (one troszkę mieszają, przez nie trzeba pamiętać o cudzysłowie..).
    Ostatecznie ścieżka toolchaina u mnie wyszła taka: W:/GNU/4.9.2015q2/bin


    Przygotowanie środowiska pracy - XR809 SDK z Git
    XR809 SDK pobieramy z git, stąd:
    https://github.com/XradioTech/XR809SDK/
    Albo po prostu klikając tu "Download Zip":
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Albo poprzez Git, można linią komend choć ja korzystam z Sourcetree:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Po wypakowaniu/ściągnięciu musimy zaktualizować jeden plik, gcc.mk.
    Musimy tam wpisać cygwinową ściezkę do toolchaina:
    Code: bash
    Log in, to see the code

    Cygwinową, czyli dostęp do dysku poprzez /cygdrive/.


    Zawartość XR809 SDK z Git
    Paczka SDK podzielona jest na współdzielone biblioteki oraz osobne przykłady.
    Współdzielone biblioteki są w folderze /src/.
    Większe przykłady są w /project/, mniejsze przykłady są w /project/example/, zawierają:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Proces kompilacji
    Kompilacja wsadu dla XR809 (i podobnych) jest dwuetapowa. Najpierw kompilujemy współdzielone biblioteki, tj. folder:
    XR809SDK/src/
    Następnie kompilujemy wybrany przez nas projekt, przykładowo:
    XR809SDK/project/at_demo/
    Na kompilację składają się 4 komendy.
    Krok 1.1:
    W folderze /cygdrive/w/GIT/XR809SDK/src wykonujemy make.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Krok 1.2:
    W folderze /cygdrive/w/GIT/XR809SDK/src wykonujemy make install.
    UWAGA: ten krok wymaga linuxowego cp (kopiowanie), dlatego uruchamiamy to w Cygwin. Windows nie ma w cmd komendy "cp" Linuxowej, ma swoją (można by przepisać pod to skrypty, ale łatwiej użyć Cygwin).
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Krok 2.1:
    W folderze /cygdrive/w/GIT/XR809SDK/project/at_demo/gcc (bądź w folderze projektu który wybraliśmy), make:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Krok 2.2:
    W tym samym folderze - make image:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Ta komenda użyje mkImage.exe w celu wygenerowania xr_system.img (który potem wgramy przez UART).
    Rezultat:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant


    Uproszczenie procesu kompilacji
    Trochę za dużo tych kroków kompilacji jest. Jeszcze te przechodzenie między folderami....
    W związku z tym przygotowałem skrypt który upraszcza to do jednego polecenia.
    Jest to skrypt linuxowy, ale w cygwinie oczywiście zadziała.
    Code: bash
    Log in, to see the code

    Jeśli dostajemy błędy z \r (carriage return), to oznacza to, że zapisaliśmy go w standardzie końców linii Windowsa (\r\n) i trzeba zamienić go na standard unixowy (unix line endings), np. poprzez Notepad2:

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant


    Podłączenie hardware
    XR809 programujemy przez UART tak jak ESP8266.
    Czyli standardowo - USB TO TTL HW-597 (zworką ustawiamy 3.3V poziomy logiczne):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Oprócz tego, zgodnie z notą katalogową:
    datasheet wrote:

    During firmware burning, both PB02 and PB03 need to be connected to a low level. When the module works properly, PB02 and PB03 cannot be connected to a low level

    Do tego pin EN - inaczej RESET - (by móc resetować układ). Zasilanie z baterii na pokładzie (nie z USB, nie z UART).
    Więc wykonane podłączenia:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant


    Wgrywanie wsadu
    Gotowy wsad jest plikiem xr_system.img, przykładowo w XR809SDK\project\at_demo\image\xr809.
    Do wgrania wsadu służy phoenixMC.exe
    Program ten wymaga by port UART nie był w użyciu, więc zamykamy port w Realterm czy jaki tam używamy terminal.
    Poniżej opisane kroki na GUI (otwieramy plik img wygenerowany):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Po stronie hardware:
    1. RESET do masy
    2. zwieramy PB02 i PB03 do masy
    3. odłaczamy RESET od masy (może być w powietrzu)
    Inaczej mówiąc, w trakcie bootowania PB02 i PB03 musi być na masie by wejść w tryb programowania.
    datasheet wrote:

    During firmware burning, both PB02 and PB03 need to be connected to a low level. When the module works properly, PB02 and PB03 cannot be connected to a low level

    Wtedy klikamy Burn:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Powinno zacząć wgrywać wsad:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Gotowe:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Potem już normalnie uruchamiamy XR, czyli:
    Po stronie hardware:
    1. RESET do masy
    2. odłączamy PB02 lub PB03 do masy
    3. odłaczamy RESET od masy (może być w powietrzu)


    Uruchamiamy wsad AT
    Umiemy już kompilować i wgrywać wsad. Więc możemy wgrać wsad AT (po uwcześniejszym jego skompilowaniu, na repo nie ma jego plików binarnych).
    Teraz powinniśmy być w stanie przez UART wykonywać komendy. Domyślna baud to 115200.
    Sprawdźmy komendę AT+S.HELP (pamiętając o CR LF, znakach końca linii i powrotu karetki):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    AT działa.
    Teraz wypróbujmy komendę AT+S.SCAN.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Moduł widzi sieci WiFi. Jesteśmy w stanie się z nim komunikować.

    Własna komenda AT
    No to może na początek spróbujmy się podpiąc do tego AT z własną komendą. Oczywiście ostateczna wersja naszego firmware nie będzie przechodziła poprzez AT, ale na próbę warto coś takiego zrobić.
    Komendy są w at_command.c:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Jest to tablica nazw komend, wskaźników na funkcje je obsługujące i krótkich opisów tych komend (do generowania Help).
    Do edycji kodu (przez cały temat) używałem Notepad2.
    Dodałem coś na koniec:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Pełny kod funkcji (może brakować #include):
    Code: c
    Log in, to see the code

    Komenda ta połączy XR809 z naszym routerem.
    Czy nasza komenda działa?
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    O powodzeniu procesu dowiemy się z logów routera.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Dodatkowo warto sprawdzić czy to jest ten adres MAC co ma XR (w AT jest komenda by go poznać) oraz czy komenda ping go widzi (i przestaje widzieć jak odłączymy zasilanie).


    Pierwszy serwer HTTP
    Po krótkim przeglądnieciu SDK można zorientować sie, że biblioteka serwera HTTP jest gotowa do użycia.
    Znajduje się w src\net\shttpd-1.42.
    Jest tam również jej demko, mini-serwerek już gotowy: src\net\shttpd-1.42\examples\web_server_demo.c
    Spróbowałem go uruchomić. Wpiąć jego uruchomienie we wcześniej pokazaną komendę. Oczywiście trzeba dodać #include itp, ale pliki o dziwo już w kompilacji były (trochę dziwne, że kompilują web_server_demo.c....):
    Code: c
    Log in, to see the code

    Po wgraniu wsadu i wykonaniu komendy serwer działa:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Swoją drogą widać że to był serwer dla pokrewnego układu, XR871, a nie dla XR809 z tematu, ale grunt, że działa.
    Na tym będziemy bazować naszą obsługę Tasmota HTTP.

    Wpinamy się w serwer HTTP by obsłużyć GET
    Po krótkiej analizie kodu z pliku XR809SDK\src\net\shttpd-1.42\examples\web_server_demo.c można łatwo dostrzec jak dodaje się obsługę żądania GET dla danego URL:
    Code: c
    Log in, to see the code

    Musimy użyć shttpd_register_uri i dodać obsługę GET /cm?cmnd=status HTTP/1.1.
    shttpd_register_uri bierze za argumenty wskaźnik na kontekst (ctx), ścieżkę URI oraz wskaźnik na funkcję.
    Aby stworzyć swoją funkcję, skopiowałem i przerobiłem set_ap_info:
    Code: c
    Log in, to see the code

    Rejestracja GETa:
    Code: c
    Log in, to see the code

    Rezultat w konsoli po wysłaniu GET:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Jeszcze jest problem z parsingiem argumentów GET, ale to za chwilę.
    Rezultat w przeglądarce:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    I teraz najlepsze - to jest juz kompatybilne z Tasmota Control z Google Play.
    https://play.google.com/store/apps/details?id...s_software.TasmotaControl&hl=pl&gl=US
    Po dodaniu device po IP, rezultat w Tasmota Control:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Oczywiście te wszystkie dane to placeholdery, tzn. na sztywno wpisane wszystko.

    Parsing parametrów GET
    Chwilę zastanawiałem się czemu parsing parametrów GET mi nie działa. Odpowiada za niego ta funkcja:
    (void) shttpd_get_var("cmnd", arg->in.buf, arg->in.len, value, sizeof(value));
    Dla POST działało.
    Ale implementacja funkcji wyjaśnia o co chodzi.
    Code: c
    Log in, to see the code

    arg->in.buf to bufor tekstowy argumentów dla POST, tylko i wyłącznie.
    Dla GET trzeba jej podać string argumentów GET, w ten sposób:
    (void) shttpd_get_var("cmnd", query_string, strlen(query_string), value, sizeof(value));
    Po tej zmianie dla zapytania GET /cm?cmnd=status otrzymujemy:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    W ten sposób możemy wyłuskać wartości argumentów GET.

    Odczyt stanu drzwi
    Teraz trzeba się zastanowić jak odczytać stan drzwi z tego czujnika:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Ten czujnik reaguje na magnes, magnes sprawia że kontakty się stykają. Moim zdaniem wystarczy do tego odczyt pinu w trybie cyfrowym, 0 lub 1.
    Przykłady obsługi pinów znalazłem w XR809SDK/project/example/gpio/main.c
    Code: c
    Log in, to see the code

    Wkleiłem więc je do testowanego przeze mnie fragmentu kodu i zrobiłem tak, że ciąg znaków "tst" w query string sprawdza tak czy czujnik coś wykrywa.
    Code: c
    Log in, to see the code

    Wyświetlanie (tylko do sprawdzenia czy działa, na szybko):
    Code: c
    Log in, to see the code

    Testujemy. "Drzwi zamknięte":
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    "Drzwi otwarte":
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Działa - pora zintegrować to z Tasmota HTTP.


    Pierwsze oznaki funkcjonalności
    Posprzątałem nieco kod i podpiąłem też przycisk z płytki jako drugi input. Poniżej kod generowania odpowiedzi na zapytanie Tasmota HTTP (kod specjalnie napisany w miarę jasno, dałoby się to zrobić lepiej i krócej):
    Code: c
    Log in, to see the code

    Rezultat w Tasmota Control:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Z aktywnym czujnikiem ("zamknięte drzwi"):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Z wciśniętym przyciskiem:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Czyli wszystko działa.
    Historia w konsoli UART pokazuje jak często Tasmota Control odpytuje XR o stan:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Reset do trybu AP - przycisk na stronie
    Na ten moment kod na sztywno podłącza się do mojego routera WiFi, ale tak nie może być.
    Przecież w takiej sytuacji trzeba by zawsze programować XR809 by go podłączyć do naszego WiFi.
    Z tego powodu trzeba uruchomić tryb otwartego AP by móc łatwo konfigurować urządzenie.
    Na próbę damy na stronę WWW przycisk tworzący otwarty AP.
    Strona WWW XR jest w src/net/shttpd-1.42/examples/source.h.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Dodany przycisk "Reset AP":
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Trzeba dodać obsługę zapytania GET, tak jak wcześniej dla komendy Tasmoty (ścieżka /reset_ap):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    I funkcję która to obsłuży:
    Code: c
    Log in, to see the code

    (od razu zaznaczam, że lepiej byłoby odczekać 1 sekundę w głównej pętli i wtedy zmieniać stan sieci, bo w bieżącej wersji nie dostaniemy odpowiedzi na to GET bo się XR809 od razu odłączy)
    Po wciśnięciu przycisku tracimy kontakt z modułem i pojawia się jego sieć WiFi:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Po podłączeniu się do tej sieci, pod adresem IP 192.168.51.1, możemy na nowo skonfigurować moduł:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Tu się podaje nasze hasło i SSID (trzeba jeszcze zrobić by pole było typu password, ale to żaden problem, kwestia HTML):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    (właściwie to zrobiłem tu nie otwarty AP, lecz AP o znanym SSID i haśle, ale na jedno wychodzi. Można by jeszcze dodać randomizację tego "12345" w SSID tak by np. zawierało MAC)


    Reset do trybu AP - fizyczny tactile switch na PCB
    Zrobimy, że wciśnięcie przycisku na 5 sekund resetuje urządzenie do domyślnego AP (XR sam tworzy sieć WiFi), byśmy mogli potem do niej się podłączyć i skonfigurować mu dane o naszym routerze.
    Musimy jakoś sprawdzić, czy przycisk jest wciśnięty 5 sekund.
    Postanowiłem wpiąć się w pętle z pollingiem zdarzeń HTTP, wywołanie shttpd_poll blokuje na 1 sekundą, więc w sam raz:
    Code: c
    Log in, to see the code

    Po moich zmianach:
    Code: c
    Log in, to see the code

    To działa, aczkolwiek podejrzewam, że jest tu drobny błąd - shttpd_poll nie blokuje zawsze na 1000ms, tylko na mniej jeśli dotrze pakiet.
    W następnej wersji być może zmienię to XR-ową (albo nie) bibliotekę przycisków, która sama obsługuje debouncing i tego typu sprawy:
    Code: c
    Log in, to see the code

    Szczegóły w project/example/button/main.c

    Obsługa diody LED z pokładu
    To jeszcze może udostępnijmy diodę LED dla Home Assistant poprzez Tasmota HTTP. Tak by można też było nią posterować.
    To bardziej też jest tutaj w ramach demonstracji co i jak zrobić niż jako praktyczna porada (po co nam sterować diodą na drzwiach?), ale myślę, że będzie warto.
    Dioda podłączona jest tutaj:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Obsługa pinu GPIO, PA12, w trybie wyjścia:
    Code: c
    Log in, to see the code

    Skoro chcemy widzieć jej stan przez Tasmota HTTP, to trzeba dodać ją jako np. "Power3" do pakietu stanu "przekaźników":
    Code: c
    Log in, to see the code

    g_gpio_led, str_state3, "Tasmota3" zostało dodane.
    A jeśli chcemy móc nią sterować, to trzeba też obsłużyć pakiet GET /cm?cmnd=Power1%20Off HTTP/1.1.
    Power'y indeksowane są od 1 (nie od 0), stany mogą być On lub Off.
    Mój kod parsingu tego (bardzo uproszczony i bez zabezpieczeń):
    Code: c
    Log in, to see the code

    I już możemy migać - i to poprzez Tasmota HTTP:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Jedna drobna poprawka - krótka odpowiedź pakietu stanu
    Nie będę już tego opisywać szczegółowo, bo to już praca czysto w obrębie wiedzy ogólnie z języka C, a nie z XR809, ale niestety musimy jeszcze zachować kompatybilność z krótkim formatem odpowiedzi Tasmota HTTP, czyli na zapytanie:
    Quote:

    GET /cm?cmnd=POWER1 HTTP/1.1
    Host: 192.168.0.110
    User-Agent: HomeAssistant/2020.12.1 aiohttp/3.7.1 Python/3.8
    Accept: */*
    Accept-Encoding: gzip, deflate

    Musimy odpowiadać:
    Quote:

    HTTP/1.1 200 OK
    Content-type: application/json

    {"POWER1":"OFF"}

    (w tym momencie program odpowiada całym opisem stanu urządzenia).
    Poniżej przerobiony kod (i ta wersja już działa z HA):
    Code: c
    Log in, to see the code


    Stałe IP
    Ze względu na sposób działania Tasmota HTTP (urządzenie nasze jest serwerem, a my je odpytujemy o stan) przyda się tutaj stałe IP. Już by nie komplikować zrealizowałem to poprzez rezerwację IP dla adresu MAC na routerze:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Można by to zrealizować też przez określoną nazwę hosta i DNS.

    Końcowy test z Home Assistant
    Na koniec sprawdziłem moduł z Home Assistant, używając do tego skryptów Tasmota HTTP opisanych tutaj:
    https://www.elektroda.pl/rtvforum/topic3789324.html
    czyli zaktualizowanej wersji tego pluginu, HTTAS by JiriKursky:
    https://github.com/JiriKursky/httas
    UWAGA - na ten moment wersja httas z Githuba nie zadziała z nowszymi wersjami Home Assistant. Wynika to ze zmiany sposobu w który obsługiwane są coroutines. Pojawi się błąd: "ValueError: Coroutine not allowed to be passed to HassJob."
    Dlatego polecam pobrać moją poprawioną wersję:
    httas-fixe...210306.zip Download (6.91 kB)Points: 0.5 for user

    W /config/configuration.yaml dałem namiary na urządzenie:
    Code: yaml
    Log in, to see the code

    Po restarcie od razu się pojawiło:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    "MyRel1" tutaj to stan otwarcia drzwi, "MyRel2" to stan przycisku, "MyRel3" to stan diody.
    Stan diody możemy zmieniać z poziomu Home Assistant. Pozostałe są tylko do odczytu.
    Prezentacja działania:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Automatyzacje w Home Assistant
    Taka integracja pozwala już robić nam automatyzacje w Home Assistant, na przykład otwarcie drzwi będzie tu powodować zapalenie diody LED (na jej miejsce można dać dowolne urządzenie kompatybilne z HA):
    Code: yaml
    Log in, to see the code

    switch.socket to ścieżka do encji ustawionej wcześniej w /config/configuration.yaml

    Większa responsywność czujnika
    W przypadku czujnika otwarcia drzwi można jeszcze zwiększyć czas reakcji HA na zmianę jego stanu. Robi się to w konfiguracji, wystarczy dopisać scan_interval (wartość w sekundach):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Jeśli otrzymujemy błąd:
    Quote:

    Logger: homeassistant.components.hassio
    Source: components/hassio/__init__.py:420
    Integration: Hass.io (documentation, issues)
    First occurred: 11:53:21 (1 occurrences)
    Last logged: 11:53:21

    Invalid config for [switch.httas]: value must be at least 3 for dictionary value @ data['switches']['socket']['scan_interval']. Got 1. (See ?, line ?).

    to można zmniejszyć minimalną wartość w custom_components/httas/switch.py:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Myślę, że 1 sekunda odstępu pomiędzy odświeżeniami nawet dla stanu drzwi jest wystarczająca.

    Napotkane problemy
    Podczas zapoznawania się z XR809 napotkałem zasadniczo jeden, dość nietypowy problem. Kosztował mnie on ponad godzinę czasu.
    W trakcie prac nad resetowaniem płytki (przycisk RESET tworzący Access Point o znanym nam haśle) zobaczyłem, że nagle płytka resetuje się (wraca do main()) w momencie gdy chcę utworzyć AP lub podłączyć się do istniejącego.
    Taki sam rezultat miało włączenie skanu sieci WiFi - wszystko resetowało płytkę.
    Jak myślicie, jaki był tego powód?
    Odpowiedź w spoilerze:
    Spoiler:

    Okazało się, że w trakcie prac bateryjki się nieco za bardzo rozładowały i przy niskim ich poziomie XR809 resetuje się gdy zacznie się aktywność WiFi. Problem naprawiłem zamieniając baterie na nowe.



    Popularność XR809
    Na koniec jeszcze chciałbym dać jedna drobną uwagę, gdyż wiem, że nie każdy mógł zrozumieć w pełni moje intencje. Oczywiście wiem, że XR809 i pokrewne są bardzo mało popularne i pewnie czytelnik na takiego XR809 nie trafi w ciągu swojej kariery. W tym temacie bardziej chodziło mi o ogólne pokazanie mechanizmów jak takie uruchamianie nieznanego modulu działa (i od strony technicznej i od strony organizacyjnej - bo informacje co i jak zrobić były szczątkowe jak zaczynałem z tym).


    Dla użytkownika - jak używać mojego wsadu XR809
    To poniekąd wynika z całego tematu, ale opiszę to jeszcze krótko w pigułce.
    1. wgrać mój xr_system.img przez UART na XR809 (z katalogu project/at_demo/image/xr809/)
    2. wcisnąć przycisk dłużej niż 5 sekund
    3. podłączyć się do sieci WiFi xr-123 itp, hasło 12345678
    4. otworzyć 192.168.51.1, podać tam SSID i hasło naszego WiFi
    5. na routerze dodać rezerwację IP dla MAC XR809
    6. w Home Assistant dodać plugin Tasmota HTTP (httas by JiriKursky)
    7. w Home Assistant dopisać namiary na nasze urządzenie w configuration.yaml

    Dalsze plany
    Na ten moment planuję przede wszystkim zajrzeć do zakupionego termometru/higrometru LCD, w którym też siedzi XR809:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Następnie pewnie nieco ulepszę przedstawiony tu kod. Teraz jest nieco bez składu i ładu i być może dałoby się go "wysypać" jakimś przepełnieniem bufora. No i pewnie trzeba też dodać save(), tzn. zapis konfiguracji WiFi do pamięci na wypadek wyjęcia baterii, ale to nie problem, gdyż at_demo z SDK posiada przykładową funkcję save.

    Podsumowanie
    Opracowany tu wsad całkowicie uniezależnił kupiony czujnik otwarcia drzwi od serwerów producenta i pozwala używać mi go bezpośrednio z Home Assistant. Pisanie tego oprogramowania było zasadniczo składaniem aplikacji z gotowych komponentów, bo to co ważniejsze w SDK już było, z serwerem HTTP włącznie. O dalszym ciągu projektu przesądzi ilość wolnego czasu oraz ilość napotkanych urządzeń z XR809 (XR1, XR2?, XR3), choć jedno już na celowniku mam.
    W załączniku ostatnia wersja kodu (załączam całe SDK wraz z binarką), z zastrzeżeniem, że jest to PRZED przepisaniem go na czysto i zawiera praktyki które nie powinny mieć miejsca w finalnej wersji.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    p.kaczmarek2
    Level 26  
    Offline 
  • Optex
  • #2
    chemik_16
    Level 25  
    No to teraz jeszcze port dla BK7231 i jesteś sławnym człowiekiem ;)
  • Optex
  • #3
    p.kaczmarek2
    Level 26  
    Czyli WB2S, WB3S?
    SDK dla nich też jest w sieci, jakiś flasher również już mam:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Zobaczymy, jak pójdzie. O ile są wszystkie potrzebne "puzzle" to też da radę.

    PS: ale nie mylcie Tasmota HTTP z MQTT, ja w temacie powyżej zrobiłem Tasmota HTTP, MQTT nie implementowałem, choć też można by bez problemu przy tym SDK co jest dla XR809.
  • #4
    chemik_16
    Level 25  
    jest cały zestaw od 2 lat, ale nikt tego nie tykał, wszyscy przelutowują te moduły na esp.
    https://github.com/bekencorp/bk7231_alios_sdk

    układy montowane we wszystkich tanich smart tuya, jak gniazdka z pomiarem prądu (~25zł) czy włączniki.
  • #5
    p.kaczmarek2
    Level 26  
    chemik_16 wrote:
    No to teraz jeszcze port dla BK7231 i jesteś sławnym człowiekiem ;)


    Szanse na Bk7231 ostatnio znacząco wzrosły.

    Wygląda na to, że mogę już mu odczytać (i wgrać?) wsad:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Mogę skompilować jakiś wsad TUYA (choć go nie testowałem):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Oraz wsad z z bk7231_alios_sdk:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Udało mi się też podsłuchać debugowego wyjścia z WB2S (choć to raczej ciekawostka, chyba, że ten klucz....)
    Code: c
    Log in, to see the code


    Tylko że, z tego co widzę, to są dwa sposoby programowania - przez UART i przez SPI.

    Ma ktoś jakieś wylutowane WB2Sy?
  • #6
    varguit
    Level 2  
    Cześć @p.kaczmarek2, przede wszystkim gratulacje za świetną robotę.
    Potrzebuję pomocy przy wgrywaniu oprogramowania, używam starego PL2303 USB do TTL (sprawdzone narzędziem sprawdzającym i OK).
    Podczas rozpoczynania przesyłania otrzymuję komunikat o błędzie ,,Sprawdzanie błędu 1 bloku!"
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Przed wgraniem zrobiłem reset pinu EN, ale nie wiem czy układ XR3 jest w trybie programowania czy nie bo dioda przestaje migać po odłączeniu RESET od masy.
    Robię to po raz pierwszy i nie jestem pewien, czy wszystko jest na swoim miejscu, musiałem przełączyć Rx i TX, ponieważ w przeciwnym razie pojawia się błąd synchronizacji.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Próbowałem wielu różnych ustawień, szybkości transmisji, przełącznika Rx/Tx, resetów itp., ale lepsze jest to, co widać na zdjęciu.
    Czy ktoś ma jakiś pomysł ?

    Dzięki.
  • #7
    p.kaczmarek2
    Level 26  
    varguit wrote:
    I had to switch Rx and TX because otherwise I get synch failed error.

    O dziwo masz rację.
    Na moim schemacie zamienione są RX i TX.
    Czyli tu podłączamy RX do RX, a TX do TX. Producent ma dziwną konwencję na warstwie opisowej.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant


    varguit wrote:

    Before uploading, I did the EN pin reset, but I don't know if the XR3 chip is in programming mode or not because led stops blinking after disconnecting RESET from ground.

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    jesteś pewny, że wykonujesz?
    p.kaczmarek2 wrote:
    1. podłącz RESET do masy
    2. podłącz PB02 i PB03 do masy
    3. odłącz RESET od masy (może zostać niepodłączony)

    ?

    czy Twój konwerter USB na TTL pracuje na poziomach logicznych 3.3V? Sprawdzileś połączenia multimetrem?

    Możesz jeszcze sprawdzić czy na płytce z Twojego urządzenia piny RX/TX są gdzieś podłączone. Może coś z niej zakłóca programowanie? Linie TX/RX są zajęte?
    Miałem już taki przypadek, jeden smart włącznik linię TX (albo RX, nie pamiętam) używaną do przycisku, był na niej rezystor pull up, który zakłócał programowanie. Musiałem go odlutować.
    EDIT: Opisałem to chyba tutaj: https://www.elektroda.pl/rtvforum/topic3749207.html

    Jaki masz dokładnie model tego urządzenia smart z XR809? Z chęcią je kupię i sam sprawdzę czy mogę je programować
  • #8
    p.kaczmarek2
    Level 26  
    Aktualizacja. Mam dobrą wiadomość - znalazłem czwarte urządzenie z XR3.
    (swoją drogą, to ciekawe, że z reguły ludzie unikają urządzeń smart które nie są oparte na ESP, a ja właśnie takich szukam)

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Wygląda jak przeróbka czujnika otwarcia drzwi który już znam. Nie będzie problemu z jego wsparciem.

    Więc, na ten moment lista urządzeń na XR3 zawiera:
    1. Smart Wifi Door Window Sensor Burglar Security Alarm For Alexa Google Tuya
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    2. LCD thermometer
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    3. Nieznane urządzenie PIR od użytkownika varguit
    varguit wrote:

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    4. Tuya Smart APP Wifi Smart Water Leakage Alarm Smart Home Mobile Phone Remote Sensor
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Jeśli ktoś zna więcej urządzeń opartych na XR809, to proszę o informacje.
  • #9
    varguit
    Level 2  
    Cześć.

    Quote:
    czy na pewno obserwujesz:
    p.kaczmarek2 napisał:
    1. podłącz RESET do ziemi
    2. Podłącz PB02 i PB03 do ziemi
    3. odłączyć RESET od masy (może być w powietrzu)

    ?

    czy twoje usb na ttl jest konwertowane w trybie 3.3V? Czy sprawdziłeś wszystkie połączenia multimetrem?


    Tak, uziemiam RESET i PB02,PB03, a potem zwalniam RESET.
    Jeśli wykonam reset bez PB02 i PB03 do masy, widzę ponowne uruchomienie urządzenia, ale jeśli zarówno PB02, jak i PB03 są połączone z masą, reset nic nie robi w moim urządzeniu. :(
    Mój usb do ttl ma tylko dwa piny zasilania, jeden na 5V, a drugi na 3,3V, mój multimetr mierzy około 3,4V.

    Quote:
    Czy możesz mi podać dokładny model Twojego inteligentnego urządzenia i gdzie je kupiłeś? Chętnie też go kupię, żebym mógł zrobić rozbiórkę i spróbować sam go zaprogramować.

    Oczywiście byłoby to bardzo pomocne, wysłałbym Ci jeden, gdybyś był w Hiszpanii :) . Jest to urządzenie TUYA PIR kupione od Aliexpressa za około 8 EUR
    Oto link:
    Połączyć

    Przeczytam Twoje inne tematy, aby sprawdzić, gdzie jest mój problem, ale moje elektroniczne potwierdzenie jest bardzo ograniczone....
    Dziękuję za odpowiedź.
  • #10
    p.kaczmarek2
    Level 26  
    EDIT: Sprawdziłem napiecia i XR809 niby pracuje na 5V, więc to powinno być ok (na 3.3V też pracuje)
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    więc może to nie poziom napięć UART jest tu problemem

    Informacja o sensorze PIR na XR809 jest bardzo przydatna. Zamówiłem go i już przyszła paczka:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Spróbuję go wkrótce zaprogramować.
  • #11
    p.kaczmarek2
    Level 26  
    Dzisiaj przetestowałem programowanie i odczyt firmware urządzenia użytkownika @varguit .
    Wszystko działa bez problemu.
    Mogę wgrywać firmware:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Oto moje podłączenia. Użyłem tych samych kolorów przewodów co @varguit. Jedynie nie miałem baterii, więc zasiliłem całość z LDO 3.3V.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    WiFi od XR809 pojawia się bez problemu:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Odczyt firmware (fabrycznego) też działa:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Wykonałem również OCR znaków z gui programu i przetłumaczyłem je na angielski:
    读取\ - Read?

    写入 - Write?

    连续 - continuous

    捺除楔式 - wg. translate to "Eliminate wedge", ale to chyba dotyczy rozmiaru bufora

    Mogę wczytać zarówno pamięć Flash, jak i konfigurację:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Czasami otrzymywałem błąd "read payload data error", ale po kilku próbach wszystko ostatecznie się udawało
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Wczytany firmware można otworzyć w Notepad++, oczywiście większość nie jest czytelna, ale stałe tekstowe w formacie ASCII jednak możemy przeczytać. Ciekawe czy IDA PRO by to zdekompilowała, muszę spróbować kiedyś.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Możemy również tam dostrzec oryginalne nazwy plików z kodem źródłowym:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Załączam zrzuty firmware (przed pierwszym parowaniem)
    memory_A_0...200000.zip Download (459.76 kB) flash_A_0x...000000.zip Download (7.4 MB)

    PS: @varguit , nie próbowałeś może tu wybrać mniejszej prędkości?
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    PS2: czy parowałeś swoje urządzenie przed zgrywaniem firmware? Może jakaś aktualizacja coś popsuła?
    PS3: może za niskie napięcie zasilania masz, używasz nowych bateriii?
  • #12
    __Maciek__
    Level 20  
    Troszkę offtop - ale już było poruszone

    @p.kaczmarek2 WB2S przyszedł mi ostatnio z gniazdami FK-PW802 ze znanego portalu aukcyjnego .. próbuję połapać się w przykładach z freertos ( jest też RTT do wyboru .. ale z uwagi na twórców duuuużo krzaków - choć chyba mniej niż dla AliOS )

    https://github.com/bekencorp/bdk_freertos

    Czy miałeś problem z kompilacją ? Nie pisałem wcześniej pod freertos, do tego układ sdk dla mnie trochę dziwny .. ale próbuje się połapać i przejść pierwszą kompilację.
    Udało Ci się zajrzeć na ich forum ? Są tam linki do dokumentacji i forum, ale coś czuję że jakiś chiński firewall blokuje ...
  • #13
    p.kaczmarek2
    Level 26  
    Jeśli chodzi o WB2S to podjąłem pewne próby i zapowiada się obiecująco, ale brakło czasu. Było to około miesiąc temu, ale opiszę tu mniej wiecej co wiem.

    Znam 2 możliwości.

    1. tuya-iotos-embeded-sdk-wifi-ble-bk7231t-master
    https://github.com/tuya/tuya-iotos-embeded-sdk-wifi-ble-bk7231t
    Udało się skompilować pod Cygwinem, wszystko jest co trzeba na repo, ale oczywiście podstawowa samodzielność konfiguracji jest wymagana (nie pamiętam już co zmieniałem ale to proste):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    rezultat kompilacji:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Da sie to wgrać poprzez UART za pomocą BK Writer:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Niestety te SDK zawiera przykłady chyba nieco mocno powiązane ze środowiskiem Tuya:
    https://github.com/tuya/tuya-iotos-embeded-sd...b/master/apps/template_demo/src/tuya_device.c
    I nie wiem na ile dałoby się tam pomanewrować.

    2. bk7231_alios_sdk
    https://github.com/bekencorp/bk7231_alios_sdk/
    Troszke więcej zabawy z konfiguracją jest, musisz umieć zainstalować Pythona jakiego trzeba, i potem wykonać kilka komend, ale też działa kompilacja:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    ... ale programowanie BK się nie powodzi, gdyż alios SDK oczekuje że będziemy mieć programator ST-Link/V2 i że to poprzez niego wgra wsad.

    dodatkowo wsady generowane przez te dwa sposoby są różnego formatu, jeden to chyba pełen obraz flash, a drugi to tylko sekcja wgrywana przez bootloader przez uart

    Właściwie to ja mam ten programator ale nie miałem czasu już lutować kabelków gdzie trzeba (no i jesli by byl potrzebny ST link to nie jest to idealne rozwiązanie):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Zbiór linków na temat WB2S i pokrewnych (zbierane miesiąc temu):
    https://mitxela.com/forum/topic/beken-bk3231/2
    github.com/ct-Open-Source/tuya-convert/issues/884
    https://fccid.io/2AMV5-SK509W2SN/User-Manual/15-SK509-W-2S-N-UserMan-US-r1-4836910.pdf
    https://github.com/bekencorp/bk3633_mesh_sdk
    https://fcc.report/FCC-ID/2ANDL-WB2S/4580213.pdf
    https://developer.tuya.com/cn/docs/iot/wb2s-module-datasheet?id=K9ghecl7kc479
    https://www.programmersought.com/article/54836791463/
    https://developer.tuya.com/en/docs/iot/burn-and-authorize-wb-series-modules?id=Ka78f4pttsytd
    oem_bk7231s_light_UA_2.9.5.bin
    BK7231T pdf
    https://github.com/tuya/tuya-iotos-embeded-sd...ight_pwm_demo/src/light_system/light_system.c
    https://www.programmersought.com/article/73156790997/



    Nie próbowałem tego co dałeś, https://github.com/bekencorp/bdk_freertos . Dodatkowo widze że to pojawiło się 24 dni temu, a ja próbowałem około 30 dni temu. Coś nowego.
    Ale na pierwszy rzut oka wygląda obiecująco i są konkretne przykłady. Jak coś o tym więcej wiesz to napisz, bo pewnie podejmę próbę z tym konkretnym repozytorium niedługo

    I jak jakieś linki Ci nie działają to daj tu lub na PW to sprawdzę
  • #14
    __Maciek__
    Level 20  
    Troszkę klikania i RTOS się kompiluje .. dla bk7231u .. .. nie wiem na ile jest zgodny z bk7231d ... lub jak zwał BK7231T - na wstępnie jest różna wersja BT4.0 vs 4.2 ..

    Z kodu wynika też, że mogą występować różnice w DMA .. ale niekonsekwentnie podeszli i BK7231 wyrzuca warningi przy dma i błędy przy gpio.c
    (w header file jest warunek że definicja która powoduje problem nie dotyczy bk7231, a w C już pominęli. ) co prawda dotyczy to pinów nie używanych w WB2S więc może to nieistotne ) może by coś było na forum .. do tych zasobów dostać się nie mogę .. strona bbs.bekencorp.com:8191 nie odpowiada ..

    - [Hardware Docs](http://bbs.bekencorp.com:8191/forum.php?mod=forumdisplay&fid=57) - Download all kinds of hardware documents

    Pogmeram sobie w kodzie / wrzucę jakieś przykłady bk7231u na WB2S i zobaczę co z tego wyjdzie.
  • #15
    p.kaczmarek2
    Level 26  
    Chodzi Ci o GPIO_SD1_DMA_MODULE ?
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Wyszukwanie w Google tego prowadzi do:
    https://code.aliyun.com/MXCHIP_FAE/feiyan_sdk...platform/mcu/bk7231s/beken/driver/gpio/gpio.h

    https://code.aliyun.com/MXCHIP_FAE/feiyan_sdk...8e75920ec050d3d2984e7fa0ad6cf30b/platform/mcu

    Tu maja bk7231, bk7231s i bk7231u. I są one osobno. Natomiast w repo rtos wygląda tak jakby połączyli te SDK razem za pomocą preprocesora i coś im nie tak poszło.

    Ten link mi się nie otwiera, ale spróbuję załatwić chińskie IP

    A swoją drogą jak rozwiązałeś brak ścieżki do application.h?
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
  • #16
    __Maciek__
    Level 20  
    Hhmmm ... u mnie się kompiluje bez żadnych błędów w oryginalnej konfiguracji dla bk7231u. - oczywiście czysty projekt z repo. ( 60K wsadu bez bootloadera )

    ( może toolchain .. ? trochę kombinowałem z tym .. różne wersje ... skończyłem na 5.4_2016q3. ) w kodzie różne wersje sugerowane były podane .. ale dla freertos9 to był ten okres. Grzebałem też przy przełącznikach kompilacji - wyłączałem errory od warningów - ale ostatecznie wróciłem na to co było.

    Kolejna rzecz - zauważyłem że występują różne opisy modułów WB2S .. i na stronie thuya - jest już BT4.2 - więc może to jednak ta wersja ..bk7231u.

    Co do aplikacji .. próbowałem wczoraj skompilować jakiś przykład z demo .. ale tu zonk zawsze wsad wychodzi ten sam ... podczas kompilacji zmienia mi dane w pliku config .. ale muszę się przyjrzeć co i jak ( w repo nie ma tego pliku / folderu więc musi być tworzony właśnie w procesie kompilacji - dlatego mi się zmienia.. więc zastanawia mnie .. gdzie skonfigurować co ma kompilować. ? )

    Muszę znaleźć więcej czasu na to ...
  • #17
    p.kaczmarek2
    Level 26  
    __Maciek__ wrote:
    ( może toolchain .. ? trochę kombinowałem z tym .. różne wersje ... skończyłem na 5.4_2016q3. )

    Jak niby wersja toolchaina by miała na obecność/ścieżkę nagłówka wpływać...

    __Maciek__ wrote:
    wyłączałem errory od warningów

    a to potwierdzam, pierwsze co musiałem zrobić

    __Maciek__ wrote:
    Hhmmm ... u mnie się kompiluje bez żadnych błędów w oryginalnej konfiguracji dla bk7231u. - oczywiście czysty projekt z repo. ( 60K wsadu bez bootloadera ) .

    Chyba wiem czemu to było.
    Mają tam bałagan niezły.
    Ja w application.mk sobie odkomentowałem/wpisałem ściezkę do toolchaina /home/tester/gcc-arm-none-eabi-4_9-2015q1/bin/ i myślałem że jest ok bo się kompiluje:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    i się kompilowało, ale okazało się że drugi raz to samo jest podane w generate_sys_config.h:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    i tam trzeba też ręcznie ścieżkę ustawić... bo się nie wygenerują nagłówki bez tego.
    Ostatecznie jednak ustawiam ściezkę przez zmienna środowiskową:
    export FREERTOS_EXEC_PATH=/home/tester/gcc-arm-none-eabi-4_9-2015q2/bin

    I działa, ale ogólnie nie powinno tak być że w dwóch miejscach tą samą zmienną ustawiaja

    No to się u mnie kompiluje tez:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    __Maciek__ wrote:

    ale tu zonk zawsze wsad wychodzi ten sam ... podczas kompilacji zmienia mi dane w pliku config

    Config generuje właśnie generate_sys_config.h. A własciwie to przekopiowują go.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Otwórz go sobie i możesz np. tu zmienić na 1:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant


    __Maciek__ wrote:

    Muszę znaleźć więcej czasu na to ...

    dokładnie, sam też staram się po trochę robić w trakcie dłuższych buildów normalnych projektów, a dodatkowo z rtoos i pokrewnych, ARM nie korzystałem wcześniej (jak napisałem w pierwszym poście)

    widzę że coś w repo mają odnośnie MQTT, pewnie się rpzyda, do XR809 też planuję uruchomić MQTT normalnie
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Ja teraz muszę znaleźć jak zgodnie ze sztuką podpiąć tam pliki z kodem C dema do kompilacji, bo nie widzi u mnie demo_start:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Oczywiście wiadomo, że można by wpisać to do makefile normalnie ale mam wrażenie, że oni mają jakiś system do tego oparty o skrypty
    EDIT: a ok, wiadomo, tutaj sie to ustawia:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Tu wybierasz które demo kompilujesz. Zrób wedle tego co napisałem i będziesz mieć wszystko co trzeba by wstępnie prztestować czy to dziala na WB2S
  • #18
    varguit
    Level 2  
    Cześć.

    Przede wszystkim dziękujemy za zakup tego samego czujnika i przetestowanie go.
    Po wielu próbach i błędach nadal nie mogę go sflashować.

    Podążając za twoimi informacjami, próbowałem najpierw przeczytać oryginalne oprogramowanie układowe i działa, otrzymuję dokładnie taki sam wynik, jak na poniższym obrazku:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Mogę zapisać oryginalny obraz, więc jestem prawie pewien, że wszystko jest w porządku w części dotyczącej połączeń i komunikacji, ale wygląda na to, że coś jest nie tak podczas sprawdzania pierwszego bloku. Próbowałem też przerobić xr_system.img , ale nadal bez powodzenia. Może muszę kupić inny UART (mój jest bardzo stary i sterowniki do Windows 10 nie są obsługiwane)

    PS: w tej chwili nie jestem pewien, czy to działa, ale czy próbowałeś tutaj ustawić niższą prędkość?
    Tak, próbowałem z różnymi prędkościami, od 9600 do maksimum, zawsze otrzymuję ten sam błąd.

    PS2: czy sparowałeś swoje urządzenie z Tuya przed flashowaniem? o ile wiem, to nie powinno mieć znaczenia, to nie jest jak przekonwertowanie tuya, ale... Nie połączyłem tutaj mojego. Sparowałem tylko czujnik drzwi z pierwszego postu z tuya przed flashowaniem, a nie czujnik PIR teraz.
    Tak, został sparowany, ale usunąłem też z aplikacji SmartLife. Mam nadzieję, że to nie jest powód.

    PS3: czy próbowałeś nowych baterii?[/quote]
    W tej chwili zasilam go z arduino bezpośrednio do styków baterii, tak jak ty.
  • #19
    p.kaczmarek2
    Level 26  
    @varguit , właśnie przypadkowo spotkałem się z podobnym problemem do twojego. Zdarza się to za każdym razem, gdy próbuję sflashować XR809 za pomocą konwertera USB na UART MCP2221, bez względu na ustawienie bodów. Otrzymuję błędy losowe, czasami „błąd synchronizacji”, czasami „błąd ustawienia szybkości transmisji”, a czasami błąd podczas programowania pierwszego bloku. Z drugiej strony działa płynnie, jeśli po prostu podłączę mój konwerter TX/RX na USB na TTL HW 597 i zostawię wszystko inne bez zmian.
    Wygląda na to, że Twój UART musi być wystarczająco szybki, aby wykonać zadanie, spróbuj USB do TTL HW 597, jest tani w zakupie online.
    PS: wkrótce wypróbuję MCP2221A (MCP2221 działa podobno do 115200, a MCP2221A do 460800)
  • #20
    joxumac
    Level 1  
    Dzień dobry mam w posiadaniu Mini Smart Switch, który ma w środku WB2S (BK231T) i próbuję go sflashować, aby zintegrować go z asystentem domowym bez przechodzenia przez serwery Tuya lub Smart Life.

    Przeczytałem post i załączone dokumenty, a postęp w odniesieniu do tego chipa wydaje mi się niewiarygodny.

    Obecnie udało mi się odczytać wyjście układu podłączając piny VBAT do 3,3V; GND do GND, 2RX i 2TX do TX i RX odpowiednio mojego USB-TTL. Ustawiając terminal szeregowy na 115200 bodów jestem w stanie odczytać co chip drukuje na terminalu.

    Jednak wykonując tylko to połączenie, nie jestem w stanie zrzucić pamięci flash do mojego komputera (niektórzy użytkownicy to dostali, jak?). Jak widzę porównując z XR809 trzeba mieć piny PB02 i PB03 do GND, ale te piny nie występują w połączeniu WB2S.

    Masz pomysł, jak mogę kontynuować? (Mam USB-TTL, ST-LINK v2, Arduino, ESP i inne komponenty do przeprowadzania testów, które są przydatne dla społeczności i badań)
    (Załączona tabela szpilek według Twojej strony internetowej Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant )

    Dodano po 2 [godziny] 24 [minuty]:

    Po wykonaniu większej liczby testów, wykonaniu tego samego połączenia co poprzednio, ale tym razem z połączeniem do 1RX i 1TX zamiast drugiej linii (2RX i 2TX), oprogramowanie BKWriter 1.60 wykonuje pusty zrzut pamięci (.bin) (do 115200 bodów). Jeśli otworzę terminal szeregowy (przy 115200 bodach) pojawia się następujący komunikat (to tak, jakby bodów nie wybrano poprawnie ??). Nadal nie mogę wykonać kopii zapasowej oryginalnej pamięci flash :'(

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
  • #21
    mihsu81
    Level 2  
    @joxumac Utrzymuj szybkość transmisji na poziomie 115200 w Menedżerze urządzeń, ale w Beken Writerze musisz ustawić ją na 921600 podczas czytania lub pisania.

    Inną rzeczą, o której należy pamiętać, jest to, który układ scalony jest używany przez USB-TTL. Mogłem czytać i pisać dobrze z układem scalonym CH340G, ale nie mogłem z układem FTDI FT231X. W rzeczywistości ,,USB to TTL HW 597", o którym wspominał @pkaczmarek2, ma układ scalony CH340G.
    Flashowanie odbywa się na 1RX i 1TX, a debugowanie UAR (wyjście szeregowe) na 2RX i 2TX.

    I wreszcie, urządzenie musi być wyłączone po naciśnięciu przycisków Read Flash lub Write Flash. Włącz go natychmiast po.

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Teraz muszę sprawdzić, czy uda mi się skompilować FreeRTOS wspomniany przez @__Maciek__ i @pkaczmarek2 .
  • #22
    mihsu81
    Level 2  
    Didn't manage to get any further than @__Maciek__ and @pkaczmarek2 .

    make bk7231 throws general_dma compile errors:

    beken378/driver/general_dma/general_dma.c:37:15: error: 'gdma_get_dma_en' defined but not used [-Werror=unused-function]
    static UINT32 gdma_get_dma_en(UINT32 channel)
    ^
    beken378/driver/general_dma/general_dma.c:193:15: error: 'gdma_get_transfer_length' defined but not used [-Werror=unused-function]
    static UINT32 gdma_get_transfer_length(UINT32 channel)
    ^
    beken378/driver/general_dma/general_dma.c:371:13: error: 'gdma_enable_interrupt' defined but not used [-Werror=unused-function]
    static void gdma_enable_interrupt(void)
    ^
    beken378/driver/general_dma/general_dma.c:436:12: error: 'gdma_get_received_len' defined but not used [-Werror=unused-function]
    static int gdma_get_received_len(UINT32 channel)
    ^
    cc1: all warnings being treated as errors
    make[1]: *** [application.mk:376: out/./beken378/driver/general_dma/general_dma.o] Error 1


    And if you ignore the errors with make -i bk7231 looks like more drivers also fail to compile.

    I've compiled and flashed the binary for bk7231u but the only thing i'm getting from serial is the below output repeated maybe 10 time per second:

    V:BK7231S_1.0.5
    CPSR:000000D3
    R0:00000000
    R1:00DFFEFC
    R2:00802000
    R3:F1CCFFFF
    R4:00010000
    R13:0043F7C8
    R14(LR):0000BCBC
    ST:BEDEAD01
    J 0x10000


    Which is strange because my WB2S has BK7231TQN32 and on Tuya's site it's listed as a BK7231T. On the other hand Beken doesn't have a BK7231T on their site but does have a BK7231S. Link

    I guess I'll have to do more digging as time permits.

    Update 1:
    Looks like this is the start-up message, so i guess the bk7231u firmware doesn't work.

    Update 2:
    I've compiled the freely available documentation from Link after using a Chinese VPN :lol: .
    Unfortunately for Link you'd need to register with a company account.
    And gcc-arm-none-eabi-5_4-2016q3-20160926 is the correct toolchain as assumed by @__Maciek__. It's listed in Link.

    In the attached files they also mention how to set up the tool chain in order to be properly recognized by make:
    $ sudo mkdir -p /usr/local/share/toolchain/
    $ tar xf gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2 -C /usr/local/share/toolchain/
    Add the following environment to ~/.bashrc if you are using bash or ~/.zshrc if you are using zsh.
    export RTT_EXEC_PATH=/usr/local/share/toolchain/gcc-arm-none-eabi-5_4-2016q3/bin
    export FREERTOS_EXEC_PATH=/usr/local/share/toolchain/gcc-arm-none-eabi-5_4-2016q3/bin/
    [/u]
  • #23
    mihsu81
    Level 2  
    Aktualizacja 3:
    Wygląda na repozytorium bekencorp/bdk_freertos Połączyć jest ślepym zaułkiem, ponieważ tak naprawdę nie jest skonfigurowany dla SOC bk7231.
    Udało mi się obejść błędy kompilacji dodając #jeśli (CFG_SOC_NAME != SOC_BK7231) w około 10 plikach .c na podstawie tego, co zostało faktycznie zdefiniowane w plikach .h.
    Ale utknąłem na etapie łączenia, ponieważ brakuje bibliotek dla bk7231 ( libcal_bk7231.a, librwnx_bk7231.a, libsupplicant_bk7231.a ) i nie mogę ich skompilować, ponieważ brakuje plików źródłowych i nie mogę znaleźć poprawnych wersji nigdzie na github lub gitee (libs lub pliki źródłowe).
    Więc spróbowałem ponownie kompilować dla bk7231u. Na podstawie niektórych testów pobocznych z repozytorium tuya dla bk7231t Połączyć Zdałem sobie sprawę, że pętle rozruchowe są spowodowane faktem, że WB2S ma zaszyfrowany program ładujący.
    zaszyfrowałem beken7231u.bin z / out przy użyciu zaszyfruj v0.3.1 z repozytorium tuya (folder narzędzi) przy użyciu kodów dostępu ze skryptu budowy tuya: zaszyfruj beken7231u.bin 510fb093 a3cbeadc 5993a17e c7adeb03 10000 .
    I spakowałem go za pomocą beken_packager za pomocą zaszyfrowanego programu ładującego z repozytorium tuya bootloader_enc.bin .
    Błysnąłem beken7231u_enc_uart_2M.1220.bin i uruchamia się teraz, ale nawet demo Hello World wydaje się nie działać.
    Więc na razie zrezygnowałem.

    Aktualizacja 4:
    Znalazłem na gitee repozytorium RT Thread OS Połączyć i postanowiłem spróbować.
    Musisz upewnić się, że masz pythona 2.7 i scons 3.1.2, ponieważ używają sconów zamiast make.
    Możesz skonfigurować, które opcje/próbki/pakiety są używane przez edycję rtconfig.h
    Wynikowy plik rtthread.bin musi zostać ponownie zaszyfrowany i spakowany za pomocą zaszyfrowanego programu ładującego z tuya. i flashowane za pomocą bk_writer.
    Oprogramowanie układowe uruchamia się, wyświetla znak zachęty finsh, ale nie przyjmuje żadnych danych wejściowych, ponieważ wygląda na to, że wątek tshell i wątek główny zostają natychmiast zawieszone.
    Byłbym bardzo wdzięczny za pomoc w rozwiązaniu tego ostatniego fragmentu. RTTOS wydaje się naprawdę obiecujący, ponieważ ma również MQTT, serwer WWW itp.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
  • #24
    p.kaczmarek2
    Level 26  
    Przepraszam, za wolną odpowiedź. Chyba znów nie zadziałały powiadomienia.

    Nie jestem pewny, czy udało mi się uzyskać więcej niż Ty. Nie wykonywałem żadnego "pakowania" wsadu ręcznie, żadnego encodingu.

    Przedstawię ponizej na razie tyle ile wiem - może komus sie przyda.

    Wgrywanie wsadu dla WB2S:, RX i TX służy do programowania, 2RX i 2TX służy do debugowania.
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    zewnętrzne zasilanie.

    COM5 w tym przypadku służy do programowania (przez UART):
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Tyle starcza by zaprogramować, ale przed wgrywaniem wsadu muszę odłączyć zasilanie (pomarańczowy przewód USB na zdjeciu).

    Testowane firmware: bdk_freertos-release-v3.0:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    utyka na boot loop:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Nic z tego repozytorium u mnie nie działa.


    Testowe firmware tuya-iotos-embeded-sdk-wifi-ble-bk7231t-master:
    a dokładniej: template_demo_UA_1.0.0.bin
    Proces kompilacji:
    Quote:

    ### Compile

    The compile project is in the apps directory, you can quickly compile, burn, and run the process through `template_demo`. Use the following command in the root directory to compile:
    ``` bash
    $ sh build_app.sh apps/template_demo template_demo 1.0.0
    ```
    apps/template_demo: compile project path

    template_demo: compile project name


    Moja testowa linijka dodana do kodu:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Rezultat:
    Code:

           
    V:BK7231S_1.0.5

    CPSR:000000D3

    R0:E56F05AF

    R1:AC3E48E8

    R2:6A7FBF7C

    R3:5333FCE4

    R4:CB643E15

    R13:ABF7DBA7

    R14(LR):B8FE67F7

    ST:6CF21514

    J 0x10000

    prvHeapInit-start addr:0x41f4a0, size:133984
    [01-01 18:12:15 TUYA Info][mqc_app.c:175] mqc app init ...
    [01-01 18:12:15 TUYA Info][sf_mqc_cb.c:42] register mqc app callback
    [01-01 18:12:15 TUYA Debug][mqc_app.c:118] mq_pro:5 mqc_handler_cnt:1
    [01-01 18:12:15 TUYA Debug][mqc_app.c:118] mq_pro:31 mqc_handler_cnt:2
    [01-01 18:12:15 TUYA Debug][uni_thread.c:215] Thread:sys_timer Exec Start. Set to Running Status
    [01-01 18:12:15 TUYA Debug][log_seq.c:732] read from uf. max:0 first:0 last:0
    [01-01 18:12:15 TUYA Debug][svc_online_log.c:288] svc online log init success
    [01-01 18:12:15 TUYA Err][tuya_ws_db.c:314] kvs_read fails gw_bi -1
    [01-01 18:12:15 TUYA Err][ws_db_gw.c:111] gw base read fails -935
    [01-01 18:12:15 TUYA Debug][tuya_bt_sdk.c:89] ty bt cmmod register finish 1
    [01-01 18:12:15 TUYA Debug][tuya_ble_api.c:301] ble sdk inited
    !!!!!!!!!!tuya_bt_port_init
    [01-01 18:12:15 TUYA Debug][tuya_ble_api.c:337] ble sdk re_inited
    [01-01 18:12:15 TUYA Notice][tuya_bt_sdk.c:130] ty bt sdk init success finish
    [01-01 18:12:15 TUYA Debug][tuya_device.c:259] < TUYA IOT SDK V:1.0.2 BS:40.00_PT:2.2_LAN:3.3_CAD:1.0.2_CD:1.0.0 >
    < BUILD AT:2020_09_25_17_24_52 BY embed FOR ty_iot_wf_bt_sdk_bk AT bk7231t >
    IOT DEFS < WIFI_GW:1 DEBUG:1 KV_FILE:0 SHUTDOWN_MODE:0 LITTL[01-01 18:12:15 TUYA Debug][tuya_device.c:260] template_demo:1.0.0
    [01-01 18:12:15 TUYA Notice][tuya_device.c:261] firmware compiled at Sep 27 2021 07:47:11
    [01-01 18:12:15 TUYA Notice][tuya_device.c:262] Hello, is this really working? Let's compile and check!
    bk_rst:0 tuya_rst:0[01-01 18:12:15 TUYA Notice][tuya_device.c:263] system reset reason:[(null)]
    [01-01 18:12:15 TUYA Debug][tuya_ws_db.c:438] init fs. Path: (null)
    [01-01 18:12:15 TUYA Notice][simple_flash.c:432] key_addr: 0x1ee000   block_sz 4096
    [01-01 18:12:15 TUYA Notice][simple_flash.c:500] get key:
    0xcb 0x4e 0x3e 0xa4 0x0 0x30 0x9d 0xab 0x65 0x6d 0x8d 0xbf 0xe4 0xb9 0x3f 0x35
    [01-01 18:12:15 TUYA Notice][tuya_main.c:311] **********[template_demo] [1.0.0] compiled at Sep 27 2021 07:47:10**********
    [01-01 18:12:15 TUYA Debug][uni_thread[bk]tx_txdesc_flush
    .c:215] Thread:cmmod Exec Start. Set to Running Status
    [rx_iq]rx_amp_err_rd: 0x042
    [rx_iq]rx_phase_err_rd: 0xfffffe01
    [rx_iq]rx_ty2_rd: 0x095
    *********** finally result **********
    gtx_dcorMod            : 0x8
    gtx_dcorPA             : 0xa
    gtx_pre_gain           : 0x0
    gtx_i_dc_comp          : 0x1fe
    gtx_q_dc_comp          : 0x20d
    gtx_i_gain_comp        : 0x3f4
    gtx_q_gain_comp        : 0x3ff
    gtx_ifilter_corner over: 0x11
    gtx_qfilter_corner over: 0x11
    gtx_phase_comp         : 0x20f
    gtx_phase_ty2          : 0x200
    gbias_after_cal        : 0x16
    gav_tssi               : 0x22
    g_rx_dc_gain_tab 0 over: 0x80788078
    g_rx_dc_gain_tab 1 over: 0x80788078
    g_rx_dc_gain_tab 2 over: 0x84788478
    g_rx_dc_gain_tab 3 over: 0x94708c74
    g_rx_dc_gain_tab 4 over: 0x94729472
    g_rx_dc_gain_tab 5 over: 0x92709272
    g_rx_dc_gain_tab 6 over: 0x93709270
    g_rx_dc_gain_tab 7 over: 0x94719371
    grx_amp_err_wr         : 0x226
    grx_phase_err_wr       : 0x2dc
    **************************************
    ble use fit!
    temp in flash is:250
    lpf_i & q in flash is:17, 17
    xtal in flash is:21
    -----pwr_gain:12, g_idx:12, shift_b:0, shift_g:0
    -----[pwr_gain]12
    Initializing TCP/IP stack
    [01-01 18:12:15 TUYA Notice][tuya_main.c:337] have actived over 15 min, not enter mf_init
    [01-01 18:12:15 TUYA Notice][tuya_main.c:341] mf_init succ
    [01-01 18:12:15 TUYA Debug][tuya_main.c:347] gwcm_mode 3
    [01-01 18:12:15 TUYA Debug][tuya_main.c:349] low_power select
    [01-01 18:12:15 TUYA Notice][tuya_main.c:109] have actived over 15 min, not enter mf_init
    [01-01 18:12:15 TUYA Debug][tuya_main.c:354] no tuya_mdev_test1!
    [01-01 18:12:15 TUYA Debug][tuya_svc_upgrade.c:736] tuya svc upgrade init success!
    [01-01 18:12:15 TUYA Debug][gw_intf.c:7294] timer ID:13
    [01-01 18:12:15 TUYA Debug][ws_db_gw.c:114] gw base read success
    [01-01 18:12:15 TUYA Debug][tuya_tls.c:212] tls register constant 523e15a047ae3b9c KPkcZjoF5ZQblDhOmleZdgnCDxe83lM2 eWnxk86A7TeYIAwm2hwMcOm5finBANYlB9r5u
    [01-01 18:12:15 TUYA Debug][tuya_tls.c:177] tls_ca_cnt:0 and parse:0
    [01-01 18:12:15 TUYA Notice][gw_intf.c:3671] serial_no:d4a65130368a
    [01-01 18:12:15 TUYA Debug][ws_db_gw.c:242] gw_wsm read success
    [01-01 18:12:15 TUYA Notice][gw_intf.c:3706] gw_cntl.gw_wsm.stat:2
    [01-01 18:12:15 TUYA Notice][gw_intf.c:3709] gw_cntl.gw_wsm.nc_tp:3
    [01-01 18:12:15 TUYA Notice][gw_intf.c:3710] gw_cntl.gw_wsm.md:0
    [01-01 18:12:15 TUYA Debug][uni_network.c:264] unm_set_dns_cache_priority ->0

    [01-01 18:12:15 TUYA Debug][ws_db_gw.c:387] gw_di read success
    [01-01 18:12:15 TUYA Debug][gw_intf.c:3455] gw_ctrl_init_stride from flash: 0.
    [01-01 18:12:15 TUYA Debug][gw_intf.c:3480] gw_ctrl_init_stride: version no changed.
    [01-01 18:12:15 TUYA Notice][gw_intf.c:3754] gw_cntl.gw_if.abi:0 input:0
    [01-01 18:12:15 TUYA Notice][gw_intf.c:3755] gw_cntl.gw_if.product_key:rg2urjcogbu14wci, input:rg2urjcogbu14wci
    [01-01 18:12:15 TUYA Notice][gw_intf.c:3756] gw_cntl.gw_if.tp:0, input:0
    [01-01 18:12:15 TUYA Debug][ws_db_gw.c:513] gw_ai read success
    [01-01 18:12:15 TUYA Debug][uni_network.c:273] unm_set_dns_region 2

    [01-01 18:12:15 TUYA Debug][iot_httpc.c:1242] cache dns [http://a.tuyaeu.com/d.json]<->[58267675]
    [01-01 18:12:15 TUYA Debug][iot_httpc.c:1252] cache dns [https://a3.tuyaeu.com/d.json]<->[314833289]
    [01-01 18:12:15 TUYA Debug][iot_httpc.c:1258] cache dns [m2.tuyaeu.com:1883]<->[597437044]
    [01-01 18:12:15 TUYA Debug][iot_httpc.c:1268] cache dns [m2.tuyaeu.com:8886]<->[597437044]
    [01-01 18:12:15 TUYA Debug][ws_db_dev.c:228] schema 000002zixe read success
    [01-01 18:12:15 TUYA Debug][gw_intf.c:4020] dev bfc8682d112f0a2066a6rp bind schema [{"mode":"rw","property":{"type":"bool"},"id":1,"type":"obj"},{"mode":"rw","property":{"type":"bool"},"id":7,"type":"obj"},{"mode":"rw","property":{"min":0,"max":86400,"sc[01-01 18:12:16 TUYA Debug][gw_intf.c:4423] Bind Dev Attach Success bfc8682d112f0a2066a6rp 1
    [01-01 18:12:16 TUYA Debug][gw_intf.c:3950] enter success_proc
    [01-01 18:12:16 TUYA Info][gw_mqc_cb.c:475] register mqc app callback
    [01-01 18:12:16 TUYA Debug][mqc_app.c:118] mq_pro:11 mqc_handler_cnt:3
    [01-01 18:12:16 TUYA Debug][mqc_app.c:118] mq_pro:22 mqc_handler_cnt:4
    [01-01 18:12:16 TUYA Debug][mqc_app.c:118] mq_pro:41 mqc_handler_cnt:5
    [01-01 18:12:16 TUYA Debug][mqc_app.c:118] mq_pro:100 mqc_handler_cnt:6
    [01-01 18:12:16 TUYA Debug][mqc_app.c:118] mq_pro:51 mqc_handler_cnt:7
    [01-01 18:12:16 TUYA Notice][tuya_bt_sdk.c:148] ty bt update product:rg2urjcogbu14wci 0
    [01-01 18:12:16 TUYA Debug][tuya_ble_api.c:152] update product_id type:0 rg2urjcogbu14wci 523e15a047ae3b9c KPkcZjoF5ZQblDhOmleZdgnCDxe83lM2
    [01-01 18:12:16 TUYA Debug][gw_intf.c:3267] --------------nc_tp:3, md:0
    [01-01 18:12:16 TUYA Debug][tuya_iot_wifi_api.c:479] register wifi network monitor. interval:1
    [01-01 18:12:16 TUYA Debug][app_agent.c:288] TUYA Mode, start TUYA thread to listen Lan
    [01-01 18:12:16 TUYA Debug][app_agent.c:318] cmmod register finish 1
    [01-01 18:12:16 TUYA Debug][gw_intf.c:977] gw_wsm stat:2
    [01-01 18:12:16 TUYA Notice][tuya_device.c:278] status_changed_cb is status:3
    [01-01 18:12:16 TUYA Notice][tuya_bt_sdk.c:157] ty bt update localkey
    [01-01 18:12:16 TUYA Debug][tuya_ble_api.c:162] update login key len:6
    [01-01 18:12:16 TUYA Info][mqc_app.c:215] mqc app start ...
    [01-01 18:12:16 TUYA Debug][mqc_app.c:296] MQTT Protocol URL:m2.tuyaeu.com:8886 Port:8886
    [01-01 18:12:16 TUYA Debug][mqc_app.c:319] TLS in not disable. disable mqtt time check
    [01-01 18:12:16 TUYA Debug][mqc_app.c:131] TLS Mode is NOT TLS_DISABLE:2 .set username = gwid
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:266] subcribe_topic:smart/device/in/bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:267] client_id:bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:268] user_name:bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:269] passwd:9da78c4eb100a69c
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:300] domain<0> m2.tuyaeu.com:8886 HAVE PORT
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:303] PARSE m2.tuyaeu.com:8886
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:331] wakeup_domain_tbl<0> m2.tuyaeu.com:1883 HAVE PORT
    [01-01 18:12:16 TUYA Debug][mqtt_client.c:334] PARSE m2.tuyaeu.com:1883
    [01-01 18:12:16 TUYA Debug][mqc_app.c:382] mqtt send topic:smart/device/out/bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][mqc_app.c:384] mqtt-media send topic:d/m/o/bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][tuya_svc_timer_task.c:150] read timer:{"lastFetchTime":0,fast_connect
    "cnt":0}
    [01-01 18:12:16 TUYA Debug][log_seq.c:462] [svc_timer_task] seq: 3,ldt:3,ls_stat:0, 1
    [01-[bk]tx_txdesc_flush
    bssid 30-b5-c2-5d-70-72
    security2cipher 2 2 16 16 security=5
    cipher2security 2 2 16 16
    enter low level!
    mac d4:a6:51:30:36:8a
    leave low level!
    0 low level!
    [01-01 18:12:16 TUYA Debug][mqc_app.c:118] mq_pro:15 mqc_handler_cnt:9
    [01-01 18:12:16 TUYA Debug][tuya_svc_upgrade.c:778] tuya svc upgrade active success!
    [01-01 18:12:16 TUYA Debug][svc_online_log.c:212] mqtt log topic init log/realtime/bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][svc_online_log.c:213] mqtt log topic init log/log_seq/bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][svc_online_log.c:214] mqtt log topic init log/runstat/bfc8682d112f0a2066a6rp
    [01-01 18:12:16 TUYA Debug][mqc_app.c:118] mq_pro:55 mqc_handler_cnt:10
    [01-01 18:12:16 TUYA Debug][svc_online_log.c:310] svc online log active success
    [01-01 18:12:16 TUYA Debug][astro_timer.c:122] update time delay 113s
    !!!!!!!!!!tuya_bt_reset_adv
    [01-01 01:00:01 TUYA Notice][tuya_ble_api.c:398] ble adv && resp changed
    [01-01 01:00:01 TUYA Debug][uni_thread.c:215] Thread:gapm_cmp_evt_handler opewk_th-0 Exec Start. Setration = 0x1, status =  to Running Status
    0x0[01-01 01:00:01 TUYA De d:lpc_task Exec Start.bug][uni_thread.c:215]  Set to Running Status
    Thread:lpc_task Exec St
    gapm_cmp_evt_handler art. Set to Running Statussid:MY_WIFI_NAME, 1
    ht in scan
    scan_start_req_handler
    o
    STACK Is
    [01-01 01:00:01 TUYAN1:00:01 TUYA Debug][ap Debug][app_agent.c:575p_agent.c:575] begint to] begint to execute __l execute __lpc_task
    blpc_task
    e create new d[01-01 01:00:01 TUYA DebUYA Debug][uni_thread.bug][uni_thread.c:215] c:215] Thread:mq_cntl_tThread:mq_cntl_task Exeask Exec Start. Set to Rc Start. Set to Runningunning Status
    ble_env- Status
    [01-01 01:00:0>:00:01 TUYA Debug][mqt1 TUYA Debug][mqtt_cliet_client.c:1271] __mq_cnt.c:1271] __mq_ctrl_tatrl_task start
    gapm_cmpsk start
    _evt_handler operation = 0x1b, status = 0x0
    CREATE DB SUCCESS
    [01-01 01:00:01 TUYA Debug][tuya_ble_api.c:267] rev ble event 3
    !!!!!!!!!!tuya_bt_reset_adv
    [01-01 01:00:01 TUYA Notice][tuya_ble_api.c:398] ble adv && resp changed
    !!!!!!!!!!tuya_before_netcfg_cb
    appm start advertising
    found scan rst rssi -49 > -50
    found scan rst rssi -51 < -50
    dis ht_support
    me_set_ps_disable:840 0 0 0 383793 874896
    sm_auth_send:1
    sm_auth_handler
    ht NOT in assoc req
    sm_assoc_rsp_handler
    rc_init: station_id=0 format_mod=0 pre_type=0 short_gi=392521 max_bw=875407
    rc_init: nss_max=0 mcs_max=0 r_idx_min=255 r_idx_max=392563 no_samples=875474
    __l2_packet_send: ret 0
    __l2_packet_send: ret 0
    sta_mgmt_add_key
    ctrl_port_hdl:1
    me_set_ps_disable:840 0 0 0 383793 874896

    configuring interface mlan (with DHCP client)
    new ie: 0 : 44 4c 49 4e 4b 5f 46 61 73 74 4e 65 74
    new ie: 1 : 82 84 8b 96 c 12 18 24
    new ie: 3 : b
    new ie: 30 : 1 0 0 f ac 4 1 0 0 f ac 4 1 0 0 f ac 2 0 0
    new ie: 2d : ef 11 1b ff ff 0 0 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 0 0 0

    [01-01 01:00:02 TUYA Debug][tuya_main.c:217] wifi netstat changed to:5  -->>
    [01-01 01:00:02 TUYA Debug][tuya_main.c:264] wifi netstat changed to:5  <<--
    [01-01 01:00:02 TUYA Debug][tuya_iot_wifi_api.c:447] wifi netstat changed to:5  -->>
    [01-01 01:00:02 TUYA Notice][tuya_device.c:442] wf_nw_status_cb,wifi_status:5
    [01-01 01:00:02 TUYA Debug][tuya_iot_wifi_api.c:450] wifi netstat changed to:5  <<--
    do td cur_t:261--last:idx:13,t:250 -- new:idx:14,t:262
    --0xc:08, shift_b:0, shift_g:0, X:2



    Log jest dość długi, ale zauważyłem dwie rzeczy
    1. jakimś cudem WB2S pamięta ustawione SSID/hasło mojej sieci WiFi, mimo iż wgrałem mu nowy wsad. Pewnie nie nadpisałem tych danych sieci, zresztą i tak to idzie przez UART bootloader
    2. testowa linijka którą dodałem do kodu C jest tutaj:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant


    Czyli jak na razie tylko https://github.com/tuya/tuya-iotos-embeded-sdk-wifi-ble-bk7231t działa, ale wydaje się być trochę ograniczone. Mimo to myślę, że może się to do czegoś przydać, albo przynajmniej do porównania procesu kompilacji w różnych SDK...

    Jeśli chce ktoś sprawdzić, to załączam tu firmware testowe które drukuje m. in dopisaną przeze mnie linijkę na UART "[01-01 18:12:15 TUYA Notice][tuya_device.c:262] Hello, is this really working? Let's compile and check!"
    template_d...Printf.zip Download (923.46 kB)


    AKTUALIZACJA.

    Próbowałem dopisać timer i również to działa. Oto mój kod i moja wersja device_init:
    Code: c
    Log in, to see the code

    Część kodu skopiowałem z przykładu blink led, teego tutaj:
    https://github.com/tuya/tuya-iotos-embeded-sd...bk7231t/bk7231t_os/beken378/app/led/app_led.c
    Oto rezultat:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
  • #25
    p.kaczmarek2
    Level 26  
    AKTUALIZACJA 2:
    Oto mój blink LED dla WB2S:


    Mój kod (dopisany do tuya_device.c):
    Code: c
    Log in, to see the code


    Załączam cały zmodyfikowany template_demo ztuya-iotos-embeded-sdk-wifi-ble-bk7231t, który kompiluje poprzez Cygwin na Windowsie.

    Mój kod migania LED jest w apps\template_demo\src\tuya_device.c, natomiast wytworzony wsad jest w apps\template_demo\output\1.0.0.

    Swoją drogą, czerwony LED jest na tym samym pinie co przekaźnik tu nie działa bo wymaga on 12V a ja zasilam płytkę z 5V z USB. Większość przekaźników w tego typu modułach jest na 5V, ale tu akurat jest taki na 12V...
    template_d...210927.zip Download (9.83 MB)




    AKTUALIZACJA 3.
    Również udało mi sie uruchomić protokół UDP. W repozytorium są też do tego przykłady.

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Jak widać powyżej
    1. na WB2S uruchomiony jest serwer UDP na porcie 55000,
    2. klient C# wysyła poprzez UDP tekst "Is anybody there?"
    3. WB2S odbiera ten tekst i drukuje go na UART
    4. WB2S odsyła wiadomość o treści "Hello reply 2",
    5. Klient C# odbiera odpowiedź od WB2S i drukuje na konsole

    Poniżej użyty kod C# klienta UDP.
    Code: csharp
    Log in, to see the code


    oraz kod serwera UDP na WB2S:
    Code: c
    Log in, to see the code


    Ale muszę przyznać, że poszczęściło mi się z tym, że miałem początkowo WB2S podłączony do mojej sieci WiFi. Nie pisałem kodu na podłączanie go, podłączyłem go przed zmianą firmware (przez apkę) a mimo to moduł po zmianie firmware to pamięta.
    Router widzi go jako "wlan0".

    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant[/syntax]
  • #26
    p.kaczmarek2
    Level 26  
    AKTUALIZACJA 4 - WB2S MQTT wysyłka (tzw. "publish") zdaje się działać

    Udało mi się uruchomić MQTT - a przynajmniej częsciowo.
    Poniżej zrzuty ekranu z Wiresharka:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Wireshark jest w stanie rozpoznać pakiety MQTT i odkodować ich zawartość:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Jak widać, WB2S dokonuje "publish" MQTT o temacie "pub_topic" i wartości "PubSubHubLubJub".

    Poniżej kod który wykonuje "publish" MQTT ze zrzutów ekranu:
    Code: c
    Log in, to see the code


    Wywołuje go z timera (tego od migania LED wspomnianego wcześniej):
    Code: c
    Log in, to see the code

    Analogicznie można obsługiwać np. wysyłanie informacji o ruchu wykrytym przez czujnik PIR lub np. o pomiarze temperatury.

    Oczywiscie, przed wykonaniem publish trzeba zainicjować klienta MQTT. Oto mój kod inicjializacji, ale może być błędny, chyba coś nie działa z autoryzacją:
    Code: c
    Log in, to see the code


    Dodatkowo trzeba przygotować mqtt_connect_client_info_t, dodać cała biblioteką MQTT do linkera i naprawić duplikat nazwy (funkcji disconnect). Na razie nie opisuję szczegółowo już, zrobię to w osobnym temacie.

    Jednak polecam zapoznać się z Readme biblioteki od MQTT:
    mqtt_cli..t.txt Download (5.24 kB)
    Jak widać, użyłem tutaj biblioteki MQTT z biblioteki lwip-2.0.2. Warto zwrócić uwagę na to, że w projekcie jest używana jeszcze druga biblioteka MQTT, która chyba tylko jest w formie prekompilowanej (w pliku .a), więc trzeba ręcznie dodać MQTT.c do listy Make, uruchomić odpowiednie #define i zmienić nazwę mqtt_disconnect na mqtt_disconnect_my2 (gdyż ta nazwa oryginalna konfliktuje z drugą biblioteką...), tak jak na zrzutach ekranu:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Wkrótce spróbuję użyć tego MQTT do komunikacji z Home Assistant. Jak na razie testuję go z serwerem TCP napisanym w C#, ze względu na brak czasu:
    Code: csharp
    Log in, to see the code


    PS: W ogóle to biblioteka lwip-2.0.3 też jest dostępna w SDK XR809 od XRadioTech, więc jeśli uda mi się uruchomić jej moduł MQTT, to będę w stanie dodać obsługę MQTT zarówno dla mojego wsadu od XR809 jak i dla tego od WB2S


    AKTUALIZACJA 5 (finalna) - udało mi się uruchomić MQTT na WB2S z Home Assistant

    Zajęło to dłużej niż myślałem, ale były pewne nieprzewidziane problemy...
    Okazało się, że biblioteka lwip-2.0.2 nie wysyła informacji o użytkowniku/haśle MQTT, mimo iż ma na to pola w mqtt_connect_client_info_t !!

    Oba pola są w strukturze mqtt_connect_client_info_t :
    Code: c
    Log in, to see the code

    Kod inicjalizacji (który na początku nie działał):
    Code: c
    Log in, to see the code


    Ale mimo to zawartość tych pól nie jest używana, nie trafia do pakietu. Udało mi się to wykryć porównując pakiety z MQTT Explorer (przydatne narzędzie) i te z WB2S. Na zrzutach ekranu widać różnicę:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    (hasło i użytkownik na zrzucie ekranu są przykładowe)
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Wersja z WB2S nie posiada pól z nazwą użytktownika i hasłem!
    To dlatego, że nie są one obsługiwane w mqtt.c:
    Code: c
    Log in, to see the code

    Te flagi:
    MQTT_CONNECT_FLAG_USERNAME = 1 << 7,
    MQTT_CONNECT_FLAG_PASSWORD = 1 << 6,
    nie są wcale ustawiane!

    więc dodałem ich wsparcie:
    Code: c
    Log in, to see the code


    Następnie uznałem, że spróbuję zasymulować działanie termometru na MQTT, takiego co raportuje wyniki pomiarów w formacie JSON do Home Assistant:
    Oto jak generuję przykładowe dane o temperaturze z MQTT:
    Code: c
    Log in, to see the code

    Funkcję sinus dodałem tu tylko by graf temperatury wyglądał nieco barrdziej ciekawie.

    Ostatecznie dodałem to urządzenie do konfiguracji YAML z HA i gotowe:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
    Home Assistant widzi pakiety MQTT od WB2S!

    Swoją drogą zauważyłem dwie dziwne rzeczy:
    1. Home Assistant nie podaje żadnych informacji w logach gdy odbiera pakiet MQTT bez informacji o użytkowniku/haśle (nawet w trybie debug/verbose).
    2. Nawet jedno dodatkowe bajtowe zero w złym miejscu (na końcu pola publish) może uniemożliwić Home Assistantowi odczyt pakietu MQTT
  • #27
    tlessosk8
    Level 1  
    Hej, czy myślałeś o wprowadzeniu go do repozytorium github, żebym mógł jakoś flashować to do mojego XR809. Jeśli potrzebujesz pomocy i jeśli mogę pomóc, cieszę się, że mogę :) .
  • #28
    p.kaczmarek2
    Level 26  
    Witam @tlessosk8 , miło widzieć tu coraz więcej ludzi.
    Przepraszamy za spóźnioną odpowiedź, ale nie martw się, projekt na pewno NIE jest martwy!

    Byłem zajęty robieniem tego samego dla modułu WB2S, oto wersja polska, wkrótce wersja angielska:
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=19736807#19736807

    Jak na twoje pytanie, postaram się wkrótce zrobić github repo.
    PS: Myślę, że moje obecne doświadczenie WB2S z MQTT można łatwo zastosować w XR809, więc wkrótce pojawi się również obsługa MQTT dla mojego oprogramowania XR!
  • #29
    strigona
    Level 2  
    Hej, dopiero co natknąłem się na to forum, szukając informacji na temat SOC BK7231T, czyli mózgu Prime Wire Smart Outlets (CCWFIO232PK). Czy myślisz, że będzie możliwe zbudowanie oprogramowania sprzętowego kompatybilnego z Home Assistant dla BK7231T?

    Jestem programistą, ale przede wszystkim na poziomie sieci/systemów i mam duże doświadczenie na urządzeniach wbudowanych. Inteligentne wtyczki, które posiadam, są łatwe do odkręcenia (3 śruby), a płytka PCB jest dość dostępna, chociaż nie sądzę, że będę się dobrze bawić lutowaniem na przewodach:
    Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant

    Krótko mówiąc, czy mogę coś zrobić, aby pomóc w rozwoju?
  • #30
    p.kaczmarek2
    Level 26  
    Witam @strigona, miło cię widzieć tutaj na Elektrodzie.

    Myślę, że jest duża szansa na wsparcie CCWFIO232PK w przyszłości. Zależy to głównie od obecności bootloadera w układzie BK7231T.
    Jeśli obecny bootloader jest podobny do jednego użytego tutaj https://www.elektroda.pl/rtvforum/topic3850712.html , to większość podstawowej pracy jest już wykonana i z aktualnym SDK i moimi przykładami. Możesz łatwo zmodyfikować moje demo MQTT, aby uzyskać podstawową obsługę przełącznika MQTT/Home Assistant, ale obecnie większość różnych prac jest wykonywana głównie przez symbole zastępcze, na przykład kredyty Wi-Fi są zakodowane na sztywno.
    Jeśli brakuje bootloadera lub jest inny , wtedy najprawdopodobniej musiałbyś użyć ST-link z bk7231_alios_sdk, ale jeszcze tego nie próbowałem. Lub po prostu użyj ST-link, aby odczytać bootloader chipów WB2S i umieść go w swoim CCWFIO232PK, a następnie skorzystaj z mojego samouczka WB2S. Również tego nie próbowałem. Najpierw muszę zdobyć moduł, który pokazujesz.

    Pierwszą rzeczą jaką proponuję zrobić w tym konkretnym przypadku jest sprawdzenie czy BKwriter 1.60 jest w stanie odczytać flash z UART-a. Tak jak opisałem tutaj:
    https://www.elektroda.pl/rtvforum/topic3850712.html
    wystarczy użyć przycisku ,,Odczytaj flash".
    To pozwoli nam określić, czy twój układ ma ten sam bootloader, co moduł WB2S.

    UWAGA: nie zniechęcaj się, widząc przeczytaną zawartość oprogramowania układowego BK wyglądającą jak losowe śmieci binarne. Wygląda na to, że cały plik .bin jest szyfrowany. To dobrze, dzięki czemu cred WiFi nie są już zwykłym tekstem. Bo wiecie - BYŁY one zwykłym tekstem na modułach ESP i można było je łatwo odczytać z ich pamięci...

    strigona wrote:
    Krótko mówiąc, czy mogę coś zrobić, aby pomóc w rozwoju?

    Stworzę listę dla wszystkich czytelników.

    Jeśli chcesz pomóc:
    1. Zgłoś tutaj (a najlepiej w temacie WB2S, bo to XR809) wszystkie urządzenia WB2S/BK7231T i im podobne (z informacją gdzie je kupić, potrzebuję do testów)
    2. Możesz spróbować sam postępując zgodnie z moimi krokami tutaj https://www.elektroda.pl/rtvforum/topic3850712.html (temat wkrótce zostanie przetłumaczony na język angielski) i zgłoś tutaj wyniki
    3. Pamiętaj, że możesz mnie wesprzeć na paypal https://paypal.me/openshwprojects, abym mógł kupić więcej urządzeń do testów. Będę wspierać naprawdę wielu z nich.
    4. Niedługo stworzę również repozytorium github, w którym będzie można tworzyć pull requesty i łatki. W tej chwili będziesz musiał poczekać, również muszę zapoznać się z bardziej zaawansowanymi koncepcjami git, w przeszłości używałem głównie SVN.
    5. Oczywiście samo udostępnienie tego wątku w miejscu, w którym więcej osób może go zobaczyć, również pomoże.