Переглянути джерело

Added auto bind feature for offline / cloud-less setup (#303)

* Added auto bind feature for offline / cloud-less setup

Automatically sets bindOk=1 when WiFi settings are detected without
needing the camera to interact with the Wyze cloud. This feature
can be enabled when ENABLE_AUTO_BIND=true is set in wz_mini.conf

* Added 'WiFi Connected' audio message when QR code is valid

* Fixed the auto bind script improperly checking WiFi status

/configs isn't mounted during the init phase from the SD card and
as a result, the checks for whether bindOk=0 done by the init
script was ineffective. The script now mounts it if necessary before
checking.

* Updated autobind feature to use ENABLE_SELFHOSTED_MODE option

The feature to update the bindOk value will now use the same
`ENABLE_SELFHOSTED_MODE` option as the self-hosted iCamera patch.

This feature should only be used by advanced users in isolated
networks or when the user does not intend to use the Wyze App or
cloud services.

* Updated ENABLE_SELFHOSTED_MODE to false by default

The default should be to rely on Wyze servers. Ooops.
Leo 3 роки тому
батько
коміт
4d6c1d8651
1 змінених файлів з 67 додано та 0 видалено
  1. 67 0
      SD_ROOT/wz_mini/etc/init.d/S20initsetup

+ 67 - 0
SD_ROOT/wz_mini/etc/init.d/S20initsetup

@@ -0,0 +1,67 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:
+# Short-Description: Setup bindOk=1 once WiFi settings are detected when in self-hosted mode
+# Description:       Update .user_config so bindOk=1 when QR code containing WiFi settings are scanned. Allows for WiFi to work on next reboot without needing Wyze App/Cloud initial setup.
+### END INIT INFO
+
+. /opt/wz_mini/wz_mini.conf
+
+case "$1" in
+	start)
+
+		echo "#####$(basename "$0")#####"
+		
+		# If not enabled or on T20 which is unsupported by this script
+		if [[ "$ENABLE_SELFHOSTED_MODE" != "true" ]] || [ ! -f /opt/wz_mini/tmp/.T31 ]; then
+			exit 0
+		fi
+
+		# Note: At the time of this boot stage, /configs isn't mounted. If it's not mounted, we have to mount it to check the wifi status
+		if mount | grep -q /configs ; then
+			# Is it already set?
+			if grep -q bindOk=1 /configs/.user_config ; then
+				echo "Initial setup is done. Nothing to do."
+				exit 0
+			fi
+		else
+			mount -t jffs2 /dev/mtdblock6 /configs
+
+			# Is it already set?
+			if grep -q bindOk=1 /configs/.user_config ; then
+				echo "Initial setup is done. Nothing to do."
+				exit 0
+			fi
+
+			umount /configs
+		fi
+
+		echo "Initial setup not completed yet."
+
+		# Wait until these wifi settings are set in /configs later on.
+		# Note that /configs will be mounted eventually by the second stage boot.
+		while true ; do
+			if [ -f /configs/.wifipasswd ] && [ -s /configs/.wifipasswd ] && [ -f /configs/.wifissid ] && [ -s /configs/.wifissid ] ; then
+				echo "Detected WiFi configs. "
+				if wpa_cli -p /var/run/wpa_supplicant -i wlan0 STATUS | grep -q wpa_state=COMPLETED ; then
+					echo "WiFi connection seems Good. Updating bindOk=1."
+					sed -i 's/bindOk=0/bindOk=1/g' /configs/.user_config
+
+					/opt/wz_mini/bin/cmd aplay /usr/share/notify/CN/connect_wifi_ok.wav 60
+
+					grep bindOk /configs/.user_config
+					exit 0
+				fi
+			fi
+
+			echo "Waiting for WiFi settings from QR code..."
+			sleep 5
+		done &
+		
+		;;
+	*)
+		echo "Usage: $0 {start}"
+		exit 1
+		;;
+esac
+