Unifi Flex Switch: PoE-Ports per Script steuern
Wie im vorherigen Artikel Unifi Switch: PoE-Ports per Script steuern beschrieben, habe ich die PoE-Funktionen der Unifi Switches per command-Line-Switch in Home Assistant eingebunden. Das funktioniert soweit auch mit meinen US-8-60W-Switchen ohne Probleme. Nachdem ich mir aber für den Außeneinsatz eine Unifi Flex Switch zugelegt habe, musste ich feststellen, dass die PoE-Funktionen des Flex-Switches zumiondest in der aktuellen Firmeware-Version 4.0.80.10875 anders gesteuert werden. Daher habe ich das Script entsprechend angepasst.
Vorbereitung in Unifi Controller
Damit der SSH-Login mit dem Script später funktioniert muss in der Unifi Controller Software zunächst ein SSH-Pulic-Key hinterlegt werden. Das ist allerdings schon in dem Artikel Unifi Switch: PoE-Ports per Script steuern ausführlich beschrieben und muss für den Flex-Switch nicht nochmal durchgeführt werden, wenn der SSH-Schlüssel vorher schon in der Unifi Controller Software hinterlegt wurde.
Wichtig ist aber, dass die erste SSH-Anmeldung interaktiv erfolgen muss, damit der Host-Key des Flex-Switches akzeptiert und dauerhaft hinterlegt werden kann. Dazu muss per sudo -u homeassistant admin@<switch-ip>
eine Verbindung zum Flex-Switch im Kontext des Homeassistant-Benutzers manuell aufgebaut und der Host-Key des Switches akzeptiert werden.
Bash-Script
Das bereits bestehende Bash-Script ist einfach angepasst. Der Nachteil des neuen Scripts ist jedoch dass mit dem Kommando syswrapper.sh apply-config
der Switch neu gestartet wird. Dadurch sind alle Geräte die an dem Switch angeschlossen sind, während des Reboots nicht erreichbar. Im Vehrgleich zur anderen Lösung ist das daher nicht ganz so elegant - für mich aber ausreichend.
#!/bin/bash
function usage {
echo
echo $"Usage: $0 <on|off> "
echo
echo "Example: $0 192.168.178.13 on 4"
echo
}
function is_number {
[[ "$1" =~ ^[0-9]+$ ]] && return 0 || return 1
}
function is_host {
[[ "$1" =~ ^[0-9a-zA-Z.:-]+$ ]] && return 0 || return 1c
}
function valid_action {
[[ "${1,,}" =~ ^on|off$ ]] && return 0 || return 1
}
# check if hostname or IP is provided as target switch
if ! is_host "$1"; then
usage
echo -e "ERROR: Target switch must be a valid host name or IPv4/v6 address!\n"
exit 1
fi
# check if on or off is provided as action
if ! valid_action "$2"; then
usage
echo -e "ERROR: action must be on or off!\n"
exit 2
fi
# check if port-parameter is number
if ! is_number "$3" ; then
usage
echo -e "ERROR: portnumber contains non-numerical characters!\n"
exit 3
fi
ON="switch.port.${3}.poe=auto"
OFF="switch.port.${3}.poe=shutdown"
case "${2,,}" in
on)
ssh -T admin@"${1}" <<EOF
grep "${OFF}" /tmp/system.cfg && (sed -i "s/${OFF}/${ON}/" /tmp/system.cfg; syswrapper.sh apply-config)
exit
EOF
;;
off)
ssh -T admin@"${1}" <<EOF
grep "${ON}" /tmp/system.cfg && (sed -i "s/${ON}/${OFF}/" /tmp/system.cfg; syswrapper.sh apply-config)
exit
EOF
;;
*)
usage
exit 2
;;
esac
Die Einbindung des Scripts in Home Assistant funktioniert dann genauso wie im vorherigen Artikel beschrieben.
Kommentare