#!/usr/bin/env bash export ZWAVE_JS_CONF="${SNAP}/lib/node_modules/zwavejs2mqtt/node_modules/@zwave-js/config" function ensure_zwavejs_config { # Not needed anymore as of ZWAVEJS_EXTERNAL_CONFIG # if [ "$(find ${ZWAVE_JS_CONF} -maxdepth 0 -empty -exec echo empty \;)" == "empty" ]; then # logger "Config directory is empty, copying data from ${SNAP}/snap/zwave-js/config" # rsync -raz "${SNAP}/snap/zwave-js/config" "${ZWAVE_JS_CONF}/.." # else # logger "Config directory ${ZWAVE_JS_CONF} exists" # fi return 0 } function get_network_key { if [ -f "${SNAP_DATA}/settings.json" ]; then SETTINGS_KEY=$(jq '.zwave.networkKey' -r ${SNAP_DATA}/settings.json) if [ "${SETTINGS_KEY}" != "" ] && [ "${1}" != "${SETTINGS_KEY}" ]; then echo "${SETTINGS_KEY}" return 1 fi return 0 fi return 0 } function same_network_key { # SKIP NOW: NETWORK KEY SHOULD NOT BE USED # FAVOR SETTING # if [ -f "${SNAP_DATA}/settings.json" ]; then # SETTINGS_KEY=$(jq '.zwave.networkKey' -r ${SNAP_DATA}/settings.json) # if [ "${SETTINGS_KEY}" != "" ] && [ "${1}" != "${SETTINGS_KEY}" ]; then # echo "${SETTINGS_KEY}" # return 1 # fi # return 0 # fi return 0 } function plug_connected { if ! snapctl is-connected "${1}"; then echo "Missing plug: «${1}»" >&2 echo "Connect with:" if [ "${1}" == "serial-port" ]; then echo "$ sudo snap connect ${SNAP_NAME}:${1} " else echo "$ sudo snap connect ${SNAP_NAME}:${1}" fi return 1 fi return 0 } function plugs_connected { MISSING=0 RAW_OUT=$(plug_connected "raw-usb") RAW_RES=$? SERIAL_OUT=$(plug_connected "serial-port") SERIAL_RES=$? if [ $RAW_RES -ne 0 -a $SERIAL_RES -ne 0 ]; then echo $RAW_OUT echo "----- OR -----" echo $SERIAL_OUT echo "See ${SNAP_NAME}.help for more info on the serial-port plug" MISSING=1 fi plug_connected "hardware-observe" if [ $? -ne 0 ]; then MISSING=1 fi if [ $MISSING -ne 0 ]; then return 1 fi return 0 } function is_root { if [ ${EUID:-$(id -u)} -eq 0 ]; then return 0 fi return 1 } function require_root { is_root if [ $? -eq 1 ]; then echo "Running as root is required." >&2 echo "Re-run with sudo." exit 1 fi } function testnset_config { logger "${SNAP_NAME}: Testing ${1}, or setting ${2}" RES=$(snapctl get ${1}) if [ $? -ne 0 ] || [ -z "${RES}" ]; then logger "${SNAP_NAME}: Setting ${1}=${2}" RES=$(snapctl set ${1}=${2}) if [ $? -ne 0 ]; then logger "${RES}" exit 1 fi return 0 fi return 0 } function test_priority_dir { Z2M_SETTINGS="${SNAP_DATA}/settings.json" if ! [ -w "${Z2M_SETTINGS}" ]; then return 1 fi PRIORITY_DIR=$(echo "$(sed -E "s#$(dirname ${SNAP_DATA})/(current|[0-9]+)#${SNAP_DATA}#g" <<< $(cat "${Z2M_SETTINGS}" | jq '.zwave.deviceConfigPriorityDir'))" | tr -d '"') if [[ -d $(dirname "${PRIORITY_DIR}") && -w "${PRIORITY_DIR}" ]]; then jq --arg deviceConfigPriorityDir ${PRIORITY_DIR} '.zwave.deviceConfigPriorityDir = $deviceConfigPriorityDir' "${Z2M_SETTINGS}" > "${Z2M_SETTINGS}.tmp" if [ $? -eq 0 ]; then mv "${Z2M_SETTINGS}.tmp" "${Z2M_SETTINGS}" fi elif ! [[ "${PRIORITY_DIR}" =~ ^"$(dirname $SNAP_DATA)"* ]]; then jq --arg deviceConfigPriorityDir "${SNAP_DATA}/devicePriorityConfig" '.zwave.deviceConfigPriorityDir = $deviceConfigPriorityDir' "${Z2M_SETTINGS}" > "${Z2M_SETTINGS}.tmp" if [ $? -eq 0 ]; then mv "${Z2M_SETTINGS}.tmp" "${Z2M_SETTINGS}" fi fi return 0 } function test_default_config { testnset_config "server.host" "localhost" testnset_config "server.port" 8091 testnset_config "server.ssl" false testnset_config "server.force-disable-ssl" false testnset_config "session.cookie-secure" $(snap get server.ssl) testnset_config "session.secret" $(uuid) testnset_config "mqtt.name" "" }