Zachary Kotlarek 14 лет назад
Родитель
Сommit
a99c9f87e8
1 измененных файлов с 52 добавлено и 22 удалено
  1. 52 22
      dmx/rope.sh

+ 52 - 22
dmx/rope.sh

@@ -11,7 +11,7 @@ OFF_TIMEOUT=600
 DELAY=0.5
 
 # App Config
-TEMP_DIR="`getconf DARWIN_USER_TEMP_DIR`"
+TEMP_DIR="`getconf DARWIN_USER_TEMP_DIR`/plexMonitor"
 EXEC_DIR="${HOME}/bin/video/dmx"
 export PYTHONPATH="${PYTHONPATH}:/opt/local/lib/python2.7/site-packages:/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages"
 
@@ -39,51 +39,81 @@ if [ ! -d "${EXEC_DIR}" ] || [ ! -d "${TEMP_DIR}" ]; then
 fi
 
 # Move into position
-cd "${TEMP_DIR}/plexMonitor"
+cd "${TEMP_DIR}"
 
 # State
-STATE="PLAYING"
+STATE="OFF"
+LAST_STATE="OFF"
 DIM_LAST=$DIM_PLAY
 PLAYING=0
 LAST_UPDATE=0
 LAST_PLAYING=0
 
+# Always force lights out at launch
+"${EXEC_DIR}/setChannels.py" 0
+
 # Loop forever
 while [ 1 ]; do
-	# Reset
-	CHANGED=0
-
-	# Monitor the playing file for changes
+	# Monitor the PLAY_STATUS file for changes and state
+	LAST_PLAYING=$PLAYING
 	UPDATE=$(checkForUpdates PLAY_STATUS.lastUpdate)
 	if [ $UPDATE -gt $LAST_UPDATE ]; then
 		LAST_UPDATE=$UPDATE
-		CHANGED=1
-	fi
-
-	# Grab the new play state
-	LAST_PLAYING=$PLAYING
-	if [ $CHANGED -gt 0 ]; then
 		PLAYING="`cat PLAY_STATUS`"
 		PLAYING=$(( $PLAYING + 0 ))
 	fi
 
-	# Turn off when we reach the timeout
-	if [ $PLAYING -lt 1 ] && [ "${STATE}" != "OFF" ] && [ $(( LAST_UPDATE + $OFF_TIMEOUT )) -lt `date '+%s'` ]; then
-		STATE="OFF"
-		"${EXEC_DIR}/dimChannels.py" $DIM_OFF_TIME $DIM_LAST $DIM_OFF
-		DIM_LAST=$DIM_OFF
+	# Monitor the GUI file for changes only
+	UPDATE=$(checkForUpdates GUI.lastUpdate)
+	if [ $UPDATE -gt $LAST_UPDATE ]; then
+		LAST_UPDATE=$UPDATE
+	fi
+	UPDATE=$(checkForUpdates PLAYING.lastUpdate)
+	if [ $UPDATE -gt $LAST_UPDATE ]; then
+		LAST_UPDATE=$UPDATE
+	fi
+
+	# Detect when we change states
+	LAST_STATE=$STATE
 
-	# If something has changed, check the actual play state
-	elif [ $PLAYING -ne $LAST_PLAYING ]; then
+	# If the play state has changed we must adjust
+	if [ $PLAYING -ne $LAST_PLAYING ]; then
 		if [ $PLAYING -gt 0 ]; then
 			STATE="PLAYING"
-			"${EXEC_DIR}/dimChannels.py" $DIM_PLAY_TIME $DIM_LAST $DIM_PLAY
-			DIM_LAST=$DIM_PLAY
 		else
 			STATE="PAUSED"
+		fi
+
+	# If we're not playing, check for timeouts
+	elif [ $PLAYING -lt 1 ]; then
+		TIME_SINCE_CHANGE=$(( `date '+%s'` - $LAST_UPDATE ))
+
+		# Turn off when we reach the timeout
+		if [ "${STATE}" != "OFF" ] && [ $TIME_SINCE_CHANGE -gt $OFF_TIMEOUT ]; then
+			STATE="OFF"
+		# But fire back up if anything changes
+		elif [ "${STATE}" == "OFF" ] && [ $TIME_SINCE_CHANGE -lt $OFF_TIMEOUT ]; then
+			STATE="PAUSED"
+		fi
+	fi
+
+
+	# Set the lighting state
+	if [ "${STATE}" != "${LAST_STATE}" ]; then
+		if [ "${STATE}" == "PAUSED" ]; then
 			"${EXEC_DIR}/dimChannels.py" $DIM_PAUSE_TIME $DIM_LAST $DIM_PAUSE
 			DIM_LAST=$DIM_PAUSE
+		elif [ "${STATE}" == "PLAYING" ]; then
+			"${EXEC_DIR}/dimChannels.py" $DIM_PLAY_TIME $DIM_LAST $DIM_PLAY
+			DIM_LAST=$DIM_PLAY
+		else
+			"${EXEC_DIR}/dimChannels.py" $DIM_OFF_TIME $DIM_LAST $DIM_OFF
+			DIM_LAST=$DIM_OFF
 		fi
+
+		# Save the state to disk for external reference
+		echo -e "State: ${STATE}\nValue: ${DIM_LAST}" > ROPE
+		date '+%s' > ROPE.lastUpdate
 	fi
 
 	# Delay