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