irrigation_system/software/tools/modbus_tool
Eduard Iten 8467b3e347 feat: Make valve obstacle detection parameters configurable via settings and shell
This commit introduces configurable obstacle detection thresholds for the valve, allowing them to be set and persisted via the Zephyr settings subsystem and controlled through the shell and Modbus tool.

- `software/lib/valve/Kconfig`: Added new Kconfig options `VALVE_OBSTACLE_THRESHOLD_OPEN_MA` and `VALVE_OBSTACLE_THRESHOLD_CLOSE_MA` for compile-time configuration and default values.
- `software/include/lib/valve.h`: Removed hardcoded defines and added API functions for setting and getting obstacle thresholds.
- `software/lib/valve/valve.c`:
    - Updated `valve_work_handler` to use the new configurable obstacle thresholds.
    - Integrated loading and saving of obstacle thresholds via the settings subsystem in `valve_init`.
    - Implemented the new setter and getter functions for obstacle thresholds.
    - Updated the `LOG_INF` message in `valve_init` to display the new obstacle threshold values.
- `software/apps/slave_node/prj.conf`: Added default values for the new Kconfig options.
- `software/lib/shell_valve/shell_valve.c`: Added new shell commands `valve set_obstacle_open` and `valve set_obstacle_close` to modify the obstacle thresholds, and updated `valve show` to display them.
- `software/tools/modbus_tool/modbus_tool.py`:
    - Defined new Modbus holding registers (`REG_HOLDING_OBSTACLE_THRESHOLD_OPEN_MA`, `REG_HOLDING_OBSTACLE_THRESHOLD_CLOSE_MA`).
    - Updated `poll_status` to read these new registers.
    - Modified the `main_menu` to include "Set Obstacle Open" and "Set Obstacle Close" options in the settings menu, allowing users to view and modify these parameters.
- `software/lib/modbus_server/modbus_server.c`:
    - Updated `holding_reg_rd` to read the new obstacle threshold registers.
    - Updated `holding_reg_wr` to write to the new obstacle threshold registers.
    - Removed incorrect `REG_HOLDING_END_CURRENT_THRESHOLD_OPEN_MA` and `REG_HOLDING_END_CURRENT_THRESHOLD_CLOSE_MA` cases from `input_reg_rd`.
- `software/include/lib/modbus_registers.h`: Created a new header file to centralize Modbus register definitions, which were previously hardcoded in `modbus_tool.py`.
Signed-off-by: Eduard Iten <eduard@iten.pro>
2025-07-11 09:15:19 +02:00
..
README.de.md docs: replace svg logo with png version 2025-07-02 09:22:37 +02:00
firmware.bin feat(modbus_tool): Implement simulated firmware update 2025-07-01 21:55:19 +02:00
modbus_tool.py feat: Make valve obstacle detection parameters configurable via settings and shell 2025-07-11 09:15:19 +02:00
requirements.txt feat(modbus_tool): Add interactive TUI and documentation 2025-07-01 20:59:47 +02:00

README.de.md

Logo

Modbus Tool für Bewässerungssystem-Knoten

Dieses Python-Skript bietet eine interaktive Kommandozeilen-Benutzeroberfläche (TUI) zur Steuerung und Überwachung eines Ventil-Knotens des Bewässerungssystems über Modbus RTU.

Features

  • Interaktive Benutzeroberfläche: Eine benutzerfreundliche, auf curses basierende Oberfläche, die eine einfache Bedienung ermöglicht.
  • Live-Statusanzeige: Zeigt tabellarisch und in Echtzeit alle wichtigen Register des Slaves an:
    • Ventilstatus (Zustand, Bewegung, Motorstrom)
    • Zustand der digitalen Ein- und Ausgänge
    • "Clear-on-Read" Taster-Events
    • Systemkonfiguration (Öffnungs-/Schließzeiten, Watchdog-Timeout)
    • Gerätestatus (Firmware-Version, Uptime)
  • Volle Kontrolle: Ermöglicht das Senden von Befehlen zum Öffnen, Schließen und Stoppen des Ventils sowie zum Umschalten der digitalen Ausgänge.
  • Konfiguration zur Laufzeit: Die maximalen Öffnungs-/Schließzeiten und der Watchdog-Timeout können direkt in der Oberfläche geändert werden.
  • Simulierter Firmware-Upload: Implementiert den vollständigen, in der Dokumentation beschriebenen Firmware-Update-Prozess. Das Tool sendet eine firmware.bin-Datei in Chunks an den Slave und folgt dem CRC-Verifizierungs-Protokoll.

Installation

Voraussetzungen

  • Python 3.x
  • pip (Python Paket-Installer)

Installation der Abhängigkeiten

Die benötigten Python-Pakete sind in der Datei requirements.txt aufgeführt. Sie können auf zwei Arten installiert werden: global oder in einer virtuellen Umgebung (empfohlen).

Option 1: Installation mit virtueller Umgebung (empfohlen)

Eine virtuelle Umgebung isoliert die Projekt-Abhängigkeiten von Ihrem globalen Python-System, was Konflikte vermeidet.

  1. Virtuelle Umgebung erstellen: Führen Sie im Verzeichnis software/tools/modbus_tool den folgenden Befehl aus, um eine Umgebung im Ordner .venv zu erstellen:

    python3 -m venv .venv
    
  2. Umgebung aktivieren:

    • Linux / macOS:
      source .venv/bin/activate
      
      Ihre Shell-Anzeige sollte sich ändern und (.venv) am Anfang zeigen.
    • Windows (cmd.exe):
      .venv\Scripts\activate.bat
      
    • Windows (PowerShell):
      .venv\Scripts\Activate.ps1
      
  3. Abhängigkeiten installieren: Wenn die Umgebung aktiv ist, installieren Sie die Pakete:

    pip install -r requirements.txt
    
  4. Umgebung deaktivieren: Wenn Sie fertig sind, können Sie die Umgebung mit folgendem Befehl wieder verlassen:

    deactivate
    

Option 2: Globale Installation (nicht empfohlen)

Wenn Sie keine virtuelle Umgebung verwenden möchten, können Sie die Pakete direkt in Ihrem globalen Python-System installieren.

pip install -r requirements.txt

Verwendung

Stellen Sie sicher, dass das Skript ausführbar ist:

chmod +x modbus_tool.py

Starten Sie das Tool, indem Sie den seriellen Port als Argument übergeben:

./modbus_tool.py /dev/ttyACM0

Ersetzen Sie /dev/ttyACM0 durch den korrekten Port Ihres Geräts.

Kommandozeilen-Argumente

  • port: (Erforderlich) Der serielle Port (z.B. /dev/ttyACM0 oder COM3).
  • --baud: Die Baudrate (Standard: 19200).
  • --slave-id: Die Modbus Slave ID des Geräts (Standard: 1).
  • --interval: Das Abfrageintervall für den Status in Sekunden (Standard: 1.0).

Bedienung der Oberfläche

  • Navigation: Verwenden Sie die Pfeiltasten (↑/↓), um zwischen den Menüpunkten zu navigieren.
  • Auswählen: Drücken Sie Enter, um den ausgewählten Befehl auszuführen.
  • Werte eingeben: Bei Aktionen wie "Set Watchdog" werden Sie zur Eingabe eines Wertes aufgefordert. Geben Sie den Wert ein und bestätigen Sie mit Enter.
  • Firmware Update: Diese Funktion startet den Upload der Datei firmware.bin aus dem aktuellen Verzeichnis. Während des Updates wird eine Fortschrittsanzeige dargestellt.
  • Beenden: Wählen Sie den Menüpunkt "Exit" und drücken Sie Enter.