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

Tuya CB3S BK7231N Przywrócenie silnika kurtyny z OpenBeken, MQTT i asystentem domowym

maxotkin31 31 Sty 2026 18:51 834 0
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • Pomocny post
    #1 21825382
    maxotkin31
    Poziom 1  
    Posty: 1
    Pomógł: 1
    Ocena: 1
    Jak ożywiłem silnik karnisza Tuya po spaleniu CB3S: OpenBeken + Home Assistant + wirtualna kurtyna

    Moduł CB3S z kablami UART: czerwony, czarny, zielony i biały, przylutowany do pinów Moduł CB3S Tuya (BK7231N) na drewnianej powierzchni, widoczny kod QR i oznaczenia Płytka CB3S z podłączonym przewodem na tle czarnej powierzchni. Płytka CB3S z podłączonymi przewodami do programowania przez USB-UART


    Miałem problem: płyta Wi-Fi w moim silniku kurtyny (CB3S / BK7231N) spaliła się. Nie miałem oryginalnej kopii zapasowej, a flashowanie zrzutu z innego silnika spowodowało konflikt w Tuya (jedno urządzenie łączy się, podczas gdy drugie spada, a następnie odwrotnie). W końcu zbudowałem odpowiednie rozwiązanie lokalne: OpenBeken + MQTT + Home Assistant i wszystko działa bez chmury.

    Czego potrzebujesz

    Płytka CB3S / BK7231N

    USB-UART (użyłem CP2102, zasilanie 3,3 V)

    BK7231Flasher

    Oprogramowanie OpenBeken dla BK7231N

    Asystent domowy + broker Mosquitto

    Skąd wziąć płytę CB3S

    Płytkę Tuya CB3S (BK7231N) można łatwo kupić na AliExpress - tak właśnie zrobiłem. Kupiłem jedną заранее "jako zapasową" i siedziała nieużywana przez długi czas, aż oryginalna płytka w silniku się przepaliła.

    1) Flash CB3S z OpenBeken

    Do flashowania CB3S potrzebny jest zwykły adapter USB-UART (ja użyłem CP2102).

    Wymagane przewody

    Zasadniczo potrzebne są tylko 4 linie:

    GND ↔ GND

    3.3V ↔ VCC (tylko 3,3V!)

    TX (adapter) ↔ RX (karta)

    RX (adapter) ↔ TX (karta)

    ⚠️ Ważne: zasilanie musi być ściśle 3,3V. NIE podawaj 5V - możesz zabić moduł.

    Wejście w tryb flash

    Zazwyczaj BK7231Flasher pokazuje coś w stylu "restart urządzenia / cykl zasilania".
    Ponieważ miałem dostępne tylko zasilanie + TX/RX, po prostu:

    odłączyłem zasilanie na sekundę

    i ponownie podłączyłem zasilanie, gdy program czekał na ponowne uruchomienie.

    Wskazówki

    Jeśli nie chce się połączyć, najpierw zamień TX/RX.

    Upewnij się, że adapter i płyta mają wspólne GND.

    Jeśli moduł ciągle się restartuje, użyj stabilnego zasilania 3,3 V, a nie słabego regulatora 3,3 V w niektórych adapterach UART (zależy to od adaptera).

    Flashuj moduł CB3S (BK7231N) za pomocą BK7231Flasher.

    ważne: w najnowszych wersjach BK7231Flasher, OpenBeken jest wbudowany (są gotowe obrazy/firmware wewnątrz programu), więc zazwyczaj nie trzeba szukać i pobierać oddzielnego pliku .bin - wystarczy wybrać OpenBeken w interfejsie użytkownika i flashować.

    2) Konfiguracja kanałów w OpenBeken

    Otwórz interfejs użytkownika urządzenia:

    Launch Web Application → Config → Channel Types

    Ustaw:

    Kanał 0 - Domyślny

    Kanał 1 - OpenStopClose

    Kanał 2 - Ściemniacz

    Kanał 3 - Tylko do odczytu

    Uwaga: można również ustawić typy kanałów poprzez autoexec.bat (poniżej). Pozostawiłem to zarówno w interfejsie użytkownika, jak i w autoexec - łatwiejsze do odtworzenia.

    3) Utwórz autoexec.bat (TuyaMCU + dpID)

    Otwórz:

    FileSystem → Create File → autoexec.bat

    Wklej:

    # Inicjalizacja komunikacji ze sterownikiem silnika
    startDriver TuyaMCU
    baud 9600

    # dpID 1: Sterowanie główne (Enum)
    # 0 - Open, 1 - Stop, 2 - Close
    setChannelType 1 OpenStopClose
    linkTuyaMCUOutputToChannel 1 enum 1

    # dpID 2: Ustaw pozycję (wartość)
    # Wyślij tutaj wartość procentową (0-100)
    setChannelType 2 Dimmer
    linkTuyaMCUOutputToChannel 2 val 2

    # dpID 3: Aktualna pozycja (wartość)
    # Silnik zgłasza swoją aktualną pozycję (0-100)
    setChannelType 3 Tylko do odczytu
    linkTuyaMCUOutputToChannel 3 val 3


    Zapisz plik i uruchom ponownie moduł:

    Index → Restart (czerwony przycisk)

    Następnie w menu głównym OpenBeken powinieneś zobaczyć 3-pozycyjny kontroler (Otwórz/Zatrzymaj/Zamknij), suwak (Kanał 2) i wyświetlacz aktualnej pozycji (Kanał 3).

    4) Konfiguracja MQTT w OpenBeken

    Config → Configure MQTT

    Wypełnij dane Mosquitto (IP Home Assistant, nazwa użytkownika/hasło). Ty może znaleźć hasło w HA:

    Mosquitto broker → Konfiguracja / Loginy

    Pole klucza:

    Temat klienta (Temat bazowy): curtain_1

    (Możesz nadać mu inną nazwę, ale użyj tej samej nazwy w dalszej części kodu)

    Następnie Home Assistant utworzy encje z OpenBeken, ale zwykle nie jest to jeszcze "osłona kurtyny" - tylko oddzielne selektory / czujniki. W porządku - naprawimy to w następnej kolejności.

    5) Utwórz "wirtualną zasłonę" (osłonę) w Home Assistant

    Otwórz:

    /config/configuration.yaml

    ⚠️ Ważne: musi istnieć tylko jeden blok template:. Jeśli masz już jeden, nie twórz drugiego - dodaj okładkę wewnątrz istniejącego bloku.

    Wklej (jest to wersja sformatowana dla witryn, które łamią wcięcia YAML; zamień .. na spacje później):

    template:
    ..- cover:
    ....- name: "Kurtyna północna (wirtualna)"
    ......unique_id: curtain_virtual

    ......# Bieżąca pozycja (0-100) z czujnika, odwrócona
    ......position: "{{ 100 - (states('sensor.curtain_3') | int(0)) }}"

    ......open_cover:
    ........- usługa: mqtt.publish
    ..........data:
    ............topic: "curtain_1/1/set"
    ............payload: "0"

    ......stop_cover:
    ........- usługa: mqtt.publish
    ..........data:
    ............topic: "curtain_1/1/set"
    ............payload: "1"

    ......close_cover:
    ........- usługa: mqtt.publish
    ..........data:
    ............topic: "curtain_1/1/set"
    ............payload: "2"

    ......# Suwak pozycji: wyślij % do OpenBeken przez MQTT do kanału 2
    ......set_cover_position:
    ........- usługa: mqtt.publish
    ..........data:
    ............topic: "curtain_1/2/set"
    ............payload: "{{ 100 - position }}"
    ............retain: false
    ............qos: 0


    Jak czytać:

    .. = 2 spacje

    .... = 4 spacje

    ...... = 6 spacji
    i tak dalej.

    Przed wklejeniem do Home Assistant, po prostu zamień każde .. na dwie normalne spacje (Znajdź/Zamień w dowolnym edytorze).

    Uruchom ponownie Home Assistant. Pojawi się nowa jednostka, np:

    cover.north_curtain_virtual (dokładna nazwa zależy od wybranej nazwy).

    6) Jeśli kierunek jest odwrócony

    Istnieją trzy niezależne "inwersje" - zmieniaj je po kolei (nie zmieniaj wszystkiego naraz):

    A) Tylko kierunek wyświetlania (odwrócony suwak HA)

    Inwersja jest wykonywana w pozycji::

    Brak inwersji:

    position: "{{ states('sensor.curtain_3') | int(0) }}"


    Odwrócone (jak w przykładzie):

    position: "{{ 100 - (states('sensor.curtain_3') | int(0)) }}"

    B) Suwak przesuwa kurtynę w niewłaściwą stronę

    Zmień ładunek w set_cover_position:

    Brak inwersji:

    payload: "{{ position }}"


    Odwrócone:

    payload: "{{ 100 - position }}"

    C) Zamiana otwarcia/zamknięcia

    Zamiana ładunku "0" i "2" w open_cover i close_cover.

    7) Wynik

    Na koniec:

    silnik działa lokalnie na OpenBeken

    sterowanie w HA jest właściwą jednostką pokrywy z suwakiem + przyciskami

    możesz później wystawić go na Yandex Alice, budować automatyzacje, harmonogramy, czujniki itp.

    Alternatywa: ESP8266 / ESPHome

    Teoretycznie (i w praktyce) zamiast CB3S można w pełni przejść na ESP8266/ESPHome i sterować silnikiem za pomocą własnego kontrolera. Taka opcja istnieje i wiele osób ją stosuje.

    Próbowałem wcześniej ESP8266 + ESPHome z komponentem TuyaMCU. Ale z tym konkretnym silnikiem nie działało to poprawnie: albo TuyaMCU w ESPHome nie mógł poprawnie sterować silnikiem, albo nie mogłem dowiedzieć się, które parametry i dpID są wymagane dla protokołu tego urządzenia.

    Możliwe jest również, że sterownik TuyaMCU w OpenBeken jest lepiej zaimplementowany / dostrojony do takich urządzeń: natychmiast odebrał komunikację UART (9600) i zarówno raportowanie pozycji, jak i polecenia działały poprawnie.

    Dlatego początkowo wybrałem drogę "najbliższą fabryce" - używając oryginalnego CB3S. A kiedy już działał na OpenBeken i można było nim sterować z Home Assistant bez chmury, nie wróciłem do ESP8266: oznaczałoby to więcej lutowania, debugowania protokołów i czasu.

    W skrócie: jeśli działa - nie ruszaj go 😄
REKLAMA