Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware

danmar 23 Jan 2023 17:42 960 13
Computer Controls
  • W lecie ubiegłego roku kupiłem w sklepie action gniazdko:

    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Teraz przyszedł czas na odłączenie się od chmury. Trochę to trwało ale znalazłem opisy jak to zrobić bez rozbierania urządzenia i lutowania kabelków.
    Skorzystałem z https://github.com/tuya-cloudcutter/tuya-cloudcutter oraz https://github.com/openshwprojects/OpenBK7231T_App
    Zastosowałem istniejącą konfigurację dla LSC Smart Connect Plug i gniazdko działa bez połączenia z Internetem.
    Niestety nie wszystko było jak w oryginale. Miałem tylko jedną LED do tego niebieską, która powinna wskazywać połączenie WiFi a wskazywała zadziałanie przekaźnika.
    Dlatego postanowiłem zajrzeć do środka.
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Udało się otworzyć obudowę bez uszkodzenia.
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Jak widać zasilacz nieizolowany dlatego nie polecam podłączania do 230 V przy otwartej obudowie. Na masie może znaleźć się faza!
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Przyjrzałem się ścieżkom na pcb od modułu MCU do przycisku, LEDów i przekaźnika.
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Wyniki oględzin:
    P6 - załączanie przekaźnika przez R5 i Q1
    P7 - przycisk SW1
    P8 - LED1 (czerwona)
    P26 - LED2 (niebieska)
    Zasilanie 3,3 V i masa oczywista a pozostałe nie podłączone.
    Po złożeniu obudowy mogłem zmodyfikować ustawienia pinów:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Po lewej jest proponowana konfiguracja dla podobnego gniazdka, a po prawej moje ustawienie.
    Gniazdko teraz działa jak chciałem i choć brakuje mu choćby minutnika to liczę że wkrótce oprogramowanie upodobni się do tasmoty.

    Cool? Ranking DIY
    About Author
    danmar
    Level 12  
    Offline 
    danmar wrote 22 posts with rating 10. Been with us since 2003 year.
  • Computer Controls
  • #3
    p.kaczmarek2
    Moderator Smart Home
    danmar wrote:

    Gniazdko teraz działa jak chciałem i choć brakuje mu choćby minutnika to liczę że wkrótce oprogramowanie upodobni się do tasmoty.

    Właściwie to minutnik jest i to można go zrobić na wiele sposobów. Po prostu rozwijamy dokumentację i dopiero będą robione materiały, w tym kursy na YT oraz symulator urządzenia na Windowsa by ćwiczyć robienie automatyzacji i skryptów na PC bez posiadania fizycznego urządzenia IoT:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    BTW: Symulator działa nawet z MQTT i łączy się z Home Assistant.

    Co do minutników, to wyłączy przekaźnik po 2 sekundach po każdym jego załączeniu (kanał 0):
    
    // This will automatically turn off relay after about 2 seconds
    // NOTE: addRepeatingEvent [RepeatTime] [RepeatCount]
    addChangeHandler Channel0 != 0 addRepeatingEvent 2 1 setChannel 0 0
    

    To działa ze zdarzeniem Ping Watchdoga, to zrobi klika przekaźnikiem jak cel pingu nie odpowie ani razu przez więcej niż 40 sekund:
    
    alias doRelayClick backlog setChannel 1 1; addRepeatingEvent 2 1 setChannel 1 0; ClearNoPingTime
    addChangeHandler NoPingTime > 40 doRelayClick 
    

    Poniższy skryptowy wątek (musi być uruchomiony jako startScript plik.txt) wykona odliczanie korzystając z kanału jako zmiennej (można ją wyświetlać i publikować), na starcie ustawi przekaźnik na 1 a po odliczeniu na 0:
    
    setChannel 20 15
    setChannel 0 1
    again:
        addChannel 20 -1
        delay_s 1
        if $CH20>0 then goto again
        setChannel 0 0
    

    Powyższy skryptowy wątek można też abortować jak mu się nada ID.

    Nowe wdrażane funkcjonalności są automatycznie testowane poprzez kod w katalogu selftest. Jeśli ktoś chce się bawić, to można go przejrzeć:
    https://github.com/openshwprojects/OpenBK7231T_App/tree/main/src/selftest
    A jak nie to z czasem będzie dokładna dokumentacja oraz przykłady.

    Jak chcesz natomiast jakiś konkretny minutnik bądź jakąś określoną składnie, to daj znać jaką, to też można zrobić.
  • Computer Controls
  • #6
    p.kaczmarek2
    Moderator Smart Home
    Wraz z dniem wczorajszym, firmware stało się kompatybilne z ioBroker. W celu uruchomienia wysyłania TELE w stylu Tasmoty (niezbędne dla ioBroker sonoff plugin), należy włączyć flagę 30.
    Demonstracja:


  • #7
    krisRaba
    Level 31  
    Co jakiś czas widzę tematy o podmianie fw w tych różnych fabrycznych urządzeniach.

    Gdzie można znaleźć jakieś info o tym systemie, żeby poukładać sobie w głowie co to jest i co potrafi?

    Rozumiem, że chodzi o fakt, że te wszystkie gotowe produkty używają tego samego modułu bezprzewodowego i poprzez podmianę fw zyskujemy nad nimi kontrolę bezpośrednią, ustawiając co gdzie jest podpięte do wbudowanego modułu?

    Jak potem wygląda sterowanie? Te moduły łączą się do lokalnej sieci WiFi, którą im zapiszemy? I potem mamy jakąś apkę, która w tej sieci wyłapuje urządzenia, które się zgłoszą?

    Ciekawi mnie to o tyle, że jestem przed projektowaniem instalacji w domu i dobrze byłoby mieć rozeznanie co to potrafi, jakie są rozgryzione już sprzęty, którymi można sterować itp.
    Kiedyś myślałem o jakimś własnym sterowaniu, ale życie weryfikuje i niestety obecnie nie mam aż tyle wolnego czasu, by zrobić to w jakimś sensownym czasookresie :/
    Stąd chętnie skorzystałbym z czegoś gotowego, co można zaadaptować do potrzeb :)
  • #8
    danmar
    Level 12  
    krisRaba wrote:
    Rozumiem, że chodzi o fakt, że te wszystkie gotowe produkty używają tego samego modułu bezprzewodowego i poprzez podmianę fw zyskujemy nad nimi kontrolę bezpośrednią, ustawiając co gdzie jest podpięte do wbudowanego modułu?

    Tak dobrze nie ma. Modułów jest coraz więcej, różnice są czasem spore.
    krisRaba wrote:
    Jak potem wygląda sterowanie? Te moduły łączą się do lokalnej sieci WiFi, którą im zapiszemy? I potem mamy jakąś apkę, która w tej sieci wyłapuje urządzenia, które się zgłoszą?

    Mniej więcej tak właśnie, choć dziś apka to może być np. karta przeglądarki internetowej bez menu.
    Jeśli tych urządzeń masz 2-3 to pewnie wystarczą zakładki w przeglądarce do każdego urządzenia. Ale jeśli więcej albo chcemy wykorzystać zależności między urządzeniami, to nie obejdzie się bez jakiegoś sytemu jak np. Home Assistant.
    Ja zmieniłem firmware ze względu żeby odłączyć się od chmury i pozbyć się firmowych aplikacji w smartfonie. Przestało to być wygodne gdy do każdego urządzenia trzeba dedykowaną aplikację.
    Dla mnie wygodniej jest mieć dostęp do domowej sieci LAN ze świata, niż wszystko z domu wysyłać do chmury żeby np. zgasić światło w sąsiednim pokoju. A takie właśnie rozwiązania dostajemy domyślnie kupując urządzenie i działając wg instrukcji obsługi.
  • #9
    krisRaba
    Level 31  
    Ok, ale generalnie można stworzyć sobie jakieś lokalne WiFi nawet bez wyjścia na świat i taki Home Assistant to ogarnie wszystko lokalnie? :D
  • #10
    Robgie
    Level 27  
    Tak. HA tez mozesz dac dostep na swiat , najważniejsze ze masz jedna aplikację, bez chmur w chinach no i zarządzanie możesz robić dowolnie oraz jedne urządzenia mogć wpływać sterować inne itp itd
  • #11
    krisRaba
    Level 31  
    Pięknie, to muszę koniecznie rozeznać temat :)
    Mi najbardziej by odpowiadało, żeby było tylko lokalnie lub jeśli już, to z zewnątrz wbić się po jakimś VPNie, ale żeby bezpośredni ruch z neta dla urządzeń był niemożliwy. Muszę poszukać, czy da się tak zrobić np. na jakimś routerze :)
  • #12
    krisRaba
    Level 31  
    danmar wrote:

    Przyjrzałem się ścieżkom na pcb od modułu MCU do przycisku, LEDów i przekaźnika.
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware

    Po złożeniu obudowy mogłem zmodyfikować ustawienia pinów:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware


    Mam pytanko jeszcze do znawców tematu. Patrzę na te fotki i w tym gniazdku jest moduł, który na świat ma wyprowadzonych bardzo mało pinów, bo w sumie i po co więcej w takim urządzeniu.
    Z drugiej strony konfiguracja pinów pokazuje aż 28 pozycji...
    Czy da się kupić taki moduł, który miałby wyprowadzonych możliwie dużo linii, posadzić go na swoim PCB i dowolnie skonfigurować, że np. tutaj PWM jeden, drugi, tu jakieś on/off'y, tu wejścia itp?
    I to sobie dodać potem do HA jako swój moduł, który coś tam robi? :D Kurczę, bo to by meeega przyspieszyło rozwój i integrację jakichś swoich wynalazków :D

    Są też w tym jakieś przepychacze interfejsów? Np. z poziomu HA zdefiniować, że ma wypychać do tego modułu jakąś ramkę, którą ten z kolei wysyła dalej po swoim UART, czy czymkolwiek innym? :D

    Oglądałem jakiś trailer odnośnie HA 2022.10 i coraz bardziej mi się to podoba :D Tak się obawiałem, że to jest zaraźliwe :lol:
  • #13
    p.kaczmarek2
    Moderator Smart Home
    Od razu zaznaczam, że odpowiadam w kontekście mojego projektu OpenBeken, co prawda Tasmota dla popularnego ESP też posiada skryptowalny system Rules, ale nie widziałem tam aż tylu np. możliwych przekaźników (w panelu mogę wybrać od 1 do... 8):
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware

    krisRaba wrote:

    Z drugiej strony konfiguracja pinów pokazuje aż 28 pozycji...
    Czy da się kupić taki moduł, który miałby wyprowadzonych możliwie dużo linii, posadzić go na swoim PCB i dowolnie skonfigurować, że np. tutaj PWM jeden, drugi, tu jakieś on/off'y, tu wejścia itp?
    I to sobie dodać potem do HA jako swój moduł, który coś tam robi? :D Kurczę, bo to by meeega przyspieszyło rozwój i integrację jakichś swoich wynalazków :D

    Każdy wolny pin można oskryptować i zagospodarować, ogranicza nas jedynie to, że np. PWM dane MCU może wspierać tylko na określonych pinach.

    krisRaba wrote:

    Są też w tym jakieś przepychacze interfejsów? Np. z poziomu HA zdefiniować, że ma wypychać do tego modułu jakąś ramkę, którą ten z kolei wysyła dalej po swoim UART, czy czymkolwiek innym? :D

    W moim firmware jest możliwych do 64 kanałów o różnych rolach, możesz dowolnie parować przyciski, przełączniki, przekaźniki, PWMy, ADC, możesz wyzwalać zdarzenia na bazie odczytów lub klików (pojedynczy, podwójny, potrójny, poczwórny klik), możesz tworzyć timery (np. wyłączyć przekaźnik po 5 minutach), możesz sterować peryferiami (dodaję nowe sterowniki na bieżąco), itd...
    Możesz podłączyć DHT11 i oskryptować go tak (bez pisania kodu C, w gotowym firmware, bez HA) że gdy temperatura przekroczy granicę to np. wykonuje on jakąś akcję (włącza przekaźnik na 10 minut)
    OpenBeken może też wysyłać i odbierać dowolne rzeczy po MQTT albo wysyłać np. GET do serwera (i do GET można wsadzić rezultaty pomiarów...)

    Przykład np z I2C:
    p.kaczmarek2 wrote:
    Nowa aktualizacja I2C!
    Dodałem sterownik MCP23017.
    MCP23017 to 16-bitowy ekspander portów.
    Umożliwia podłączenie np. 16 przekaźników do pojedynczej magistrali I2C.
    W obecnym systemie możliwe jest mapowanie 16 pinów MCP23017 na kanały OpenBeken.
    Tutaj używane jest polecenie:
    
    backlog setChannelType 5 toggle; setChannelType 6 toggle; setChannelType 7 toggle; setChannelType 8 toggle; setChannelType 9 toggle; setChannelType 10 toggle; setChannelType 11 toggle; addI2CDevice_MCP23017 I2C1 0x27; MCP23017_MapPinToChannel I2C1 0x27 7 5; MCP23017_MapPinToChannel I2C1 0x27 6 6; MCP23017_MapPinToChannel I2C1 0x27 5 7; MCP23017_MapPinToChannel I2C1 0x27 4 8; MCP23017_MapPinToChannel I2C1 0x27 3 9; MCP23017_MapPinToChannel I2C1 0x27 2 10; MCP23017_MapPinToChannel I2C1 0x27 1 11
    

    Polecenie zostało użyte na sterowniku 4 przekaźników. Kanały 5, 6, 7 itd. są mapowane na bity ekspandera.
    Oto jak to wygląda w interfejsie użytkownika (nie zawracałem sobie głowy dodawaniem wszystkich 16 kanałów, tylko kilka):
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Oto diody LED podczas testu:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Oto cała konfiguracja (zignoruj czujniki temperatury TC74 na magistrali I2C, skupmy się na MCP23017):
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Z adnotacjami:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    Teraz możesz zapytać - dlaczego? Dlaczego 16 kanałów? Dlaczego MCP23017?
    Dzieje się tak, ponieważ pozwala na użycie tego modułu:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    To byłby bardzo tani i fajny sposób na kontrolowanie wielu przekaźników. Ponadto możesz mieć wiele MCP na tej samej magistrali I2C...

    .


    Inny przykład, kontrola wiatraczka na trzech przekaźnikach, skrypt na prośbę użytkownika z symulacją bo nie miałem takiego urządzenia:
    p.kaczmarek2 wrote:

    Witam ponownie @digitalsko ,
    dzięki naszemu Symulatorowi urządzeń OpenBeken, który pozwala mi symulować dowolne urządzenie w systemie Windows i szybko tworzyć skrypty, przygotowałem dla Ciebie następujący skrypt:
    
    
    setChannelType 10 OffLowMidHigh
    setChannelLabel 1 "Relay 1"
    setChannelLabel 2 "Relay 2"
    setChannelLabel 3 "Relay 3"
    setChannelLabel 10 "Fan Speed"
    
    // hide raw relay channel buttons from gui
    setChannelVisible 1 0
    setChannelVisible 2 0
    setChannelVisible 3 0
    
    // optional gui buttons
    startDriver httpButtons
    
    setButtonLabel 0 "Toggle Fan"
    setButtonLabel 1 "Next Fan Speed"
    setButtonCommand 0 Do_Power_Press
    setButtonCommand 1 Do_Cycle_Press
    setButtonEnabled 0 1
    setButtonEnabled 1 1
    
    // button colour
    addChangeHandler Channel10 == 0 setButtonColor 0 red
    addChangeHandler Channel10 != 0 setButtonColor 0 green
    // off by default
    setButtonColor 0 red
    
    // translate fan state (0-4) to relay states
    addChangeHandler Channel10 == 0 backlog SetChannel 1 0; SetChannel 2 0; SetChannel 3 0
    // Fan on Low - R2 on
    addChangeHandler Channel10 == 1 backlog SetChannel 1 1; SetChannel 2 0; SetChannel 3 0
    // Fan on Medium - R2, R3 on
    addChangeHandler Channel10 == 2 backlog SetChannel 1 1; SetChannel 2 1; SetChannel 3 0
    // Fan on High - R2, R3, R4 on
    addChangeHandler Channel10 == 3 backlog SetChannel 1 1; SetChannel 2 1; SetChannel 3 1
    // change to OnClick if you want?
    addEventHandler OnPress 11 Do_Power_Press
    addEventHandler OnPress 9 Do_Cycle_Press
    // power press will just toggle channel 10 - so if non zero it goes to 0, if zero, then goes to 1
    alias Do_Power_Press toggleChannel 10
    // cycle press will cycle values 0, 1, 2 and 3 for channel 10?
    // AddChannel [ChannelIndex][ValueToAdd][ClampMin][ClampMax][bWrapInsteadOfClamp]
    alias Do_Cycle_Press addChannel 10 1 1 3 1
    

    Nie jestem pewien, czy dokładnie tego potrzebujesz, ale możesz je zmodyfikować, aby pasowało do twoich potrzeb, a jeśli pojawi się jakiś problem, mogę również wykonać modyfikację dla ciebie. Jestem tu by pomóc.

    Oto krótka prezentacja skryptu:



    Musisz zaktualizować do najnowszej wersji, aby móc korzystać ze wszystkich funkcji tego skryptu.


    Inne przykłady:
    Quote:


    - CB2S + DHT11 test circuit:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    - WB2S + LCD 2x16 with I2C driver + MCP23017 port expander test circuit:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    - WB2S + bistable switch and potentiometer test circuit:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    - WB2S + IR receiver test circuit:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    - WB2S + Software SPI test:
    [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware [BK7231N CB2S] Smart gniazdko LSC 0 - zmiana firmware
    More about my test setups will be covered in dedicated OBK topic.


    Inny przykład:
    - Genio Galaxy Smart Lamp - BK7231T - Teardown + Guide

    W przypadku Tasmoty możesz łatwo uruchomić mnóstwo gotowych sterowników na ESP, w przypadku OpenBeken możesz działać na 'nieznanych chińskich modułach' typu BK7231 (T i N), BL602, W800/W801, W600/W601, XR809 i wkrótce wiecej
  • #14
    krisRaba
    Level 31  
    Super, bardzo Ci dziękuję za powyższe informacje.

    Czyli językiem skryptowym da się wykonywać logikę na samym module, że swoją funkcję pełni niezależnie.
    Dodatkowo można go spiąć np. z Home Assistant i tam zrobić jakieś harmonogramy nadrzędne, monitorować stan itp :D
    Piękna sprawa

    Muszę przejrzeć wspomniane moduły i zobaczyć który się najlepiej nada i potem wypadałoby coś ogarnąć w boju, żeby lepiej to poczuć :)

    Ja póki co układam sobie w głowie poszczególne elementy instalacji elektrycznej i ewentualnie czy coś w danym miejscu "smarcić" czy nie ;)