logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zbudować oprogramowanie układowe OpenBeken BK7238 z obsługą MQTT przez TLS dla Tuya S06 Pro

deeekos 29 Gru 2025 02:04 1125 3
REKLAMA
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • #1 21792474
    deeekos
    Poziom 3  
    Posty: 6
    Chciałbym prosić o pomoc w zbudowaniu OpenBeken do korzystania z MQTT przez TLS.

    Moje urządzenie to najnowszy czujnik temperatury / wilgotności / podczerwieni Tuya S06 Pro.
    Urządzenie posiada BK7238.

    Moja obecna pozycja:
    - Sflashowałem moje urządzenie kilkoma najnowszymi wersjami oprogramowania układowego (do 1.18.232).
    - Podłączyłem urządzenie do lokalnego serwera MQTT i Home Assistant.
    - Mogę komunikować się z urządzeniem przez MQTT i HTTP.

    Chcę używać urządzenia w lokalizacji poza moją lokalną siecią LAN.

    Najlepszym rozwiązaniem jest skorzystanie z:
    - Serwera MQTT innej firmy (np. HiveMQ) lub
    - Webhook Nabu Casa (skonfigurowany za pomocą odpowiedniego CMD).

    Niestety, każde z tych rozwiązań wymaga obsługi TLS.

    Domyślna kompilacja BK7238 nie wydaje się obsługiwać MQTT przez TLS od razu po wyjęciu z pudełka.
    Widziałem odniesienia do faktu, że jest to możliwe za pośrednictwem postów na forum i komentarzy w /src/user_mbedtls_config.h.
    Oznacza to stworzenie własnej wersji firmware.
    Wiem, że mogę to zrobić za pośrednictwem GitHub runner, ale zdecydowałem się spróbować uruchomić to lokalnie dla uproszczenia.
    Bardzo dobrze radzę sobie z wieloma narzędziami (np. Docker).

    Do tej pory
    - Zainstalowałem lokalne środowisko kompilacji Docker (zgodnie z GitHub).
    - Pomyślnie zbudowałem i przeprowadziłem udaną aktualizację OTA mojego własnego lokalnie zbudowanego oprogramowania układowego.
    - Przetestowałem, że to oprogramowanie działa na S06.

    Nie udało mi się jednak zbudować wersji firmware'u wykorzystującej TLS.

    Zacząłem używać polecenia build:

    
       docker run -it -v  "$(pwd)/..":/OpenBK7231T_App --env TARGET_SDKS="OpenBK7238" openbk_build
    


    Aby następnie dodać komponent TLS, dodałem opcję: --env MAKEFLAGS="-DCFG_USE_MBEDTLS"
    Aby wydać pełne polecenie kompilacji:

    
        docker run -it -v  "$(pwd)/..":/OpenBK7231T_App --env TARGET_SDKS="OpenBK7238" --env MAKEFLAGS="-DCFG_USE_MBEDTLS" openbk_build
    


    Kompilacja zakończy się pomyślnie.

    Jednak pliki .bin i .rbl mają ten sam rozmiar, niezależnie od tego, czy używam *CFG_USE_MBEDTLS*, czy nie - spodziewałem się większego pliku binarnego z TLS.
    Po zainstalowaniu tego oprogramowania układowego za pomocą OTA, plik dziennika OpenBeken WebApp pokazuje, co następuje:

    
        Info:MQTT:mqtt_userName <removed>
        mqtt_pass <removed>
        mqtt_clientID obk8C428848
        mqtt_host 192.168.7.205:8883
        Info:MAIN:Time 42, idle 120724/s, free 107896, MQTT 0(3), bWifi 1, secondsWithNoPing -1, socks 2/24 
        Info:MQTT:mqtt_connection_cb: Disconnected, reason: 256(Disconnected)
        Info:MAIN:Time 43, idle 117295/s, free 108280, MQTT 0(3), bWifi 1, secondsWithNoPing -1, socks 2/24 
    


    Kiedy patrzę na ruch wysyłany do mojego serwera MQTT, nadal widzę próbę połączenia z portem 8883 z niezaszyfrowaną nazwą użytkownika i hasłem.
    Ponadto nie widzę żadnych opcji w konfiguracji MQTT, aby włączyć MQTT przez TLS.
    Dlatego jestem dość pewny, że oprogramowanie układowe, które zbudowałem, nie wykorzystuje TLS.

    Czy ktoś może mi pomóc zrozumieć, jak zbudować oprogramowanie układowe, które obejmuje obsługę MQTT przez TLS?
    AI: Czy wprowadziłeś jakieś zmiany w innych plikach konfiguracyjnych, takich jak user_mbedtls_config.h lub CMakeLists.txt, aby jawnie włączyć obsługę mbedTLS lub TLS w swojej kompilacji, czy ustawiłeś tylko zmienną środowiskową MAKEFLAGS?
    51210453f27281f0740f385d3b36719ade38c090
    AI: Czy podczas procesu kompilacji zauważyłeś jakieś dane wyjściowe, ostrzeżenia lub błędy związane z obsługą mbedTLS lub TLS, które mogłyby wskazywać, czy jest ona uwzględniana, czy pomijana w kompilacji oprogramowania układowego?
    Nie; mój przegląd kodu wykazał, że #define CFG_USE_MBEDTLS wydaje się być właściwą drogą.
  • REKLAMA
  • #2 21794346
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14631
    Pomógł: 655
    Ocena: 12647
    Myślę, że potrzebne są małe zmiany w pliku makefile, ponieważ ścieżka BK7238 może go nie zawierać.
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/Makefile
    Szukaj MBEDTLS

    Fragment pliku makefile z komendami budowania i sprawdzania obecności MBEDTLS
    Nie jest dołączony do bk7238
    Fragment pliku Makefile z poleceniami budowania dla wariantu BK7238

    @insmod czy wiesz jak dodać to do ścieżki BK7238? Myślę, że BK7238 nie ma automatycznego wyszukiwania plików, więc musiałby również zawierać pliki makefile. A może MBEDTLS jest w beken_Freertos_sdk?
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #4 21798024
    deeekos
    Poziom 3  
    Posty: 6
    >>21794367

    Zrobiłem kolejny lokalny build używając: --env TARGET_SDKS="OpenBK7231T,OpenBK7238"
    Dołączyłem również --env MAKEFLAGS="-DCFG_USE_MBEDTLS" - ale z tego, co przeczytałem powyżej, może to nie być potrzebne, ponieważ mbedtls jest domyślnie włączone?
    Zakładam, że mogą one być używane do Wi-Fi?

    Następnie przyjrzałem się kilku plikom .elf dla 7231 i 7238.
    Widzę, że biblioteki mbedtls są zawarte w produkowanym oprogramowaniu układowym.
    Nie widzę jednak nigdzie w jaki sposób są one wywoływane przez klienta MQTT - choć nie jestem ekspertem w tej dziedzinie.

    Czy można to włączyć, ustawiając flagi za pośrednictwem interfejsu użytkownika - czy też wymagane są zmiany w kodzie?

    Bardzo dziękuję.
REKLAMA