#!/bin/bash set -e print_usage() { echo "Usage: $0 {healthcheck|{gpio|mqtt} {on|off}}" } healthcheck() { # DNS names also available local iface="${1:-ppp0}" local addr="${2:-1.1.1.1}" local packets="${3:-5}" local timeout="${4:-10}" if ! ping -I $iface -c $packets -W $timeout $addr > /dev/null 2>&1; then echo "Healthcheck failed" return 1 else echo "Healthcheck passed" return 0 fi } gpio_on() { local pin="$1" local iface="${2:-ppp0}" if [[ -z $pin ]]; then echo "pin number must be provided to \`gpio_on\` function" exit 1 fi if ip link show $iface > /dev/null 2>&1; then echo "Interface $iface already exists" exit 1 fi if [ ! -d "/sys/class/gpio/gpio{pin}" ]; then echo "$pin" > /sys/class/gpio/export fi echo out > "/sys/class/gpio/gpio$pin/direction" echo 1 > "/sys/class/gpio/gpio$pin/active_low" echo 1 > "/sys/class/gpio/gpio$pin/value" pon t3hs_sim800 } gpio_off() { local pin="$1" if [[ -z $pin ]]; then echo "pin number must be provided to \`gpio_off\` function" exit 1 fi poff t3hs_sim800 echo 0 > "/sys/class/gpio/gpio$pin/value" echo "$pin" > /sys/class/gpio/unexport } mqtt_on() { local topic="$1" local host="$2" local port="$3" local username="$4" local password="$5" local iface="${6:-ppp0}" if ip link show $iface > /dev/null 2>&1; then echo "Interface $iface already exists" exit 1 fi args="" if [[ -z $topic ]]; then echo "topic must be provided to \`mqtt_on\` function" exit 1 else args+=" --topic $topic" echo "topic: $topic" fi [[ -n $host ]] && args+=" --host $host" && echo "host: $host" [[ -n $port ]] && args+=" --port $port" && echo "port: $port" [[ -n $username ]] && args+=" --username $username" && echo "username: $username" [[ -n $password ]] && args+=" --password $password" && echo "password: ***" payload=$(cat <