Running Script with a Switch

Managed to get everything to work.
Big thanks to alex from this post here:

Here is exactly what i’ve got if somebody needs it.

This is used to power on my synology nas with Wake On Lan and to power it off by ssh.

File: /etc/openhab2/things/storage.things

Thing exec:command:device-nas-control "NAS Control (On/Off)" @ "Diverses" [ command="/etc/openhab2/scripts/storage.sh %2$s", interval=0, timeout=10, autorun=true ]
Thing exec:command:device-nas-status "NAS Online Status" @ "Diverses" [ command="/etc/openhab2/scripts/storage.sh status", interval=20, timeout=5 ]

File: /etc/openhab2/items/storage.items

 String network_device_nas_control "NAS Control" (gOthers) { channel="exec:command:device-nas-control:input", channel="exec:command:device-nas-status:output", autoupdate="false" }
String network_device_nas_status "NAS Online Status" (gOthers) { channel="exec:command:device-nas-status:output" }
Switch network_device_nas_switch "NAS (On/Off)" (gOthers) [ "Switchable" ]

File: /etc/openhab2/sitemaps/[yoursitemap].sitemap

Frame label=“Storage” {
Switch item=network_device_nas_switch
}

File: /etc/openhab2/rules/storage.rules

rule “NAS Switch”
when
Item network_device_nas_switch changed
then
logInfo(“Network”, "Switching NAS " + network_device_nas_switch.state.toString + ": " + network_device_nas_control.state.toString)
network_device_nas_status.postUpdate(network_device_nas_switch.state.toString)
network_device_nas_control.sendCommand(network_device_nas_switch.state.toString)
end

rule “NAS State”
when
Item network_device_nas_status changed
then
logInfo(“Network”, "Switching NAS " + network_device_nas_status.state.toString + ": " + network_device_nas_control.state.toString)
network_device_nas_switch.postUpdate(network_device_nas_status.state.toString)
network_device_nas_control.sendCommand(network_device_nas_status.state.toString)
end

File: /etc/openhab2/scripts/storage.sh

#!/bin/bash
# wakeonlan need to be installed; sudo apt-get install wakeonlan
THIS_NAME="$(basename "${0}")"
#Admin-User of Synolgy, must be active and the default user "admin"
HOST_USER="admin"
#Synology Admin PW
HOST_PASS="12345"
#Synology IP Adress
HOST_NAME="192.168.178.XX"
#Synology MAC Adress
HOST_MAC="XX:XX:XX:XX:XX:XX"

case "${1}" in
        [oO][nN])
                exec wakeonlan "${HOST_MAC}" >/dev/null 2>&1 
                ;;

        [oO][fF][fF])
				exec sshpass -p "${HOST_PASS}" ssh -o StrictHostKeyChecking=no "${HOST_USER}"@"${HOST_NAME}" 'echo "'${HOST_PASS}'" | sudo -S shutdown now -P' >/dev/null 2>&1
				;;

        [sS][tT][aA][tT][uU][sS])
                ping -c 1 -W 1 "${HOST_NAME}" >/dev/null 2>&1

                if [ $? -eq 0 ] ; then
                        echo "ON"
                        exit 0
                fi

                echo "OFF"
                exit 1
                ;;

        *)
                echo
                echo "Usage: ${THIS_NAME} <on|off|status>"
                echo
                exit 1
                ;;
esac

exit 0
1 Like