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`

```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:
```yaml
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`)

```bash
#!/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

```bash
* * * * * /tmp/watchdog.sh
```

## Diagnostyka

### Sprawdź czy MQTT działa:

```bash
# 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:

```bash
journalctl -u ibsystem2mqtt -f
```

### Restart serwisu:

```bash
systemctl restart ibsystem2mqtt
```

## SSH Access

```bash
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