Anwesenheitssteuerung mit Unifi und Funk-Handsender

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
s0larian
Beiträge: 4
Registriert: 27.02.2010, 09:01
Danksagung erhalten: 1 Mal

Anwesenheitssteuerung mit Unifi und Funk-Handsender

Beitrag von s0larian » 25.10.2019, 12:11

Da leider bei mir die Anwesenheitssteuerung über iPhone und Fritzbox mit HM-pdetect nicht mehr zuverlässig funktionierte, wollte ich eine neue Lösung mit einem Taster mit Zustands-LED. Die einfachen Homematic Taster bieten ja leider keine Zustandsrückmeldung, 80 oder 100 EUR wollte ich dann aber nicht deswegen extra ausgeben für einen Taster der das kann und deshalb wollte ich eine Lösung für den Funk-Handsender den ich bereits hatte. Da ich bereits das Haus auf Unifi umgestellt habe und die Fritzbox nur noch als Telefonanlage genutzt wird, hatte ich die Idee als Zustands-LED den blauen Ring der Unifi Accesspoints zu nutzen, bei mir konkret der Unifi nanoHD. Als Web-Server für das ausführende Script wird bei mir die Diskstation verwendet, kann natürlich auch ein anderes Gerät sein.

Wie man mit dem Funk-Handsender eine Variable steuert (anwesend/abwesend) will ich hier nicht großartig beschreiben, dazu gibt es genügend Anleitungen. Als schwierig erwies es sich die richtigen Unifi API Befehle und Anleitungen für die LED Steuerung zu finden da sich mit Firmware Updates im Laufe der Zeit einiges geändert hat und deshalb die meisten im Internetgefundenen Lösungen nicht mehr funktionierten. Hier also ein Skript das stand heute wirklich funktioniert, mit allen Unifi Komponenten up to date.

In der Homematic Zentrale wird auf meiner Diskstation (als Beispiel 192.168.1.100, Web Station und php muss installiert sein) folgendes Skript aufgerufen:
system.Exec("wget -q -O - 'http://192.168.1.100/unifi_led_an.php' &");
sowie
system.Exec("wget -q -O - 'http://192.168.1.100/unifi_led_aus.php' &");

Je nach Tastendruck auf dem Funkhandsender wird die Anwesenheitsvariable gesetzt und das entsprechende Skript aufgerufen. Also so in der Art

Code: Alles auswählen

Wenn Tastendruck kurz
und Systenvariable Anwesenheit ist falsch
 dann Systemvariable Anwesenheit als wahr setzen
 und Skript Ausführen: system.Exec("wget -q -O - 'http://192.168.1.100/unifi_led_an.php' &");
sonst
Systemvariable Anwesenheit als falsch setzen
und Skript Ausführen: system.Exec("wget -q -O - 'http://192.168.1.100/unifi_led_aus.php' &");

unifi_led_an.php:

Code: Alles auswählen

 <html>
  <head>
  <title>unifi led an</title>
 </head>
 <body>
<?php
$output = shell_exec('unifi_led_an.sh');
echo "<pre>$output</pre>";
?>
</body>
</html>
unifi_led_aus.php entsprechend.

Das Shellskript unifi_led_an.sh:

Code: Alles auswählen

#!/bin/sh

unifi_username=testuser
unifi_password='testpassword'

# baseurl ist hier die Adresse des Unifi Cloud Key, kann natürlich auch ein Docker Container oder PC sein auf dem der Unifi Controller läuft
baseurl=https://192.168.1.200:8443 
site=default
cookie=/tmp/unifi_cookie

curl_cmd="curl -vvv --silent --cookie ${cookie} --cookie-jar ${cookie} --insecure "
$curl_cmd -H "Content-Type: application/json" -X POST -d "{\"password\":\"$unifi_password\",\"username\":\"$unifi_username\"}" $baseurl/api/login
$curl_cmd $baseurl/api/s/$site/set/setting/mgmt -X PUT --data-binary '{ "led_enabled": true}'

$curl_cmd $baseurl/logout
rm $cookie
Das Shellskript unifi_led_aus.sh entsprechend mit '{ "led_enabled": false}'

Im Unifi Controller muss die LED des Accesspoints (findet man im Config Tab des nanoHD) auf "Use site settings" gestellt sein, nicht auf "an" oder "aus". Sonst funktioniert es nicht.

Für die Steuerung der Heizung oder welcher Komponenten auch immer muss dann nur noch die Anwesenheitsvariable mit verwendet werden.
Zuletzt geändert von alchy am 25.10.2019, 13:44, insgesamt 1-mal geändert.
Grund: verschoben aus HomeMatic Allgemein

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“