EdgeSwitch: PoE-Ports per Script steuern
Nachdem ich in den vorherigen Artikeln beschrieben habe wie ich Unifi Switche und Unifi Flex Switche in Home Assistant integriert habe, bleibt noch die Ubiquiti EdgeMax EdgeSwitch übrig.
Vorbereitung am Switch
Da die Ubiquiti Switche nichtper Unifi Controller administriert werden, muss auf dem EdgeSwitch dafür gesorgt werden, dass wir uns später per SSH mit dem Switch verbinden können. Hierzu habe ich in der klassischen Ansich (Legacy Interface) einen eigenen Benutzer unter System > Users > Accounts
für Home Assistant angelegt. Da mit dem Konto einstellungen geändert werden müssen, habe ich das Privilege-15 als Access Level zugeordnet.
Danach muss wie gehabt die erste SSH-Anmeldung interaktiv erfolgen, damit der Host-Key des EdgeSwitches akzeptiert und dauerhaft hinterlegt werden kann. Dazu muss per sudo -u homeassistant <your-user>@<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 für die Unif-Switche muss nur ein wenig angepasst werden:
#!/bin/bash
user="your-user"
password="your-password"
function usage {
echo
echo $"Usage: $0 <on|off|status> "
echo
echo "Example: $0 192.168.178.12 on 7"
echo
}
function is_number {
[[ "$1" =~ ^[0-9]+$ ]] && return 0 || return 1
}
function is_host {
[[ "$1" =~ ^[0-9a-zA-Z.:-]+$ ]] && return 0 || return 1
}
function valid_action {
[[ "${1,,}" =~ ^on|off|status$ ]] && 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
cmd_pre="enable\n$password\nconfigure\n"
cmd_on="interface 0/$3\npoe opmode auto\nexit"
cmd_off="interface 0/$3\npoe opmode shutdown\nexit"
cmd_status="show poe status 0/$3"
cmd_post="\nexit\nexit\n"
case "${2,,}" in
on)
echo -e "$cmd_pre$cmd_on$cmd_post" | sshpass -p $password ssh $user@$1 2gt; /dev/null
;;
off)
echo -e "$cmd_pre$cmd_off$cmd_post" | sshpass -p $password ssh $user@$1 2gt; /dev/null
;;
status)
echo -e "$cmd_pre$cmd_status$cmd_post" | sshpass -p $password ssh $user@$1 2gt; /dev/null | grep -E "(Open Circuit|Good)"
;;
*)
usage
exit 2
;;
esac
Die Einbindung des Scripts in Home Assistant funktioniert dann genauso wie im vorherigen Artikel beschrieben.
Kommentare