# 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