Browse Source

Add hooks and missing QtMqtt

Joachim M. Giæver 3 years ago
parent
commit
dbf62fee32
4 changed files with 129 additions and 5 deletions
  1. 6 1
      snap/snapcraft.yaml
  2. 92 4
      src/bin/env-wrapper
  3. 22 0
      src/hooks/install
  4. 9 0
      src/hooks/post-refresh

+ 6 - 1
snap/snapcraft.yaml

@@ -9,7 +9,7 @@ description: |
   store.
 
 grade: devel
-confinement: devmode
+confinement: strict
 
 apps:
   ozwdaemon:
@@ -41,7 +41,10 @@ parts:
       fi
       qmake
       make -j$(nproc)
+      make -j$(nproc) install
       make -j$(nproc) install INSTALL_ROOT="${SNAPCRAFT_PART_INSTALL}"
+    override-prime: |
+      snapcraftctl prime
     stage-packages:
       - libdouble-conversion3
       - libfreetype6
@@ -108,3 +111,5 @@ parts:
     plugin: dump
     source: ./src
     source-type: local
+    organize:
+      hooks: snap/hooks

+ 92 - 4
src/bin/env-wrapper

@@ -3,10 +3,98 @@
 set -e
 
 OZW_LIB=$(dirname $(find "${SNAP}/usr/local" -name libopenzwave.so -print -quit))
-echo $LD_LIBRARY_PATH
-echo ""
-
 export LD_LIBRARY_PATH="${OZW_LIB}:${LD_LIBRARY_PATH}"
-echo $LD_LIBRARY_PATH
+
+function lprint {
+    echo ${1}
+    logger "${SNAP_NAME}: ${1}"
+}
+if ! snapctl is-connected raw-usb; then
+    lprint "Please connect raw-usb interface!"
+    lprint "Run: snap connect ${SNAP_NAME}:raw-usb"
+    exit 1
+fi
+
+USB_PATH=$(snapctl get usb-path)
+STOP_ON_FAILURE=$(snapctl get stop-on-failure)
+
+MQTT_SERVER=$(snapctl get mqtt.server)
+MQTT_PORT=$(snapctl get mqtt.port) 
+MQTT_USERNAME=$(snapctl get mqtt.username)
+export MQTT_PASSWORD=$(snapctl get mqtt.password)
+MQTT_TLS=$(snapctl get mqtt.tls)
+
+OZW_INSTANCE=$(snapctl get ozw.instance)
+export OZW_NETWORK_KEY=$(snapctl get ozw.network-key)
+OZW_CONFIG_DIR=$(snapctl get ozw.config-dir)
+OZW_USER_DIR=$(snapctl get ozw.user-dir)
+export OZW_AUTH_KEY=$(snapctl get ozw.auth-key)
+
+if [ ! -c "${USB_PATH}" ]; then 
+    lprint "usb-path (${USB_PATH}) does not exist,"
+    lprint "or is not a Character Device"
+    lprint "See: snap get ${SNAP_NAME} -d usb-path"
+    exit 1
+fi
+OZW_ARGS+=(--serial-port "${USB_PATH}")
+
+if [ ${STOP_ON_FAILURE} == true ]; then
+    OZW_ARGS+=(--stop-on-failure)
+elif [ ${STOP_ON_FAILURE} != false ]; then
+    lprint "Invalid value for stop-on-failure (${STOP_ON_FAILURE})"
+    lprint "See: snap get ${SNAP_NAME} -d stop-on-failure"
+    exit 1
+fi
+
+OZW_ARGS+=(--mqtt-server "${MQTT_SERVER}")
+OZW_ARGS+=(--mqtt-port "${MQTT_PORT}")
+
+if [ ${MQTT_TLS} != false ]; then
+    OZW_ARGS+=(--mqtt-username "${MQTT_USERNAME}")
+fi
+
+if [ ${MQTT_TLS} == true ]; then
+    OZW_ARGS+=(--mqtt-tls)
+elif [ ${MQTT_TLS} != false ]; then
+    lprint "Invalid value for mqtt.tls (${MQTT_TLS})"
+    lprint "See: snap get ${SNAP_NAME} -d mqtt"
+    exit 1
+fi
+
+OZW_ARGS+=(--mqtt-instance "${OZW_INSTANCE}")
+
+if [ ! -d "${OZW_CONFIG_DIR}" ] || [ ! -w "${OZW_CONFIG_DIR}" ]; then
+    lprint "Directory: ${OZW_CONFIG_DIR}"
+    lprint "- Does not exist or not writable."
+    exit 125
+fi
+
+OZW_ARGS+=(--config-dir "${OZW_CONFIG_DIR}")
+
+if [ ! -d "${OZW_USER_DIR}" ] || [ ! -w "${OZW_USER_DIR}" ]; then
+    lprint "Directory: ${OZW_USER_DIR}"
+    lprint "- Does not exist or not writable."
+    exit 126
+fi
+
+OZW_ARGS+=(--user-dir "${OZW_USER_DIR}")
+
+# if ! timeout "${MQTT_CONNECT_TIMEOUT:=30}" \
+#     bash -c "until echo /dev/tcp/${MQTT_SERVER}/${MQTT_PORT}; do sleep 1; done" &>/dev/null
+# then
+#     lprint "Could not connect to the MQTT broker after ${MQTT_CONNECT_TIMEOUT} seconds"
+#     exit 124
+# fi
+
+set -- "$@" "${OZW_ARGS[@]}"
+
+ARGC=$#
+ARGV=("$@")
+
+echo "Exec: $@"
+echo "Arguments: "
+for ((i = 0; i < ${ARGC}; i++)); do
+    echo "${ARGV[$i]}"
+done
 
 exec "$@"

+ 22 - 0
src/hooks/install

@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+
+set -e
+
+snapctl set usb-path="/dev/ttyACM0"
+snapctl set stop-on-failure=true
+
+snapctl set mqtt.server=localhost
+snapctl set mqtt.port=1883
+snapctl set mqtt.username=false
+snapctl set mqtt.password=false
+snapctl set mqtt.connect-timeout=30
+snapctl set mqtt.tls=false
+
+snapctl set ozw.instance=1
+snapctl set ozw.network-key="$(cat /dev/urandom | LC_ALL=C tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0x\1, /g' -e 's/, $//')"
+snapctl set ozw.config-dir="${SNAP_DATA}/config"
+snapctl set ozw.user-dir="${SNAP_DATA}/user"
+snapctl set ozw.auth-key=false
+
+mkdir "${SNAP_DATA}/config"
+mkdir "${SNAP_DATA}/user"

+ 9 - 0
src/hooks/post-refresh

@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+set -e
+
+CONFIG_DIR=$(snapctl get ozw.config-dir)
+USER_DIR=$(snapctl get ozw.user-dir)
+
+snapctl set ozw.config-dir=$(echo $CONFIG_DIR | sed -e "s#${SNAP_NAME}/\([x0-9]\+\)#${SNAP_NAME}/${SNAP_REVISION}#g")
+snapctl set ozw.user-dir=$(echo $USER_DIR | sed -e "s#${SNAP_NAME}/\([x0-9]\+\)#${SNAP_NAME}/${SNAP_REVISION}#g")