Modbus TCP-gegevens verzamelen en visualiseren
Laatst bijgewerkt:
Inleiding
Modbus is een veelgebruikt communicatieprotocol in industriële automatisering om gegevens uit PLC’s, meters en andere industriële apparaten te lezen. De Modbus-integratie van Home Assistant zet registerwaarden om in sensorentiteiten en toont hun actuele status en geschiedenis in een webinterface.
Deze handleiding gebruikt reComputer RK3576 en Home Assistant Container om temperatuur en luchtvochtigheid via Modbus TCP te lezen en een dashboard te maken. Voor een reproduceerbaar voorbeeld draait een Python Modbus TCP-simulator lokaal op RK3576, zonder PLC of extra sensoren.
Architectuur
Python Modbus TCP simulator
127.0.0.1:1502
↓
reComputer RK3576
↓
Home Assistant Container
↓
Live temperature/humidity / history graphsVoorbereiding
Hardware
- Eén reComputer RK3576 met ARM64 Linux.
- Een Windows-, macOS- of Linux-computer die RK3576 via SSH en een browser kan bereiken.
- Een lokaal netwerk met toegang tot RK3576.
Dit voorbeeld gebruikt Modbus TCP en is niet afhankelijk van de RS485-interface van RK3576.
Software
| Onderdeel | Omgeving van de handleiding |
|---|---|
| Besturingssysteem RK3576 | Armbian / Debian 12 Bookworm (ARM64) |
| Python | Python 3.11 |
| Home Assistant | Home Assistant Container, geïmplementeerd met Docker |
| Modbus-simulator | 127.0.0.1:1502 |
| Home Assistant-webinterface | Poort 8123 |
Voltooi eerst de Docker-installatie en eerste configuratie in Home Assistant installeren op reComputer RK3576. Controleer de omgeving:
python3 --version
sudo docker ps --filter name=homeassistant
sudo docker inspect homeassistant --format '{{.HostConfig.NetworkMode}}'De netwerkmodus moet host zijn. Zo kan de container de simulator op 127.0.0.1:1502 van de RK3576-host bereiken.
Een Modbus TCP-gegevensbron maken
Stap 1: De Python-simulator schrijven
Maak via SSH verbinding met RK3576. Kopieer de volledige opdracht naar de terminal om ~/modbus_demo.py in de persoonlijke map van de huidige gebruiker te maken:
cat > ~/modbus_demo.py <<'PY'
import math
import socketserver
import struct
import time
class ModbusHandler(socketserver.BaseRequestHandler):
def read_exact(self, size):
data = b""
while len(data) < size:
chunk = self.request.recv(size - len(data))
if not chunk:
return None
data += chunk
return data
def handle(self):
try:
while True:
header = self.read_exact(7)
if not header:
break
tid, pid, length, unit = struct.unpack(">HHHB", header)
if pid != 0 or not 2 <= length <= 254:
break
request = self.read_exact(length - 1)
if not request:
break
function = request[0]
if function == 3 and len(request) == 5:
address, count = struct.unpack(">HH", request[1:])
if count < 1 or count > 2 or address + count > 2:
response = bytes([0x83, 2])
else:
temperature = round(
(25 + 2 * math.sin(time.monotonic() / 20)) * 10
)
humidity = round(
(60 + 10 * math.sin(time.monotonic() / 30)) * 10
)
registers = [temperature, humidity]
response = bytes([3, count * 2]) + b"".join(
struct.pack(">H", value)
for value in registers[address:address + count]
)
else:
response = bytes([function | 0x80, 1])
reply = struct.pack(">HHHB", tid, 0, len(response) + 1, unit) + response
self.request.sendall(reply)
except (OSError, ConnectionError):
pass
class ModbusServer(socketserver.ThreadingTCPServer):
allow_reuse_address = True
daemon_threads = True
with ModbusServer(("127.0.0.1", 1502), ModbusHandler) as server:
print("Modbus TCP server running at 127.0.0.1:1502", flush=True)
server.serve_forever()
PYDe simulator ondersteunt functiecode 03 om holdingregisters te lezen:
| Adres (vanaf 0) | Waarde | Ruwe waarde | Getoonde waarde |
|---|---|---|---|
0 | Temperatuur | Ongeveer 230–270 | Ongeveer 23–27 °C |
1 | Luchtvochtigheid | Ongeveer 500–700 | Ongeveer 50–70% |
Home Assistant gebruikt scale: 0.1 om ruwe registerwaarden om te zetten naar graden Celsius en percentages. De waarden veranderen in de tijd om livebewaking te demonstreren.
Stap 2: De simulator uitvoeren
Start de simulator:
nohup python3 ~/modbus_demo.py > ~/modbus_demo.log 2>&1 &Controleer of deze luistert:
ss -lntp | grep ':1502'
cat ~/modbus_demo.logJe hoort het luisteradres 127.0.0.1:1502 en dit logbericht te zien:
Modbus TCP server running at 127.0.0.1:1502Deze demo draait op de achtergrond met
nohup. Voer na het opnieuw starten van RK3576 de startopdracht opnieuw uit. Controleer vooraf de poort om dubbele instanties te voorkomen.
Modbus TCP configureren in Home Assistant
Stap 3: configuration.yaml bewerken
Omdat deze handleiding Home Assistant Container gebruikt, is de File Editor-app niet nodig. Bewerk het configuratiebestand dat op RK3576 is gekoppeld rechtstreeks via SSH.
Maak een back-up van de bestaande configuratie:
sudo cp ~/homeassistant/config/configuration.yaml \
~/homeassistant/config/configuration.yaml.bakOpen het bestand met beheerdersrechten:
sudo nano ~/homeassistant/config/configuration.yamlBehoud de bestaande configuratie, zoals default_config: en frontend:, en voeg het volgende toe:
modbus:
- name: rk3576_demo
type: tcp
host: 127.0.0.1
port: 1502
sensors:
- name: RK3576 Room Temperature
unique_id: rk3576_demo_temperature
slave: 1
address: 0
input_type: holding
data_type: uint16
scale: 0.1
precision: 1
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
scan_interval: 5
- name: RK3576 Room Humidity
unique_id: rk3576_demo_humidity
slave: 1
address: 1
input_type: holding
data_type: uint16
scale: 0.1
precision: 1
unit_of_measurement: "%"
device_class: humidity
state_class: measurement
scan_interval: 5De belangrijkste parameters:
| Parameter | Doel |
|---|---|
type: tcp | Modbus TCP gebruiken |
host: 127.0.0.1 | Lokaal adres van de simulator |
port: 1502 | Luisterpoort |
slave: 1 | Modbus-unit-ID |
address: 0 / 1 | Registeradressen voor temperatuur / luchtvochtigheid |
input_type: holding | Holdingregisters lezen |
scale: 0.1 | Ruwe waarden schalen naar getoonde waarden |
scan_interval: 5 | Elke 5 seconden opvragen |
Als
configuration.yamlal een sleutelmodbus:op het hoogste niveau bevat, voeg je de nieuwe hub toe aan de bestaande lijst in plaats vanmodbus:nogmaals te declareren.
Druk op Ctrl + O en vervolgens Enter om op te slaan. Sluit nano met Ctrl + X.
Stap 4: De configuratie controleren en de container opnieuw starten
Valideer eerst de Home Assistant-configuratie:
sudo docker exec homeassistant \
python -m homeassistant --script check_config --config /configStart Home Assistant opnieuw nadat de controle is geslaagd:
sudo docker restart homeassistantOpen dit adres in de browser van de computer:
http://<RK3576_IP>:8123De Modbus-sensoren bekijken
Stap 5: Controleren of gegevens worden gelezen
Open in de geteste Home Assistant-interface Settings → Tools → States en zoek naar rk3576. Controleer of deze sensoren bestaan en numerieke waarden tonen:
RK3576 Room TemperatureRK3576 Room Humidity
Je kunt beide sensoren ook toevoegen aan het overzicht via Overview → Edit overview → Favorite entities → Add favorite.

