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

Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja

atomphil 17 Lis 2023 23:08 2448 9
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • Kupiłem moduł Wifi z dodatkowym pilotem RF 433 MHz z Aliexpress , aby móc sterować naszą roletą przeciwsłoneczną za pomocą HA.
    W przeciwieństwie do jeszcze tańszych modeli, ma osiem zamiast sześciu zacisków, więc nie potrzebujesz żadnych dodatkowych złączy dla przewodu neutralnego (i fazy, jeśli chcesz używać przycisków sprzętowych). Pozwala to na prostsze, czystsze i bezpieczniejsze okablowanie.
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja
    Dostarczono bez pudełka:
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja
    Instrukcja obsługi:
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja
    Moduł z zewnątrz i wewnątrz:
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja
    Opis na płycie: HFY-CL02WF+RF Rev 2.0
    Moduły radiowe są spięte płytką ze zworkami. Moduł Wifi znajduje się pod modułem RF, z boku widać, że jest to CB2S.
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja

    Moduł nie musi być rozlutowywany w celu flashowania OBK, styki są łatwo dostępne na płytce zworek. Flashowanie za pomocą BK7231Flasher.exe jest bardzo proste, nawet wszystkie GPIO są rozpoznawane poprawnie.
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja
    Układ pinów jest następujący:
    Pin Ustawienie
    6 Relais 1
    7 Relais 3
    10 WifiLED
    23 Przycisk 2
    24 Przycisk 1
    26 Przycisk 3

    Konfiguracja:
    Kod: JSON
    Zaloguj się, aby zobaczyć kod

    Wpisałem następujący autoexec.bat (skopiowałem skrypt z tutaj ):

    
    startDriver SSDP
    PowerSave 1
    
    // P6  - Relay 1 Close
    // P7  - Relay 3 Open
    // P24 - Btn   1 Close
    // P23 - Btn   2 Stop
    // P26 - Btn   3 Open
    
    // 10  - Wifi LED
    
    // description
    SetChannelLabel 1 Close
    SetChannelLabel 2 Stop
    SetChannelLabel 3 Open
    
    // logic
    alias Reset_Stop_Close backlog SetChannel 2 0; SetChannel 1 0
    alias Reset_Stop_Open backlog SetChannel 2 0; SetChannel 3 0
    alias Reset_Close_Open backlog SetChannel 1 0; SetChannel 3 0
    
    addChangeHandler Channel1 == 1 Reset_Stop_Open
    addChangeHandler Channel1 == 1 backlog startScript autoexec.bat resetCloseAfterMinute
    addChangeHandler Channel2 == 1 Reset_Close_Open
    addChangeHandler Channel2 == 1 backlog startScript autoexec.bat resetStopAfterSecond
    addChangeHandler Channel3 == 1 Reset_Stop_Close
    addChangeHandler Channel3 == 1 backlog startScript autoexec.bat resetOpenAfterMinute
    
    // do not proceed
    return
    
    // Scripts
    
    resetCloseAfterMinute:
    // wait 30 seconds
    delay_s 30
    // stop opening
    SetChannel 1 0
    // done
    return
    
    resetStopAfterSecond:
    // wait 1 second
    delay_s 1
    // disable button
    SetChannel 2 0
    // reset all scripts
    stopAllScripts
    // done
    return
    
    resetOpenAfterMinute:
    // wait 30 seconds
    delay_s 30
    // stop opening
    SetChannel 3 0
    // done
    return
    

    Wszystko do tej pory działało cudownie, pilot RF działa na trzech przyciskach, więc można go również używać. Trzeba jeszcze dostosować czasy sterowania w skrypcie do danej rolety.

    Muszę jeszcze popracować nad ładną integracją z Home Assistant. Jeśli ktoś ma jakieś dobre rady na ten temat, to chętnie wysłucham.
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja

    Fajne? Ranking DIY
    O autorze
    atomphil
    Poziom 10  
    Offline 
    atomphil napisał 27 postów o ocenie 15, pomógł 4 razy. Jest z nami od 2023 roku.
  • #2 20910126
    rodionzhitomirsky
    Poziom 2  
    Cześć!

    Twój post był bardzo pomocny w odkrywaniu tego samego urządzenia po mojej stronie! Dzięki!

    Poszedłem trochę dalej i w pełni zintegrowałem go z HA. Oto mój autoexec.bat (ustawia również kanały, ale w nieco inny sposób):
    
    clearIO
    // ====== CONFIG ======
    // Used to hold the delay value in millis for sleeping during closing or opening loop
    // Play with your curtain and find the right value for this delay
    
    SetChannel 8 100
    
    // Delay to wait (millis) before starting to move the curtain after we close both relays
    // maybe it is not necessary, but I prefer it to be to ensure we do not have
    // both open and close relays powered simultaneously:
    SetChannel 7 500
    
    // MQTT stuff
    MqttClient lr_curtain_2
    MqttHost <YOUR_HA_MQTT_HOST>
    MqttUser <YOUR_HA_MQTT_USER>
    MqttPassword <YOUR_HA_MQTT_PASSWORD>
    
    // ====== END OF CONFIG ======
    
    // set channels 7, 8 and 9 to be private, so that we do not spend resources to publish their values:
    SetChannelPrivate 7 1
    SetChannelPrivate 8 1
    SetChannelPrivate 9 1
    
    // We start the main opening/closing loop with a delay
    // and than immediately have a calibration delay
    // so, let's decrement the calibration delay to not have them both
    // at the beginning of the loop:
    
    addChannel 7 -$CH8 0 5000
    
    PowerSave 1
    startDriver ntp
    
    // set pins and channels
    
    // Pin 6 is connected to opening relay
    SetPinRole 6 Rel
    // we also connect it to channel 1
    SetPinChannel 6 1
    SetChannelLabel 1 "Up"
    
    // Pin 6 is connected to closing relay
    SetPinRole 7 Rel
    // we also connect it to channel 3
    SetPinChannel 7 3
    SetChannelLabel 3 "Down"
    
    // 23 - stop button (virtual button emitted when open or close buttons are pressed for some time and then released)
    SetPinRole 23 Btn
    // 24 - opening button
    SetPinRole 24 Btn
    // 26 - closing button
    SetPinRole 26 Btn
    
    // CH9 - saved position for reboot
    // CH10 - current position
    // CH11 - target position
    
    SetChannelLabel 9 "Saved Position"
    setChannelType 9 Dimmer
    SetChannelLabel 10 "Current Position"
    setChannelType 10 Dimmer
    SetChannelLabel 11 "Target Position"
    setChannelType 11 Dimmer
    
    SetStartValue 9 -1
    
    // read position saved before reboot:
    SetChannel 10 $CH9
    SetChannel 11 $CH9
    
    // Setup LED:
    SetPinRole 10 LED
    SetPinChannel 10 4
    
    // ============= MQTT ============
    
    // Let it shine when MQTT connection is established:
    addEventHandler MQTTState 1 SetChannel 4 1
    addEventHandler MQTTState 0 SetChannel 4 0
    
    // [2] Always set MQTT Retain flag to all published values;
    // [7] Broadcast self state every N seconds:
    // [10] Broadcast self state on MQTT connect
    flags 1156
    
    // Inform HA about our values every 30 seconds, publish 2 values per second
    mqtt_broadcastInterval 30
    mqtt_broadcastItemsPerSec 2
    
    alias Set_Stop backlog setChannel 3 0; setChannel 1 0
    alias Start_Opening backlog stopAllScripts; startScript autoexec.bat openSkylight
    alias Start_Closing backlog stopAllScripts; startScript autoexec.bat closeSkylight
    alias Stop_All backlog stopAllScripts; startScript autoexec.bat stopSkylight
    alias Open_To_Target backlog stopAllScripts; startScript autoexec.bat openSkylightToTarget
    
    alias Stop_Clicked backlog Set_Stop; Stop_All
    
    // Click and fast release will effect in fully closing or opening.
    // If during this process we click on the same button again, it stops 
    addEventHandler OnClick 26 if $CH03==1 then Stop_Clicked else Start_Closing
    addEventHandler OnClick 24 if $CH01==1 then Stop_Clicked else Start_Opening
    addEventHandler OnClick 23 Stop_Clicked
    
    return
    
    // === OPEN TO GIVEN PERCENTAGE ===
    openSkylightToTarget:
    	Set_Stop
    	delay_ms $CH7
    openSkylightToTarget_again:
    	delay_ms $CH8
            if $CH10<$CH11 then goto continue_opening
            if $CH10>$CH11 then goto continue_closing
    
    	// we are done, we reached our target
    	// If we were opening or closing fully, we let the motor
    	// run for 3 seconds for the case we are uncalibrated:
    	if $CH10==0 then goto calibrate
    	if $CH10==100 then goto calibrate
    	goto openSkylightFinished
    continue_opening:
            // Unset_Close
    	setChannel 3 0
            // Set_Open
    	setChannel 1 1
    	// increment:
            addChannel 10 1 0 100
    	goto openSkylightToTarget_again
    
    continue_closing:
            // Unset_Open
    	setChannel 1 0
            // Set_Close
    	setChannel 3 1
    	// decrement:
            addChannel 10 -1 0 100
    	goto openSkylightToTarget_again
    
    calibrate:
    	delay_ms 3000
    	Set_Stop
    	SetChannel 9 $CH10
    	return
    openSkylightFinished:
    	Set_Stop
    	SetChannel 9 $CH10
    	return
    
    // === CLOSE ===
    closeSkylight:
    	SetChannel 11 0
    	goto openSkylightToTarget
    return
    
    // === OPEN ===
    openSkylight:
    	SetChannel 11 100
    	goto openSkylightToTarget
    return
    
    // === STOP ===
    stopSkylight:
    	Set_Stop
    	SetChannel 11 $CH10
    	SetChannel 9 $CH10
    return
    

    Oto moja konfiguracja.yaml:
    
    mqtt:
      sensor:
        - name: "lr_curtain_2_target"
          unique_id: "lr_curtain_2_target"
          state_topic: "lr_curtain_2/11/get"
          expire_after: 80
          entity_category: diagnostic
    
        - name: "lr_curtain_2_open_by"
          unique_id: "lr_curtain_2_open_by"
          state_topic: "lr_curtain_2/10/get"
          expire_after: 80
          entity_category: diagnostic
    
        - name: "lr_curtain_2_opening"
          unique_id: "lr_curtain_2_opening"
          state_topic: "lr_curtain_2/1/get"
          expire_after: 80
          entity_category: diagnostic
    
        - name: "lr_curtain_2_closing"
          unique_id: "lr_curtain_2_closing"
          state_topic: "lr_curtain_2/3/get"
          expire_after: 80
          entity_category: diagnostic
    
    cover:
      - platform: template
        covers:
          lr_curtain_2:
            unique_id: lr_curtain_2
            device_class: blind
            friendly_name: "Living Room Blind 2"
            value_template: "{% set cover_id = this.entity_id.split('.')[1]  %} {% if (states('sensor.' + cover_id + '_opening')|int(default = -1)) == 1 %} opening {% elif (states('sensor.' + cover_id + '_closing')|int(default = -1)) == 1  %} closing {% else %} None {% endif %}"
            position_template: "{% set cover_id = this.entity_id.split('.')[1]  %}{{ states('sensor.' + cover_id + '_open_by')|float|int }}"
            availability_template: "{% set cover_id = this.entity_id.split('.')[1]  %} {{ states('sensor.' + cover_id + '_opening') != 'unavailable' }}"
            open_cover:
              service: script.mqtt_cover_set_position
              data:
                position: 100
                device_entity_id: "{{ this.entity_id }}"
            close_cover:
              service: script.mqtt_cover_set_position
              data:
                position: 0
                device_entity_id: "{{ this.entity_id }}"
            stop_cover:
              service: script.mqtt_cover_stop
              data:
                device_entity_id: "{{ this.entity_id }}"
            set_cover_position:
              service: script.mqtt_cover_set_position
              data:
                position: "{{ position }}"
                device_entity_id: "{{ this.entity_id }}"
    
    


    scripts.yaml:

    
    mqtt_cover_stop:
      alias: MQTT Cover Stop
      mode: single
      sequence:
      - variables:
          cover_id: '{{ device_entity_id.split(''.'')[1] }}'
      - service: mqtt.publish
        data_template:
          qos: '1'
          topic: cmnd/{{cover_id}}/Stop_All
    mqtt_cover_set_position:
      alias: MQTT Cover Set Position
      mode: single
      sequence:
      - variables:
          cover_id: '{{ device_entity_id.split(''.'')[1] }}'
      - service: mqtt.publish
        data_template:
          qos: '1'
          topic: cmnd/{{cover_id}}/SetChannel
          payload: 11 {{position}}
      - wait_template: '{{ (states(''sensor.'' + cover_id + ''_target'')|int(default=-1)) == position }}'
        continue_on_timeout: false
        timeout:
          seconds: 5
      - service: mqtt.publish
        data_template:
          qos: '1'
          topic: cmnd/{{cover_id}}/Open_To_Target
    

    Mam nadzieję, że to pomoże. Jeśli masz jakieś pomysły na ulepszenia, daj mi znać!
  • #3 20913624
    p.kaczmarek2
    Moderator Smart Home
    To bardzo fajny skrypt. Mieliśmy również kilka szczegółowych prób skryptowania przedstawionych tutaj:
    Działanie przełącznika Smart Life Curtain (Shutter), Flashowanie, Konfiguracja i konfiguracja z HA
    Pomogłem? Kup mi kawę.
  • #4 20913739
    rodionzhitomirsky
    Poziom 2  
    Dziękuję!

    Wątek, o którym wspomniałeś był moją inspiracją :) . Chciałem tylko pójść dalej i mieć możliwość skalibrowania rolki i otwarcia jej na określony procent.
  • #5 20932845
    dawsonlebrown
    Poziom 3  
    Dzięki za to. Właśnie kupiłem ten sam moduł i z ulgą znalazłem ten wątek.

    Zaimplementowałem Twoje skrypty i moduł działa w większości poprawnie przy wyzwalaniu go przez HA, ale fizyczne przyciski otwierania/zamykania migawki nie działają. Po krótkim poszperaniu zauważyłem, że flaga 41 - [BTN] Ignoruj wszystkie zdarzenia przycisków (czyli blokada dziecięca) jest ustawiana przy każdym ponownym uruchomieniu modułu.

    Zauważyłem, że plik autoexec.bat ustawia flagi na 1156 — zakładam, że jest to mapa bitowa flag 2,7 i 10, które również są ustawione — więc nie jestem pewien, co ustawia pozostałe flagi:
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja

    Kiedy wyłączam flagę 41 i klikam przycisk wysyłania, fizyczne przełączniki teraz działają, ale po ponownym uruchomieniu flaga 41 jest ponownie włączona.

    Jestem nowy w OBK i mam nadzieję, że ktoś tutaj będzie w stanie pomóc mi zrozumieć, czego nie skonfigurowałem poprawnie.

    Dodano po 1 [godzinach] 36 [minutach]:

    Witaj ponownie,

    Jeszcze trochę pokombinowałem i zobaczyłem, że przy flashowaniu modułu użyłem starszego firmware: OpenBK7231N_QIO_1.17.308, po aktualizacji do OpenBK7231N_QIO_1.17.427 - Flaga 41 nie jest już ustawiona, więc przyciski działają po ponownym uruchomieniu modułu .

    Jeszcze raz dziękuję za pracę nad tym modułem.
  • #6 20933040
    p.kaczmarek2
    Moderator Smart Home
    To bardzo dziwny problem.
    Próbowałem to odtworzyć w autoteście:

    Tutaj:
    https://github.com/openshwprojects/OpenBK7231...mmit/620df5ffe055e9e951d5bf2b5d323d3a0d28993b
    ale wydaje się działać poprawnie. Ustawione są tylko oczekiwane flagi. Czy możesz podać więcej informacji, jak odtworzyć problem?
    Pomogłem? Kup mi kawę.
  • #7 20933371
    dawsonlebrown
    Poziom 3  
    Jasne, co zrobiłem:
    używając BK7231Flasher.exe 1.1.6 i z identycznym „modułem kurtyny jak w OP”, kliknąłem przycisk „Zrób kopię zapasową i sflashuj nowy” bez uprzedniego pobrania najnowszego oprogramowania i wybrania go z rozwijanej listy. Pierwszym oprogramowaniem, które pobrałem, był OpenBK7231N_QIO_1.17.308.bin - więc za każdym razem, gdy otwieram aplikację, jest to domyślne oprogramowanie wybrane w menu rozwijanym „Wybierz firmęre:”. (być może bardziej przydatne byłoby, gdyby domyślnie było to najnowsze, a nie najstarsze oprogramowanie w folderze? - poruszę problem na githubie, na wypadek, gdyby deweloperzy się ze mną zgodzili :) )

    Z pamięci kroki, które następnie wykonałem, były następujące:
    Połączono z hotspotem Wi-Fi na płycie
    Następnie kopiuję/wklejam konfigurację json z OP - ale o ile pamiętam, nie widziałem, jak przesłać ten JSON do modułu, więc wybrałem (Tuya) moduł kurtyny WiFi + RF (HFY-CL02WF +RF) na liście Urządzenia i użyłem przycisku Kopiuj ustawienia urządzenia, a następnie przycisku Zapisz piny, aby zapisać konfigurację w module.
    Utworzyłem plik autoexec.bat i skopiowałem/wkleiłem zawartość z OP
    Aby skonfigurować go w HA, następnie zaktualizowałem pliki mqtt.yaml, scripts.yaml i config.yaml w oparciu o kolejny post autorstwa rodionzhitomirsky`ego. Zmieniłem nazwy moich komponentów ze świetlika na rolety, więc po dotarciu do punktu, w którym przyciski HA uruchamiają przekaźniki, zainstalowałem moduł - ale teraz mogłem sterować tylko roletami za pomocą HA, a nie przełącznika.
    Przełączyłem się na plik autoexec.bat dostarczony przez rodionzhitomirsky - ale nadal mogłem kontrolować tylko przez HA
    Kiedy zobaczyłem ustawioną flagę 41, przetestowałem jej rozbrojenie i od razu fizyczny przełącznik działał, ale po ponownym uruchomieniu urządzenia, albo poprzez włączenie zasilania, albo użycie przycisku restartu w interfejsie internetowym, flaga została zresetowana - też zauważyłem że ustawiono flagę 39 i rzeczywiście wysyłał dużo hałasu do mojego brokera MQTT.

    Przy okazji, jak zauważyłeś na przesłanym przeze mnie zdjęciu, flagi 35,36,37,39,41,42 i 43 były ustawione i wydają się być automatycznie resetowane po każdym ponownym uruchomieniu. Po zainstalowaniu najnowszego oprogramowania sprzętowego flagi 37,44,45 i 46 są ustawione i w ten sam sposób są automatycznie resetowane przy każdym ponownym uruchomieniu.

    Nawiasem mówiąc, u góry ekranu flag bieżąca wartość jest pokazana jako 1156, mimo że te dodatkowe flagi są pokazane w dalszej części strony - tak samo było ze starszym oprogramowaniem:
    Moduł kurtyny WiFi + RF [BK7231N] z Aliexpress: Funkcje i instalacja
  • #8 20935106
    Angel0fDeath
    Poziom 13  
    Znalazłem ten sam problem i zgłosiłem go tutaj:
    https://www.elektroda.com/rtvforum/topic4022907-60.html
    Jednak u mnie dzieje się to po wydaniu polecenia flags 0 (aby wyczyścić wszystkie flagi)
    Jeśli usunę je ręcznie, zapiszę i uruchomię ponownie, nie zostaną cofnięte. Używane oprogramowanie sprzętowe to 1.17.432

    O numerze na stronie z flagami - również już zgłoszono. Liczba uwzględnia tylko pierwsze 32 flagi. W przypadku wszystkich flag nastąpi przepełnienie zmiennej int. Nadal nie naprawiono. Moją sugestią było po prostu wypisanie aktywnych flag, ponieważ do zdekodowania tej liczby potrzebny będzie kalkulator, szczególnie gdy ustawionych jest kilka flag
  • #9 21242292
    cikaybe
    Poziom 1  
    Czy wymagana jest jakaś zdalna konfiguracja rf?
  • #10 21242422
    rodionzhitomirsky
    Poziom 2  
    Nie. Funkcja Rf jest najwyraźniej zaimplementowana przez inny sprzęt. Nadal można więc powiązać pilota i będzie on działał jak natywne przyciski.
REKLAMA