From 8809dced4728773b3d6278c8b38dd4453d95eb88 Mon Sep 17 00:00:00 2001 From: Igor Panteleyev Date: Tue, 14 Jul 2026 22:23:02 +0300 Subject: [PATCH 1/2] Migrate docks to `zensical` --- .github/workflows/deploy-docs.yml | 2 +- CLAUDE.md | 4 +- Justfile | 8 +- README.md | 2 +- docs/controller_reference.md | 1220 ++++++++++++++++++++++----- docs/index.md | 5 + docs/protocol.md | 5 + llms.txt | 2 +- mkdocs.yml | 2 + pyproject.toml | 7 +- scripts/gen_ai_docs.py | 2 +- scripts/gen_controller_reference.py | 188 +++++ src/pycomap/controller.py | 56 +- tests/unit/test_controller.py | 56 ++ uv.lock | 239 ++---- 15 files changed, 1389 insertions(+), 409 deletions(-) create mode 100644 scripts/gen_controller_reference.py diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index ac8d755..d4a5aee 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -25,7 +25,7 @@ jobs: run: uv sync --frozen - name: Build docs - run: uv run mkdocs build + run: uv run zensical build - name: Upload Pages artifact uses: actions/upload-pages-artifact@v5 diff --git a/CLAUDE.md b/CLAUDE.md index e8d8add..3a95746 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,7 +23,7 @@ just unit # pytest tests/unit, no hardware (alias: u) just test # full pytest suite (alias: t) just integration # pytest tests/integration, requires .env (alias: i) just coverage # unit tests with coverage report (alias: cov) -just docs # build MkDocs static site → site/ +just docs # build Zensical static site → site/ just docs-serve # live-reload preview at localhost:8000 just ai-docs # regenerate llms.txt and CLAUDE.md from README.md ``` @@ -64,7 +64,7 @@ async with Controller( await ctrl.set_setpoint("Summer Time Mode", "Winter") # STRING_LIST by label ``` -See the [API docs](https://igor-panteleev.github.io/pycomap/) for full reference. `just docs-serve` to browse locally. +See the [API docs](https://igor-panteleev.github.io/pycomap/) for full reference, built with [Zensical](https://zensical.org/). `just docs-serve` to browse locally. ## Development diff --git a/Justfile b/Justfile index e8635ed..258e3ef 100644 --- a/Justfile +++ b/Justfile @@ -64,13 +64,13 @@ coverage: prepare # --- Documentation --- -# Build MkDocs static site (output: site/) +# Build Zensical static site (output: site/) docs: prepare - uv run mkdocs build + uv run zensical build -# Serve MkDocs site locally with live reload +# Serve Zensical site locally with live reload docs-serve: prepare - uv run mkdocs serve + uv run zensical serve # Regenerate llms.txt and CLAUDE.md from README.md ai-docs: prepare diff --git a/README.md b/README.md index e22446b..0d3ab8b 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ async with Controller( await ctrl.set_setpoint("Summer Time Mode", "Winter") # STRING_LIST by label ``` -See the [API docs](https://igor-panteleev.github.io/pycomap/) for full reference. `just docs-serve` to browse locally. +See the [API docs](https://igor-panteleev.github.io/pycomap/) for full reference, built with [Zensical](https://zensical.org/). `just docs-serve` to browse locally. ## Development diff --git a/docs/controller_reference.md b/docs/controller_reference.md index 8b4e807..0f830ea 100644 --- a/docs/controller_reference.md +++ b/docs/controller_reference.md @@ -12,54 +12,54 @@ hide: | 8192 | SECOND | Generator | Generator Voltage L1-N | UNSIGNED16 | V | 0 | | 8193 | SECOND | Generator | Generator Voltage L2-N | UNSIGNED16 | V | 0 | | 8194 | SECOND | Generator | Generator Voltage L3-N | UNSIGNED16 | V | 0 | -| 8195 | SECOND | Mains | Mains Voltage L1-N | UNSIGNED16 | V | 233 | +| 8195 | SECOND | Mains | Mains Voltage L1-N | UNSIGNED16 | V | 234 | | 8196 | SECOND | Mains | Mains Voltage L2-N | UNSIGNED16 | V | 0 | | 8197 | SECOND | Mains | Mains Voltage L3-N | UNSIGNED16 | V | 0 | -| 8198 | SECOND | Load | Load A L1 | UNSIGNED16 | A | 0 | -| 8199 | SECOND | Load | Load A L2 | UNSIGNED16 | A | 0 | -| 8200 | SECOND | Load | Load A L3 | UNSIGNED16 | A | 0 | -| 8202 | SECOND | Load | Load kW | INTEGER16 | kW | 0 | -| 8203 | SECOND | Load | Load kVAr | INTEGER16 | kVAr | 0 | -| 8204 | SECOND | Load | Load Power Factor | INTEGER8 | | 0 | -| 8205 | THIRD | Statistics | Genset kWh | INTEGER32 | kWh | 19 | -| 8206 | THIRD | Statistics | Running Hours | INTEGER32 | h | 55.04 | +| 8198 | SECOND | Load | Load A L1 | UNSIGNED16 | A | 0.0 | +| 8199 | SECOND | Load | Load A L2 | UNSIGNED16 | A | 0.0 | +| 8200 | SECOND | Load | Load A L3 | UNSIGNED16 | A | 0.0 | +| 8202 | SECOND | Load | Load kW | INTEGER16 | kW | 0.0 | +| 8203 | SECOND | Load | Load kVAr | INTEGER16 | kVAr | 0.0 | +| 8204 | SECOND | Load | Load Power Factor | INTEGER8 | | 0.00 | +| 8205 | THIRD | Statistics | Genset kWh | INTEGER32 | kWh | 190.0 | +| 8206 | THIRD | Statistics | Running Hours | INTEGER32 | h | 550.4 | | 8207 | THIRD | Statistics | Num Starts | UNSIGNED16 | | 351 | -| 8210 | SECOND | Generator | Generator Frequency | UNSIGNED16 | Hz | 0 | -| 8211 | SECOND | Mains | Mains Frequency | UNSIGNED16 | Hz | 5 | -| 8213 | THIRD | Controller I/O | BatteryVoltage | INTEGER16 | V | 1.27 | +| 8210 | SECOND | Generator | Generator Frequency | UNSIGNED16 | Hz | 0.0 | +| 8211 | SECOND | Mains | Mains Frequency | UNSIGNED16 | Hz | 50.0 | +| 8213 | THIRD | Controller I/O | BatteryVoltage | INTEGER16 | V | 12.7 | | 8235 | FIRST | Controller I/O | Binary Inputs | BINARY16 | | 2 | | 8239 | FIRST | Controller I/O | Binary Outputs | BINARY16 | | 0 | | 8395 | SECOND | Load | Load Characteristic | CHAR | | 20 | -| 8450 | THIRD | Invisible | IgMax | UNSIGNED16 | A | 7.5 | +| 8450 | THIRD | Invisible | IgMax | UNSIGNED16 | A | 75.0 | | 8451 | THIRD | Invisible | ST | UNSIGNED16 | | 277 | | 8452 | THIRD | Invisible | ST | UNSIGNED16 | | 161 | | 8453 | THIRD | Invisible | ST | UNSIGNED16 | | 277 | | 8454 | THIRD | Invisible | ST | UNSIGNED16 | | 138 | -| 8480 | ONE_TIME | IL Info | Application | STRING_LIST | | — | -| 8524 | SECOND | Load | Load kW L1 | INTEGER16 | kW | 0 | -| 8525 | SECOND | Load | Load kW L2 | INTEGER16 | kW | 0 | -| 8526 | SECOND | Load | Load kW L3 | INTEGER16 | kW | 0 | -| 8527 | SECOND | Load | Load kVAr L1 | INTEGER16 | kVAr | 0 | -| 8528 | SECOND | Load | Load kVAr L2 | INTEGER16 | kVAr | 0 | -| 8529 | SECOND | Load | Load kVAr L3 | INTEGER16 | kVAr | 0 | -| 8530 | SECOND | Load | Load kVA L1 | INTEGER16 | kVA | 0 | -| 8531 | SECOND | Load | Load kVA L2 | INTEGER16 | kVA | 0 | -| 8532 | SECOND | Load | Load kVA L3 | INTEGER16 | kVA | 0 | -| 8533 | SECOND | Load | Load Power Factor L1 | INTEGER8 | | 0 | -| 8534 | SECOND | Load | Load Power Factor L2 | INTEGER8 | | 0 | -| 8535 | SECOND | Load | Load Power Factor L3 | INTEGER8 | | 0 | -| 8539 | THIRD | Statistics | Genset kVArh | INTEGER32 | kVArh | 97.51 | -| 8565 | SECOND | Load | Load kVA | INTEGER16 | kVA | 0 | +| 8480 | ONE_TIME | IL Info | Application | [STRING_LIST](#application-8480) | | — | +| 8524 | SECOND | Load | Load kW L1 | INTEGER16 | kW | 0.0 | +| 8525 | SECOND | Load | Load kW L2 | INTEGER16 | kW | 0.0 | +| 8526 | SECOND | Load | Load kW L3 | INTEGER16 | kW | 0.0 | +| 8527 | SECOND | Load | Load kVAr L1 | INTEGER16 | kVAr | 0.0 | +| 8528 | SECOND | Load | Load kVAr L2 | INTEGER16 | kVAr | 0.0 | +| 8529 | SECOND | Load | Load kVAr L3 | INTEGER16 | kVAr | 0.0 | +| 8530 | SECOND | Load | Load kVA L1 | INTEGER16 | kVA | 0.0 | +| 8531 | SECOND | Load | Load kVA L2 | INTEGER16 | kVA | 0.0 | +| 8532 | SECOND | Load | Load kVA L3 | INTEGER16 | kVA | 0.0 | +| 8533 | SECOND | Load | Load Power Factor L1 | INTEGER8 | | 0.00 | +| 8534 | SECOND | Load | Load Power Factor L2 | INTEGER8 | | 0.00 | +| 8535 | SECOND | Load | Load Power Factor L3 | INTEGER8 | | 0.00 | +| 8539 | THIRD | Statistics | Genset kVArh | INTEGER32 | kVArh | 975.1 | +| 8565 | SECOND | Load | Load kVA | INTEGER16 | kVA | 0.0 | | 8626 | SECOND | Load | Load Characteristic L1 | CHAR | | 20 | | 8627 | SECOND | Load | Load Characteristic L2 | CHAR | | 20 | | 8628 | SECOND | Load | Load Characteristic L3 | CHAR | | 20 | -| 8707 | ONE_TIME | IL Info | FW Branch | STRING_LIST | | — | +| 8707 | ONE_TIME | IL Info | FW Branch | [STRING_LIST](#fw-branch-8707) | | — | | 8955 | FIRST | Invisible | Timer Value | UNSIGNED16 | | 0 | -| 9018 | SECOND | Generator | Nominal Power | INTEGER16 | kW | 1.5 | +| 9018 | SECOND | Generator | Nominal Power | INTEGER16 | kW | 15.0 | | 9040 | THIRD | Statistics | Total Fuel Consumption | UNSIGNED32 | L | 0 | | 9143 | FIRST | Log Bout | Log Bout 1 | BINARY16 | | 0 | -| 9144 | FIRST | Log Bout | Log Bout 2 | BINARY16 | | 8248 | -| 9145 | SECOND | Log Bout | Log Bout 3 | BINARY16 | | 4224 | +| 9144 | FIRST | Log Bout | Log Bout 2 | BINARY16 | | 24712 | +| 9145 | SECOND | Log Bout | Log Bout 3 | BINARY16 | | 1024 | | 9146 | SECOND | Log Bout | Log Bout 4 | BINARY16 | | 0 | | 9147 | SECOND | Log Bout | Log Bout 5 | BINARY16 | | 0 | | 9148 | SECOND | Log Bout | Log Bout 6 | BINARY16 | | 304 | @@ -69,23 +69,23 @@ hide: | 9152 | THIRD | Controller I/O | Not Used | INTEGER16 | | -32768 | | 9153 | THIRD | Controller I/O | Not Used | INTEGER16 | | -32768 | | 9154 | THIRD | Controller I/O | Not Used | INTEGER16 | | -32768 | -| 9244 | FIRST | IL Info | Engine State | STRING_LIST | | Ready | -| 9245 | FIRST | IL Info | Breaker State | STRING_LIST | | MainsOper | +| 9244 | FIRST | IL Info | Engine State | [STRING_LIST](#engine-state-9244) | | NotReady | +| 9245 | FIRST | IL Info | Breaker State | [STRING_LIST](#breaker-state-9245) | | MainsOper | | 9628 | SECOND | Generator | Generator Voltage L1-L2 | UNSIGNED16 | V | 0 | | 9629 | SECOND | Generator | Generator Voltage L2-L3 | UNSIGNED16 | V | 0 | | 9630 | SECOND | Generator | Generator Voltage L3-L1 | UNSIGNED16 | V | 0 | | 9631 | SECOND | Mains | Mains Voltage L1-L2 | UNSIGNED16 | V | 0 | | 9632 | SECOND | Mains | Mains Voltage L2-L3 | UNSIGNED16 | V | 0 | | 9633 | SECOND | Mains | Mains Voltage L3-L1 | UNSIGNED16 | V | 0 | -| 9887 | FIRST | Invisible | Controler Mode | STRING_LIST | | AUTO | +| 9887 | FIRST | Invisible | Controler Mode | [STRING_LIST](#controler-mode-9887) | | OFF | | 9917 | THIRD | Generator | Nominal Voltage | UNSIGNED16 | V | 231 | -| 9978 | THIRD | Generator | Nominal Current | UNSIGNED16 | A | 6.3 | +| 9978 | THIRD | Generator | Nominal Current | UNSIGNED16 | A | 63.0 | | 10006 | SECOND | Engine | SpeedReq RPM | UNSIGNED16 | RPM | 900 | | 10034 | FIRST | Engine | ECU State | BINARY8 | - | 0 | -| 10040 | FIRST | IL Info | Timer Text | STRING_LIST | | No Timer | +| 10040 | FIRST | IL Info | Timer Text | [STRING_LIST](#timer-text-10040) | | No Timer | | 10123 | SECOND | Engine | RPM | INTEGER16 | RPM | 0 | -| 10124 | THIRD | Invisible | CU Temperature | INTEGER16 | °C | 15.64 | -| 10137 | SECOND | Engine | Speed Request | INTEGER16 | % | 5 | +| 10124 | THIRD | Invisible | CU Temperature | INTEGER16 | °C | 156.6 | +| 10137 | SECOND | Engine | Speed Request | INTEGER16 | % | 50.0 | | 10153 | THIRD | Engine | Not Used | INTEGER16 | - | -32768 | | 10154 | THIRD | Engine | Not Used | INTEGER16 | - | -32768 | | 10155 | THIRD | Engine | Not Used | INTEGER16 | - | -32768 | @@ -156,7 +156,7 @@ hide: | 10509 | SECOND | PLC | PLC Resource 6 | UNSIGNED16 | | 0 | | 10510 | SECOND | PLC | PLC Resource 7 | UNSIGNED16 | | 0 | | 10511 | SECOND | PLC | PLC Resource 8 | UNSIGNED16 | | 0 | -| 10603 | THIRD | Controller I/O | D+ | INTEGER16 | V | 0 | +| 10603 | THIRD | Controller I/O | D+ | INTEGER16 | V | 0.0 | | 10688 | THIRD | Invisible | ECU-BIN 17 | INTEGER16 | - | -32768 | | 10689 | THIRD | Invisible | ECU-BIN 18 | INTEGER16 | - | -32768 | | 10690 | THIRD | Invisible | ECU-BIN 19 | INTEGER16 | - | -32768 | @@ -178,16 +178,16 @@ hide: | 10760 | SECOND | Invisible | ECU BOUT3 | BINARY8 | - | 0 | | 10761 | SECOND | Invisible | ECU BOUT4 | BINARY8 | - | 0 | | 10986 | THIRD | Statistics | Pulse Counter 1 | UNSIGNED32 | | 0 | -| 10987 | THIRD | Statistics | Pulse Counter 2 | UNSIGNED32 | | 0 | -| 11025 | THIRD | Statistics | Mains kWh | INTEGER32 | kWh | 0 | -| 11026 | THIRD | Statistics | Mains kVArh | INTEGER32 | kVArh | 0 | +| 10987 | THIRD | Statistics | Pulse Counter 2 | UNSIGNED32 | | 0.0 | +| 11025 | THIRD | Statistics | Mains kWh | INTEGER32 | kWh | 0.0 | +| 11026 | THIRD | Statistics | Mains kVArh | INTEGER32 | kVArh | 0.0 | | 11195 | THIRD | Statistics | Num E-Stops | UNSIGNED32 | | 1 | | 11196 | THIRD | Statistics | Shutdowns | UNSIGNED32 | | 23 | -| 11388 | THIRD | Invisible | ST | BINARY32 | | 5696 | +| 11388 | THIRD | Invisible | ST | BINARY32 | | 5664 | | 11616 | THIRD | Statistics | Maintenance 1 | INTEGER16 | h | 5 | | 11617 | THIRD | Statistics | Maintenance 2 | INTEGER16 | h | 10000 | | 11618 | THIRD | Statistics | Maintenance 3 | INTEGER16 | h | 10000 | -| 11680 | THIRD | CM-4G-GPS | HomePosDist | UNSIGNED32 | km | 4.29497e+07 | +| 11680 | THIRD | CM-4G-GPS | HomePosDist | UNSIGNED32 | km | 429496729.5 | | 11896 | SECOND | Log Bout | Log Bout 9 | BINARY16 | | 0 | | 11897 | SECOND | Log Bout | Log Bout 10 | BINARY16 | | 512 | | 11898 | SECOND | Log Bout | Log Bout 11 | BINARY16 | | 0 | @@ -196,7 +196,7 @@ hide: | 12482 | FIRST | Invisible | DPF_status | BINARY32 | | 0 | | 12483 | THIRD | Invisible | DPF1 Ash Load | UNSIGNED16 | % | 0 | | 12926 | THIRD | Engine | ECU FreqSelect | UNSIGNED16 | | 0 | -| 12944 | SECOND | IL Info | Connection Type | STRING_LIST | | MonoPhase | +| 12944 | SECOND | IL Info | Connection Type | [STRING_LIST](#connection-type-12944) | | MonoPhase | | 13770 | THIRD | Statistics | Time Till Empty | INTEGER16 | min | -32768 | | 13771 | THIRD | Statistics | Time Till Empty | INTEGER16 | hrs | -32768 | | 13772 | THIRD | Statistics | Time Till Empty | INTEGER16 | day | -32768 | @@ -208,6 +208,7 @@ hide: | 14055 | THIRD | Invisible | ST | UNSIGNED16 | | 277 | | 14056 | THIRD | Invisible | ST | UNSIGNED16 | | 138 | | 14057 | THIRD | Invisible | ST | UNSIGNED16 | | 277 | +| 14147 | FIRST | IL Info | Timer Value | FTIME | | 000000 | | 14291 | FIRST | Plug-in IO | EM BIO A | BINARY16 | | 0 | | 14292 | FIRST | Plug-in IO | EM BIO B | BINARY16 | | 0 | | 14293 | SECOND | Plug-in IO | EM Analog Input A 1 | INTEGER16 | | 0 | @@ -242,9 +243,9 @@ hide: | 14322 | SECOND | Plug-in IO | EM Analog Input B 14 | INTEGER16 | | 0 | | 14323 | SECOND | Plug-in IO | EM Analog Input B 15 | INTEGER16 | | 0 | | 14324 | SECOND | Plug-in IO | EM Analog Input B 16 | INTEGER16 | | 0 | -| 14325 | SECOND | Generator | Earth Fault Current | INTEGER16 | A | 0 | +| 14325 | SECOND | Generator | Earth Fault Current | INTEGER16 | A | 0.00 | | 14328 | THIRD | Statistics | Rental 1 | INTEGER32 | h | 0 | -| 14369 | THIRD | Statistics | Rental 2 | INTEGER32 | day | 26473 | +| 14369 | THIRD | Statistics | Rental 2 | INTEGER32 | day | 26469 | | 14389 | THIRD | Invisible | CU Analog Input 1 Wrn Level | INTEGER16 | | -32768 | | 14390 | THIRD | Invisible | CU Analog Input 2 Wrn Level | INTEGER16 | | -32768 | | 14391 | THIRD | Invisible | CU Analog Input 3 Wrn Level | INTEGER16 | | -32768 | @@ -254,11 +255,11 @@ hide: | 14395 | THIRD | Invisible | CU Analog Input 3 Lim Level | INTEGER16 | | -32768 | | 14396 | THIRD | Invisible | CU Analog Input 4 Lim Level | INTEGER16 | | -32768 | | 14423 | THIRD | Invisible | CM and EM modules | UNSIGNED32 | | 16 | -| 14446 | FIRST | Invisible | Application Mode | STRING_LIST | | AMF | -| 14447 | THIRD | IL Info | SPI Module A | STRING_LIST | | CM-Ethernet | -| 14448 | THIRD | IL Info | SPI Module B | STRING_LIST | | Empty | -| 14515 | SECOND | Invisible | ST | INTEGER16 | kW | 1.8 | -| 14516 | SECOND | Invisible | ST | INTEGER16 | kW | 1.8 | +| 14446 | FIRST | Invisible | Application Mode | [STRING_LIST](#application-mode-14446) | | AMF | +| 14447 | THIRD | IL Info | SPI Module A | [STRING_LIST](#spi-module-a-14447) | | CM-Ethernet | +| 14448 | THIRD | IL Info | SPI Module B | [STRING_LIST](#spi-module-b-14448) | | Empty | +| 14515 | SECOND | Invisible | ST | INTEGER16 | kW | 18.0 | +| 14516 | SECOND | Invisible | ST | INTEGER16 | kW | 18.0 | | 14522 | THIRD | Invisible | DEF Level | INTEGER16 | % | 0 | | 14779 | THIRD | Invisible | ST | UNSIGNED16 | | 265 | | 14780 | THIRD | Invisible | ST | UNSIGNED16 | | 196 | @@ -266,40 +267,40 @@ hide: | 14784 | THIRD | Invisible | ST | UNSIGNED16 | | 265 | | 14787 | THIRD | Invisible | ST | UNSIGNED16 | | 196 | | 14788 | THIRD | Invisible | ST | UNSIGNED16 | | 265 | -| 15352 | THIRD | Invisible | Seconds | UNSIGNED8 | s | 31 | -| 15353 | THIRD | Invisible | Minutes | UNSIGNED8 | m | 51 | -| 15354 | THIRD | Invisible | Hours | UNSIGNED8 | h | 14 | +| 15352 | THIRD | Invisible | Seconds | UNSIGNED8 | s | 14 | +| 15353 | THIRD | Invisible | Minutes | UNSIGNED8 | m | 26 | +| 15354 | THIRD | Invisible | Hours | UNSIGNED8 | h | 0 | | 15355 | THIRD | Invisible | Month | UNSIGNED8 | | 7 | -| 15356 | THIRD | Invisible | Day | UNSIGNED8 | | 10 | +| 15356 | THIRD | Invisible | Day | UNSIGNED8 | | 14 | | 15357 | THIRD | Invisible | Years since 1985 | UNSIGNED8 | | 41 | | 15378 | FIRST | Invisible | DPF_status | BINARY32 | | 0 | | 15765 | THIRD | Invisible | DPF1 Soot Load | INTEGER16 | % | 0 | | 15780 | FIRST | Invisible | E-STOP | BINARY8 | | 1 | -| 15870 | SECOND | Invisible | Generator Frequency RAW | UNSIGNED16 | Hz | 0 | +| 15870 | SECOND | Invisible | Generator Frequency RAW | UNSIGNED16 | Hz | 0.0 | | 15871 | SECOND | Invisible | Generator Voltage L1-N RAW | UNSIGNED16 | V | 0 | | 15872 | SECOND | Invisible | Generator Voltage L2-N RAW | UNSIGNED16 | V | 0 | | 15873 | SECOND | Invisible | Generator Voltage L3-N RAW | UNSIGNED16 | V | 0 | | 15874 | SECOND | Invisible | Generator Voltage L1-L2 RAW | UNSIGNED16 | V | 0 | | 15875 | SECOND | Invisible | Generator Voltage L2-L3 RAW | UNSIGNED16 | V | 0 | | 15876 | SECOND | Invisible | Generator Voltage L3-L1 RAW | UNSIGNED16 | V | 0 | -| 15877 | SECOND | Invisible | Load kVA RAW | INTEGER16 | kVA | 0 | -| 15878 | SECOND | Invisible | Load kVA L1 RAW | INTEGER16 | kVA | 0 | -| 15879 | SECOND | Invisible | Load kVA L2 RAW | INTEGER16 | kVA | 0 | -| 15880 | SECOND | Invisible | Load kVA L3 RAW | INTEGER16 | kVA | 0 | -| 15881 | SECOND | Invisible | Load kVAr RAW | INTEGER16 | kVAr | 0 | -| 15882 | SECOND | Invisible | Load kVAr L1 RAW | INTEGER16 | kVAr | 0 | -| 15883 | SECOND | Invisible | Load kVAr L2 RAW | INTEGER16 | kVAr | 0 | -| 15884 | SECOND | Invisible | Load kVAr L3 RAW | INTEGER16 | kVAr | 0 | -| 15885 | SECOND | Invisible | Load kW RAW | INTEGER16 | kW | 0 | -| 15886 | SECOND | Invisible | Load kW L1 RAW | INTEGER16 | kW | 0 | -| 15887 | SECOND | Invisible | Load kW L2 RAW | INTEGER16 | kW | 0 | -| 15888 | SECOND | Invisible | Load kW L3 RAW | INTEGER16 | kW | 0 | -| 16044 | THIRD | Dual Operation | Master Running Hours | INTEGER32 | h | -2.14748e+07 | -| 16045 | THIRD | Dual Operation | Slave Running Hours | INTEGER32 | h | -2.14748e+07 | -| 16046 | THIRD | Dual Operation | Running Hours To Swap | INTEGER16 | h | -327.68 | +| 15877 | SECOND | Invisible | Load kVA RAW | INTEGER16 | kVA | 0.0 | +| 15878 | SECOND | Invisible | Load kVA L1 RAW | INTEGER16 | kVA | 0.0 | +| 15879 | SECOND | Invisible | Load kVA L2 RAW | INTEGER16 | kVA | 0.0 | +| 15880 | SECOND | Invisible | Load kVA L3 RAW | INTEGER16 | kVA | 0.0 | +| 15881 | SECOND | Invisible | Load kVAr RAW | INTEGER16 | kVAr | 0.0 | +| 15882 | SECOND | Invisible | Load kVAr L1 RAW | INTEGER16 | kVAr | 0.0 | +| 15883 | SECOND | Invisible | Load kVAr L2 RAW | INTEGER16 | kVAr | 0.0 | +| 15884 | SECOND | Invisible | Load kVAr L3 RAW | INTEGER16 | kVAr | 0.0 | +| 15885 | SECOND | Invisible | Load kW RAW | INTEGER16 | kW | 0.0 | +| 15886 | SECOND | Invisible | Load kW L1 RAW | INTEGER16 | kW | 0.0 | +| 15887 | SECOND | Invisible | Load kW L2 RAW | INTEGER16 | kW | 0.0 | +| 15888 | SECOND | Invisible | Load kW L3 RAW | INTEGER16 | kW | 0.0 | +| 16044 | THIRD | Dual Operation | Master Running Hours | INTEGER32 | h | -214748364.8 | +| 16045 | THIRD | Dual Operation | Slave Running Hours | INTEGER32 | h | -214748364.8 | +| 16046 | THIRD | Dual Operation | Running Hours To Swap | INTEGER16 | h | -3276.8 | | 24146 | THIRD | CM-4G-GPS | Connection Type | SHORT_STRING | | | | 24147 | THIRD | CM-4G-GPS | Operator | LONG_STRING | | | -| 24180 | SECOND | CM-Ethernet | ETH Interface Status | STRING_LIST | | Connected | +| 24180 | SECOND | CM-Ethernet | ETH Interface Status | [STRING_LIST](#eth-interface-status-24180) | | Connected | | 24181 | THIRD | CM-Ethernet | Current DNS | SHORT_STRING | | 192.168.1.3 | | 24182 | THIRD | CM-Ethernet | Current Gateway | SHORT_STRING | | 192.168.1.1 | | 24183 | THIRD | CM-Ethernet | Current Subnet Mask | SHORT_STRING | | 255.255.255.0 | @@ -331,6 +332,8 @@ hide: | 24414 | THIRD | Invisible | Terminal Features | UNSIGNED32 | | 127 | | 24501 | ONE_TIME | IL Info | ID String | LONG_STRING | | — | | 24517 | SECOND | Invisible | Reserved | FLOAT | | 2.369356361395559e-38 | +| 24553 | SECOND | Date/Time | Date | FDATE | | 140726 | +| 24554 | SECOND | Date/Time | Time | FTIME | | 002614 | ## Setpoints @@ -349,149 +352,150 @@ hide: | 8264 | Basic Settings | Horn Timeout | UNSIGNED16 | s | 0 | 600 | yes | 10 | | 8274 | Basic Settings | CT Ratio | UNSIGNED16 | /5A | 1 | 5000 | yes | 100 | | 8275 | Basic Settings | Nominal Current | UNSIGNED16 | A | 1 | 10000 | yes | 63 | -| 8276 | Basic Settings | Nominal Power | UNSIGNED16 | kW | 0.1 | 500 | yes | 1.5 | +| 8276 | Basic Settings | Nominal Power | UNSIGNED16 | kW | 1 | 5000 | yes | 15.0 | | 8277 | Basic Settings | Nominal Voltage Ph-N | UNSIGNED16 | V | 80 | 20000 | yes | 231 | | 8278 | Basic Settings | Nominal Frequency | UNSIGNED16 | Hz | 45 | 65 | yes | 50 | | 8280 | Generator Settings | Overload BOC | UNSIGNED16 | % | var | 200 | yes | 120 | -| 8281 | Generator Settings | Overload Delay | UNSIGNED16 | s | 0 | 600 | yes | 6 | +| 8281 | Generator Settings | Overload Delay | UNSIGNED16 | s | 0 | 6000 | yes | 60.0 | | 8282 | Generator Settings | Short Circuit BOC | UNSIGNED16 | % | 100 | 500 | yes | 250 | -| 8283 | Generator Settings | IDMT Overcurrent | UNSIGNED16 | s | 1 | 600 | yes | 0.4 | +| 8283 | Generator Settings | IDMT Overcurrent | UNSIGNED16 | s | 10 | 6000 | yes | 4.0 | | 8284 | Generator Settings | Current Unbalance BOC | UNSIGNED16 | % | 1 | 200 | yes | 50 | -| 8285 | Generator Settings | Current Unbalance BOC Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.5 | +| 8285 | Generator Settings | Current Unbalance BOC Delay | UNSIGNED16 | s | 0 | 6000 | yes | 5.0 | | 8288 | Generator Settings | Voltage Unbalance BOC | UNSIGNED16 | % | 1 | 200 | yes | 50 | -| 8289 | Generator Settings | Voltage Unbalance BOC Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.3 | +| 8289 | Generator Settings | Voltage Unbalance BOC Delay | UNSIGNED16 | s | 0 | 6000 | yes | 3.0 | | 8291 | Generator Settings | Generator Overvoltage Sd | UNSIGNED16 | % | var | 200 | yes | 120 | | 8293 | Generator Settings | Generator Undervoltage BOC | UNSIGNED16 | % | 0 | var | yes | 70 | -| 8296 | Generator Settings | Generator Overfrequency BOC | UNSIGNED16 | % | var | 200 | yes | 11.5 | -| 8297 | Generator Settings | Generator <> Frequency Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.3 | -| 8298 | Generator Settings | Generator Underfrequency BOC | UNSIGNED16 | % | 0 | var | yes | 8.5 | +| 8296 | Generator Settings | Generator Overfrequency BOC | UNSIGNED16 | % | var | 2000 | yes | 115.0 | +| 8297 | Generator Settings | Generator <> Frequency Delay | UNSIGNED16 | s | 0 | 6000 | yes | 3.0 | +| 8298 | Generator Settings | Generator Underfrequency BOC | UNSIGNED16 | % | 0 | var | yes | 85.0 | | 8301 | AMF Settings | Emergency Start Delay | UNSIGNED16 | s | 0 | 6000 | yes | 10 | | 8302 | AMF Settings | Mains Return Delay | UNSIGNED16 | s | 1 | 3600 | yes | 20 | -| 8303 | Dual Operation | Transfer Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.1 | +| 8303 | Dual Operation | Transfer Delay | UNSIGNED16 | s | 0 | 6000 | yes | 1.0 | | 8305 | AMF Settings | Mains Overvoltage | UNSIGNED16 | % | var | 150 | yes | 120 | -| 8306 | AMF Settings | Mains <> Voltage Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.2 | +| 8306 | AMF Settings | Mains <> Voltage Delay | UNSIGNED16 | s | 0 | 6000 | yes | 2.0 | | 8307 | AMF Settings | Mains Undervoltage | UNSIGNED16 | % | 50 | var | yes | 60 | -| 8310 | AMF Settings | Mains Overfrequency | UNSIGNED16 | % | var | 150 | yes | 10.2 | -| 8311 | AMF Settings | Mains <> Frequency Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.05 | -| 8312 | AMF Settings | Mains Underfrequency | UNSIGNED16 | % | 50 | var | yes | 9.8 | +| 8310 | AMF Settings | Mains Overfrequency | UNSIGNED16 | % | var | 1500 | yes | 102.0 | +| 8311 | AMF Settings | Mains <> Frequency Delay | UNSIGNED16 | s | 0 | 6000 | yes | 0.5 | +| 8312 | AMF Settings | Mains Underfrequency | UNSIGNED16 | % | 500 | var | yes | 98.0 | | 8313 | Engine Settings | Maximal Stabilization Time | UNSIGNED16 | s | var | 300 | yes | 10 | -| 8315 | Basic Settings | Controller Mode | STRING_LIST | | 41 | 44 | no | AUTO | +| 8315 | Basic Settings | Controller Mode | [STRING_LIST](#controller-mode-8315) | | 41 | 44 | no | AUTO | | 8383 | Engine Settings | Battery <> Voltage Delay | UNSIGNED16 | s | 0 | 600 | yes | 10 | -| 8387 | Engine Settings | Battery Undervoltage | INTEGER16 | V | 8 | var | yes | 0.8 | -| 8389 | AMF Settings | MCB Close Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.1 | +| 8387 | Engine Settings | Battery Undervoltage | INTEGER16 | V | 80 | var | yes | 8.0 | +| 8389 | AMF Settings | MCB Close Delay | UNSIGNED16 | s | 0 | 6000 | yes | 1.0 | | 8394 | Engine Settings | Prestart Time | UNSIGNED16 | s | 0 | 600 | yes | 10 | | 8407 | CU AIN Calibration | CU AIN2 Calibration | INTEGER16 | | -1000 | 1000 | no | 0 | | 8431 | CU AIN Calibration | CU AIN1 Calibration | INTEGER16 | | -1000 | 1000 | no | 0 | -| 8444 | AMF Settings | MCB Logic | STRING_LIST | | 52 | 53 | yes | Close-Off | +| 8444 | AMF Settings | MCB Logic | [STRING_LIST](#mcb-logic-8444) | | 52 | 53 | yes | Close-Off | | 8446 | AMF Settings | Mains Voltage Unbalance | UNSIGNED16 | % | 1 | 150 | yes | 10 | -| 8447 | AMF Settings | Mains Voltage Unbalance Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.2 | +| 8447 | AMF Settings | Mains Voltage Unbalance Delay | UNSIGNED16 | s | 0 | 6000 | yes | 2.0 | | 8467 | CU AIN Calibration | CU AIN3 Calibration | INTEGER16 | | -1000 | 1000 | no | 0 | -| 8482 | CM-Ethernet | Wrn Message | STRING_LIST | | 58 | 59 | no | ON | -| 8484 | CM-Ethernet | Sd Message | STRING_LIST | | 61 | 62 | no | ON | +| 8482 | CM-Ethernet | Wrn Message | [STRING_LIST](#wrn-message-8482) | | 58 | 59 | no | ON | +| 8484 | CM-Ethernet | Sd Message | [STRING_LIST](#sd-message-8484) | | 61 | 62 | no | ON | | 8548 | Basic Settings | Zero Power Mode | UNSIGNED16 | min | 0 | 360 | yes | 0 | -| 8618 | Invisible | Return From TEST | STRING_LIST | | 65 | 66 | yes | Manual | +| 8618 | Invisible | Return From TEST | [STRING_LIST](#return-from-test-8618) | | 65 | 66 | yes | Manual | +| 8637 | Basic Settings | Gen-Set Name | SHORT_STRING | | 0 | 0 | yes | FV 15000 | | 8662 | Engine Settings | After Cooling Time | UNSIGNED16 | s | 0 | 3600 | yes | 180 | | 8688 | Engine Settings | Temperature Switch On | INTEGER16 | °C | -16 | 120 | yes | 90 | | 8689 | Engine Settings | Temperature Switch Off | INTEGER16 | °C | -16 | 120 | yes | 75 | -| 8727 | Scheduler | Summer Time Mode | STRING_LIST | | 72 | 76 | yes | Summer | +| 8727 | Scheduler | Summer Time Mode | [STRING_LIST](#summer-time-mode-8727) | | 72 | 76 | yes | Summer | | 8793 | CU AIN Calibration | CU AIN4 Calibration | INTEGER16 | | -1000 | 1000 | no | 0 | | 8979 | Scheduler | Time Stamp Period | UNSIGNED8 | min | 0 | 240 | yes | 240 | | 9097 | Engine Settings | Idle Time | UNSIGNED16 | s | 0 | 600 | yes | 12 | -| 9100 | Engine Settings | Fuel Solenoid | STRING_LIST | | 81 | 82 | yes | Diesel | -| 9103 | Generator Settings | Generator <> Voltage Delay | UNSIGNED16 | s | 0 | 600 | yes | 0.5 | -| 9259 | General Analog Inputs | AIN Prot01 Wrn | INTEGER16 | | 0 | 1000 | yes | 0 | -| 9260 | General Analog Inputs | AIN Prot01 Sd | INTEGER16 | | 0 | 1000 | yes | 0 | +| 9100 | Engine Settings | Fuel Solenoid | [STRING_LIST](#fuel-solenoid-9100) | | 81 | 82 | yes | Diesel | +| 9103 | Generator Settings | Generator <> Voltage Delay | UNSIGNED16 | s | 0 | 6000 | yes | 5.0 | +| 9259 | General Analog Inputs | AIN Prot01 Wrn | INTEGER16 | | 0 | 10000 | yes | 0.0 | +| 9260 | General Analog Inputs | AIN Prot01 Sd | INTEGER16 | | 0 | 10000 | yes | 0.0 | | 9261 | General Analog Inputs | AIN Prot01 Delay | UNSIGNED16 | s | 0 | 900 | yes | 0 | -| 9262 | General Analog Inputs | AIN Prot02 Wrn | INTEGER16 | | 0 | 1000 | yes | 0 | -| 9263 | General Analog Inputs | AIN Prot02 Sd | INTEGER16 | | 0 | 1000 | yes | 0 | +| 9262 | General Analog Inputs | AIN Prot02 Wrn | INTEGER16 | | 0 | 10000 | yes | 0.0 | +| 9263 | General Analog Inputs | AIN Prot02 Sd | INTEGER16 | | 0 | 10000 | yes | 0.0 | | 9264 | General Analog Inputs | AIN Prot02 Delay | UNSIGNED16 | s | 0 | 900 | yes | 0 | -| 9265 | General Analog Inputs | AIN Prot03 Wrn | INTEGER16 | | 0 | 1000 | yes | 0 | -| 9266 | General Analog Inputs | AIN Prot03 Sd | INTEGER16 | | 0 | 1000 | yes | 0 | +| 9265 | General Analog Inputs | AIN Prot03 Wrn | INTEGER16 | | 0 | 10000 | yes | 0.0 | +| 9266 | General Analog Inputs | AIN Prot03 Sd | INTEGER16 | | 0 | 10000 | yes | 0.0 | | 9267 | General Analog Inputs | AIN Prot03 Delay | UNSIGNED16 | s | 0 | 900 | yes | 0 | -| 9268 | General Analog Inputs | AIN Prot04 Wrn | INTEGER16 | | 0 | 1000 | yes | 0 | -| 9269 | General Analog Inputs | AIN Prot04 Sd | INTEGER16 | | 0 | 1000 | yes | 0 | +| 9268 | General Analog Inputs | AIN Prot04 Wrn | INTEGER16 | | 0 | 10000 | yes | 0.0 | +| 9269 | General Analog Inputs | AIN Prot04 Sd | INTEGER16 | | 0 | 10000 | yes | 0.0 | | 9270 | General Analog Inputs | AIN Prot04 Delay | UNSIGNED16 | s | 0 | 900 | yes | 0 | -| 9271 | General Analog Inputs | AIN Prot05 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9272 | General Analog Inputs | AIN Prot05 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9271 | General Analog Inputs | AIN Prot05 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9272 | General Analog Inputs | AIN Prot05 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9273 | General Analog Inputs | AIN Prot05 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9274 | General Analog Inputs | AIN Prot06 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9275 | General Analog Inputs | AIN Prot06 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9274 | General Analog Inputs | AIN Prot06 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9275 | General Analog Inputs | AIN Prot06 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9276 | General Analog Inputs | AIN Prot06 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9277 | General Analog Inputs | AIN Prot07 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9278 | General Analog Inputs | AIN Prot07 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9277 | General Analog Inputs | AIN Prot07 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9278 | General Analog Inputs | AIN Prot07 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9279 | General Analog Inputs | AIN Prot07 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9280 | General Analog Inputs | AIN Prot08 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9281 | General Analog Inputs | AIN Prot08 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9280 | General Analog Inputs | AIN Prot08 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9281 | General Analog Inputs | AIN Prot08 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9282 | General Analog Inputs | AIN Prot08 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9283 | General Analog Inputs | AIN Prot09 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9284 | General Analog Inputs | AIN Prot09 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9283 | General Analog Inputs | AIN Prot09 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9284 | General Analog Inputs | AIN Prot09 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9285 | General Analog Inputs | AIN Prot09 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9286 | General Analog Inputs | AIN Prot10 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9287 | General Analog Inputs | AIN Prot10 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9286 | General Analog Inputs | AIN Prot10 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9287 | General Analog Inputs | AIN Prot10 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9288 | General Analog Inputs | AIN Prot10 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9289 | General Analog Inputs | AIN Prot11 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9290 | General Analog Inputs | AIN Prot11 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9289 | General Analog Inputs | AIN Prot11 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9290 | General Analog Inputs | AIN Prot11 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9291 | General Analog Inputs | AIN Prot11 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9292 | General Analog Inputs | AIN Prot12 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9293 | General Analog Inputs | AIN Prot12 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9292 | General Analog Inputs | AIN Prot12 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9293 | General Analog Inputs | AIN Prot12 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9294 | General Analog Inputs | AIN Prot12 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9295 | General Analog Inputs | AIN Prot13 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9296 | General Analog Inputs | AIN Prot13 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9295 | General Analog Inputs | AIN Prot13 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9296 | General Analog Inputs | AIN Prot13 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9297 | General Analog Inputs | AIN Prot13 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9298 | General Analog Inputs | AIN Prot14 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9299 | General Analog Inputs | AIN Prot14 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9298 | General Analog Inputs | AIN Prot14 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9299 | General Analog Inputs | AIN Prot14 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9300 | General Analog Inputs | AIN Prot14 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9301 | General Analog Inputs | AIN Prot15 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9302 | General Analog Inputs | AIN Prot15 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9301 | General Analog Inputs | AIN Prot15 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9302 | General Analog Inputs | AIN Prot15 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9303 | General Analog Inputs | AIN Prot15 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9304 | General Analog Inputs | AIN Prot16 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9305 | General Analog Inputs | AIN Prot16 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9304 | General Analog Inputs | AIN Prot16 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9305 | General Analog Inputs | AIN Prot16 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9306 | General Analog Inputs | AIN Prot16 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9307 | General Analog Inputs | AIN Prot17 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9308 | General Analog Inputs | AIN Prot17 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9307 | General Analog Inputs | AIN Prot17 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9308 | General Analog Inputs | AIN Prot17 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9309 | General Analog Inputs | AIN Prot17 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9310 | General Analog Inputs | AIN Prot18 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9311 | General Analog Inputs | AIN Prot18 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9310 | General Analog Inputs | AIN Prot18 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9311 | General Analog Inputs | AIN Prot18 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9312 | General Analog Inputs | AIN Prot18 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9313 | General Analog Inputs | AIN Prot19 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9314 | General Analog Inputs | AIN Prot19 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9313 | General Analog Inputs | AIN Prot19 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9314 | General Analog Inputs | AIN Prot19 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9315 | General Analog Inputs | AIN Prot19 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9316 | General Analog Inputs | AIN Prot20 Wrn | INTEGER16 | | 0 | 1000 | no | 0 | -| 9317 | General Analog Inputs | AIN Prot20 Sd | INTEGER16 | | 0 | 1000 | no | 0 | +| 9316 | General Analog Inputs | AIN Prot20 Wrn | INTEGER16 | | 0 | 10000 | no | 0.0 | +| 9317 | General Analog Inputs | AIN Prot20 Sd | INTEGER16 | | 0 | 10000 | no | 0.0 | | 9318 | General Analog Inputs | AIN Prot20 Delay | UNSIGNED16 | s | 0 | 900 | no | 0 | -| 9579 | Basic Settings | PT Ratio | UNSIGNED16 | V/V | 0.1 | 500 | yes | 0.1 | -| 9580 | Basic Settings | Vm PT Ratio | UNSIGNED16 | V/V | 0.1 | 500 | yes | 0.1 | -| 9587 | Engine Settings | Battery Overvoltage | INTEGER16 | V | var | 40 | yes | 1.7 | -| 9590 | AMF Settings | Return From Island | STRING_LIST | | 148 | 149 | yes | Auto | -| 9681 | Engine Settings | Starting Oil Pressure | INTEGER16 | Bar | 0 | 10 | yes | 0 | -| 9683 | Engine Settings | D+ Function | STRING_LIST | | 152 | 154 | yes | Disabled | +| 9579 | Basic Settings | PT Ratio | UNSIGNED16 | V/V | 1 | 5000 | yes | 1.0 | +| 9580 | Basic Settings | Vm PT Ratio | UNSIGNED16 | V/V | 1 | 5000 | yes | 1.0 | +| 9587 | Engine Settings | Battery Overvoltage | INTEGER16 | V | var | 400 | yes | 17.0 | +| 9590 | AMF Settings | Return From Island | [STRING_LIST](#return-from-island-9590) | | 148 | 149 | yes | Auto | +| 9681 | Engine Settings | Starting Oil Pressure | INTEGER16 | Bar | 0 | 100 | yes | 0.0 | +| 9683 | Engine Settings | D+ Function | [STRING_LIST](#d-function-9683) | | 152 | 154 | yes | Disabled | | 9684 | Engine Settings | Coolant Temperature Low Wrn | INTEGER16 | °C | -16 | 120 | yes | 5 | | 9685 | Generator Settings | Overload Wrn | UNSIGNED16 | % | 0 | var | yes | 120 | | 9686 | Generator Settings | Generator Overvoltage Wrn | UNSIGNED16 | % | var | var | yes | 115 | | 9687 | Generator Settings | Generator Undervoltage Wrn | UNSIGNED16 | % | var | var | yes | 85 | -| 9688 | Generator Settings | Generator Overfrequency Wrn | UNSIGNED16 | % | var | var | yes | 11.5 | -| 9689 | Generator Settings | Generator Underfrequency Wrn | UNSIGNED16 | % | var | var | yes | 8.5 | +| 9688 | Generator Settings | Generator Overfrequency Wrn | UNSIGNED16 | % | var | var | yes | 115.0 | +| 9689 | Generator Settings | Generator Underfrequency Wrn | UNSIGNED16 | % | var | var | yes | 85.0 | | 9695 | Engine Settings | Sd Ventilation Time | UNSIGNED16 | s | 0 | 60 | yes | 5 | | 9815 | Engine Settings | Stop Time | UNSIGNED16 | s | 0 | 600 | yes | 10 | -| 9850 | AMF Settings | MCB Opens On | STRING_LIST | | 164 | 165 | yes | Mains Fail | +| 9850 | AMF Settings | MCB Opens On | [STRING_LIST](#mcb-opens-on-9850) | | 164 | 165 | yes | Mains Fail | | 9913 | Alternate Config | Nominal Frequency 1 | UNSIGNED16 | Hz | 45 | 65 | no | 50 | | 9914 | Alternate Config | Nominal Frequency 2 | UNSIGNED16 | Hz | 45 | 65 | no | 50 | | 9915 | Alternate Config | Nominal RPM 1 | UNSIGNED16 | RPM | 100 | 4000 | no | 3000 | | 9916 | Alternate Config | Nominal RPM 2 | UNSIGNED16 | RPM | 100 | 4000 | no | 1500 | | 9946 | Engine Settings | Idle RPM | UNSIGNED16 | RPM | 100 | 4000 | no | 900 | | 9948 | Engine Settings | ECU Speed Adjustment | UNSIGNED16 | % | 0 | 100 | yes | 50 | -| 9977 | Basic Settings | Nominal Power Split Phase | UNSIGNED16 | kW | 0.1 | 500 | yes | 2 | -| 9983 | Basic Settings | Reset To Manual | STRING_LIST | | 174 | 175 | yes | Disabled | -| 9991 | Generator Settings | Short Circuit BOC Delay | UNSIGNED16 | s | 0 | 10 | yes | 0.0004 | -| 10023 | Engine Settings | Protection Hold Off | UNSIGNED16 | s | 0 | 300 | yes | 1 | -| 10046 | Engine Settings | Cooling Speed | STRING_LIST | | 179 | 180 | yes | Nominal | +| 9977 | Basic Settings | Nominal Power Split Phase | UNSIGNED16 | kW | 1 | 5000 | yes | 20.0 | +| 9983 | Basic Settings | Reset To Manual | [STRING_LIST](#reset-to-manual-9983) | | 174 | 175 | yes | Disabled | +| 9991 | Generator Settings | Short Circuit BOC Delay | UNSIGNED16 | s | 0 | 1000 | yes | 0.04 | +| 10023 | Engine Settings | Protection Hold Off | UNSIGNED16 | s | 0 | 3000 | yes | 10.0 | +| 10046 | Engine Settings | Cooling Speed | [STRING_LIST](#cooling-speed-10046) | | 179 | 180 | yes | Nominal | | 10100 | Engine Settings | Fuel Pump On | INTEGER16 | % | 0 | var | yes | 20 | | 10101 | Engine Settings | Fuel Pump Off | INTEGER16 | % | var | 100 | yes | 90 | | 10121 | Basic Settings | Backlight Timeout | UNSIGNED8 | min | 0 | 255 | yes | 2 | | 10270 | Engine Settings | Coolant Temperature Low Delay | UNSIGNED16 | s | 0 | 900 | yes | 5 | | 10343 | Invisible | User Mode | UNSIGNED8 | | 0 | 1 | no | 1 | -| 10440 | PLC | Ssanie | INTEGER16 | s | 0 | 60 | no | 0.2 | -| 10441 | PLC | Stop_puls | INTEGER16 | s | 1 | 60 | no | 1 | +| 10440 | PLC | Ssanie | INTEGER16 | s | 0 | 600 | no | 2.0 | +| 10441 | PLC | Stop_puls | INTEGER16 | s | 10 | 600 | no | 10.0 | | 10442 | PLC | PLC Parametr 3 | INTEGER16 | | -32768 | 32767 | no | 0 | | 10443 | PLC | PLC Parametr 4 | INTEGER16 | | -32768 | 32767 | no | 0 | | 10444 | PLC | PLC Parametr 5 | INTEGER16 | | -32768 | 32767 | no | 0 | @@ -554,10 +558,12 @@ hide: | 10501 | PLC | PLC Parametr 62 | INTEGER16 | | -32768 | 32767 | no | 0 | | 10502 | PLC | PLC Parametr 63 | INTEGER16 | | -32768 | 32767 | no | 0 | | 10503 | PLC | PLC Parametr 64 | INTEGER16 | | -32768 | 32767 | no | 0 | -| 10525 | Engine Settings | Fuel Solenoid Lead | INTEGER16 | s | 0 | 25 | yes | 0.08 | -| 10566 | CM-Ethernet | BOC Message | STRING_LIST | | 252 | 253 | no | ON | +| 10525 | Engine Settings | Fuel Solenoid Lead | INTEGER16 | s | 0 | 250 | yes | 0.8 | +| 10566 | CM-Ethernet | BOC Message | [STRING_LIST](#boc-message-10566) | | 252 | 253 | no | ON | | 10685 | Engine Settings | Transfer Wrn Delay | UNSIGNED16 | s | 0 | 60 | yes | 30 | -| 10926 | CM-Ethernet | Event Message | STRING_LIST | | 256 | 257 | no | ON | +| 10926 | CM-Ethernet | Event Message | [STRING_LIST](#event-message-10926) | | 256 | 257 | no | ON | +| 10969 | Scheduler | Timer 1 Setup | TIMER | | 0 | 0 | yes | 100b1905df420100 | +| 10970 | Scheduler | Timer 2 Setup | TIMER | | 0 | 0 | yes | 8f08000000000000 | | 10994 | Engine Settings | Conversion Coefficient Pulse 1 | UNSIGNED16 | | 0 | 1000 | no | 1 | | 10995 | Engine Settings | Conversion Coefficient Pulse 2 | UNSIGNED16 | | 0 | 1000 | no | 1 | | 11103 | Engine Settings | Fuel Tank Volume | UNSIGNED16 | L | 0 | 10000 | yes | 0 | @@ -571,20 +577,20 @@ hide: | 11616 | Statistics | Maintenance Timer 1 | INTEGER16 | h | -10000 | 10000 | no | 5 | | 11617 | Statistics | Maintenance Timer 2 | INTEGER16 | h | -10000 | 10000 | no | 10000 | | 11618 | Statistics | Maintenance Timer 3 | INTEGER16 | h | -10000 | 10000 | no | 10000 | -| 11625 | Basic Settings | CT Location | STRING_LIST | | 271 | 273 | yes | GenSet | -| 11628 | Basic Settings | Connection Type | STRING_LIST | | 275 | 281 | yes | MonoPhase | -| 11631 | EM-BIO8-EFCP | Earth Fault Current Protection | STRING_LIST | | 283 | 284 | no | Enabled | -| 11632 | EM-BIO8-EFCP | Earth Fault Sd | UNSIGNED16 | A | 0.03 | 5 | no | 0.003 | -| 11633 | EM-BIO8-EFCP | Earth Fault Delay | UNSIGNED16 | s | 0.03 | 5 | no | 0.001 | +| 11625 | Basic Settings | CT Location | [STRING_LIST](#ct-location-11625) | | 271 | 273 | yes | GenSet | +| 11628 | Basic Settings | Connection Type | [STRING_LIST](#connection-type-11628) | | 275 | 281 | yes | MonoPhase | +| 11631 | EM-BIO8-EFCP | Earth Fault Current Protection | [STRING_LIST](#earth-fault-current-protection-11631) | | 283 | 284 | no | Enabled | +| 11632 | EM-BIO8-EFCP | Earth Fault Sd | UNSIGNED16 | A | 3 | 500 | no | 0.30 | +| 11633 | EM-BIO8-EFCP | Earth Fault Delay | UNSIGNED16 | s | 3 | 500 | no | 0.10 | | 11657 | Basic Settings | Nominal Voltage Ph-Ph | UNSIGNED16 | V | 80 | 40000 | yes | 231 | -| 11658 | Engine Settings | Power Switch On | INTEGER16 | kW | 0 | 3200 | yes | 1 | -| 11659 | Engine Settings | Power Switch Off | INTEGER16 | kW | 0 | 3200 | yes | 0.5 | -| 11677 | Geo-Fencing | Fence Radius 1 | UNSIGNED16 | km | 0 | 99.9 | yes | 0 | -| 11681 | Geo-Fencing | Geo-Fencing | STRING_LIST | | 292 | 294 | yes | Disable | +| 11658 | Engine Settings | Power Switch On | INTEGER16 | kW | 0 | 32000 | yes | 10.0 | +| 11659 | Engine Settings | Power Switch Off | INTEGER16 | kW | 0 | 32000 | yes | 5.0 | +| 11677 | Geo-Fencing | Fence Radius 1 | UNSIGNED16 | km | 0 | 999 | yes | 0.0 | +| 11681 | Geo-Fencing | Geo-Fencing | [STRING_LIST](#geo-fencing-11681) | | 292 | 294 | yes | Disable | | 11682 | Geo-Fencing | Fence 1 Delay | UNSIGNED16 | s | 0 | 3600 | yes | 0 | -| 12046 | Alternate Config | Nominal Power 1 | UNSIGNED16 | kW | 0.1 | 500 | no | 1.5 | -| 12047 | Alternate Config | Nominal Power 2 | UNSIGNED16 | kW | 0.1 | 500 | no | 2 | -| 12048 | Alternate Config | Nominal Power 3 | UNSIGNED16 | kW | 0.1 | 500 | no | 2 | +| 12046 | Alternate Config | Nominal Power 1 | UNSIGNED16 | kW | 1 | 5000 | no | 15.0 | +| 12047 | Alternate Config | Nominal Power 2 | UNSIGNED16 | kW | 1 | 5000 | no | 20.0 | +| 12048 | Alternate Config | Nominal Power 3 | UNSIGNED16 | kW | 1 | 5000 | no | 20.0 | | 12049 | Alternate Config | Nominal Current 1 | UNSIGNED16 | A | 1 | 10000 | no | 63 | | 12050 | Alternate Config | Nominal Current 2 | UNSIGNED16 | A | 1 | 10000 | no | 50 | | 12051 | Alternate Config | Nominal Current 3 | UNSIGNED16 | A | 1 | 10000 | no | 350 | @@ -594,21 +600,21 @@ hide: | 12055 | Alternate Config | Nominal Voltage Ph-Ph 1 | UNSIGNED16 | V | 80 | 40000 | no | 231 | | 12056 | Alternate Config | Nominal Voltage Ph-Ph 2 | UNSIGNED16 | V | 80 | 40000 | no | 400 | | 12057 | Alternate Config | Nominal Voltage Ph-Ph 3 | UNSIGNED16 | V | 80 | 40000 | no | 400 | -| 12058 | Alternate Config | Connection Type 1 | STRING_LIST | | 309 | 315 | no | MonoPhase | -| 12059 | Alternate Config | Connection Type 2 | STRING_LIST | | 317 | 323 | no | 3Ph4Wire | -| 12060 | Alternate Config | Connection Type 3 | STRING_LIST | | 325 | 331 | no | 3Ph4Wire | -| 12157 | Basic Settings | Operation Mode | STRING_LIST | | 333 | 334 | yes | AMF | +| 12058 | Alternate Config | Connection Type 1 | [STRING_LIST](#connection-type-1-12058) | | 309 | 315 | no | MonoPhase | +| 12059 | Alternate Config | Connection Type 2 | [STRING_LIST](#connection-type-2-12059) | | 317 | 323 | no | 3Ph4Wire | +| 12060 | Alternate Config | Connection Type 3 | [STRING_LIST](#connection-type-3-12060) | | 325 | 331 | no | 3Ph4Wire | +| 12157 | Basic Settings | Operation Mode | [STRING_LIST](#operation-mode-12157) | | 333 | 334 | yes | AMF | | 12373 | Engine Settings | Maximal Fuel Drop | UNSIGNED8 | %/h | 0 | 50 | yes | 0 | -| 12779 | Engine Settings | Oil Pressure Sd | INTEGER16 | Bar | 0 | 10 | yes | 0.1 | +| 12779 | Engine Settings | Oil Pressure Sd | INTEGER16 | Bar | 0 | 100 | yes | 1.0 | | 12780 | Engine Settings | Coolant Temperature BOC | INTEGER16 | °C | -16 | 120 | yes | 90 | -| 12895 | Engine Settings | Oil Pressure Wrn | INTEGER16 | Bar | 0 | 10 | yes | 0.2 | +| 12895 | Engine Settings | Oil Pressure Wrn | INTEGER16 | Bar | 0 | 100 | yes | 2.0 | | 12896 | Engine Settings | Coolant Temperature Wrn | INTEGER16 | °C | -16 | 120 | yes | 80 | | 12897 | Engine Settings | Fuel Level Wrn | INTEGER16 | % | 0 | 100 | yes | 20 | | 12898 | Engine Settings | Fuel Level BOC | INTEGER16 | % | 0 | 100 | yes | 10 | -| 13000 | Basic Settings | Power On Mode | STRING_LIST | | 343 | 344 | no | Previous | +| 13000 | Basic Settings | Power On Mode | [STRING_LIST](#power-on-mode-13000) | | 343 | 344 | no | Previous | | 13011 | Engine Settings | Choke Time | UNSIGNED16 | s | 0 | 3600 | no | 5 | -| 13345 | Basic Settings | RunHoursSource | STRING_LIST | | 347 | 349 | no | AUTO | -| 13346 | Basic Settings | Main Screen Line 1 | STRING_LIST | | 351 | 355 | yes | RPM | +| 13345 | Basic Settings | RunHoursSource | [STRING_LIST](#runhourssource-13345) | | 347 | 349 | no | AUTO | +| 13346 | Basic Settings | Main Screen Line 1 | [STRING_LIST](#main-screen-line-1-13346) | | 351 | 355 | yes | RPM | | 14107 | Engine Settings | Overspeed Overshoot | UNSIGNED8 | % | 0 | 50 | yes | 20 | | 14108 | Engine Settings | Overspeed Overshoot Period | UNSIGNED8 | s | 0 | 255 | yes | 5 | | 14326 | Scheduler | Rental Timer 1 | UNSIGNED16 | h | 0 | 8760 | yes | 0 | @@ -617,15 +623,17 @@ hide: | 14337 | Alternate Config | ECU Speed Adjustment 1 | UNSIGNED16 | % | 0 | 100 | no | 50 | | 14338 | Alternate Config | ECU Speed Adjustment 2 | UNSIGNED16 | % | 0 | 100 | no | 50 | | 14339 | EM-BIO8-EFCP | Earth Fault CT Ratio | UNSIGNED16 | /(1or5)A | 1 | 2000 | no | 500 | -| 14340 | EM-BIO8-EFCP | Earth Fault CT Input Range | STRING_LIST | | 365 | 366 | no | 5A | +| 14340 | EM-BIO8-EFCP | Earth Fault CT Input Range | [STRING_LIST](#earth-fault-ct-input-range-14340) | | 365 | 366 | no | 5A | | 14341 | Engine Settings | Oil Pressure Delay | UNSIGNED16 | s | 0 | 900 | yes | 6 | | 14342 | Engine Settings | Coolant Temperature Delay | UNSIGNED16 | s | 0 | 900 | yes | 5 | | 14343 | Engine Settings | Fuel Level Delay | UNSIGNED16 | s | 0 | 900 | yes | 10 | +| 14367 | Scheduler | Rental Timer 2 | FDATE | | 0 | 0 | yes | 010199 | +| 14368 | Scheduler | Rental Timer 2 Wrn | FDATE | | 0 | 0 | yes | 010199 | | 14385 | General Analog Inputs | AIN Switch04 On | INTEGER16 | | 0 | 32000 | yes | 0 | | 14386 | General Analog Inputs | AIN Switch04 Off | INTEGER16 | | 0 | 32000 | yes | 0 | | 14412 | Engine Settings | Glow Plugs Time | UNSIGNED16 | s | 0 | var | yes | 0 | -| 14425 | Engine Settings | ECU Oil Pressure Sd | INTEGER16 | Bar | 0 | 10 | yes | 0.1 | -| 14426 | Engine Settings | ECU Oil Pressure Wrn | INTEGER16 | Bar | 0 | 10 | yes | 0.2 | +| 14425 | Engine Settings | ECU Oil Pressure Sd | INTEGER16 | Bar | 0 | 100 | yes | 1.0 | +| 14426 | Engine Settings | ECU Oil Pressure Wrn | INTEGER16 | Bar | 0 | 100 | yes | 2.0 | | 14427 | Engine Settings | ECU Oil Pressure Delay | UNSIGNED16 | s | 0 | 900 | yes | 3 | | 14428 | Engine Settings | ECU Coolant Temperature BOC | INTEGER16 | °C | -50 | 500 | yes | 90 | | 14429 | Engine Settings | ECU Coolant Temperature Wrn | INTEGER16 | °C | -50 | 500 | yes | 80 | @@ -633,13 +641,13 @@ hide: | 14431 | Engine Settings | ECU Fuel Level BOC | INTEGER16 | % | 0 | 100 | yes | 10 | | 14432 | Engine Settings | ECU Fuel Level Wrn | INTEGER16 | % | 0 | 100 | yes | 20 | | 14433 | Engine Settings | ECU Fuel Level Delay | UNSIGNED16 | s | 0 | 900 | yes | 10 | -| 14606 | Geo-Fencing | Home Latitude | INTEGER32 | | -0.09 | 0.09 | yes | 0 | -| 14607 | Geo-Fencing | Home Longitude | INTEGER32 | | -0.18 | 0.18 | yes | 0 | -| 14608 | Geo-Fencing | Fence Radius 2 | UNSIGNED16 | km | 0 | 99.9 | yes | 0 | +| 14606 | Geo-Fencing | Home Latitude | INTEGER32 | | -900 | 900 | yes | 0.0000 | +| 14607 | Geo-Fencing | Home Longitude | INTEGER32 | | -1800 | 1800 | yes | 0.0000 | +| 14608 | Geo-Fencing | Fence Radius 2 | UNSIGNED16 | km | 0 | 999 | yes | 0.0 | | 14609 | Geo-Fencing | Fence 2 Delay | UNSIGNED16 | s | 0 | 3600 | yes | 0 | -| 14610 | Geo-Fencing | Fence 1 Protection | STRING_LIST | | 389 | 392 | yes | HistRecOnl | -| 14611 | Geo-Fencing | Fence 2 Protection | STRING_LIST | | 394 | 397 | yes | HistRecOnl | -| 14628 | Basic Settings | Main Screen Line 2 | STRING_LIST | | 399 | 403 | no | Run Hours | +| 14610 | Geo-Fencing | Fence 1 Protection | [STRING_LIST](#fence-1-protection-14610) | | 389 | 392 | yes | HistRecOnl | +| 14611 | Geo-Fencing | Fence 2 Protection | [STRING_LIST](#fence-2-protection-14611) | | 394 | 397 | yes | HistRecOnl | +| 14628 | Basic Settings | Main Screen Line 2 | [STRING_LIST](#main-screen-line-2-14628) | | 399 | 403 | no | Run Hours | | 14683 | Engine Settings | Maximal Fuel Drop Delay | UNSIGNED16 | s | 0 | 600 | yes | 5 | | 14959 | Engine Settings | D+ Threshold | UNSIGNED8 | % | 0 | 100 | no | 80 | | 14960 | Engine Settings | D+ Delay | UNSIGNED8 | s | 1 | 255 | no | 1 | @@ -678,53 +686,805 @@ hide: | 15196 | Alternate Config | Nominal RPM 3 | UNSIGNED16 | RPM | 100 | 4000 | no | 1500 | | 15197 | Alternate Config | Nominal Frequency 3 | UNSIGNED16 | Hz | 45 | 65 | no | 50 | | 15199 | Alternate Config | ECU Speed Adjustment 3 | UNSIGNED16 | % | 0 | 100 | no | 50 | -| 15358 | Scheduler | Timer 1 Function | STRING_LIST | | 443 | 448 | no | Mode OFF | -| 15359 | Scheduler | Timer 2 Function | STRING_LIST | | 450 | 455 | no | Disable | -| 15664 | Protections | Overload Protection | STRING_LIST | | 457 | 459 | no | Enabled | -| 15665 | Protections | Short Circuit Protection | STRING_LIST | | 461 | 463 | no | Enabled | -| 15666 | Protections | IDMT Overcurrent Protection | STRING_LIST | | 465 | 467 | no | Enabled | -| 15667 | Protections | Current Unbalance Protection | STRING_LIST | | 469 | 471 | no | Enabled | -| 15668 | Protections | Generator <> Voltage Protection | STRING_LIST | | 473 | 475 | no | Enabled | -| 15669 | Protections | Voltage Unbalance Protection | STRING_LIST | | 477 | 479 | no | Enabled | -| 15670 | Protections | Generator Frequency Protection | STRING_LIST | | 481 | 483 | no | Enabled | -| 15671 | Protections | Underspeed Protection | STRING_LIST | | 485 | 487 | no | Enabled | -| 15672 | Protections | Overspeed Protection | STRING_LIST | | 489 | 491 | no | Enabled | -| 15715 | Engine Settings | Choke Increment | UNSIGNED16 | s/°C | 0 | 20 | no | 0 | -| 15716 | Engine Settings | Choke Start Temp | INTEGER16 | °C | -20 | 80 | no | 0 | -| 15717 | Engine Settings | Choke Function | STRING_LIST | | 495 | 497 | yes | Fixed Time | +| 15358 | Scheduler | Timer 1 Function | [STRING_LIST](#timer-1-function-15358) | | 443 | 448 | no | Mode OFF | +| 15359 | Scheduler | Timer 2 Function | [STRING_LIST](#timer-2-function-15359) | | 450 | 455 | no | Disable | +| 15664 | Protections | Overload Protection | [STRING_LIST](#overload-protection-15664) | | 457 | 459 | no | Enabled | +| 15665 | Protections | Short Circuit Protection | [STRING_LIST](#short-circuit-protection-15665) | | 461 | 463 | no | Enabled | +| 15666 | Protections | IDMT Overcurrent Protection | [STRING_LIST](#idmt-overcurrent-protection-15666) | | 465 | 467 | no | Enabled | +| 15667 | Protections | Current Unbalance Protection | [STRING_LIST](#current-unbalance-protection-15667) | | 469 | 471 | no | Enabled | +| 15668 | Protections | Generator <> Voltage Protection | [STRING_LIST](#generator-voltage-protection-15668) | | 473 | 475 | no | Enabled | +| 15669 | Protections | Voltage Unbalance Protection | [STRING_LIST](#voltage-unbalance-protection-15669) | | 477 | 479 | no | Enabled | +| 15670 | Protections | Generator Frequency Protection | [STRING_LIST](#generator-frequency-protection-15670) | | 481 | 483 | no | Enabled | +| 15671 | Protections | Underspeed Protection | [STRING_LIST](#underspeed-protection-15671) | | 485 | 487 | no | Enabled | +| 15672 | Protections | Overspeed Protection | [STRING_LIST](#overspeed-protection-15672) | | 489 | 491 | no | Enabled | +| 15715 | Engine Settings | Choke Increment | UNSIGNED16 | s/°C | 0 | 2000 | no | 0.00 | +| 15716 | Engine Settings | Choke Start Temp | INTEGER16 | °C | -200 | 800 | no | 0.0 | +| 15717 | Engine Settings | Choke Function | [STRING_LIST](#choke-function-15717) | | 495 | 497 | yes | Fixed Time | | 15718 | Engine Settings | Choke Voltage | UNSIGNED16 | % | 0 | 100 | no | 0 | -| 15751 | Engine Settings | D+ Alarm Type | STRING_LIST | | 500 | 502 | no | Wrn | +| 15751 | Engine Settings | D+ Alarm Type | [STRING_LIST](#d-alarm-type-15751) | | 500 | 502 | no | Wrn | | 15767 | Engine Settings | Ventilation Pulse Time | UNSIGNED16 | s | 0 | 3600 | no | 30 | -| 15771 | Alternate Config | Nominal Power Split Phase 1 | UNSIGNED16 | kW | 0.1 | 500 | no | 2 | -| 15772 | Alternate Config | Nominal Power Split Phase 2 | UNSIGNED16 | kW | 0.1 | 500 | no | 2 | -| 15773 | Alternate Config | Nominal Power Split Phase 3 | UNSIGNED16 | kW | 0.1 | 500 | no | 2 | +| 15771 | Alternate Config | Nominal Power Split Phase 1 | UNSIGNED16 | kW | 1 | 5000 | no | 20.0 | +| 15772 | Alternate Config | Nominal Power Split Phase 2 | UNSIGNED16 | kW | 1 | 5000 | no | 20.0 | +| 15773 | Alternate Config | Nominal Power Split Phase 3 | UNSIGNED16 | kW | 1 | 5000 | no | 20.0 | | 15774 | Engine Settings | Choke Lead | UNSIGNED16 | s | 0 | var | no | 0 | -| 15889 | Basic Settings | Screen Filter | STRING_LIST | | 509 | 510 | no | Disabled | +| 15889 | Basic Settings | Screen Filter | [STRING_LIST](#screen-filter-15889) | | 509 | 510 | no | Disabled | | 15890 | Invisible | Screen Filter Tau | UNSIGNED16 | ms | 100 | 10000 | no | 200 | -| 16039 | Dual Operation | Running Hours Max Difference | UNSIGNED16 | h | 0.1 | 1000 | no | 1 | -| 16040 | Dual Operation | Running Hours Base | INTEGER32 | h | -10 | 10 | no | 0 | -| 16041 | Dual Operation | Swap Gen-sets | STRING_LIST | | 515 | 516 | no | Enabled | -| 16042 | Dual Operation | Master Error Protection | STRING_LIST | | 518 | 520 | no | AL Indic | -| 16043 | Dual Operation | Slave Error Protection | STRING_LIST | | 522 | 524 | no | AL Indic | -| 24110 | CM-Ethernet | Web Interface | STRING_LIST | | 526 | 527 | no | Enabled | -| 24132 | CM-4G-GPS | Required Connection Type | STRING_LIST | | 529 | 532 | no | Automatic | -| 24136 | CM-Ethernet | SNMP Trap Format | STRING_LIST | | 534 | 536 | no | SNMPv1 Trap | -| 24259 | CM-Ethernet | IP Address Mode | STRING_LIST | | 542 | 543 | no | Automatic | -| 24273 | CM-4G-GPS | AirGate Connection | STRING_LIST | | 545 | 546 | no | Enabled | -| 24279 | Plug-In Modules | Slot B | STRING_LIST | | 548 | 549 | yes | Disable | -| 24280 | Plug-In Modules | Slot A | STRING_LIST | | 551 | 552 | yes | Enable | -| 24299 | CM-Ethernet | Message Language | STRING_LIST | | 1674 | 1674 | no | English | -| 24315 | CM-4G-GPS | Internet Connection | STRING_LIST | | 566 | 567 | no | Enabled | -| 24336 | CM-Ethernet | SNMP Agent | STRING_LIST | | 572 | 573 | no | Enabled | -| 24337 | CM-Ethernet | MODBUS Server | STRING_LIST | | 575 | 576 | no | Enabled | -| 24340 | CM-RS232-485 | COM 2 Communication Speed | STRING_LIST | | 578 | 582 | yes | 57600 | -| 24341 | CM-RS232-485 | COM 1 Communication Speed | STRING_LIST | | 584 | 588 | yes | 57600 | -| 24365 | CM-Ethernet | AirGate Connection | STRING_LIST | | 595 | 596 | no | Disabled | -| 24366 | CM-Ethernet | Time Zone | STRING_LIST | | 598 | 630 | no | GMT+2:00 | +| 16039 | Dual Operation | Running Hours Max Difference | UNSIGNED16 | h | 1 | 10000 | no | 10.0 | +| 16040 | Dual Operation | Running Hours Base | INTEGER32 | h | -100 | 100 | no | 0.0 | +| 16041 | Dual Operation | Swap Gen-sets | [STRING_LIST](#swap-gen-sets-16041) | | 515 | 516 | no | Enabled | +| 16042 | Dual Operation | Master Error Protection | [STRING_LIST](#master-error-protection-16042) | | 518 | 520 | no | AL Indic | +| 16043 | Dual Operation | Slave Error Protection | [STRING_LIST](#slave-error-protection-16043) | | 522 | 524 | no | AL Indic | +| 24110 | CM-Ethernet | Web Interface | [STRING_LIST](#web-interface-24110) | | 526 | 527 | no | Enabled | +| 24132 | CM-4G-GPS | Required Connection Type | [STRING_LIST](#required-connection-type-24132) | | 529 | 532 | no | Automatic | +| 24136 | CM-Ethernet | SNMP Trap Format | [STRING_LIST](#snmp-trap-format-24136) | | 534 | 536 | no | SNMPv1 Trap | +| 24142 | CM-4G-GPS | Telephone Number 4 | TELEPHONE_NUMBER | | 0 | 0 | no | | +| 24143 | CM-4G-GPS | Telephone Number 3 | TELEPHONE_NUMBER | | 0 | 0 | no | | +| 24144 | CM-Ethernet | E-mail Address 4 | EMAIL | | 0 | 0 | no | | +| 24145 | CM-Ethernet | E-mail Address 3 | EMAIL | | 0 | 0 | no | | +| 24259 | CM-Ethernet | IP Address Mode | [STRING_LIST](#ip-address-mode-24259) | | 542 | 543 | no | Automatic | +| 24273 | CM-4G-GPS | AirGate Connection | [STRING_LIST](#airgate-connection-24273) | | 545 | 546 | no | Enabled | +| 24279 | Plug-In Modules | Slot B | [STRING_LIST](#slot-b-24279) | | 548 | 549 | yes | Disable | +| 24280 | Plug-In Modules | Slot A | [STRING_LIST](#slot-a-24280) | | 551 | 552 | yes | Enable | +| 24293 | CM-Ethernet | SNMP Traps IP Address 2 | LONG_STRING | | 0 | 0 | no | | +| 24294 | CM-Ethernet | SNMP Traps IP Address 1 | LONG_STRING | | 0 | 0 | no | | +| 24295 | CM-4G-GPS | Telephone Number 2 | TELEPHONE_NUMBER | | 0 | 0 | no | | +| 24296 | CM-4G-GPS | Telephone Number 1 | TELEPHONE_NUMBER | | 0 | 0 | no | | +| 24297 | CM-Ethernet | E-mail Address 2 | EMAIL | | 0 | 0 | no | | +| 24298 | CM-Ethernet | E-mail Address 1 | EMAIL | | 0 | 0 | no | | +| 24299 | CM-Ethernet | Message Language | [STRING_LIST](#message-language-24299) | | 1674 | 1674 | no | English | +| 24310 | CM-4G-GPS | SMTP Sender Address | LONG_STRING | | 0 | 0 | no | | +| 24311 | CM-4G-GPS | SMTP Server Address | LONG_STRING | | 0 | 0 | no | airgate.comap.cz:9925 | +| 24312 | CM-4G-GPS | SMTP User Password | SHORT_STRING | | 0 | 0 | no | | +| 24313 | CM-4G-GPS | SMTP User Name | LONG_STRING | | 0 | 0 | no | | +| 24314 | CM-GPRS | DNS IP Address | IP_ADDRESS | | 0 | 0 | no | | +| 24315 | CM-4G-GPS | Internet Connection | [STRING_LIST](#internet-connection-24315) | | 566 | 567 | no | Enabled | +| 24331 | CM-Ethernet | DNS IP Address 2 | IP_ADDRESS | | 0 | 0 | no | 4.4.4.4 | +| 24334 | CM-Ethernet | SNMP WR Community String | LONG_STRING | | 0 | 0 | no | private | +| 24335 | CM-Ethernet | SNMP RD Community String | LONG_STRING | | 0 | 0 | no | dobter | +| 24336 | CM-Ethernet | SNMP Agent | [STRING_LIST](#snmp-agent-24336) | | 572 | 573 | no | Enabled | +| 24337 | CM-Ethernet | MODBUS Server | [STRING_LIST](#modbus-server-24337) | | 575 | 576 | no | Enabled | +| 24340 | CM-RS232-485 | COM 2 Communication Speed | [STRING_LIST](#com-2-communication-speed-24340) | | 578 | 582 | yes | 57600 | +| 24341 | CM-RS232-485 | COM 1 Communication Speed | [STRING_LIST](#com-1-communication-speed-24341) | | 584 | 588 | yes | 57600 | +| 24360 | CM-4G-GPS | APN User Password | SHORT_STRING | | 0 | 0 | no | | +| 24361 | CM-4G-GPS | APN User Name | SHORT_STRING | | 0 | 0 | no | | +| 24362 | CM-Ethernet | DNS IP Address 1 | IP_ADDRESS | | 0 | 0 | no | 8.8.8.8 | +| 24363 | CM-4G-GPS | APN Name | LONG_STRING | | 0 | 0 | no | | +| 24364 | CM-Ethernet | AirGate Address | LONG_STRING | | 0 | 0 | no | airgate.comap.cz | +| 24365 | CM-Ethernet | AirGate Connection | [STRING_LIST](#airgate-connection-24365) | | 595 | 596 | no | Disabled | +| 24366 | CM-Ethernet | Time Zone | [STRING_LIST](#time-zone-24366) | | 598 | 630 | no | GMT+2:00 | +| 24367 | CM-Ethernet | SMTP Sender Address | LONG_STRING | | 0 | 0 | no | | +| 24368 | CM-Ethernet | SMTP Server Address | LONG_STRING | | 0 | 0 | no | airgate.comap.cz:9925 | +| 24369 | CM-Ethernet | SMTP User Password | SHORT_STRING | | 0 | 0 | no | | +| 24370 | CM-Ethernet | SMTP User Name | LONG_STRING | | 0 | 0 | no | | +| 24373 | CM-Ethernet | Gateway IP | IP_ADDRESS | | 0 | 0 | no | 192.168.1.1 | | 24374 | CM-Ethernet | ComAp TCP Port | UNSIGNED16 | | 0 | 65535 | no | 23 | -| 24420 | CM-RS232-485 | COM 2 MODBUS Communication Speed | STRING_LIST | | 640 | 644 | yes | 9600 | -| 24451 | CM-RS232-485 | COM 2 Mode | STRING_LIST | | 646 | 649 | yes | Direct | -| 24477 | CM-RS232-485 | COM 1 MODBUS Communication Speed | STRING_LIST | | 651 | 655 | yes | 9600 | +| 24375 | CM-Ethernet | Subnet Mask | IP_ADDRESS | | 0 | 0 | no | 255.255.255.0 | +| 24376 | CM-Ethernet | IP Address | IP_ADDRESS | | 0 | 0 | no | 192.168.1.254 | +| 24420 | CM-RS232-485 | COM 2 MODBUS Communication Speed | [STRING_LIST](#com-2-modbus-communication-speed-24420) | | 640 | 644 | yes | 9600 | +| 24451 | CM-RS232-485 | COM 2 Mode | [STRING_LIST](#com-2-mode-24451) | | 646 | 649 | yes | Direct | +| 24477 | CM-RS232-485 | COM 1 MODBUS Communication Speed | [STRING_LIST](#com-1-modbus-communication-speed-24477) | | 651 | 655 | yes | 9600 | | 24488 | Invisible | HMI Languague | UNSIGNED32 | | 0 | 0 | no | 1033 | -| 24522 | CM-RS232-485 | COM 1 Mode | STRING_LIST | | 658 | 661 | yes | Direct | +| 24522 | CM-RS232-485 | COM 1 Mode | [STRING_LIST](#com-1-mode-24522) | | 658 | 661 | yes | Direct | | 24537 | Basic Settings | Controller Address | UNSIGNED8 | | 1 | 32 | yes | 1 | +| 24553 | Date/Time | Date | FDATE | | 0 | 0 | yes | 140726 | +| 24554 | Date/Time | Time | FTIME | | 0 | 0 | yes | 002614 | + +## String Lists + +Option tables for every `STRING_LIST` value and setpoint above, linked from their **Type** column. The wire value is the raw 0-based integer used on the wire (e.g. by [set_setpoint][pycomap.Controller.set_setpoint]); the label is what's shown on the front panel and in InteliConfig. + +### Application (8480) + +| Wire Value | Label | +| --- | --- | +| 0 | Not Used | +| 1 | AMF | +| 2 | MRS | +| 3 | MRS11 | +| 4 | MRS16 | +| 5 | AMF20 | +| 6 | AMF25 | + +### FW Branch (8707) + +| Wire Value | Label | +| --- | --- | +| 0 | Not Used | +| 1 | Standard | + +### Engine State (9244) + +| Wire Value | Label | +| --- | --- | +| 0 | Init | +| 1 | Ready | +| 2 | NotReady | +| 3 | Prestart | +| 4 | Cranking | +| 5 | Pause | +| 6 | Starting | +| 7 | Running | +| 8 | Loaded | +| 9 | Soft unld | +| 10 | Cooling | +| 11 | Stop | +| 12 | Shutdown | +| 13 | Ventil | +| 14 | EmergMan | +| 15 | Soft load | +| 16 | WaitStop | +| 17 | SDVentil | + +### Breaker State (9245) + +| Wire Value | Label | +| --- | --- | +| 0 | Init | +| 1 | BrksOff | +| 2 | IslOper | +| 3 | MainsOper | +| 4 | ParalOper | +| 5 | RevSync | +| 6 | Synchro | +| 7 | MainsFlt | +| 8 | ValidFlt | +| 9 | MainsRet | +| 10 | MultIslOp | +| 11 | MultParOp | +| 12 | EmergMan | + +### Controler Mode (9887) + +| Wire Value | Label | +| --- | --- | +| 0 | OFF | +| 1 | MAN | +| 2 | AUTO | +| 3 | TEST | + +### Timer Text (10040) + +| Wire Value | Label | +| --- | --- | +| 0 | No Timer | +| 1 | Prestart | +| 2 | Cranking | +| 3 | Idle Run | +| 4 | Cooling | +| 5 | Stop Valve | +| 6 | AfterCool | +| 7 | Pause | +| 8 | VentilGas | +| 9 | MinStabTO | +| 10 | MaxStabTO | +| 11 | MCB close | +| 12 | TransferDel | +| 13 | ReturnDelay | +| 14 | Start Delay | +| 15 | V Detect | +| 16 | GCB Delay | +| 17 | Fuel Lead | + +### Connection Type (12944) + +| Wire Value | Label | +| --- | --- | +| 0 | MonoPhase | +| 1 | SplPhL1L2 | +| 2 | SplPhL1L3 | +| 3 | High Leg D | +| 4 | 3Ph3Wire | +| 5 | 3Ph4Wire | + +### Application Mode (14446) + +| Wire Value | Label | +| --- | --- | +| 0 | AMF | +| 1 | MRS | + +### SPI Module A (14447) + +| Wire Value | Label | +| --- | --- | +| 0 | Empty | +| 1 | EM-AOUT8 | +| 2 | EM-BIO8 | +| 3 | EM-EFCP | +| 4 | EM-EFCP-8mA | +| 5 | EM-BIO8-EFCP | +| 6 | CM-RS232-485 | +| 7 | CM-RS232 | +| 8 | CM-Ethernet | +| 9 | CM-GPRS | +| 10 | CM-4G-GPS | + +### SPI Module B (14448) + +| Wire Value | Label | +| --- | --- | +| 0 | Empty | +| 1 | EM-AOUT8 | +| 2 | EM-BIO8 | +| 3 | EM-EFCP | +| 4 | EM-EFCP-8mA | +| 5 | EM-BIO8-EFCP | +| 6 | CM-RS232-485 | +| 7 | CM-RS232 | +| 8 | CM-Ethernet | +| 9 | CM-GPRS | +| 10 | CM-4G-GPS | + +### ETH Interface Status (24180) + +| Wire Value | Label | +| --- | --- | +| 0 | Unknown | +| 1 | Disconnected | +| 2 | Connecting | +| 3 | Connected | +| 4 | Failure | + +### Controller Mode (8315) + +| Wire Value | Label | +| --- | --- | +| 0 | OFF | +| 1 | MAN | +| 2 | AUTO | +| 3 | TEST | + +### MCB Logic (8444) + +| Wire Value | Label | +| --- | --- | +| 0 | Close-On | +| 1 | Close-Off | + +### Wrn Message (8482) + +| Wire Value | Label | +| --- | --- | +| 0 | OFF | +| 1 | ON | + +### Sd Message (8484) + +| Wire Value | Label | +| --- | --- | +| 0 | OFF | +| 1 | ON | + +### Return From TEST (8618) + +| Wire Value | Label | +| --- | --- | +| 0 | Manual | +| 1 | Auto | + +### Summer Time Mode (8727) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Winter | +| 2 | Summer | +| 3 | Winter-S | +| 4 | Summer-S | + +### Fuel Solenoid (9100) + +| Wire Value | Label | +| --- | --- | +| 0 | Diesel | +| 1 | Gas | + +### Return From Island (9590) + +| Wire Value | Label | +| --- | --- | +| 0 | Manual | +| 1 | Auto | + +### D+ Function (9683) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | ChargeFail | +| 2 | Disabled | + +### MCB Opens On (9850) + +| Wire Value | Label | +| --- | --- | +| 0 | Mains Fail | +| 1 | Gen Run | + +### Reset To Manual (9983) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### Cooling Speed (10046) + +| Wire Value | Label | +| --- | --- | +| 0 | Idle | +| 1 | Nominal | + +### BOC Message (10566) + +| Wire Value | Label | +| --- | --- | +| 0 | OFF | +| 1 | ON | + +### Event Message (10926) + +| Wire Value | Label | +| --- | --- | +| 0 | OFF | +| 1 | ON | + +### CT Location (11625) + +| Wire Value | Label | +| --- | --- | +| 0 | None | +| 1 | GenSet | +| 2 | Load | + +### Connection Type (11628) + +| Wire Value | Label | +| --- | --- | +| 0 | 3Ph4Wire | +| 1 | 3Ph3Wire | +| 2 | High Leg D | +| 3 | SplPhL1L3 | +| 4 | SplPhL1L2 | +| 5 | MonoPhase | +| 6 | Autodetect | + +### Earth Fault Current Protection (11631) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### Geo-Fencing (11681) + +| Wire Value | Label | +| --- | --- | +| 0 | Disable | +| 1 | Enable | +| 2 | LBI Enable | + +### Connection Type 1 (12058) + +| Wire Value | Label | +| --- | --- | +| 0 | 3Ph4Wire | +| 1 | 3Ph3Wire | +| 2 | High Leg D | +| 3 | SplPhL1L3 | +| 4 | SplPhL1L2 | +| 5 | MonoPhase | +| 6 | Autodetect | + +### Connection Type 2 (12059) + +| Wire Value | Label | +| --- | --- | +| 0 | 3Ph4Wire | +| 1 | 3Ph3Wire | +| 2 | High Leg D | +| 3 | SplPhL1L3 | +| 4 | SplPhL1L2 | +| 5 | MonoPhase | +| 6 | Autodetect | + +### Connection Type 3 (12060) + +| Wire Value | Label | +| --- | --- | +| 0 | 3Ph4Wire | +| 1 | 3Ph3Wire | +| 2 | High Leg D | +| 3 | SplPhL1L3 | +| 4 | SplPhL1L2 | +| 5 | MonoPhase | +| 6 | Autodetect | + +### Operation Mode (12157) + +| Wire Value | Label | +| --- | --- | +| 0 | AMF | +| 1 | MRS | + +### Power On Mode (13000) + +| Wire Value | Label | +| --- | --- | +| 0 | Previous | +| 1 | OFF | + +### RunHoursSource (13345) + +| Wire Value | Label | +| --- | --- | +| 0 | AUTO | +| 1 | ECU | +| 2 | INTERNAL | + +### Main Screen Line 1 (13346) + +| Wire Value | Label | +| --- | --- | +| 0 | RPM | +| 1 | PF | +| 2 | Run Hours | +| 3 | ATT | +| 4 | AIN1 | + +### Earth Fault CT Input Range (14340) + +| Wire Value | Label | +| --- | --- | +| 0 | 1A | +| 1 | 5A | + +### Fence 1 Protection (14610) + +| Wire Value | Label | +| --- | --- | +| 0 | HistRecOnl | +| 1 | Wrn | +| 2 | Sd | +| 3 | BOC | + +### Fence 2 Protection (14611) + +| Wire Value | Label | +| --- | --- | +| 0 | HistRecOnl | +| 1 | Wrn | +| 2 | Sd | +| 3 | BOC | + +### Main Screen Line 2 (14628) + +| Wire Value | Label | +| --- | --- | +| 0 | RPM | +| 1 | PF | +| 2 | Run Hours | +| 3 | ATT | +| 4 | AIN1 | + +### Timer 1 Function (15358) + +| Wire Value | Label | +| --- | --- | +| 0 | Disable | +| 1 | No Func | +| 2 | TEST | +| 3 | TEST OnLd | +| 4 | MFail Blk | +| 5 | Mode OFF | + +### Timer 2 Function (15359) + +| Wire Value | Label | +| --- | --- | +| 0 | Disable | +| 1 | No Func | +| 2 | TEST | +| 3 | TEST OnLd | +| 4 | MFail Blk | +| 5 | Mode OFF | + +### Overload Protection (15664) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Short Circuit Protection (15665) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### IDMT Overcurrent Protection (15666) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Current Unbalance Protection (15667) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Generator <> Voltage Protection (15668) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Voltage Unbalance Protection (15669) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Generator Frequency Protection (15670) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Underspeed Protection (15671) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Overspeed Protection (15672) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | +| 2 | By LBI | + +### Choke Function (15717) + +| Wire Value | Label | +| --- | --- | +| 0 | Disable | +| 1 | Fixed Time | +| 2 | Temp Based | + +### D+ Alarm Type (15751) + +| Wire Value | Label | +| --- | --- | +| 0 | No Protec | +| 1 | Wrn | +| 2 | Sd | + +### Screen Filter (15889) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | + +### Swap Gen-sets (16041) + +| Wire Value | Label | +| --- | --- | +| 0 | Enabled | +| 1 | Disabled | + +### Master Error Protection (16042) + +| Wire Value | Label | +| --- | --- | +| 0 | Monitoring | +| 1 | AL Indic | +| 2 | Wrn | + +### Slave Error Protection (16043) + +| Wire Value | Label | +| --- | --- | +| 0 | Monitoring | +| 1 | AL Indic | +| 2 | Wrn | + +### Web Interface (24110) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### Required Connection Type (24132) + +| Wire Value | Label | +| --- | --- | +| 0 | 2G | +| 1 | 3G | +| 2 | 4G | +| 3 | Automatic | + +### SNMP Trap Format (24136) + +| Wire Value | Label | +| --- | --- | +| 0 | SNMPv1 Trap | +| 1 | SNMPv2 Not | +| 2 | SNMPv2 Inf | + +### IP Address Mode (24259) + +| Wire Value | Label | +| --- | --- | +| 0 | Fixed | +| 1 | Automatic | + +### AirGate Connection (24273) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### Slot B (24279) + +| Wire Value | Label | +| --- | --- | +| 0 | Disable | +| 1 | Enable | + +### Slot A (24280) + +| Wire Value | Label | +| --- | --- | +| 0 | Disable | +| 1 | Enable | + +### Message Language (24299) + +| Wire Value | Label | +| --- | --- | +| 0 | English | + +### Internet Connection (24315) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### SNMP Agent (24336) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### MODBUS Server (24337) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### COM 2 Communication Speed (24340) + +| Wire Value | Label | +| --- | --- | +| 0 | 9600 | +| 1 | 19200 | +| 2 | 38400 | +| 3 | 57600 | +| 4 | 115200 | + +### COM 1 Communication Speed (24341) + +| Wire Value | Label | +| --- | --- | +| 0 | 9600 | +| 1 | 19200 | +| 2 | 38400 | +| 3 | 57600 | +| 4 | 115200 | + +### AirGate Connection (24365) + +| Wire Value | Label | +| --- | --- | +| 0 | Disabled | +| 1 | Enabled | + +### Time Zone (24366) + +| Wire Value | Label | +| --- | --- | +| 0 | GMT-12:00 | +| 1 | GMT-11:00 | +| 2 | GMT-10:00 | +| 3 | GMT-9:00 | +| 4 | GMT-8:00 | +| 5 | GMT-7:00 | +| 6 | GMT-6:00 | +| 7 | GMT-5:00 | +| 8 | GMT-4:00 | +| 9 | GMT-3:30 | +| 10 | GMT-3:00 | +| 11 | GMT-2:00 | +| 12 | GMT-1:00 | +| 13 | GMT+0:00 | +| 14 | GMT+1:00 | +| 15 | GMT+2:00 | +| 16 | GMT+3:00 | +| 17 | GMT+3:30 | +| 18 | GMT+4:00 | +| 19 | GMT+4:30 | +| 20 | GMT+5:00 | +| 21 | GMT+5:30 | +| 22 | GMT+5:45 | +| 23 | GMT+6:00 | +| 24 | GMT+6:30 | +| 25 | GMT+7:00 | +| 26 | GMT+8:00 | +| 27 | GMT+9:00 | +| 28 | GMT+9:30 | +| 29 | GMT+10:00 | +| 30 | GMT+11:00 | +| 31 | GMT+12:00 | +| 32 | GMT+13:00 | + +### COM 2 MODBUS Communication Speed (24420) + +| Wire Value | Label | +| --- | --- | +| 0 | 9600 | +| 1 | 19200 | +| 2 | 38400 | +| 3 | 57600 | +| 4 | 115200 | + +### COM 2 Mode (24451) + +| Wire Value | Label | +| --- | --- | +| 0 | Direct | +| 1 | Modbus | +| 2 | DualSlave | +| 3 | DualMaster | + +### COM 1 MODBUS Communication Speed (24477) + +| Wire Value | Label | +| --- | --- | +| 0 | 9600 | +| 1 | 19200 | +| 2 | 38400 | +| 3 | 57600 | +| 4 | 115200 | + +### COM 1 Mode (24522) + +| Wire Value | Label | +| --- | --- | +| 0 | Direct | +| 1 | Modbus | +| 2 | DualSlave | +| 3 | DualMaster | diff --git a/docs/index.md b/docs/index.md index 5b8fce3..0dd1bb6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,3 +1,8 @@ +--- +hide: + - navigation +--- + # pycomap Async Python client for ComAp controllers (InteliLite AMF25 and likely compatible diff --git a/docs/protocol.md b/docs/protocol.md index d9c3dfa..3ec8f32 100644 --- a/docs/protocol.md +++ b/docs/protocol.md @@ -1,3 +1,8 @@ +--- +hide: + - navigation +--- + # ComAp InteliLite/AMF25 — Protocol Reverse-Engineering Notes This document records everything established during the reverse-engineering session: the diff --git a/llms.txt b/llms.txt index e22446b..0d3ab8b 100644 --- a/llms.txt +++ b/llms.txt @@ -23,7 +23,7 @@ async with Controller( await ctrl.set_setpoint("Summer Time Mode", "Winter") # STRING_LIST by label ``` -See the [API docs](https://igor-panteleev.github.io/pycomap/) for full reference. `just docs-serve` to browse locally. +See the [API docs](https://igor-panteleev.github.io/pycomap/) for full reference, built with [Zensical](https://zensical.org/). `just docs-serve` to browse locally. ## Development diff --git a/mkdocs.yml b/mkdocs.yml index 049924f..f952d48 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,8 @@ site_name: pycomap site_url: https://igor-panteleev.github.io/pycomap/ site_description: Async Python client for ComAp controllers +repo_url: https://github.com/igor-panteleev/pycomap +repo_name: igor-panteleev/pycomap theme: name: material diff --git a/pyproject.toml b/pyproject.toml index aa2f1c5..8bf8d1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,10 +38,11 @@ build-backend = "uv_build" [dependency-groups] dev = [ + "configargparse>=1.7.5", "ifaddr>=0.2.0", - "mkdocs>=1.6,<2", - "mkdocs-material>=9.5", - "mkdocstrings[python]>=0.25", + "python-dotenv>=1.2.2", + "zensical>=0.0.50", + "mkdocstrings-python>=1.0", "pre-commit>=4.6.0", "pytest>=8", "pytest-asyncio>=0.24", diff --git a/scripts/gen_ai_docs.py b/scripts/gen_ai_docs.py index 9b154c5..fcc1d7d 100644 --- a/scripts/gen_ai_docs.py +++ b/scripts/gen_ai_docs.py @@ -35,7 +35,7 @@ just test # full pytest suite (alias: t) just integration # pytest tests/integration, requires .env (alias: i) just coverage # unit tests with coverage report (alias: cov) -just docs # build MkDocs static site → site/ +just docs # build Zensical static site → site/ just docs-serve # live-reload preview at localhost:8000 just ai-docs # regenerate llms.txt and CLAUDE.md from README.md ``` diff --git a/scripts/gen_controller_reference.py b/scripts/gen_controller_reference.py new file mode 100644 index 0000000..13efd1e --- /dev/null +++ b/scripts/gen_controller_reference.py @@ -0,0 +1,188 @@ +"""Regenerate docs/controller_reference.md from a live ComAp controller. + +Connects read-only (no password) to a real controller and writes the full Values, +Setpoints, and String Lists tables from its ``ConfigurationTable`` plus a single +``read_values()``/``read_setpoints()`` snapshot. Re-run whenever the controller's +configuration changes. + +Usage:: + + uv run python scripts/gen_controller_reference.py --host 192.168.1.9 --access-code 0 + +``--host``/``--access-code`` fall back to ``PYCOMAP_TEST_HOST``/``PYCOMAP_TEST_ACCESS_CODE`` +from ``.env`` (see ``.env.example``) when omitted. +""" + +from __future__ import annotations + +import asyncio +import re +from ipaddress import IPv4Address +from pathlib import Path + +import configargparse +from dotenv import load_dotenv + +from pycomap import Controller, EthernetTransport +from pycomap.configuration import SetpointDescription, ValueDescription +from pycomap.datatypes import DataType, Value +from pycomap.protocol import ComApClient + +ROOT = Path(__file__).parent.parent +OUTPUT = ROOT / "docs" / "controller_reference.md" + +# Values that identify this specific controller/network rather than describing its generic +# configuration -- redacted so the generated reference is safe to commit/publish. +_REDACTED_VALUE_NAMES = frozenset({"Password Decode", "MAC Address"}) +_REDACTED = "***" + +Description = ValueDescription | SetpointDescription +StringListEntry = tuple[Description, list[tuple[int, str]]] + + +def _slugify(text: str) -> str: + """Reproduce python-markdown's default TOC heading-id algorithm. + + mkdocs/Zensical use this to generate heading anchors -- links computed here must match + the anchors actually rendered, or the cross-links from the Values/Setpoints tables into + the String Lists section will silently 404. + """ + text = re.sub(r"[^\w\s-]", "", text.lower()) + return re.sub(r"\s+", "-", text.strip()) + + +def _anchor(desc: Description) -> str: + return _slugify(f"{desc.name} ({desc.number})") + + +def _display(desc: Description, val: Value | None) -> str: + if val is None: + return "—" + if desc.name in _REDACTED_VALUE_NAMES: + return _REDACTED + if isinstance(val, float) and desc.decimal_places: + return f"{val:.{desc.decimal_places}f}" + if isinstance(val, bytes): + return val.hex() + return str(val) + + +def _type_cell(desc: Description, string_list_numbers: set[int]) -> str: + if desc.number in string_list_numbers: + return f"[STRING_LIST](#{_anchor(desc)})" + return desc.data_type.name + + +async def _gather( + host: IPv4Address, access_code: str +) -> tuple[ + dict[int, Value], + dict[int, Value], + list[ValueDescription], + list[SetpointDescription], + list[StringListEntry], +]: + async with Controller(ComApClient(EthernetTransport(host)), access_code=access_code) as ctrl: + values = await ctrl.read_values() + setpoints = await ctrl.read_setpoints() + value_descs = sorted(ctrl.values, key=lambda d: d.number) + setpoint_descs = sorted(ctrl.setpoints, key=lambda d: d.number) + + string_lists: list[StringListEntry] = [] + for value_desc in value_descs: + if value_desc.data_type is DataType.STRING_LIST: + string_lists.append((value_desc, ctrl.value_options(value_desc.number))) + for setpoint_desc in setpoint_descs: + if setpoint_desc.data_type is DataType.STRING_LIST: + string_lists.append((setpoint_desc, ctrl.setpoint_options(setpoint_desc.number))) + + return values, setpoints, value_descs, setpoint_descs, string_lists + + +def _render( + values: dict[int, Value], + setpoints: dict[int, Value], + value_descs: list[ValueDescription], + setpoint_descs: list[SetpointDescription], + string_lists: list[StringListEntry], +) -> str: + string_list_numbers = {desc.number for desc, _ in string_lists} + + lines: list[str] = [ + "---", + "hide:", + " - navigation", + "---", + "", + "# ComAp Controller Reference", + "", + "## Values", + "", + "| # | Category | Group | Name | Type | Unit | Value |", + "| --- | --- | --- | --- | --- | --- | --- |", + ] + for value_desc in value_descs: + val = _display(value_desc, values.get(value_desc.number)) + lines.append( + f"| {value_desc.number} | {value_desc.category.name} | {value_desc.group or ''} | " + f"{value_desc.name} | {_type_cell(value_desc, string_list_numbers)} | " + f"{value_desc.dimension} | {val} |" + ) + + lines += [ + "", + "## Setpoints", + "", + "| # | Group | Name | Type | Unit | Min | Max | Password | Value |", + "| --- | --- | --- | --- | --- | --- | --- | --- | --- |", + ] + for setpoint_desc in setpoint_descs: + val = _display(setpoint_desc, setpoints.get(setpoint_desc.number)) + lo = "var" if setpoint_desc.var_low_limit else setpoint_desc.low_limit + hi = "var" if setpoint_desc.var_high_limit else setpoint_desc.high_limit + password = "yes" if setpoint_desc.needs_password else "no" + lines.append( + f"| {setpoint_desc.number} | {setpoint_desc.group or ''} | {setpoint_desc.name} | " + f"{_type_cell(setpoint_desc, string_list_numbers)} | {setpoint_desc.dimension} | " + f"{lo} | {hi} | {password} | {val} |" + ) + + lines += [ + "", + "## String Lists", + "", + "Option tables for every `STRING_LIST` value and setpoint above, linked from their " + "**Type** column. The wire value is the raw 0-based integer used on the wire (e.g. " + "by [set_setpoint][pycomap.Controller.set_setpoint]); the label is what's shown on " + "the front panel and in InteliConfig.", + ] + for desc, options in string_lists: + lines += [ + "", + f"### {desc.name} ({desc.number})", + "", + "| Wire Value | Label |", + "| --- | --- |", + ] + lines += [f"| {wire_value} | {label} |" for wire_value, label in options] + lines.append("") + + return "\n".join(lines) + + +async def main(host: IPv4Address, access_code: str) -> None: + values, setpoints, value_descs, setpoint_descs, string_lists = await _gather(host, access_code) + OUTPUT.write_text(_render(values, setpoints, value_descs, setpoint_descs, string_lists)) + print( + f"wrote {OUTPUT.relative_to(ROOT)}: {len(value_descs)} values, " + f"{len(setpoint_descs)} setpoints, {len(string_lists)} string lists" + ) + + +if __name__ == "__main__": + load_dotenv() + parser = configargparse.ArgParser(description=__doc__) + parser.add_argument("--host", type=IPv4Address, required=True, env_var="PYCOMAP_TEST_HOST") + parser.add_argument("--access-code", default="0", env_var="PYCOMAP_TEST_ACCESS_CODE") + args = parser.parse_args() + asyncio.run(main(args.host, args.access_code)) diff --git a/src/pycomap/controller.py b/src/pycomap/controller.py index c1b5991..8c6ab07 100644 --- a/src/pycomap/controller.py +++ b/src/pycomap/controller.py @@ -319,6 +319,51 @@ def setpoint_info(self, name_or_number: str | int) -> SetpointDescription: except KeyError: raise KeyError(f"no setpoint named {name_or_number!r}") from None + def _string_list_options( + self, desc: ValueDescription | SetpointDescription + ) -> list[tuple[int, str]]: + """Shared ``STRING_LIST`` option lookup for + [value_options][pycomap.Controller.value_options] and + [setpoint_options][pycomap.Controller.setpoint_options]. + + Options are stored in ``CommonNames`` at indices ``[low_limit .. high_limit]``. + """ + if desc.data_type is not DataType.STRING_LIST: + raise ComApProtocolError( + f"{desc.name!r} is DataType.{desc.data_type.name}, not STRING_LIST" + ) + return [ + (wire_value, self._common_names[desc.low_limit + wire_value]) + for wire_value in range(desc.high_limit - desc.low_limit + 1) + if desc.low_limit + wire_value < len(self._common_names) + ] + + def value_options(self, name_or_number: str | int) -> list[tuple[int, str]]: + """Return the available options for a ``STRING_LIST`` value. + + Options are stored in ``CommonNames`` at indices ``[low_limit .. high_limit]``. + The wire value (0-based) is what the controller sends on the wire and what + [value_label][pycomap.Controller.value_label] expects; the label is the string + shown on the front panel and in InteliConfig. Note that + [read_values][pycomap.Controller.read_values] resolves ``STRING_LIST`` values to + their label automatically — this method is for enumerating all possible options + up front (e.g. to build a legend or validate against known states). + + Args: + name_or_number: Value name or comm object number. + + Returns: + ``[(wire_value, label), ...]`` ordered by wire value. + + Raises: + ComApProtocolError: If the value is not ``STRING_LIST`` type. + + Examples: + >>> ctrl.value_options("Engine State") + [(0, 'Ready'), (1, 'Prestart'), (2, 'Cranking'), ...] + """ + return self._string_list_options(self.value_info(name_or_number)) + def setpoint_options(self, name_or_number: str | int) -> list[tuple[int, str]]: """Return the available options for a ``STRING_LIST`` setpoint. @@ -340,16 +385,7 @@ def setpoint_options(self, name_or_number: str | int) -> list[tuple[int, str]]: >>> ctrl.setpoint_options("Summer Time Mode") [(0, 'Disabled'), (1, 'Winter'), (2, 'Summer'), (3, 'Winter-S'), (4, 'Summer-S')] """ - desc = self.setpoint_info(name_or_number) - if desc.data_type is not DataType.STRING_LIST: - raise ComApProtocolError( - f"setpoint {desc.name!r} is DataType.{desc.data_type.name}, not STRING_LIST" - ) - return [ - (wire_value, self._common_names[desc.low_limit + wire_value]) - for wire_value in range(desc.high_limit - desc.low_limit + 1) - if desc.low_limit + wire_value < len(self._common_names) - ] + return self._string_list_options(self.setpoint_info(name_or_number)) def value_label(self, name_or_number: str | int, wire_value: int) -> str: """Return the display label for a ``STRING_LIST`` value's wire integer. diff --git a/tests/unit/test_controller.py b/tests/unit/test_controller.py index d2b4ee7..270a167 100644 --- a/tests/unit/test_controller.py +++ b/tests/unit/test_controller.py @@ -466,6 +466,62 @@ def test_resolve_raws_string_list_uses_low_limit(mocker) -> None: assert result[99] == "VTwo" +def test_value_options_returns_wire_label_pairs(mocker) -> None: + ctrl = _make_ctrl_with_table(mocker, _build_string_list_table(low_limit=0)) + assert ctrl.value_options(99) == [(0, "VOne"), (1, "VTwo")] + + +def test_value_options_uses_low_limit_offset(mocker) -> None: + ctrl = _make_ctrl_with_table(mocker, _build_string_list_table(low_limit=1)) + # low_limit=1, high_limit=1 → single option at CommonNames[1] = "VTwo" + assert ctrl.value_options(99) == [(0, "VTwo")] + + +def test_value_options_non_string_list_raises(mocker) -> None: + table_data = build_table( + category_counts=(1, 0, 0, 0), + numbers=[10], + records=[value_record(data_type=DataType.UNSIGNED16, data_index=0)], + ) + ctrl = _make_ctrl_with_table(mocker, table_data) + with pytest.raises(ComApProtocolError, match="not STRING_LIST"): + ctrl.value_options(10) + + +def _build_setpoint_string_list_table(*, low_limit: int = 0) -> bytes: + return build_table( + category_counts=(0, 0, 0, 0), + numbers=[], + records=[], + setpoint_category_counts=(1, 0), + setpoint_numbers=[199], + setpoint_records=[ + setpoint_record( + data_type=DataType.STRING_LIST, data_index=0, low_limit=low_limit, high_limit=1 + ) + ], + ) + + +def test_setpoint_options_returns_wire_label_pairs(mocker) -> None: + ctrl = _make_ctrl_with_table(mocker, _build_setpoint_string_list_table(low_limit=0)) + assert ctrl.setpoint_options(199) == [(0, "VOne"), (1, "VTwo")] + + +def test_setpoint_options_non_string_list_raises(mocker) -> None: + table_data = build_table( + category_counts=(0, 0, 0, 0), + numbers=[], + records=[], + setpoint_category_counts=(1, 0), + setpoint_numbers=[199], + setpoint_records=[setpoint_record(data_type=DataType.UNSIGNED16, data_index=0)], + ) + ctrl = _make_ctrl_with_table(mocker, table_data) + with pytest.raises(ComApProtocolError, match="not STRING_LIST"): + ctrl.setpoint_options(199) + + def test_resolve_raws_text_type_decoded_ascii(mocker) -> None: table_data = build_table( category_counts=(1, 0, 0, 0), diff --git a/uv.lock b/uv.lock index e61c155..8a21685 100644 --- a/uv.lock +++ b/uv.lock @@ -2,37 +2,6 @@ version = 1 revision = 3 requires-python = ">=3.14" -[[package]] -name = "babel" -version = "2.18.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, -] - -[[package]] -name = "backrefs" -version = "7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/a7dd63622beef68cc0d3c3c36d472e143dd95443d5ebf14cd1a5b4dfbf11/backrefs-7.0.tar.gz", hash = "sha256:4989bb9e1e99eb23647c7160ed51fb21d0b41b5d200f2d3017da41e023097e82", size = 7012453, upload-time = "2026-04-28T16:28:04.215Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/39/39a31d7eae729ea14ed10c3ccef79371197177b9355a86cb3525709e8502/backrefs-7.0-py310-none-any.whl", hash = "sha256:b57cd227ea556b0aed3dc9b8da4628db4eabc0402c6d7fcfc69283a93955f7e9", size = 380824, upload-time = "2026-04-28T16:27:55.647Z" }, - { url = "https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-none-any.whl", hash = "sha256:a0fa7360c63509e9e077e174ef4e6d3c21c8db94189b9d957289ae6d794b9475", size = 392626, upload-time = "2026-04-28T16:27:57.42Z" }, - { url = "https://files.pythonhosted.org/packages/36/da/87912ddec6e06feffbaa3d7aa18fc6352bee2e8f1fee185d7d1690f8f4e8/backrefs-7.0-py312-none-any.whl", hash = "sha256:ca42ce6a49ace3d75684dfa9937f3373902a63284ecb385ce36d15e5dcb41c12", size = 398537, upload-time = "2026-04-28T16:27:58.913Z" }, - { url = "https://files.pythonhosted.org/packages/00/bb/90ba423612b6aa0adccc6b1874bcd4a9b44b660c0c16f346611e00f64ac3/backrefs-7.0-py313-none-any.whl", hash = "sha256:f2c52955d631b9e1ac4cd56209f0a3a946d592b98e7790e77699339ae01c102a", size = 400491, upload-time = "2026-04-28T16:28:00.928Z" }, - { url = "https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-none-any.whl", hash = "sha256:a6448b28180e3ca01134c9cf09dcebafad8531072e09903c5451748a05f24bc9", size = 412349, upload-time = "2026-04-28T16:28:02.412Z" }, -] - -[[package]] -name = "certifi" -version = "2026.6.17" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, -] - [[package]] name = "cffi" version = "2.0.0" @@ -75,47 +44,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, ] -[[package]] -name = "charset-normalizer" -version = "3.4.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, - { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, - { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, - { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, - { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, - { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, - { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, - { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, - { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, - { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, - { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, - { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, - { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, - { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, - { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, - { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, - { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, - { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, - { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, - { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, - { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, - { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, - { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, - { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, - { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, - { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, -] - [[package]] name = "click" version = "8.4.2" @@ -137,6 +65,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] +[[package]] +name = "configargparse" +version = "1.7.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/0b/30328302903c55218ffc5199646d0e9d28348ff26c02ba77b2ffc58d294a/configargparse-1.7.5.tar.gz", hash = "sha256:e3f9a7bb6be34d66b2e3c4a2f58e3045f8dfae47b0dc039f87bcfaa0f193fb0f", size = 53548, upload-time = "2026-03-11T02:19:38.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/19/3ba5e1b0bcc7b91aeab6c258afd70e4907d220fed3972febe38feb40db30/configargparse-1.7.5-py3-none-any.whl", hash = "sha256:1e63fdffedf94da9cd435fc13a1cd24777e76879dd2343912c1f871d4ac8c592", size = 27692, upload-time = "2026-03-11T02:19:36.442Z" }, +] + [[package]] name = "coverage" version = "7.14.3" @@ -226,6 +163,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size = 3785547, upload-time = "2026-06-12T20:02:26.847Z" }, ] +[[package]] +name = "deepmerge" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/78/6e9e20106224083cfb817d2d3c26e80e72258d617b616721a169b87081e0/deepmerge-2.1.0.tar.gz", hash = "sha256:07ca7a7b8935df596c512fa8161877c0487ac61f691c07766e7d71d2b23bdd2f", size = 21449, upload-time = "2026-06-22T05:46:07.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/25/2a75b47cb057b1e164c604fb81ab690a6cdb5e2260ce651194eae90f64a3/deepmerge-2.1.0-py3-none-any.whl", hash = "sha256:8f148339a91d680a75ecb74ade235d9e759a93df373a0b04e9d31c8666cfeb75", size = 14345, upload-time = "2026-06-22T05:46:06.742Z" }, +] + [[package]] name = "distlib" version = "0.4.3" @@ -274,15 +220,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, ] -[[package]] -name = "idna" -version = "3.18" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, -] - [[package]] name = "ifaddr" version = "0.2.0" @@ -413,37 +350,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, ] -[[package]] -name = "mkdocs-material" -version = "9.7.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "babel" }, - { name = "backrefs" }, - { name = "colorama" }, - { name = "jinja2" }, - { name = "markdown" }, - { name = "mkdocs" }, - { name = "mkdocs-material-extensions" }, - { name = "paginate" }, - { name = "pygments" }, - { name = "pymdown-extensions" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" }, -] - -[[package]] -name = "mkdocs-material-extensions" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, -] - [[package]] name = "mkdocstrings" version = "1.0.4" @@ -461,11 +367,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl", hash = "sha256:63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b", size = 35560, upload-time = "2026-04-15T09:16:51.436Z" }, ] -[package.optional-dependencies] -python = [ - { name = "mkdocstrings-python" }, -] - [[package]] name = "mkdocstrings-python" version = "2.0.5" @@ -498,15 +399,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] -[[package]] -name = "paginate" -version = "0.5.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, -] - [[package]] name = "pathspec" version = "1.1.1" @@ -561,18 +453,19 @@ dependencies = [ [package.dev-dependencies] dev = [ + { name = "configargparse" }, { name = "ifaddr" }, - { name = "mkdocs" }, - { name = "mkdocs-material" }, - { name = "mkdocstrings", extra = ["python"] }, + { name = "mkdocstrings-python" }, { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-asyncio" }, { name = "pytest-cov" }, { name = "pytest-env" }, { name = "pytest-mock" }, + { name = "python-dotenv" }, { name = "ruff" }, { name = "ty" }, + { name = "zensical" }, ] [package.metadata] @@ -583,18 +476,19 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ + { name = "configargparse", specifier = ">=1.7.5" }, { name = "ifaddr", specifier = ">=0.2.0" }, - { name = "mkdocs", specifier = ">=1.6,<2" }, - { name = "mkdocs-material", specifier = ">=9.5" }, - { name = "mkdocstrings", extras = ["python"], specifier = ">=0.25" }, + { name = "mkdocstrings-python", specifier = ">=1.0" }, { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pytest", specifier = ">=8" }, { name = "pytest-asyncio", specifier = ">=0.24" }, { name = "pytest-cov", specifier = ">=7.1.0" }, { name = "pytest-env", specifier = ">=1.6.0" }, { name = "pytest-mock", specifier = ">=3.15.1" }, + { name = "python-dotenv", specifier = ">=1.2.2" }, { name = "ruff", specifier = ">=0.15" }, { name = "ty", specifier = ">=0.0.16" }, + { name = "zensical", specifier = ">=0.0.50" }, ] [[package]] @@ -776,21 +670,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, ] -[[package]] -name = "requests" -version = "2.34.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, -] - [[package]] name = "ruff" version = "0.15.19" @@ -825,6 +704,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + [[package]] name = "ty" version = "0.0.53" @@ -850,15 +756,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/f8/355b115b42f74bce0be582232a68b7e21d9cac43c77e005dfaa486e79873/ty-0.0.53-py3-none-win_arm64.whl", hash = "sha256:ea0e13311c6f386b36f1c76be114121a1ad7da38f025b143ae193899816ca791", size = 11772715, upload-time = "2026-06-24T06:53:55.132Z" }, ] -[[package]] -name = "urllib3" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, -] - [[package]] name = "virtualenv" version = "21.5.1" @@ -891,3 +788,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, ] + +[[package]] +name = "zensical" +version = "0.0.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "deepmerge" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "pyyaml" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/14/79/f7959b13c766a831f1248779bb718555f70f40c5b8e68db7de1de9936662/zensical-0.0.50.tar.gz", hash = "sha256:7040e52ebe5e6a275e4edeb351bf2bc314d007f3fb5750f178a38d840723e69c", size = 3979246, upload-time = "2026-07-09T13:52:11.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/d2/e126d56642a5fd437eeb5a067b7c0d1f766c08e22d6a708bb923986f1d44/zensical-0.0.50-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:26dda9dbacab84db2743726f83202798e1893fbfddecb6a845812d7a331043ad", size = 12817706, upload-time = "2026-07-09T13:51:29.624Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9b/e1a22fb4ea8fc3e8377d7b394ee06cf0349e7f9a64ecb4c9873dee79b102/zensical-0.0.50-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:376887def6470c57509b48519870f74e2b987e30509cf5c819fcf372771f9403", size = 12691061, upload-time = "2026-07-09T13:51:33.194Z" }, + { url = "https://files.pythonhosted.org/packages/38/f5/16c087635680efb39e1d7b7aa3c2cca548305aa29ad51dee04f37b32b65f/zensical-0.0.50-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bbf3034a2cb1a9d2a72a5ee7047688717c93da0d8a90d25dd871db8d5f33a6d", size = 13129505, upload-time = "2026-07-09T13:51:36.383Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/50d02402e53aa01a5c5c116a3522c7bb18d6ae4da964d8b236173b6fa086/zensical-0.0.50-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26fe4167663d544ca385ef420a49d3b738c7606a79d7a62a6bedcbf74cd383e7", size = 13055300, upload-time = "2026-07-09T13:51:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/cf/0f/45f4f3e56a6483ea9f88478b20d6b434718e7c46579239589202e5135ec1/zensical-0.0.50-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8813d1f8895b19520d4a982d6bfcfd06372d73d96e6a63f0d2cf8f3b6036d5a1", size = 13445447, upload-time = "2026-07-09T13:51:43.106Z" }, + { url = "https://files.pythonhosted.org/packages/33/9b/1f5065c664afde6a63e0ada8c14eae75f9e6960df597a5ca28c07340f938/zensical-0.0.50-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a64f957f94f7d8e8847a7f1e8205509ba4b188c93c157c5e7be49bcb8556a127", size = 13098775, upload-time = "2026-07-09T13:51:46.437Z" }, + { url = "https://files.pythonhosted.org/packages/46/65/1e42e18d8f9a0cb9fcc8b871852810c7fe196237b79aaa831e863325091e/zensical-0.0.50-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:781d333bcb42c6a6b92360e05eadc944e2674794e1a95537971de1bf64cb9f89", size = 13305922, upload-time = "2026-07-09T13:51:51.107Z" }, + { url = "https://files.pythonhosted.org/packages/50/36/9cace194ba13aef3bdde8ca2d327f3a05cdf5c456e94f6d896852e2cbd38/zensical-0.0.50-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:5d0f86eec76c23efb04566cd444bf025845ac8a02e75c8a6b4af13a39a2a9955", size = 13325488, upload-time = "2026-07-09T13:51:54.883Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/2891a9316e486794dae43151561b49f3313499cfb2c95c7886abad7bcf2d/zensical-0.0.50-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:392a7299a3c4d1ac7ff288bbed181d77a9fd23e6614180476e01630aaee0d67e", size = 13496866, upload-time = "2026-07-09T13:51:58.257Z" }, + { url = "https://files.pythonhosted.org/packages/7e/09/fbd3af58081a0d399fa913ef1f2fd6a007f2f06f7026c8d6a6096e34b996/zensical-0.0.50-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cac3448d8c8a76dfb43e55908b4ca9ad17596aee89a9287a184c1a0ba7dce2a2", size = 13437565, upload-time = "2026-07-09T13:52:01.766Z" }, + { url = "https://files.pythonhosted.org/packages/d3/79/709311ff202326260ff223fb6e9ddefa3100474c428e3c70a04036cefe0e/zensical-0.0.50-cp310-abi3-win32.whl", hash = "sha256:32b244f96a930f68e049b2e03d50790c120ef701b6277ddd854905a33040c75f", size = 12371966, upload-time = "2026-07-09T13:52:05.207Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e1/4babb30544d7465c95a6a93abc0680b1c51752411a225c2b7f2cb44e80c7/zensical-0.0.50-cp310-abi3-win_amd64.whl", hash = "sha256:2f054769bf96ae46353de3eca2463ad4db6df1da9fde515c6d7fc54c3608e615", size = 12604832, upload-time = "2026-07-09T13:52:09.013Z" }, +] From 0423fca0ee2a6f4f3af2a492bf1e05a68123cc33 Mon Sep 17 00:00:00 2001 From: Igor Panteleyev Date: Tue, 14 Jul 2026 22:24:32 +0300 Subject: [PATCH 2/2] Bump version --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8bf8d1a..9cf5cc1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pycomap" -version = "2.1.0" +version = "2.1.1" description = "Async Python client for ComAp controllers: LAN discovery and the native ECDH/AES-encrypted control protocol" readme = "README.md" license = "MIT" diff --git a/uv.lock b/uv.lock index 8a21685..b60d7c3 100644 --- a/uv.lock +++ b/uv.lock @@ -444,7 +444,7 @@ wheels = [ [[package]] name = "pycomap" -version = "2.1.0" +version = "2.1.1" source = { editable = "." } dependencies = [ { name = "cryptography" },