Newer
Older
homeassistant-infra / docs / IBSYSTEM_MQTT_INTEGRATION.md

IBSystem MQTT Integration

Przegląd

Integracja sterowników IBSystem z Home Assistant przez MQTT.

Architektura

IBSystem RS485 → ibsystem2mqtt_v5.py → Mosquitto MQTT → Home Assistant
     ↓                                       ↓
192.168.50.243                         MQTT Discovery

Komponenty

ibsystem2mqtt_v5.py

Lokalizacja: /ibsystem/ibsystem2mqtt_v5.py na 192.168.50.243

Funkcje:

  • Połączenie TCP z IBSystem (port 9761)
  • Parsowanie odpowiedzi protokołu
  • Publikacja stanów do MQTT
  • Obsługa komend sterujących

Konfiguracja

Plik: /ibsystem/config.yaml

mqtt:
  host: 192.168.50.151
  port: 1883
  username: mqtt_user
  password: mqtt_password

ibsystem:
  host: 127.0.0.1
  port: 9761

modules:
  - rs: 0
    id: 35
    name: "ID35"

MQTT Topics

Discovery (automatyczne tworzenie encji w HA)

homeassistant/switch/ibsystem_rs0_id35_doX/config
homeassistant/sensor/ibsystem_rs0_id35_tempX/config

Stany (publikowane przez skrypt)

ibsystem/rs0/id35/state     # JSON ze stanami wszystkich wyjść
ibsystem/rs0/id35/doX       # Stan pojedynczego wyjścia (ON/OFF)

Komendy (odbierane przez skrypt)

ibsystem/rs0/id35/set/doX   # Payload: ON lub OFF

Sterowanie wyjściami

Prawidłowa komenda (setting.light.X)

set(rs.0.id.35.setting.light.1=1;);   # Włącz DO1
set(rs.0.id.35.setting.light.1=0;);   # Wyłącz DO1

BŁĘDNA komenda (output.do.X) - tylko odczyt!

# NIE UŻYWAĆ - to jest read-only!
set(rs.0.id.35.output.do.1=1;);

Entity IDs w Home Assistant

Prawidłowe (MQTT Discovery):

switch.ibsystem_rs0_id35_rs0_id35_output_do_1
switch.ibsystem_rs0_id35_rs0_id35_output_do_2
...

Stare (nie działają):

switch.sterownik_35_do1   # Brak command_topic
switch.sterownik_35_do2

Dashboard

Plik: /config/dashboards/id35_dashboard.yaml

Encje muszą używać prawidłowych MQTT entity IDs:

entities:
  - entity: switch.ibsystem_rs0_id35_rs0_id35_output_do_1
    name: "Wyjście DO1"

Watchdog

Skrypt: /tmp/watchdog.sh (kopia w repo: ibsystem/ibsystem2mqtt_watchdog.sh)

#!/bin/bash
# Sprawdza health endpoint co minutę
# Restartuje po 3 nieudanych próbach

HEALTH_URL="http://127.0.0.1:8080/health"
FAILURE_FILE="/tmp/ibsystem2mqtt_failures"
MAX_FAILURES=3

# Check health
if curl -s --max-time 5 "$HEALTH_URL" > /dev/null; then
    echo 0 > "$FAILURE_FILE"
else
    FAILURES=$(cat "$FAILURE_FILE" 2>/dev/null || echo 0)
    FAILURES=$((FAILURES + 1))
    echo $FAILURES > "$FAILURE_FILE"
    
    if [ $FAILURES -ge $MAX_FAILURES ]; then
        systemctl restart ibsystem2mqtt
        echo 0 > "$FAILURE_FILE"
    fi
fi

Cron

* * * * * /tmp/watchdog.sh

Diagnostyka

Sprawdź czy MQTT działa:

# Na 192.168.50.243
mosquitto_sub -h 192.168.50.151 -t "ibsystem/#" -v

# Wyślij komendę testową
mosquitto_pub -h 192.168.50.151 -t "ibsystem/rs0/id35/set/do1" -m "ON"

Sprawdź logi serwisu:

journalctl -u ibsystem2mqtt -f

Restart serwisu:

systemctl restart ibsystem2mqtt

SSH Access

ssh wk@192.168.50.243
# Password: QWer1234
cd /ibsystem

Historia zmian

  • 2025-02-10: Fix sterowania przełącznikami (setting.light.X zamiast output.do.X)
  • 2025-02-10: Aktualizacja dashboardu do MQTT entity IDs
  • 2025-02-10: Dodanie watchdog dla ibsystem2mqtt