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

PostadresseE-MailadresseFestnetzMobiltelefonSMS/SignalThreemaTwitter DirektnachrichtFAXWeb Page