Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extended explanation in modbus.md #445

Merged
merged 10 commits into from
Dec 21, 2023
66 changes: 64 additions & 2 deletions docs/reference/modbus.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,17 @@ scale: -1 # floating point factor applied to result, e.g. for kW to W conversion

## Manuelle Konfiguration

Falls das Modbus-Gerät nicht direkt unterstützt wird oder von den vordefinierten Modellen abweichende Werte gelesen oder geschrieben werden sollen, können die Modbus Register auch vollständig manuell konfiguriert werden:
Falls das Modbus-Gerät nicht direkt unterstützt wird oder von den vordefinierten Modellen abweichende Werte gelesen oder geschrieben werden sollen, können die Modbus Register auch vollständig manuell konfiguriert werden.
Dazu bedarf es neben der allgemeinen 'modbus' Einstellungen (siehe oben) auch der Definition eines `registers` an Stelle eines `value`, wie bei vordefinierten Geräten. Es ist nicht zulässig, sowohl `value` als uach `register` anzugeben.
kscholty marked this conversation as resolved.
Show resolved Hide resolved
Die Definition eines Registers besteht benötigt folgende Patameter:
kscholty marked this conversation as resolved.
Show resolved Hide resolved
- `address`: die Registeradresse
- `type`: Der Registertyp, zulässig sind `coil`, `input`, `holding`
- `decode`: Die Art der Codierung der Daten. Zulässig sind: `int16|32|64, uint16|32|64, float32|64 and u|int32s + float32s`. Beim Typ `coil` wird die Codierung ignoriert, muss aber trotzdem angegeben werden.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Da gibt es noch mehr. Neben bool8 und bool16 auch z.B. noch diverse xxxxxnan-Varianten, bei denen die NaN-Werte direkt zu 0 decodiert werden.

Vgl. https://github.com/evcc-io/evcc/blob/c920893bf63acf1bf1d0be6e11dfb4273e911d4a/util/modbus/modbus.go#L390-L452

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Könntest du das dann mal beschreiben, ich glaube nicht, dass ich das gut genug verstanden habe, um das zu tun.

kscholty marked this conversation as resolved.
Show resolved Hide resolved
Weitere zulässige Parameter einer manuellen Konfiguration sind:
- `scale`: Fließkommazahl, die zur Konvertierung von gelesenen Werten (z.B. W in kW oder umgekehrt) verwendet werden kann.
kscholty marked this conversation as resolved.
Show resolved Hide resolved
- `timeout`: modbus timeout.
kscholty marked this conversation as resolved.
Show resolved Hide resolved



**Beispiel**:

Expand All @@ -125,7 +135,7 @@ source: modbus
---
register:
address: 40070
type: holding # holding or input
type: holding # coil, holding or input
decode: int32 # int16|32|64, uint16|32|64, float32|64 and u|int32s + float32s
scale: -1.0 # floating point factor applied to result, e.g. for kW to W conversion
timeout: 2s # timeout, without unit in ns
Expand All @@ -148,3 +158,55 @@ register:
address: 40070
type: writeholding # writeholding oder writecoil
```

### Gesamtbeispiel

Ein vollständiges Beispiel für einen custom Charger mit modbus Interface (hier ein Phoenix EM-CP-PP-ETH mit der IP-Adresse 192.168.1.10) könnte z.B. so aussehen:

**Beispiel**:

```yaml
chargers:
- type: custom
name: CustomCharger
status:
# Read the status of the charger
# Either A,B,C or F
source: modbus
id: 180
uri: 192.168.1.10:502
timeout: 3s
register:
address: 100
type: input # Read an input register
decode: int16
enabled:
# Is the charger enabled (1) or not (0)
source: modbus
id: 180
uri: 192.168.1.10:502
register:
address: 400
type: coil # Read a coil
decode: uint8 # Doesn't matter but required
kscholty marked this conversation as resolved.
Show resolved Hide resolved
enable:
# Enable the charger
source: modbus
id: 180
uri: 192.168.1.10:502
register:
address: 400
type: writecoil # Write a coil
decode: uint8 # Doesn't matter but required
kscholty marked this conversation as resolved.
Show resolved Hide resolved
maxcurrent:
# Set the maximum current
source: modbus
id: 180
uri: 192.168.1.10:502
register:
address: 300
type: writeholding # Write a holding register
decode: uint16


```