Ik heb de nodige uren besteed aan hoe ik Domoticz kan laten weten dat mijn Pi Musicbox aan of uit staat. Aan de Domoticz kant is dit heel simpel, je hoeft alleen maar een rest call naar de JSON api te sturen, aan de Pi Musicbox kant bleek dit toch wat lastiger. Het laten weten dat de Musicbox down gaat had ik vrij snel uitgezocht. Maar een bericht sturen wanneer de Musicbox aangaat een stuk bleek lastiger. Dit komt doordat je met curl een commando naar Domoticz moet sturen en dat kan pas als de netwerk verbinding gereed is. Mocht je dit ook willen, dan hoop ik dat je dit met behulp van dit artikel zo voor elkaar hebt. De basis van Linux heb je zo onder de knie, maar dit soort specifieke kennis vind je ook niet zo snel op het internet. Het was een collega, die met een flinke duw in de juiste richting gaf. Wilmar bedankt.
Dit wordt een heel technisch artikel, om het voor de geïnteresseerden zo makkelijk mogelijk te maken, gebruik ik de volgende conventies:
- Scripts en source code zet ik in aparte blokken zoals hier onder.
Script of source code
- Commando’s die je letterlijk over moet nemen plaats ik dik gedrukt.
Ik ga er vanuit dat je de basis van de Raspberry Pi onder die knie hebt en weet hoe je met bijvoorbeeld SSH een connectie met een terminal op de Pi kunt leggen.
Wat heb je op voorhand nodig.
- Het ip-adres van je Domoticz server In dit document moet je op de plaatsen waar {domoticz-server} staat de tekst {domoticz-server} vervangen door dit IP-adres.
- Een virtual Device die je in Domoticz hebt aangemaakt, die je wilt gebruiken voor de statusindicatie van je Raspberry Pi (getest met type X10 On/Off en X10 media speler)
- Het Idx van de in stap twee aangemaakt virtual device. In de rest van dit document moet je op de plaatsen waar {idx} staat de hele tekst {idx} vervangen door dit idx
Stap 1. Open een SSH shell met je Raspberry Pi
Stap 2. Aanmaken script voor communicatie met Domoticz
cd /usr/local/bin
sudo nano domoticz-connect
zet in dit bestand de volgende tekst (en sluit Nano af met Ctrl+X)
#!/bin/bash domoticzServer=http://{domoticz-server}:8080 deviceIdx={idx} if [ $1 == "on" ]; then curl "$domoticzServer/json.htm?type=command&param=switchlight&idx=$deviceIdx&switchcmd=On" 2>>/usr/local/bin/domoticz-connect.log >/dev/null elif [ $1 == "off" ]; then curl "$domoticzServer/json.htm?type=command&param=switchlight&idx=$deviceIdx&switchcmd=Off" 2>/usr/local/bin/domoticz-connect.log >/dev/null fi
geef executie rechten aan dit script met:
sudo chmod +x ./domoticz-connect
Stap 3. Script voor het aanmelden van de Raspberry Pi bij Domoticz.
cd /etc/network/if-up.d
sudo nano notify-domoticz
neem het volgende script op en sla dit op met ctrl+x
#!/bin/sh # Don't bother to do anything for lo. if [ "$IFACE" = lo ]; then exit 0 fi # Only run from ifup. if [ "$MODE" != start ]; then exit 0 fi # we only care about inet and inet6. case $ADDRFAM in inet|inet6|NetworkManager) ;; *) exit 0 ;; esac echo "Notifying Domoticz MusicBox is on" /usr/local/bin/notify-domoticz-device-up.sh on
geef het script nu executie rechten met:
sudo chmod +x notify-domoticz
Stap 4. Aanmaken script voor het afmelden van je Pi bij Domoticz
cd /etc/init.d
sudo nano domoticz-connect
neem het volgende script op en sla dit op met ctrl+x
#!/bin/bash # /etc/init.d/domoticz-connect ### BEGIN INIT INFO # Provides: domoticz-connect # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Report on/off to domoticz # Description: This service let's domoticz know that this device is on or off ### END INIT INFO case "$1" in start) ;; stop) echo "Disconnecting from Domoticz" /usr/local/bin/update-domoticz-device.sh off ;; *) echo "Usage: /etc/init.d/domoticz-connect start|stop" exit 1 ;; esac exit 0
geef dit script executie rechten met:
sudo chmod +x domoticz connect
Registreer het script in het Sys-V init systeem van Raspbian met het volgende commando:
sudo update-rc.d domoticz-connect defaults
Als je nu je systeem opnieuw opstart (of reboot), dan kun je in Domoticz zien of de Raspberry Pi aan of uit staat. Dit kun je testen met
sudo reboot
De virtuele schakelaar gaat uit als de Pi down gaat en aan als de Pi opgestart is.