Een Modbus-dashboard maken
Stap 6: Het dashboard maken
Open Settings → Dashboards en selecteer rechtsonder Add dashboard.
Vul bij Add new dashboard het volgende in:
| Veld | Waarde |
|---|---|
| Title | RK3576 Modbus Monitoring |
| Icon | Eventueel een thermometerpictogram |
| URL | rk3576-modbus |
| Admin-only | Uit |
| Add to sidebar | Aan |
Selecteer Create en open het nieuwe dashboard via de zijbalk.

Stap 7: Temperatuur- en vochtigheidsmeters toevoegen
Selecteer in de dashboardeditor + bij New section en kies Add to dashboard → By card → Gauge.
Configureer twee Gauge-kaarten:
| Instelling | Temperatuurmeter | Vochtigheidsmeter |
|---|---|---|
| Entity | RK3576 Room Temperature | RK3576 Room Humidity |
| Minimum | 0 | 0 |
| Maximum | 50 | 100 |
Selecteer bij elke kaart Save.

Stap 8: Een geschiedenisgrafiek toevoegen
Selecteer opnieuw + bij New section en kies By card → History graph.
Bij History graph card configuration:
- Stel
Titlein opRK3576 Modbus Sensor History. - Stel
Hours to showin op1. - Verwijder de standaardentiteit
Sunuit Entities (required). - Selecteer Add entity en voeg
RK3576 Room Temperaturetoe. - Selecteer nogmaals Add entity en voeg
RK3576 Room Humiditytoe. - Selecteer Save en daarna Done in de editor.
Temperatuur en luchtvochtigheid gebruiken verschillende eenheden, dus Home Assistant kan afzonderlijke grafieken tonen. Je kunt ook voor elke sensor een eigen grafiekkaart maken.

Resultaten
Het dashboard in het aangeleverde RK3576-testverslag bevat temperatuur- en vochtigheidsmeters en een geschiedenisgrafiek die veranderingen in de luchtvochtigheid toont.

In die test is de volgende keten gecontroleerd:
Python Modbus TCP-simulator → RK3576 → Home Assistant Container → Webdashboard.
De temperatuur- en vochtigheidswaarden zijn gesimuleerd. Voor een echte PLC, slimme meter of Modbus TCP-sensor pas je host, port, slave, registeradressen en gegevenstypen aan het apparaat aan.
Samenvatting
Deze stappen realiseren Modbus TCP-gegevensverzameling, live statusweergave en geschiedenisvisualisatie op reComputer RK3576. Het voorbeeld biedt een reproduceerbare basis voor huisautomatisering, lokale IoT-bewaking en industriële gateways.
Referenties
- Seeed Wiki: reComputer R1000 en Modbus met Home Assistant
- Home Assistant Modbus-integratie
- Home Assistant installeren op Linux / Container
Technische ondersteuning en productdiscussie
Ga voor vragen naar het Seeed Studio Forum.