logo elektroda
logo elektroda
X
logo elektroda
ADVERTISEMENT
Phrase: ShiftRegister Search found 19 matches (0,30s) Search in Google
19Posts 0Users
Search Options:
  • Phrase: ShiftRegister
  • [Youtube] How to make BK7231 development board - NodeMCU conversion - soldering guide, hot air, SMD

    Smart Home Guides p.kaczmarek2  
    Views7095 Replies37 Last post
    p.kaczmarek2   30 Mar 2024 09:08
    That's an interesting finding. I'd first double check, maybe there is an extra resistor on the board or something. Also I'd just swap in place two of the LEDs just to be sure it's not a faulty LED.

    You can drive even more LEDs with OBK if you use https://www.elektroda.com/rtvforum/find.php?q=ShiftRegister
    Expand
  • ADVERTISEMENT
  • [Youtube] How to make BK7231 development board - NodeMCU conversion - soldering guide, hot air, SMD

    Smart Home Guides p.kaczmarek2  
    Views7095 Replies37 Last post
    p.kaczmarek2   21 Apr 2023 12:45

    Here's a step by step guide showing how to make a BK7231 development board (WB3S and CB3S versions) from a very cheap NodeMCU ESP8266 board, by doing a simple WiFi module transplant. First we desolder ESP12 module with a hot air station, and then we solder a CB3S (or WB3S) in it's place. Our guide includes some basic soldering tips, so even a beginner should be able to do the shown process.

    We are aware that there is already some kind of BK7231 development board that can be bought online, but our solution is cheaper and more general. Futhermore, many people already might have a BK7231 module desoldered from IoT device (or may use this opportunity to do a WiFi module swap between NodeMCU and IoT device).

    What is required for this project?
    - CB3S or WB3S module (you can get that from IoT device, and solder the ESP from the NodeMCU in place)
    - hot air station (cheapest one will be enough)
    - basic soldering equipment and soldering iron will be also needed, so flux, leaded (Pb) solder, solder wick, PCB cleaner
    - NodeMCU board (it can be bought very cheaply online, it's available in many shops)

    Here's the guide:

    In addition, we're including a new pin mappings for a BK7231 board created that way.
    Warning: CB3S has slightly different pinout than WB3S, both pinout versions are included on the guide below:

    Here is NodeMCU schematic:

    Dev board in action:



    Thank you for watching. Please consider giving us a like and/or subscribe.
    You can also visit out BK7231 firmware page:
    https://github.com/openshwprojects/OpenBK7231T_App
    our BK7231 flash tool:
    https://github.com/openshwprojects/BK7231GUIFlashTool
    and our IoT devices teardowns list:
    https://openbekeniot.github.io/webapp/devicesList.html

    Have fun tinkering and stay free from the cloud!
    Expand
  • Didn't find an answer? Ask Artificial Intelligence

    Wait...(2min)
  • [Youtube] How to make BK7231 development board - NodeMCU conversion - soldering guide, hot air, SMD

    Smart Home Guides p.kaczmarek2  
    Views7095 Replies37 Last post
    divadiow   30 Mar 2024 07:33
    decent outcome. all of the normal/standard GPIOs work fine. assume a couple are default pull-high because the LEDs come on as soon as the board is powered. one LED is duller than the rest - S3/P20/SCK - I'm guessing it has a (different?) internal resistor to the others, or just has one. I can't find the right bit in a datasheet yet.



    Expand
  • ADVERTISEMENT
  • Testing OBK Config for Smaller Builds on OpenBK7231T - Feedback Needed

    Smart Home IoT p.kaczmarek2  
    Views3465 Replies65 Last post
    p.kaczmarek2   07 Jan 2025 09:41
    The drivers enabled by default on public releases are up to discussion, because there were some things that were enabled without a good reason due to my fault/oversight. For example, ShiftRegister or MCP9808 did not have their own ENABLE_DRIVER_SHIFTREGISTER-like defines and instead they were just enabled for Windows, Beken, etc...

    We will just need some testing once everything is done, just to make sure that I didn't forget anything important, @divadiow , do you have both RGBCW devices and power devices (BL0942 etc)?

    Another thing that I may try to implement soon is a 100% alternative web panel that is just basically a "command line" window in HTML. It would certainly be even more lightweight that what we have now, even stripped...

    Build size reduction may be also somewhat useful for my another idea, which is a LUA scripting integration.
    Expand
  • Using Tuya Aubess Mini Smart Switch (Belon2028N) with 16-Channel Relay Board: Shift Register Method

    Smart Home IoT smkassist  
    Views5031 Replies33 Last post
    p.kaczmarek2   10 Apr 2023 18:54
    Hmm you are right, we are far from initial topic. Please start a new thread about simulator and I will reply there.

    That one can be closed, the basic functionality of ShiftRegister seems to be working.

    To sum it up, here's example autoexec.bat for Shift Register:

    // startDriver ShiftRegister [DataPin] [LatchPin] [ClkPin] [FirstChannel] [Order] [TotalRegisters] [Invert]
    startDriver ShiftRegister 24 6 7 10 1 1 0
    // If given argument is not present, default value is used
    // First channel is a first channel that is mapped to first output of shift register.
    // The total number of channels mapped is equal to TotalRegisters * 8, because every register has 8 pins.
    // Order can be 0 or 1, MSBFirst or LSBFirst

    // To make channel appear with Toggle on HTTP panel, please also set the type:
    setChannelType 10 Toggle
    setChannelType 11 Toggle
    setChannelType 12 Toggle
    setChannelType 13 Toggle
    setChannelType 14 Toggle
    setChannelType 15 Toggle
    setChannelType 16 Toggle
    setChannelType 17 Toggle


    Connections should be obvious.. according to datasheet.
    Expand
  • ADVERTISEMENT
  • Using Tuya Aubess Mini Smart Switch (Belon2028N) with 16-Channel Relay Board: Shift Register Method

    Smart Home IoT smkassist  
    Views5031 Replies33 Last post
    smkassist   08 Apr 2023 02:03
    Since you told it can run in Windows... My first step would be setting it in my Windows machine. The I would figure your style of programming so I can keep the same style of code in my additions.

    Assuming you are using C or C: You could set port shift to use a byte pointer so it could be used in any size the user wants.

    I discovered OpenBK yesterday half an hour before going home, so I only managed to flash it in my module and didn't really get in the git page yet... Today is a holiday and I had to do the family visiting thing, so I am really limited in my studying. All my electronic and programming stuff is in my shop and I will only come back Thursday... So I will try to read what I can during the weekend so I can get to the shop and start doing hardware tests and building a decent PCB to house the shift registers and fix them in the relay board input.

    Added after 9 [minutes]:

    I saw that you set the command: startDriver ShiftRegister [DataPin] [LatchPin] [ClkPin] [FirstChannel] [Order] [TotalRegisters]

    I think it would be better if you set the number of channels instead of the number of registers. Or set the start and end channels... Like: startDriver ShiftRegister [DataPin] [LatchPin] [ClkPin] [FirstChannel] [last channel][order] Or startDriver ShiftRegister [DataPin] [LatchPin] [ClkPin] [FirstChannel] [TotalChannels] [order]

    Also, it should have a parameter to set it to active high or active low. Or can I set this in the channels individually?

    Imagine if I have just 6 channels... It should be simpler to manage this way, I think.

    And like in the relay board I am using: it is active low... So a parameter for that should be a good option
    Expand
  • Using Tuya Aubess Mini Smart Switch (Belon2028N) with 16-Channel Relay Board: Shift Register Method

    Smart Home IoT smkassist  
    Views5031 Replies33 Last post
    p.kaczmarek2   09 Apr 2023 19:17
    Yes, I made OpenBeken and I made the simulator. It's my tool used to speed up development of OpenBeken.

    I don't get self test errors, so it's strange, it's worth investigating, but maybe we can do it later.

    There is no shift register component in the simulator indeed, but you can still play around with all other features of OBK, including MQTT and Hass Discovery. And you can test how scripts behave, etc.

    And of course ShiftRegister driver is still running on Windows, so you can put breakpoints, etc, to debug and check how it works. It's very useful for the development.
    Expand
  • Using Tuya Aubess Mini Smart Switch (Belon2028N) with 16-Channel Relay Board: Shift Register Method

    Smart Home IoT smkassist  
    Views5031 Replies33 Last post
    p.kaczmarek2   08 Apr 2023 09:11
    smkassist wrote:

    Assuming you are using c or c++:
    You could set port shift to use a byte pointer so it could be used in any size the user wants.

    It's C, and it's of course possible. I just have a habit of doing everything as simple as possible because OBK is multiplatform now and so platforms are limited by available flash size. I am trying to reduce the number of instructions in the binary ,etc.

    smkassist wrote:

    I think it would be better if you set the number of channels instead of the number of registers.
    Or set the start and end channels...
    Like:
    startDriver ShiftRegister [DataPin] [LatchPin] [ClkPin] [FirstChannel] [last channel][order]
    Or
    startDriver ShiftRegister [DataPin] [LatchPin] [ClkPin] [FirstChannel] [TotalChannels] [order]

    Hmm okay I will think about that, the number of registers was for the sake of simplicity, because when shifting out, the number of bits has to be a multiply of 8, and when user gives a number of shift register chips, it's easier to calculate.

    smkassist wrote:

    Also, it should have a parameter to set it to active high or active low. Or can I set this in the channels individually?

    Is there a need to have per-bit swap flags? A global one could be added in a much more simple way.

    There is still a lot of memory left on BK7231 platforms, but on WinnerMicro, which has only 1 MB flash, and on BL602 seemingly as well, we are pretty limited. Soon we will have to use the approach common in other firmwares and just create separate builds with separate features.

    I have pushed a basic version:
    https://github.com/openshwprojects/OpenBK7231...mmit/1d5a00fe82d2cffac96e81d37cf43e86cbc38e1c
    Expand
  • Using Tuya Aubess Mini Smart Switch (Belon2028N) with 16-Channel Relay Board: Shift Register Method

    Smart Home IoT smkassist  
    Views5031 Replies33 Last post
    p.kaczmarek2   07 Apr 2023 23:36
    You can easily fork OpenBeken and get it running with Github online builds on your fork. You don't even have to compile on your PC. It's very easy, you're welcome to help.

    Currently port shift out function is working on 32 bit integer, so we can have 4 registers chained together

    I have working basic driver, but only for a single register. Tomorrow I will add support to multiple ones.

    There is a slight issue with HTML page style:

    The current config approach for driver is following:

    // startDriver ShiftRegister [DataPin] [LatchPin] [ClkPin] [FirstChannel] [Order] [TotalRegisters]
    startDriver ShiftRegister 24 6 7 10 1 1
    // If given argument is not present, default value is used
    // First channel is a first channel that is mapped to first output of shift register.
    // The total number of channels mapped is equal to TotalRegisters * 8, because every register has 8 pins.
    // Order can be 0 or 1, MSBFirst or LSBFirst

    // To make channel appear with Toggle, please also set the type:
    setChannelType 10 Toggle
    setChannelType 11 Toggle
    setChannelType 12 Toggle
    setChannelType 13 Toggle
    setChannelType 14 Toggle
    setChannelType 15 Toggle
    setChannelType 16 Toggle
    setChannelType 17 Toggle

    More details tomorrow.

    What would you like to know when it comes to source code? Do you know that OBK runs on Windows as well?
    Expand
  • Using Tuya Aubess Mini Smart Switch (Belon2028N) with 16-Channel Relay Board: Shift Register Method

    Smart Home IoT smkassist  
    Views5031 Replies33 Last post
    p.kaczmarek2   10 Apr 2023 09:58
    I would really want to know why those self test errors happen. Maybe somehow your build is missing "addClockEvent" function?

    The main idea of the simulator is to help speed up testing, development and debugging. Most of the issues we encounter are multiplatform and happen even on windows. Only a very tiny fraction of problems is BK7231-specific. That's why we can benefit from running OBK on Windows.

    The ShiftRegister can now handle up to 4 registers, it should work well, although I haven't yet changed the number of registers to number of channels. I think that it doesn't give us much difference, especially that we have 64 channels (as far as I know) and I can't imagine a scenario where someone must use non-multiply-of-8 number of channels with shift register because he's running out of channels.... but maybe later I will change it, you can also do the change if you want (open a pull request).
    It seems to work well:


    I also saw your topic about RF addon, I will look into it.

    What else can I do for you now? Is there any other peripheral you've got in mind?

    Added after 30 [minutes]:

    I am looking into why HTML breaks:


    Added after 7 [minutes]:

    EDIT: I have improved HTML a bit:
    Expand
  • Using Tuya Aubess Mini Smart Switch (Belon2028N) with 16-Channel Relay Board: Shift Register Method

    Smart Home IoT smkassist  
    Views5031 Replies33 Last post
    smkassist   06 Apr 2023 22:42
    So... I am new to this place.

    I have a tuya aubess mini smart switch (Belon2028N)

    And I have a 16 channel relay board from aliexpress:


    I also have some electronic junk that's useful for something.

    I managed to flash OpenBK on the tuya module and it's working well, but the module has only around 9 IO pins...

    My idea: use some shift registers, create 16 channels in the module and output these channels status sequentially so the shift registers can control all the relays.
    Is this possible? Is there any script that could help?
    Expand
  • How does a Bidirectional Shift Register work and how to control 10x 74HC595 in parallel?

    EEWeb Topics Anonymous  
    Views249 Replies15 Last post
    Anonymous   23 Apr 2013 11:17
    Expand
  • OpenBeken Charts Driver - configurable and flexible measurement history on your device

    Smart Home Guides p.kaczmarek2  
    Views6261 Replies66 Last post
    jkwim   07 Oct 2024 19:43
    Wanted try out the feature.

    On build 1.17.740.

    startDriver charts gives:

    Info:MAIN:Driver charts is not known in this build.
    Info:MAIN:Available drivers:
    Info:MAIN:TuyaMCU
    Info:MAIN:, tmSensor
    Info:MAIN:, PixelAnim
    Info:MAIN:, NTP
    Info:MAIN:, HTTPButtons
    Info:MAIN:, I2C
    Info:MAIN:, RN8209
    Info:MAIN:, BL0942
    Info:MAIN:, BL0942SPI
    Info:MAIN:, BL0937
    Info:MAIN:, CSE7766
    Info:MAIN:, SM16703P
    Info:MAIN:, SM15155E
    Info:MAIN:, IR
    Info:MAIN:, DDP
    Info:MAIN:, SSDP
    Info:MAIN:, DGR
    Info:MAIN:, Wemo
    Info:MAIN:, Hue
    Info:MAIN:, PWMToggler
    Info:MAIN:, DoorSensor
    Info:MAIN:, SM2135
    Info:MAIN:, BP5758D
    Info:MAIN:, BP1658CJ
    Info:MAIN:, SM2235
    Info:MAIN:, BMP280
    Info:MAIN:, CHT83XX
    Info:MAIN:, MCP9808
    Info:MAIN:, KP18058
    Info:MAIN:, ADCSmoother
    Info:MAIN:, SHT3X
    Info:MAIN:, SGP
    Info:MAIN:, ShiftRegister
    Info:MAIN:, DS1820
    Info:MAIN:, Battery
    Info:MAIN:, Bridge
    Info:CMD:[WebApp Cmd 'startDriver charts' Result] OK

    However when I look at
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/src/obk_config.h

    It shows:


    So does it mean that the feature is enabled by default now?

    UPDATE:
    I was looking under wrong module type.

    Submitted the following pull request.

    https://github.com/openshwprojects/OpenBK7231T_App/pull/1383

    So next step is for you to approve it only for automatic build? Am I understanding the process correctly?
    Expand
  • ESP8266, PCF8574 and 7-segment LED how to connect it correctly?

    ESP8266 and ESP32 CiekawyŚwiata  
    Views3525 Replies30 Last post
    janek_wro   18 Feb 2021 00:47
    CiekawyŚwiata wrote:
    Are you referring to, for example, the HD74HC674?
    .
    Oj I don't know if the HCs don't have a diode on the input to Vcc. If so, it won't take 5V well at the input, with Vcc=3.3V.

    In the TI documentation I found:

    Overvoltage-Tolerant Devices
    Devices with overvoltage-tolerant inputs
    can be used to perform down-translation.
    Logic families with overvoltage-tolerant
    inputs include:
    • AHC
    • AUC
    • AVC
    • LV-A
    • LVC

    CiekawyŚwiata wrote:
    Some example use in a similar application, from the data sheet I didn't find out/understand too much.

    https://en.wikipedia.org/wiki/Shift_register#Parallel-in_serial-out_(PISO)
    there you have an illustrative picture.

    Example use - what you need. You latch in parallel, all bits at the same time, and then eject to the output one bit at a time, in rhythm with the given CLK.
    Expand
  • ESP8266, PCF8574 and 7-segment LED how to connect it correctly?

    ESP8266 and ESP32 CiekawyŚwiata  
    Views3525 Replies30 Last post
    CiekawyŚwiata   18 Feb 2021 01:03
    janek_wro wrote:
    CiekawyŚwiata wrote:
    Is this about the HD74HC674, for example?
    .
    Oj I don't know if the HCs don't have a diode on the input to Vcc. If so, it won't take 5V well at the input, with Vcc=3.3V.

    In the TI documentation I found:

    Overvoltage-Tolerant Devices
    Devices with overvoltage-tolerant inputs
    can be used to perform down-translation.
    Logic families with overvoltage-tolerant
    inputs include:
    • AHC
    • AUC
    • AVC
    • LV-A
    • LVC
    This is probably already too high a threshold for fox legs.... I'm still not able to figure out what specific circuit this might be about. I'm looking for 74AHC674, 74LV-A674, 74LV674 - something's not right here, probably not the way to go.... I'm probably too stupid for this ;)

    janek_wro wrote:
    CiekawyŚwiata wrote:
    Some example use for a similar application, from the data sheet I didn't find out/understand much.

    https://en.wikipedia.org/wiki/Shift_register#Parallel-in_serial-out_(PISO)
    there you have an illustrative picture.
    Example use - what you need. You latch in parallel, all bits at the same time, and then eject to the output one bit at a time, in rhythm with the given CLK.

    I understand correctly that the main difference (or not the main difference) is that no interface in the sense of I2C or SPI is needed to support the 74xx674?
    Expand
  • Clock on ESP12 and MAX7219 display - tutorial - part 1, ArduinoOTA, basics

    Articles p.kaczmarek2  
    Views4074 Replies59 Last post
    max4elektroda   01 Dec 2025 10:39
    O.k., lets start with the basics - I made https://github.com/openshwprojects/OpenBK7231T_App/pull/1877 only containing the fixes:

    Some drivers were still missing arg "int bPreState" in some XX_AppendInformationToHTTPIndexPage() functions and in drv_main.c some functions were missed args for "onHassDiscovery".

    If you are interested how I tried a "complete" fix:

    Identifying "incomplete" AppendInformationToHTTPIndexPage() functions by searching all occurrences with "_AppendInformationToHTTPIndexPage(" and fron the results searching the ones without ","
    (since it should be _AppendInformationToHTTPIndexPage(http_request_t *request, int bPreState) the missing "," indicates a missing ", int bPreState" )



    To find "missing" args for "onHassDiscovery" I searched all "driver lines" and counted the number of "," (it should be 9, but some only had 8)
    Expand
  • Clock on ESP12 and MAX7219 display - tutorial - part 1, ArduinoOTA, basics

    Articles p.kaczmarek2  
    Views4074 Replies59 Last post
    max4elektroda   01 Dec 2025 16:51
    p.kaczmarek2 wrote:
    check if (already partially broken?) getcommands.js still work

    To be honest, I didn't check that (and I should have done, since I "repaired" it some time ago ;-)). Will do an report here about the results.

    Added after 2 [hours] 49 [minutes]:

    You were absolutely right, "getcommands.js" would struggle with the new layout for "commands" in drv_main.c now spanning multiple lines.
    Fixed now, so it works, but running the command shows, there are quite some possible new fixes to make documentation "clean" ;-):

    Actual "mismatches" of "documented" and actual function calls:

    $ node scripts/getcommands.js | grep -A 2 '!!'
    !!!! "SetChannelEnum" in file cmnds/cmd_channels.c -- fn "SetChannelEnum" != called function "CMD_SetChannelEnum" !!!!
    possible fix: sed -i '597,599 { /cmddetail:\"fn\":\"SetChannelEnum\"/ s%SetChannelEnum%CMD_SetChannelEnum% }' src/cmnds/cmd_channels.c
    test possible fix: sed -n '597,599 { /cmddetail:\"fn\":\"SetChannelEnum\"/ s%SetChannelEnum%CMD_SetChannelEnum% p }' src/cmnds/cmd_channels.c
    duplicate command "IRSend" docs at file: ./src/driver/drv_ir_new.cpp line: //cmddetail:{"name":"IRSend","args":"[PROT-ADDR-CMD-REP]",
    //cmddetail:{"name":"IRSend","args":"[PROT-ADDR-CMD-REP]",
    duplicate command "IREnable" docs at file: ./src/driver/drv_ir_new.cpp line: //cmddetail:{"name":"IREnable","args":"[Str][1or0]",
    //cmddetail:{"name":"IREnable","args":"[Str][1or0]",
    --
    !!!! "SM16703P_Init" in file driver/drv_leds_shared.c -- fn "SM16703P_InitForLEDCount" != called function "Strip_CMD_InitForLEDCount" !!!!
    possible fix: sed -i '330,332 { /cmddetail:\"fn\":\"SM16703P_InitForLEDCount\"/ s%SM16703P_InitForLEDCount%Strip_CMD_InitForLEDCount% }' src/driver/drv_leds_shared.c
    test possible fix: sed -n '330,332 { /cmddetail:\"fn\":\"SM16703P_InitForLEDCount\"/ s%SM16703P_InitForLEDCount%Strip_CMD_InitForLEDCount% p }' src/driver/drv_leds_shared.c
    !!!! "SM16703P_Start" in file driver/drv_leds_shared.c -- fn "SM16703P_StartTX" != called function "Strip_CMD_StartTX" !!!!
    possible fix: sed -i '336,338 { /cmddetail:\"fn\":\"SM16703P_StartTX\"/ s%SM16703P_StartTX%Strip_CMD_StartTX% }' src/driver/drv_leds_shared.c
    test possible fix: sed -n '336,338 { /cmddetail:\"fn\":\"SM16703P_StartTX\"/ s%SM16703P_StartTX%Strip_CMD_StartTX% p }' src/driver/drv_leds_shared.c
    !!!! "SM16703P_SetPixel" in file driver/drv_leds_shared.c -- fn "SM16703P_CMD_setPixel" != called function "Strip_CMD_setPixel" !!!!
    possible fix: sed -i '342,344 { /cmddetail:\"fn\":\"SM16703P_CMD_setPixel\"/ s%SM16703P_CMD_setPixel%Strip_CMD_setPixel% }' src/driver/drv_leds_shared.c
    test possible fix: sed -n '342,344 { /cmddetail:\"fn\":\"SM16703P_CMD_setPixel\"/ s%SM16703P_CMD_setPixel%Strip_CMD_setPixel% p }' src/driver/drv_leds_shared.c
    !!!! "SM16703P_SetRaw" in file driver/drv_leds_shared.c -- fn "SM16703P_CMD_setRaw" != called function "Strip_CMD_setRaw" !!!!
    possible fix: sed -i '348,350 { /cmddetail:\"fn\":\"SM16703P_CMD_setRaw\"/ s%SM16703P_CMD_setRaw%Strip_CMD_setRaw% }' src/driver/drv_leds_shared.c
    test possible fix: sed -n '348,350 { /cmddetail:\"fn\":\"SM16703P_CMD_setRaw\"/ s%SM16703P_CMD_setRaw%Strip_CMD_setRaw% p }' src/driver/drv_leds_shared.c
    duplicate driver docs (in "static driver_t g_drivers[] = {") for drv.name="IR" at file: ./src/driver/drv_main.c -- actual line://drvdetail:{"name":"IR",
    last "#if" statement: "#if ENABLE_DRIVER_IR"
    first defined with "#if" statement: "#if ENABLE_DRIVER_IRREMOTEESP"
    --
    !!!! "Gen" in file driver/drv_tclAC.c -- fn "Gen" != called function "CMD_Gen" !!!!
    possible fix: sed -i '788,790 { /cmddetail:\"fn\":\"Gen\"/ s%Gen%CMD_Gen% }' src/driver/drv_tclAC.c
    test possible fix: sed -n '788,790 { /cmddetail:\"fn\":\"Gen\"/ s%Gen%CMD_Gen% p }' src/driver/drv_tclAC.c



    and some missing documentation

    $ node scripts/getcommands.js | grep '^updated'
    updated ./src/driver/drv_girierMCU.c
    updated ./src/driver/drv_hlw8112.c
    duplicate command "IRSend" docs at file: ./src/driver/drv_ir_new.cpp line: //cmddetail:{"name":"IRSend","args":"[PROT-ADDR-CMD-REP]",
    //cmddetail:{"name":"IRSend","args":"[PROT-ADDR-CMD-REP]",
    duplicate command "IREnable" docs at file: ./src/driver/drv_ir_new.cpp line: //cmddetail:{"name":"IREnable","args":"[Str][1or0]",
    //cmddetail:{"name":"IREnable","args":"[Str][1or0]",
    duplicate driver docs at file: ./src/driver/drv_main.c line: static driver_t g_drivers[] = {
    static driver_t g_drivers[] = {
    updated ./src/driver/drv_main.c
    updated ./src/driver/drv_max72xx_clock.c
    updated ./src/driver/drv_max72xx_single.c
    updated ./src/driver/drv_simpleEEPROM.c
    updated ./src/mqtt/new_mqtt.c
    $
    $ for F in $(node scripts/getcommands.js 2>/dev/null | grep '^updated' | sed "s/updated //" ); do diff -u $F $F.getcommands ; done
    --- ./src/driver/drv_girierMCU.c 2025-12-01 10:07:17.392170672 +0100
    +++ ./src/driver/drv_girierMCU.c.getcommands 2025-12-01 14:14:35.192343305 +0100
    @@ -554,7 +554,15 @@
    UART_InitUART(g_baudRate, 0, false);
    UART_InitReceiveRingBuffer(1024);
    GirierMCU_SendInit();
    + //cmddetail:{"name":"linkGirierMCUOutputToChannel","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"GirierMCU_LinkGirierMCUOutputToChannel","file":"driver/drv_girierMCU.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("linkGirierMCUOutputToChannel", GirierMCU_LinkGirierMCUOutputToChannel, NULL);
    + //cmddetail:{"name":"GirierMCU_setBaudRate","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"GirierMCU_SetBaudRate","file":"driver/drv_girierMCU.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("GirierMCU_setBaudRate", GirierMCU_SetBaudRate, NULL);

    }
    --- ./src/driver/drv_hlw8112.c 2025-12-01 10:07:17.392170672 +0100
    +++ ./src/driver/drv_hlw8112.c.getcommands 2025-12-01 14:14:35.194343270 +0100
    @@ -481,15 +481,51 @@
    #endif

    void HLW8112_addCommads(void){
    + //cmddetail:{"name":"HLW8112_SetClock","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_SetClock","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_SetClock", HLW8112_SetClock, NULL);
    + //cmddetail:{"name":"HLW8112_SetResistorGain","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_SetResistorGain","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_SetResistorGain", HLW8112_SetResistorGain, NULL);
    + //cmddetail:{"name":"HLW8112_SetEnergyStat","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_SetEnergyStat","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_SetEnergyStat", HLW8112_SetEnergyStat, NULL);
    + //cmddetail:{"name":"clear_energy","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_ClearEnergy","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("clear_energy", HLW8112_ClearEnergy, NULL);
    #if HLW8112_SPI_RAWACCESS
    + //cmddetail:{"name":"HLW8112_write_reg","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_write_reg","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_write_reg", HLW8112_write_reg, NULL);
    + //cmddetail:{"name":"HLW8112_read_reg","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_read_reg","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_read_reg", HLW8112_read_reg, NULL);
    + //cmddetail:{"name":"HLW8112_print_coeff","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_print_coeff","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_print_coeff", HLW8112_print_coeff, NULL);
    + //cmddetail:{"name":"HLW8112_c","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_c","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_c", HLW8112_c, NULL);
    + //cmddetail:{"name":"HLW8112_a","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"HLW8112_a","file":"driver/drv_hlw8112.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("HLW8112_a", HLW8112_a, NULL);
    #endif
    }
    --- ./src/driver/drv_main.c 2025-12-01 10:08:21.566991406 +0100
    +++ ./src/driver/drv_main.c.getcommands 2025-12-01 14:14:35.201343147 +0100
    @@ -68,6 +68,10 @@
    },
    #endif
    #ifdef ENABLE_DRIVER_GIRIERMCU
    + //drvdetail:{"name":"GirierMCU",
    + //drvdetail:"title":"GirierMCU",
    + //drvdetail:"descr":"TODO",
    + //drvdetail:"requires":""}
    { "GirierMCU", // Driver Name
    GirierMCU_Init, // Init
    GirierMCU_RunEverySecond, // onEverySecond
    @@ -79,7 +83,6 @@
    false, // loaded
    },
    #endif
    -
    #if ENABLE_DRIVER_TCA9554
    //drvdetail:{"name":"TCA9554",
    //drvdetail:"title":"TODO",
    @@ -752,7 +755,6 @@
    false, // loaded
    },
    #endif
    -
    #if ENABLE_DRIVER_DDPSEND
    //drvdetail:{"name":"DDPSend",
    //drvdetail:"title":"TODO",
    --- ./src/driver/drv_max72xx_clock.c 2025-12-01 10:07:17.393170656 +0100
    +++ ./src/driver/drv_max72xx_clock.c.getcommands 2025-12-01 14:14:35.202343129 +0100
    @@ -243,6 +243,10 @@
    }
    void DRV_MAX72XX_Clock_Init() {

    + //cmddetail:{"name":"MAX72XXClock_Animate","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"DRV_MAX72XX_Clock_Animate","file":"driver/drv_max72xx_clock.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("MAX72XXClock_Animate", DRV_MAX72XX_Clock_Animate, NULL);
    }

    --- ./src/driver/drv_max72xx_single.c 2025-12-01 10:07:17.393170656 +0100
    +++ ./src/driver/drv_max72xx_single.c.getcommands 2025-12-01 14:14:35.203343112 +0100
    @@ -494,13 +494,25 @@
    //cmddetail:"examples":""}
    CMD_RegisterCommand("MAX72XX_Print", DRV_MAX72XX_Print, NULL);

    + //cmddetail:{"name":"MAX72XX_refresh","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"DRV_MAX72XX_Show","file":"driver/drv_max72xx_single.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("MAX72XX_refresh", DRV_MAX72XX_Show, NULL);

    //cmddetail:{"name":"DRV_MAX72XX_Clear","args":"DRV_MAX72XX_Clear",
    //cmddetail:"descr":"",
    //cmddetail:"fn":"DRV_DRV_MAX72XX_Clear","file":"driver/drv_max72xx_single.c","requires":"",
    //cmddetail:"examples":""}
    + //cmddetail:{"name":"MAX72XX_Clear","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"DRV_MAX72XX_Clear","file":"driver/drv_max72xx_single.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("MAX72XX_Clear", DRV_MAX72XX_Clear, NULL);
    + //cmddetail:{"name":"MAX72XX_SetPixel","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"DRV_MAX72XX_SetPixel","file":"driver/drv_max72xx_single.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("MAX72XX_SetPixel", DRV_MAX72XX_SetPixel, NULL);
    }

    --- ./src/driver/drv_simpleEEPROM.c 2025-12-01 10:07:17.395170622 +0100
    +++ ./src/driver/drv_simpleEEPROM.c.getcommands 2025-12-01 14:14:35.208343024 +0100
    @@ -163,8 +163,20 @@
    g_eepI2C.pin_clk = Tokenizer_GetArgIntegerDefault(1, g_eepI2C.pin_clk);
    g_eepI2C.pin_data = Tokenizer_GetArgIntegerDefault(2, g_eepI2C.pin_data);
    Soft_I2C_PreInit(&g_eepI2C);
    + //cmddetail:{"name":"EEPROM_Read","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"EEPROM_ReadCmd","file":"driver/drv_simpleEEPROM.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("EEPROM_Read", EEPROM_ReadCmd, NULL);
    + //cmddetail:{"name":"EEPROM_WriteHex","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"EEPROM_WriteHexCmd","file":"driver/drv_simpleEEPROM.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("EEPROM_WriteHex", EEPROM_WriteHexCmd, NULL);
    + //cmddetail:{"name":"EEPROM_Dump","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"EEPROM_DumpCmd","file":"driver/drv_simpleEEPROM.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("EEPROM_Dump", EEPROM_DumpCmd, NULL);
    }

    --- ./src/mqtt/new_mqtt.c 2025-12-01 10:07:17.423170156 +0100
    +++ ./src/mqtt/new_mqtt.c.getcommands 2025-12-01 14:14:35.316341125 +0100
    @@ -1995,6 +1995,10 @@
    #endif


    + //cmddetail:{"name":"publishDriver","args":"TODO",
    + //cmddetail:"descr":"",
    + //cmddetail:"fn":"MQTT_PublishCommandDriver","file":"mqtt/new_mqtt.c","requires":"",
    + //cmddetail:"examples":""}
    CMD_RegisterCommand("publishDriver", MQTT_PublishCommandDriver, NULL);
    }
    static float getInternalTemperature() {


    Added after 1 [hours] 30 [minutes]:

    Last two commits of this PR fixed all "compaints" from getcommands.js (leaving only the two "IR" errors).

    I don't want to change these, maybe you can take a look? One possible fix would be:

    instead of
    #if ENABLE_DRIVER_IRREMOTEESP
    ...
    #if ENABLE_DRIVER_IR
    use
    #if ENABLE_DRIVER_IRREMOTEESP || ENABLE_DRIVER_IR

    Not sure how to resolve both IR and IR2 defining "IRSend" and "IREnable" ("src/driver/drv_ir_new.cpp" and "src/driver/drv_ir.cpp").


    $ node scripts/getcommands.js
    starting
    cnst type name: MQTTOn
    cnst type name: $MQTTOn
    cnst type name: $CH***
    cnst type name: $CH**
    cnst type name: $CH*
    cnst type name: $FLAG**
    cnst type name: $FLAG*
    cnst type name: $led_dimmer
    cnst type name: $led_enableAll
    cnst type name: $led_hue
    cnst type name: $led_red
    cnst type name: $led_green
    cnst type name: $led_blue
    cnst type name: $led_saturation
    cnst type name: $led_temperature
    cnst type name: $activeRepeatingEvents
    cnst type name: $Flash*
    cnst type name: $voltage
    cnst type name: $current
    cnst type name: $power
    cnst type name: $frequency
    cnst type name: $energy
    cnst type name: $day
    cnst type name: $hour
    cnst type name: $minute
    cnst type name: $second
    cnst type name: $mday
    cnst type name: $month
    cnst type name: $year
    cnst type name: $yesterday
    cnst type name: $today
    cnst type name: $isDST
    cnst type name: $sunrise
    cnst type name: $sunset
    cnst type name: $NTPOn
    cnst type name: $batteryVoltage
    cnst type name: $batteryLevel
    cnst type name: $uptime
    cnst type name: $failedBoots
    cnst type name: $rand01
    cnst type name: $rand
    cnst type name: $rebootReason
    cnst type name: $intTemp
    duplicate command "IRSend" docs at file: ./src/driver/drv_ir_new.cpp line: //cmddetail:{"name":"IRSend","args":"[PROT-ADDR-CMD-REP]",
    //cmddetail:{"name":"IRSend","args":"[PROT-ADDR-CMD-REP]",
    duplicate command "IREnable" docs at file: ./src/driver/drv_ir_new.cpp line: //cmddetail:{"name":"IREnable","args":"[Str][1or0]",
    //cmddetail:{"name":"IREnable","args":"[Str][1or0]",
    drv type name: TuyaMCU
    drv type name: tmSensor
    drv type name: GirierMCU
    drv type name: TCA9554
    drv type name: DMX
    drv type name: Freeze
    drv type name: TESTSPIFLASH
    drv type name: PIR
    drv type name: PixelAnim
    drv type name: Drawers
    drv type name: HGS02
    drv type name: PinMutex
    drv type name: GosundSW2
    drv type name: TCL
    drv type name: OpenWeatherMap
    drv type name: Widget
    drv type name: TestCharts
    drv type name: Charts
    drv type name: NTP
    drv type name: HTTPButtons
    drv type name: TESTPOWER
    drv type name: TESTLED
    drv type name: TESTUART
    drv type name: Test
    drv type name: SimpleEEPROM
    drv type name: MultiPinI2CScanner
    drv type name: I2C
    drv type name: RN8209
    drv type name: BL0942
    drv type name: PWMG
    drv type name: BL0942SPI
    drv type name: HLW8112SPI
    drv type name: ChargingLimit
    drv type name: BL0937
    drv type name: CSE7761
    drv type name: CSE7766
    drv type name: MAX6675
    drv type name: MAX31855
    drv type name: PT6523
    drv type name: TextScroller
    drv type name: SM16703P
    drv type name: SM15155E
    drv type name: IR
    duplicate driver docs (in "static driver_t g_drivers[] = {") for drv.name="IR" at file: ./src/driver/drv_main.c -- actual line://drvdetail:{"name":"IR",
    last "#if" statement: "#if ENABLE_DRIVER_IR"
    first defined with "#if" statement: "#if ENABLE_DRIVER_IRREMOTEESP"
    drv type name: IR
    drv type name: IR2
    drv type name: DDPSend
    drv type name: DDP
    drv type name: SSDP
    drv type name: DGR
    drv type name: Wemo
    drv type name: Hue
    drv type name: PWMToggler
    drv type name: DoorSensor
    drv type name: ADCButton
    drv type name: MAX72XX_Clock
    drv type name: SM2135
    drv type name: BP5758D
    drv type name: BP1658CJ
    drv type name: SM2235
    drv type name: BMP280
    drv type name: MAX72XX
    drv type name: BMPI2C
    drv type name: CHT83XX
    drv type name: MCP9808
    drv type name: KP18058
    drv type name: ADCSmoother
    drv type name: SHT3X
    drv type name: SGP
    drv type name: ShiftRegister
    drv type name: AHT2X
    drv type name: DS1820
    drv type name: DS1820_FULL
    drv type name: HT16K33
    drv type name: TM1637
    drv type name: GN6932
    drv type name: TM1638
    drv type name: HD2015
    drv type name: Battery
    drv type name: BKPartitions
    drv type name: Bridge
    drv type name: UartTCP
    drv type name: TXWCAM
    ionel type name: None
    ionel type name: Relay
    ionel type name: Relay_n
    ionel type name: Button
    ionel type name: Button_n
    ionel type name: LED
    ionel type name: LED_n
    ionel type name: PWM
    ionel type name: LED_WIFI
    ionel type name: LED_WIFI_n
    ionel type name: Button_ToggleAll
    ionel type name: Button_ToggleAll_n
    ionel type name: DigitalInput
    ionel type name: DigitalInput_n
    ionel type name: ToggleChannelOnToggle
    ionel type name: DigitalInput_NoPup
    ionel type name: DigitalInput_NoPup_n
    ionel type name: BL0937_SEL
    ionel type name: BL0937_CF
    ionel type name: BL0937_CF1
    ionel type name: ADC
    ionel type name: SM2135_DAT
    ionel type name: SM2135_CLK
    ionel type name: BP5758D_DAT
    ionel type name: BP5758D_CLK
    ionel type name: BP1658CJ_DAT
    ionel type name: BP1658CJ_CLK
    ionel type name: PWM_n
    ionel type name: IRRecv
    ionel type name: IRSend
    ionel type name: Button_NextColor
    ionel type name: Button_NextColor_n
    ionel type name: Button_NextDimmer
    ionel type name: Button_NextDimmer_n
    ionel type name: AlwaysHigh
    ionel type name: AlwaysLow
    ionel type name: UCS1912_DIN
    ionel type name: SM16703P_DIN
    ionel type name: Button_NextTemperature
    ionel type name: Button_NextTemperature_n
    ionel type name: Button_ScriptOnly
    ionel type name: Button_ScriptOnly_n
    ionel type name: DHT11
    ionel type name: DHT12
    ionel type name: DHT21
    ionel type name: DHT22
    ionel type name: CHT83XX_DAT
    ionel type name: CHT83XX_CLK
    ionel type name: SHT3X_DAT
    ionel type name: SHT3X_CLK
    ionel type name: SOFT_SDA
    ionel type name: SOFT_SCL
    ionel type name: SM2235_DAT
    ionel type name: SM2235_CLK
    ionel type name: BridgeForward
    ionel type name: BridgeReverse
    ionel type name: SmartButtonForLEDs
    ionel type name: SmartButtonForLEDs_n
    ionel type name: DoorSensorWithDeepSleep
    ionel type name: DoorSensorWithDeepSleep_NoPup
    ionel type name: BAT_ADC
    ionel type name: BAT_Relay
    ionel type name: TM1637_DIO
    ionel type name: TM1637_CLK
    ionel type name: BL0937_SEL_n
    ionel type name: DoorSensorWithDeepSleep_pd
    ionel type name: SGP_CLK
    ionel type name: SGP_DAT
    ionel type name: ADC_Button
    ionel type name: GN6932_CLK
    ionel type name: GN6932_DAT
    ionel type name: GN6932_STB
    ionel type name: TM1638_CLK
    ionel type name: TM1638_DAT
    ionel type name: TM1638_STB
    ionel type name: BAT_Relay_n
    ionel type name: KP18058_CLK
    ionel type name: KP18058_DAT
    ionel type name: DS1820_IO
    ionel type name: PWM_ScriptOnly
    ionel type name: PWM_ScriptOnly_n
    ionel type name: Counter_f
    ionel type name: Counter_r
    ionel type name: IRRecv_nPup
    ionel type name: StripState
    ionel type name: StripState_n
    ionel type name: HLW8112_SCSN
    ionel type name: Total_Options
    Channel type name: Default
    Channel type name: Error
    Channel type name: Temperature
    Channel type name: Humidity
    Channel type name: Humidity_div10
    Channel type name: Temperature_div10
    Channel type name: Toggle
    Channel type name: Dimmer
    Channel type name: LowMidHigh
    Channel type name: TextField
    Channel type name: ReadOnly
    Channel type name: OffLowMidHigh
    Channel type name: OffLowestLowMidHighHighest
    Channel type name: LowestLowMidHighHighest
    Channel type name: Dimmer256
    Channel type name: Dimmer1000
    Channel type name: Frequency_div100
    Channel type name: Voltage_div10
    Channel type name: Power
    Channel type name: Current_div100
    Channel type name: ActivePower
    Channel type name: PowerFactor_div1000
    Channel type name: ReactivePower
    Channel type name: EnergyTotal_kWh_div1000
    Channel type name: EnergyExport_kWh_div1000
    Channel type name: EnergyToday_kWh_div1000
    Channel type name: Current_div1000
    Channel type name: EnergyTotal_kWh_div100
    Channel type name: OpenClosed
    Channel type name: OpenClosed_Inv
    Channel type name: BatteryLevelPercent
    Channel type name: OffDimBright
    Channel type name: LowMidHighHighest
    Channel type name: OffLowMidHighHighest
    Channel type name: Custom
    Channel type name: Power_div10
    Channel type name: ReadOnlyLowMidHigh
    Channel type name: SmokePercent
    Channel type name: Illuminance
    Channel type name: Toggle_Inv
    Channel type name: OffOnRemember
    Channel type name: Voltage_div100
    Channel type name: Temperature_div2
    Channel type name: TimerSeconds
    Channel type name: Frequency_div10
    Channel type name: PowerFactor_div100
    Channel type name: Pressure_div100
    Channel type name: Temperature_div100
    Channel type name: LeakageCurrent_div1000
    Channel type name: Power_div100
    Channel type name: Motion
    Channel type name: ReadOnly_div10
    Channel type name: ReadOnly_div100
    Channel type name: ReadOnly_div1000
    Channel type name: Ph
    Channel type name: Orp
    Channel type name: Tds
    Channel type name: Motion_n
    Channel type name: Frequency_div1000
    Channel type name: OpenStopClose
    Channel type name: Percent
    Channel type name: StopUpDown
    Channel type name: EnergyImport_kWh_div1000
    Channel type name: Enum
    Channel type name: ReadOnlyEnum
    Channel type name: Current_div10
    Channel type name: Max
    Going to read docs/json/faq.json
    Going to read docs/json/generic.json
    Going to read docs/json/commandExamples.json
    Going to read docs/json/autoexecExamples.json
    Going to read docs/json/scriptExamples.json
    Going to read docs/json/mqttTopics.json
    Going to read docs/json/subpages.json
    wrote docs/ioRoles.md
    There are 88 ioRoles
    wrote docs/json/ioRoles.json
    wrote docs/flags.md
    There are 52 flags
    wrote docs/json/flags.json
    wrote docs/drivers.md
    There are 81 drivers
    wrote docs/json/drivers.json
    wrote docs/constants.md
    There are 43 constants
    wrote docs/json/constants.json
    wrote docs/channelTypes.md
    There are 67 channelTypes
    wrote docs/json/channelTypes.json
    wrote docs/faq.md
    There are 31 faq
    wrote docs/commands.md
    There are 393 commands
    wrote docs/json/commands.json
    wrote docs/commandExamples.md
    There are 11 commandExamples
    wrote docs/autoexecExamples.md
    There are 38 autoexecExamples
    wrote docs/mqttTopics.md
    There are 25 mqttTopics
    wrote docs/scriptExamples.md
    There are 6 scriptExamples
    wrote docs/commands-extended.md
    There are 393 commands-extended
    wrote docs/initialSetup.md
    wrote docs/safeMode.md
    wrote docs/tcpServer.md
    wrote docs/homeAssistant.md
    wrote docs/README.md
    Expand
  • Multi-platform IoT firmware supporting up to 32 platforms - OBK 2025 summary

    Smart Home Guides p.kaczmarek2  
    Views3156 Replies79 Last post
    p.kaczmarek2   31 Dec 2025 11:13

    For several years, Elektroda has been developing universal, open-source software for various types of Wi-Fi-controlled building automation devices, such as relays, LED lamp and LED strip controllers (including WS2812), thermostats, energy meters, or there temperature, humidity, motion sensors. Along with the firmware, a list of supported devices and extensive documentation of their internals is created. Here I will show the status of this project as of 2025.12.31.

    Why change the firmware?
    Let us now consider what the overall purpose of this project is. Why change the firmware when the products already come with the manufacturer's software? Is there any point in combining? Motivations may vary, below I list the reasons in random order:
    - extending functionality - after changing the firmware you can add sensors, scripts, mechanisms at will. Then you have full control over GPIO, you can add a temperature sensor to every light switch, etc., or even an IR receiver, whatever you prefer
    - freedom from the cloud and potential surveillance - the reprogrammed device operates 100% locally and does not report data anywhere
    - security in case of problems at the manufacturer - many devices are dependent on the cloud, so if something goes wrong at the supplier, we may end up with useless equipment. The supplier has also been known to introduce a paid subscription after the fact....
    - connecting to different ecosystems and Home Assistant - not every device can be easily connected to HA or this is limited, OBK supports HA without limits
    - use the device as an Arduino-style DIY platform - once the firmware is changed, any project can be realised on a supported Wi-Fi chip
    - energy saving and product life extension - e.g. for LED lamps (https://www.elektroda.com/rtvforum/topic4158135.html )

    Repository and project name
    The project was started as firmware for BK7231 chips and christened as https://github.com/openshwprojects/OpenBK7231T_App . At the moment the name has remained, but the whole thing is a multi-platform application supporting around 32 platforms.

    Platforms supported as of 2025.12.31
    Here is the status of platform support as of 2025.12.31. For the latest version, https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/platforms.md .
    I made the platform count according to the criterion of separate binary files. This means that e.g. the W800 / W801 is counted as one platform, because it has a common batch, and the ESP32 is counted as several platforms, because there are separate versions of C3, C6, etc.
    Platform Family WPA3 OTA GPIO GPI Interruption UART PWM ADC Deep Sleep WDT SPI LED IR BK7231T Beken ✅¹² ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅¹² ✅ BK7231N Beken ✅¹² ✅ ✅ ✅ ✅¹² ✅ ✅ ✅ ✅ ✅ ✅ ✅ BK7231S / BK7231U Beken ✅ ✅¹ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ BK7238 Beken ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ BK7252 BK7252 Beken ✅ ⚠️¹'¹⁴ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ BK7252N Beken ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ XR809 XRadio ❌ ❌⁵ 62705↩ ✅ ✅ ✅⁸ ✅ ✅ ✅ ❌ ❌ ❌ XR806 XRadio ✅ ✅ ✅ ✅ ✅ ✅ ✅⁸ ✅ ✅ ✅ ❌ ❌ XR872 / XF16 XRadio ✅ ✅² ✅ ✅ ✅ ✅⁸ ✅ ✅ ✅ ❌ ❌ BL602 / LF686 Bouffalo Lab ✅ ✅⁴ ✅ ✅ ✅ ✅⁴ ✅ ❌ ✅ ✅ ✅ W800 / W801 Winner Micro ❌ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ✅ ❌ ✅ ❌ W600 / W601 Winner Micro ❌ Winner Micro ✅ ✅ ✅ ✅ ✅ ✅ ❌ ✅ ❌ ❌ LN882H Lightning Semi ✅ ✅⁴ ✅ ✅ ❌ ✅ >❗️ ❌ ✅ ✅ ✅ ESP8266 / ESP8285 Espressif ⚠️¹³ ✅²'⁴ ✅ ✅ ✅ ✅⁴ ✅⁷ ❌ ❗️ ESP32 / C2 / C3 / C5 / C6 / C61 / S2 / S3 Espressif ⚠️¹³ ✅⁴ ✅ ✅ ✅ ✅ ❓ ✅¹⁰ ✅ ❌ TR6260 Transa Semi ❌ ❗️³'⁴ ✅ ✅ >❌ ✅⁸ ❌ ❌ ❌ ✅⁹ ❌ ❌ ❌ RTL8711AM (Ameba1) Realtek ❗️ ✅⁴ ✅ ✅ ✅ ✅ ✅⁸ ✅ ❌ ❌ ✅ ✅ ❌ RTL8710B (AmebaZ) Realtek ✅ ✅⁴ ✅ ✅ ✅⁸ ❌ ❌ ✅ ✅ ❌ ❌ RTL8710C / RTL8720C (AmebaZ2) Realtek ✅ ✅⁴ ✅ ✅ ✅ ✅⁸ ✅ ➖ ❌ ✅ ❌ ✅ ✅ RTL8720D / RTL872xCSM / RTL8720CS (AmebaCS) Realtek ✅ ✅⁴ ✅ ✅ ✅ ✅⁸ ❌ ❌ ❌ ✅ ✅ ❗️ RTL8721DA / RTL8711DAF (AmebaDplus) Realtek ✅ ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌ ✅ ✅ ❗️ RTL8720E / RTL8710ECF (AmebaLite) Realtek ✅ ✅ ✅ ✅ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ❗️ ECR6600<br> ESWIN ✅ ✅ ✅ ✅ ✅ ✅⁸ ❗️ ❗️¹¹ ✅ ❌ ❌ TXW81X Taixin ❌ ❗️ ✅ ❓ ❌ ❌ ❌ ❌ ❌ ❓ ❌ ❌ RDA5981 RDA5981 RDA ❌ ✅ ✅ ✅ ✅ 62ba66ba5f ✅ ❌ ❌ ❌ ✅ ➖ ❌
    Quote:
    ✅ - Works
    ❓ - Not tested
    ❌ - Not implemented
    ❗️ - Defective / not working
    ⚠️ - Warning
    ➖ - Not applicable

    Quote:
    ¹ Success dependent on partition layout set in bootloader. SPI flash QIO firmware required for a certain OTA
    ² Excluding 1 MB variant
    ³ Implemented, but no file generation tool
    ⁴ No OTA HTTP, only via web application
    ⁵ OTA attempt crashes the device
    ⁶ OTA in web application is corrupted, use HTTP OTA
    ⁷ Software PWM - possible flickering
    ⁸ Note pin assignment - some PWM channels overlap
    ⁹ WDT configured in SDK
    ¹⁰ Timed sleep only, no wake-up via GPIO
    ¹¹ After waking up, device does not connect to Wi-Fi until power is removed again
    ¹² Only in _ALT builds
    ¹³ Must be manually enabled (CONFIG_ESP8266_WIFI_ENABLE_WPA3_SAE / CONFIG_ESP_WIFI_ENABLE_WPA3_SAE = y in sdkconfig.defaults)
    ¹⁴ OTA on Tuya BK7252 is not supported (the stock bootloader does nothing, the custom one does not encrypt the main - brick partition)


    How is the batch uploaded?
    The batch is uploaded via UART, a USB to UART converter is needed. We have our own flasher for this:
    https://github.com/openshwprojects/BK7231GUIFlashTool

    Once uploaded, we connect the device to our Wi-Fi and configure the GPIO. Our Flasher often knows how to auto-detect the GPIO - you don't have to guess, you don't have the problem you have with Tasmota.
    And even if you did have to guess - we still have a tool that makes it easy:
    https://www.elektroda.com/rtvforum/topic3976371.html
    https://www.elektroda.pl/rtvforum/topic3976371.html

    Online and automatic OTA compilation
    The project can be compiled fully online. This is used even in normal firmware development. Toolchain on the local computer is unnecessary.
    More information:
    https://www.elektroda.com/rtvforum/topic4033833.html
    https://www.elektroda.pl/rtvforum/topic4033833.html
    In addition, we have a tool that with each compilation downloads and updates the firmware itself on the target devices:
    https://www.elektroda.com/rtvforum/topic4093378.html How to programmatically access pull requests, commits and download artifacts from Github?
    https://www.elektroda.pl/rtvforum/topic4093378.html
    https://github.com/openshwprojects/OBKotaTool


    Windows-based simulator and automated testing
    Another distinguishing feature of this project is the OBK Simulator on Windows/Linux. It is an implementation of HAL for these platforms combined with a visual schematic editor.

    https://www.elektroda.com/rtvforum/topic4046056.html
    https://www.elektroda.pl/rtvforum/topic4046056.html
    This allows you to test advanced circuits directly on your computer. Everything you need is supported - even pairing with Home Assistant, so you can connect a virtual device via MQTT.
    The other obvious consequence of the Windows port is that automatic tests can be used easily:
    https://www.elektroda.com/rtvforum/topic4109775.html
    https://www.elektroda.pl/rtvforum/topic4109775.html
    These are fired up on GitHub with each compilation. If tests detect a problem, commit is flagged as incorrect.


    Device list
    In addition, the OBK community maintains a list of devices. Most of these are either supported or in development, although I've recently put Zigbee devices on there as well - just for information.
    https://openbekeniot.github.io/webapp/devicesList.html
    Devices can be grouped by platform and by description type (GPIO template or full article).
    As of 2025.12.31 we have 817 devices there .

    Berry scripts
    OBK can be scripted Berry - of course this also works in the Simulator, so you can test without the target device. Information:
    https://www.elektroda.com/rtvforum/topic4117238.html
    https://www.elektroda.pl/rtvforum/topic4117238.html

    Fi-Fi module as hosting
    OBK has LFS integrations and can host files. A REST interface is also present, so you can make your own panel in HTML and Javascript:
    https://www.elektroda.com/rtvforum/topic3971355.html
    https://www.elektroda.pl/rtvforum/topic3971355.html
    LFS supports GZIP compression for files downloaded by the browser - you can fit a lot of text that compresses really well:
    https://www.elektroda.com/rtvforum/topic4129516.html
    https://www.elektroda.pl/rtvforum/topic4129516.html


    supported drivers
    Here is an incomplete list of supported drivers. Many of them support several devices of this type each, so even if something is not on the list, it may still be supported.
    TuyaMCU (regular and battery-powered) GirierMCU, TCA9554, DMX, PIR, PixelAnim (WS2812 animations), Drawers, HGS02, PinMutex, GosundSW2, TCL (climate control), OpenWeatherMap, Widget (HTML controls), Charts, NTP, DS3231, HTTPButtons, SimpleEEPROM, MultiPinI2CScanner, I2C, RN8209, BL0942, PWMG, BL0942SPI, HLW8112SPI, ChargingLimit, BL0937, CSE7761, CSE7766, MAX6675, MAX31855, PT6523, TextScroller, SM16703P, SM15155E, IR (infrared), RC (radio), IR2, DDPSend, DDP, SSDP, DGR, Wemo, Hue, PWMToggler, DoorSensor, ADCButton, MAX72XX_Clock, SM2135, BP5758D, BP1658CJ, SM2235, BMP280, MAX72XX, BMPI2C, CHT83XX, MCP9808, KP18058, ADCSmoother, SHT3X, SGP, ShiftRegister, AHT2X, DS1820, DS1820_FULL, HT16K33, TM1637, GN6932, TM1638, HD2015, Battery, Bridge, UartTCP, TXWCAM, DHT11, DHT12, DHT21, DHT22, Shutters (curtains).
    Status as of 2025.12.31 , more will be added soon!

    Additional materials
    The OBK documentation is available in our repository:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/README.md
    For example, here is a list of drivers:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/drivers.md
    A lot of loose material on OBK is in our tutorial section:
    https://www.elektroda.pl/rtvforum/forum517.html
    Some of the material is in the form of videos - e.g. on YouTube:
    https://www.youtube.com/@elektrodacom


    Summary
    Shown https://github.com/openshwprojects/OpenBK7231T_App is fully open source, free, and supports 32 platforms at this point. It is uploaded via the UART, although detailed instructions depend on the platform in question. It allows the device in question to be free from the cloud, freely scripted and programmed, and linked to Home Assistant.
    The firmware has many drivers (sensors, communication protocols, LED controllers, etc.) and integrations (DDP, DMX, Tasmota Device Groups).
    In addition, the whole thing has numerous facilities to facilitate development and testing, such as online testing and compilation, a simulator on Windows, or there tools for automatic OTA from a given PR (pull request - change proposal) on GitHub.
    If you want to support the project, feel free to:
    https://paypal.me/openshwprojects
    Do you have suggestions as to what interesting sensors or peripherals can still be supported and supported? Or do you know of any other useful platforms?


    Special thanks to @insmod, @divadiow , @dedamraz , @max4electrode for their huge contribution to the project!
    Expand
  • [CBLC9/BK7231N] RTX WCM1MR roller shutter controller with GPIO output

    Smart Home Devices p.kaczmarek2  
    Views4359 Replies4 Last post
    p.kaczmarek2   22 Nov 2024 08:54
    What you are talking about was stated at the beginning of the topic, before the firmware change:
    p.kaczmarek2 wrote:
    .
    The product is characterised by the ability to plug in RF control, there is a connector on the casing for this. Apart from this, there is only WiFi. The product is realised on the BK7231, as evidenced by
    .
    Thank you for showing a pic of what it looks like.

    After the firmware change, as I wrote, the socket can be used to connect a wide variety of sensors. For example to connect a DHT (several types are supported):
    .
    An IR receiver can also be connected and controlled by remote control:
    .
    Or even a DS18B20:
    .
    Just be aware that there is an uninsulated power supply inside.
    Expand