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

Modyfikacja firmware przełącznika kurtyny Wi-Fi Currysmarter Gen6

DreamWarrior2412 05 Kwi 2024 15:45 2163 1
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • #1 21033819
    DreamWarrior2412
    Poziom 3  
    Posty: 14
    Pomógł: 1
    Ocena: 3
    Przełącznik Currysmarter Gen6 Wifi Courtain to modułowy inteligentny przełącznik kurtyny/przesłony 55*55mm. Dostępne są 2 ramki ze szkła, a Currysmarter ma w swoim programie inne przełączniki. Właściwie mógłbym go osadzić w ramach Systemu Gira 55.

    Przełącznik kurtyny Currysmarter Gen6 widoczny z przodu i z tyłu, wraz z ramką montażową.
    Biały szklany panel dotykowy przełącznika Currysmarter Gen6 Wifi Courtain z przyciskami góra/stop/dół.
    Tył modułu sterującego Currysmarter z oznaczeniami technicznymi. Widok z boku modułowego przełącznika kurtyny Currysmarter Gen6 z białą szklaną ramką i czterema śrubkami do montażu. Biały moduł z kwadratową ramką zamocowany do powierzchni. Biały szklany panel dotykowy inteligentnego przełącznika Currysmarter. Tył przełącznika do rolet Wi-Fi Currysmarter z modelami W01 i T01

    Posiada szklaną ramę/pokrywę przełącznika z panelami dotykowymi do obsługi funkcji góra/stop/dół. Dostępny jest w kolorze czarnym i białym. Konstrukcja modułowa oznacza w tym przypadku moduł sterujący zawierający moduł CBU do inteligentnej komunikacji oraz moduł mocy, do którego można podłączyć moduł sterujący. W swoim sklepie sprzedają każdą część modułu osobno. Na Amazon znajdziesz cały przełącznik w opakowaniach jedno-, dwu- i czteroczęściowych - każdy z różnymi rabatami, a czasem nawet specjalnymi rabatami, dzięki czemu otrzymasz 4 przełączniki za mniej niż 100 EUR. Znacznie tańszy niż VestaMatic RollTec Pro G/S, który obecnie kosztuje 100 EUR za sztukę :-) - to jeden z powodów, dla których je ciągle zmieniam, chociaż każdy Currysmarter jest bardziej skomplikowany pod względem czasu inwestycji w wycinanie chmur, niż się faktycznie spodziewano, ponieważ jedyną opcją wydaje się całkowite wylutowanie CBU z modułu sterującego. Próbowałem wyłączyć układ MCU CMS79FT738, ale to prawie masakra i może zakończyć się zniszczeniem tej części modułu. Aby umożliwić Ci udział w moim doświadczeniu, abyś nie musiał tego robić - próbowałem odłączyć 3V VCC od MCU... Nie zadziałało, MCU w jakiś sposób ma wystarczającą moc. Odłączyłem PIN RX1 - niepowodzenie... Nadal MCU zakłócał komunikację. W końcu odciąłem PIN RX1 i mogłem sflashować MCU bez wylutowywania modułu. Miałem szczęście - przy odrobinie lutowania i kilku przewodach mogłem ponownie bezpośrednio podłączyć moduły CBU TX1/RX1 do pinów MCU TX1/RX1 i ponownie przylutować 3V VCC. Moduł żyje i nadal działa... Chociaż nie mogę tego nikomu polecić. Lepszym kierunkiem jest wylutowanie CBU lub tylko pinów MCU TX1/RX1. Tak, więcej pracy, ale o wiele łatwiej niż wcześniej oczekiwano, jeśli chodzi o proste wylutowanie TX1 i RX1 w MCU i ponowne lutowanie obu po flashowaniu...

    Oto rozbiórka modułu sterującego W01:
    Oddziel moduł sterujący od modułu mocy (po prostu wyciągając go za pomocą przyssawki z opakowania)

    Odwróć go i odkręć 6 śrubek, wyjmij płytkę PCB - uważaj, aby nie poluzować jej części (np. gumki do centrowania diody LED). W moim przypadku musiałem lekko nacisnąć czarne złącze i użyć kontrolowanej siły, aby je wyjąć, ponieważ białe plastikowe pudełko i płytka drukowana są dość ciasno zaprojektowane...

    Zbliżenie na płytkę PCB Currysmarter Gen6 z widocznymi komponentami elektronicznymi. Zbliżenie płyty drukowanej modułu sterującego z widocznymi komponentami elektronicznymi. Zielona płytka drukowana z widocznymi ścieżkami i złączem na górze.

    Można to zrobić na 3 sposoby — najpierw należy przeciąć MCU TX1 (pin 10) i RX1 (pin 9), a następnie naprawić to, podłączając przewody CBU TX do MCU RX i CBU RX do MCU TX. Działa, ale naprawdę wygląda jak połatany lub bardziej jak masakra.
    Aby wylutować CBU skorzystaj ze wskazówek z filmu YouTube z kanału Elektroda.com: [youtube]https://www.youtube.com/watch?v=fSbeKwCCMHM [/youtube]
    Aby po prostu odłączyć MCU RX1 i TX1 podczas flashowania, skorzystaj ze wskazówek z kanału Mr. Solderfix: [youtube]https://www.youtube.com/watch?v=U_g_yxLQeMg [/youtube]
    Właściwie postępuję metodą pana Solderfixa - jest to dla mnie o wiele łatwiejsze niż wylutowywanie modułu CBU. Opieram się na doświadczeniu, które zdobyłem podczas wycinania i naprawiania połączeń oraz prób wylutowania modułu CBU.
    Przed flashowaniem sprawdź, czy MCU i CBU naprawdę nie są podłączone do swoich TX1/RX1 - w przeciwnym razie odczyt i zapis nie powiedzą się, a może nawet pozostawią moduł w stanie bezużytecznym. Podłączone następnie GND (Pin 13), 3V3 (Pin 14), TX1 (Pin 15), RX1 (Pin 16) do urządzenia USB TTL. CEN jest na pinie 18. Jeśli zgubisz jedno z pól lutowniczych TX1/RX1 MCU - nie martw się, po prostu podłącz je bezpośrednio do MCU... Może się tak zdarzyć, ponieważ płytka PCB jest cienka, pola lutownicze są bardzo wrażliwe na ciepło, miejsce do pracy dość małe i pin można wylutować tylko raz...
    Moduł CBU jest opisany tutaj ( https://developer.tuya.com/en/docs/iot/cbu-module-datasheet?id=Ka07pykl5dk4u )
    Układ MCU opisano tutaj (https://www.mcu.com.cn/uploads/img1/tupian//%E6%89%8B%E5%86%8C%E4%B8%8B%E8%BD%BD/ CMS79F73x_User_Manual_V1.7%20.pdf )

    A oto kilka zdjęć Power Modul T01 (właściwie nie musisz otwierać tej części, więc tylko w celach informacyjnych i ponieważ nie musisz go otwierać, aby zobaczyć wnętrze ;-) ):

    Zbliżenie płytki drukowanej modułu Currysmarter z widocznymi komponentami elektronicznymi. Zbliżenie płytki drukowanej modułu z elementami elektronicznymi.

    Główne funkcje/identyfikatory DPID MCU były łatwe do znalezienia, ale przełącznik ma jakąś ukrytą funkcję używaną do autokalibracji. Aby to znaleźć, przechwyciłem komunikację za pomocą Realterm i przekazałem przechwycone dane do analizatora MCU Tuya firmy Elektroda - voila DPID 3 jest do tego używany i wysłanie wyliczenia 0 rozpoczyna autokalibrację, podczas gdy 1 ją zatrzymuje (więc 1 może faktycznie oznacza skalibrowane urządzenie ...).

    Myślę, że nie muszę publikować danych przechwytywania MCU - wszystko jest wyzwalane w rejestrowaniu MCU i można je znaleźć w pliku autoexec.bat poniżej. Przełącznik ma możliwość obniżenia mocy diody LED z wysokiego na niski lub wyłączony - ale tylko poprzez dotknięcie przycisku Pauza/Stop na samym przełączniku. Nie znalazłem sposobu, aby to w jakiś sposób zautomatyzować. Nie ma żadnego powodu w przypadku aplikacji Tuya... To samo dotyczy blokady rodzicielskiej - tylko poprzez fizyczny dostęp do przełącznika można ją włączyć i wyłączyć. Myślę, że należy zmienić programowanie MCU, aby to umożliwić... Niestety...

    Oto dane urządzenia dla pięknej bazy danych.

    
    {
      "vendor": "Currysmarter",
      "bDetailed": "0",
      "name": "Currysmarter WLAN Switch",
      "model": "6Gen",
      "chip": "BK7231N",
      "board": "EU-CL-01/02-2 10-00130-10 2023-3-3",
      "flags": "1024",
      "keywords": [
        "currysmarter",
        "gen6",
        "shutter",
        "curtain",
        "MCU",
        "CBU",
        "CMS79FT738"
      ],
      "pins": {},
      "command": "",
      "image": "https://obrazki.elektroda.pl/9077436000_1712324125.jpg",
      "wiki": "https://www.elektroda.com/rtvforum/viewtopic.php?p=21033819#21033819"
    }
    


    Tutaj plik /autoexec.bat dla Twojej przyjemności i wygody ;-) Zdefiniowano dwa przyciski autokalibracji. Jeden wysyła polecenie przez UART (potrzebne po ponownym uruchomieniu Switcha), a drugi przez setChannel (działa po jednokrotnym wykonaniu metody UART). Nie mam pojęcia dlaczego - właściwie oba powinny zrobić to samo...

    
    # Administrativ stuff first...
    PowerSave 1
    # Replace 0.0.0.0 with your NTP Server IP Address
    startDriver NTP 
    ntp_setServer 0.0.0.0
    
    # Yeah - it is an MCU in the CurrySmarter Gen6 WiFi Switch.
    startDriver TuyaMCU
    tuyaMcu_defWiFiState 4
    tuyaMcu_setBaudRate 9600
    
    # Wouldn't it be nice to have a custom element for this? 
    # Some Up/Stop/Down style element would be great ;-)
    setChannelType 1 textfield
    setChannelLabel 1 "Touch buttons (0=Open 1=Stop 2=Close)"
    setChannelVisible 1 false
    linkTuyaMCUOutputToChannel 1 4 1
    
    # Wouldn't it be nice to have a custom element for this? 
    # Some slider and some text input for values between 0 and 100 would be nice...
    setChannelType 2 textfield
    setChannelLabel 2 "Percentage"
    linkTuyaMCUOutputToChannel 2 2 2
    
    setChannelType 3 textfield
    setChannelLabel 3 "Autocalibrate (0=Start)"
    setChannelVisible 3 false
    linkTuyaMCUOutputToChannel 3 4 3
    
    setChannelType 7 toggle
    setChannelLabel 7 "Light On/Off"
    linkTuyaMCUOutputToChannel 7 1 7
    
    # Wouldn't it be nice to have a custom element for this? 
    # Some ComboBox/Select to choose values of a list in value=text format...
    setChannelType 8 textfield
    setChannelLabel 8 "Percent change direction (0=Motor Reverse, 1=Default Steering)"
    linkTuyaMCUOutputToChannel 8 4 8
    setChannelVisible 8 false
    
    # Let's create some buttons for different functions. Typing everything in Textfields and send it is uncool. 
    startDriver httpButtons
    
    setButtonEnabled 0 1
    setButtonColor 0 "#2596be"
    setButtonLabel 0 "Up/Open"
    setButtonCommand 0 "setChannel 1 0"
    
    setButtonEnabled 1 1
    setButtonColor 1 "#abdbe3"
    setButtonLabel 1 "Stop/Pause"
    setButtonCommand 1 "setChannel 1 1"
    
    setButtonEnabled 2 1
    setButtonColor 2 "#2596be"
    setButtonLabel 2 "Down/Close"
    setButtonCommand 2 "setChannel 1 2"
    
    setButtonEnabled 3 1
    setButtonColor 3 "#bdbaba"
    setButtonLabel 3 "% bar dir. (Motor Reverse)"
    setButtonCommand 3 "setChannel 8 0"
    
    setButtonEnabled 4 1
    setButtonColor 4 "#bdbaba"
    setButtonLabel 4 "% bar dir. (Default Steering)"
    setButtonCommand 4 "setChannel 8 1"
    
    setButtonEnabled 5 1
    setButtonColor 5 "#F90101"
    setButtonLabel 5 "Start Autocalibration uart"
    setButtonCommand 5 "uartSendHex 55AA00060005030400010012"
    
    setButtonEnabled 6 1
    setButtonColor 6 "#F90101"
    setButtonLabel 6 "Start Autocalibration setChannel"
    setButtonCommand 6 "setChannel 3 0"
    


    Konfiguracja Home Assistant.yaml — urządzenie zostaje automatycznie wykryte przez przełącznik podświetlenia. Pozostałe dwie jednostki urządzenia musiałem zdefiniować za pomocą pliku konfiguracyjnego.yaml.
    
    mqtt:
      - switch:
          unique_id: "OpenBK7231N_E196F5B0_autocalibrate"
          device:
            identifiers: "OpenBK7231N_E196F5B0"
            configuration_url: "http://deviceipordnsname/index"
            manufacturer: "Beken Corporation"
            model: "BK7231N"
          name: "Autocalibrate"
          state_topic: "obkE196F5B0/3/get"
          command_topic: "obkE196F5B0/3/set"
          qos: 1
          payload_on: 0
          payload_off: 1
          retain: true
          availability:
            - topic: "obkE196F5B0/connected"
      - cover:
          unique_id: "OpenBK7231N_E196F5B0_position"
          device:
            identifiers: "OpenBK7231N_E196F5B0"
            configuration_url: "http://deviceipordnsname/index"
            manufacturer: "Beken Corporation"
            model: "BK7231N"
          name: "Position"
          command_topic: "obkE196F5B0/1/set"
          state_topic: "obkE196F5B0/1/get"
          position_topic: "obkE196F5B0/2/get"
          set_position_topic: "obkE196F5B0/2/set"
          payload_open:  "0"
          payload_close: "2"
          payload_stop:  "1"
          state_opening: "open"
          state_closing: "close"
          state_stopped: "stop"
          optimistic: false
          retain: true
          availability:
            - topic: "obkE196F5B0/connected"
          position_template: |-
            {% if not state_attr(entity_id, "current_position") %}
              {{ value }}
            {% elif state_attr(entity_id, "current_position") < (value | int) %}
              {{ (value | int + 1) }}
            {% elif state_attr(entity_id, "current_position") > (value | int) %}
              {{ (value | int - 1) }}
            {% else %}
              {{ value }}
            {% endif %}
    
REKLAMA