Zachary Kotlarek 13 лет назад
Родитель
Сommit
b502520881
1 измененных файлов с 70 добавлено и 37 удалено
  1. 70 37
      dmx/state.pl

+ 70 - 37
dmx/state.pl

@@ -5,6 +5,7 @@ use IO::Select;
 use IO::Socket::UNIX;
 use File::Basename;
 use File::Temp qw( tempfile );
+use Sys::Hostname;
 
 # Local modules
 use Cwd qw(abs_path);
@@ -19,31 +20,69 @@ sub mtime($);
 my $STATE_TIMEOUT = 180;
 my $MEDIA_PATH    = `~/bin/video/mediaPath`;
 my %MON_FILES     = (
-	'MOTION'          => 'MTIME',
-	'PROJECTOR'       => 'STATUS',
-	'AMPLIFIER'       => 'STATUS',
-	'GUI'             => 'STATUS_GUI',
-	'PLAYING'         => 'STATUS_PLAYING',
-	'NO_MOTION'       => 'EXISTS',
-	'RAVE'            => 'EXISTS',
-	'EFFECT'          => 'EXISTS',
-	'FAN_CMD'         => 'EXISTS_ON',
-	'LIGHTS'          => 'EXISTS_ON',
-	'STEREO_CMD'      => 'EXISTS_ON',
-	'AUDIO_AMP'       => 'EXISTS_ON',
-	'AMPLIFIER_VOL'   => 'STATUS_VALUE',
-	'AMPLIFIER_MODE'  => 'STATUS_VALUE',
-	'AMPLIFIER_INPUT' => 'STATUS_VALUE',
-	'AUDIO'           => 'STATUS_VALUE',
-	'AUDIO_STATE'     => 'STATUS_VALUE',
-	'PROJECTOR_COLOR' => 'STATUS_VALUE',
-	'PROJECTOR_INPUT' => 'STATUS_VALUE',
-	'COLOR'           => 'STATUS_VALUE',
-	'RIFF'            => 'STATUS_VALUE',
-
-	$MEDIA_PATH . '/DMX/cmd/GARAGE_CMD' => 'EXISTS_CLEAR',
+	'GUI'     => 'STATUS_GUI',
+	'PLAYING' => 'STATUS_PLAYING',
+	'RIFF'    => 'STATUS_VALUE',
 );
-my %EXTRAS = (
+my $DISPLAY = '<NONE>';
+
+# Host-specific config
+my $HOST = Sys::Hostname::hostname();
+if ($HOST =~ /loki/i) {
+
+	# Display device
+	$DISPLAY = 'PROJECTOR';
+
+	# Motion detection
+	$MON_FILES{'MOTION'}    = 'MTIME';
+	$MON_FILES{'NO_MOTION'} = 'EXISTS';
+
+	# Projector
+	$MON_FILES{'PROJECTOR'}       = 'STATUS';
+	$MON_FILES{'PROJECTOR_COLOR'} = 'STATUS_VALUE';
+	$MON_FILES{'PROJECTOR_INPUT'} = 'STATUS_VALUE';
+
+	# Amplifier
+	$MON_FILES{'AMPLIFIER'}       = 'STATUS';
+	$MON_FILES{'AMPLIFIER_VOL'}   = 'STATUS_VALUE';
+	$MON_FILES{'AMPLIFIER_MODE'}  = 'STATUS_VALUE';
+	$MON_FILES{'AMPLIFIER_INPUT'} = 'STATUS_VALUE';
+	$MON_FILES{'AUDIO_AMP'}       = 'EXISTS_ON';
+	$MON_FILES{'STEREO_CMD'}      = 'EXISTS_ON';
+
+	# A/V Effects
+	$MON_FILES{'LIGHTS'} = 'EXISTS_ON';
+	$MON_FILES{'RAVE'}   = 'EXISTS';
+	$MON_FILES{'EFFECT'} = 'EXISTS';
+
+	# Equipment
+	$MON_FILES{'FAN_CMD'} = 'EXISTS_ON';
+	$MON_FILES{ $MEDIA_PATH . '/DMX/cmd/GARAGE_CMD' } = 'EXISTS_CLEAR';
+
+	# OS State
+	$MON_FILES{'COLOR'}       = 'STATUS_VALUE';
+	$MON_FILES{'AUDIO'}       = 'STATUS_VALUE';
+	$MON_FILES{'AUDIO_STATE'} = 'STATUS_VALUE';
+
+} elsif ($HOST =~ /beddy/i) {
+
+	# Display device
+	$DISPLAY = 'TV';
+
+	# TV
+	#$MON_FILES{'TV'}       = 'STATUS';
+	#$MON_FILES{'TV_VOL'}   = 'STATUS_VALUE';
+	#$MON_FILES{'TV_INPUT'} = 'STATUS_VALUE';
+}
+
+# App config
+my $SOCK_TIMEOUT = 5;
+my $DATA_DIR     = DMX::dataDir();
+my $CMD_FILE     = $DATA_DIR . 'STATE.socket';
+my $MAX_CMD_LEN  = 4096;
+my $RESET_CMD    = $ENV{'HOME'} . '/bin/video/dmx/reset.sh';
+my $PUSH_TIMEOUT = 20;
+my %EXTRAS       = (
 	'PLAYING' => {
 		'URL'      => qr/^\<li\>Filename\:(.+)$/m,
 		'YEAR'     => qr/^\<li\>Year\:(\d+)/m,
@@ -58,14 +97,6 @@ my %EXTRAS = (
 	}
 );
 
-# App config
-my $SOCK_TIMEOUT = 5;
-my $DATA_DIR     = DMX::dataDir();
-my $CMD_FILE     = $DATA_DIR . 'STATE.socket';
-my $MAX_CMD_LEN  = 4096;
-my $RESET_CMD    = $ENV{'HOME'} . '/bin/video/dmx/reset.sh';
-my $PUSH_TIMEOUT = 20;
-
 # Debug
 my $DEBUG = 0;
 if ($ENV{'DEBUG'}) {
@@ -97,8 +128,10 @@ my $pushLast   = 0;
 
 # Add the extras to the main file list
 foreach my $file (keys(%EXTRAS)) {
-	foreach my $extra (keys(%{ $EXTRAS{$file} })) {
-		$MON_FILES{ $file . '_' . $extra } = 'NONE';
+	if (exists($MON_FILES{$file})) {
+		foreach my $extra (keys(%{ $EXTRAS{$file} })) {
+			$MON_FILES{ $file . '_' . $extra } = 'NONE';
+		}
 	}
 }
 
@@ -287,9 +320,9 @@ while (1) {
 
 	# Calculate the new state
 	$stateLast = $state;
-	if ($files{'PROJECTOR'}->{'status'}) {
+	if (exists($files{$DISPLAY}) && $files{$DISPLAY}->{'status'}) {
 
-		# We are always either playing or paused if the projector is on
+		# We are always either playing or paused if the display is on
 		# When we're playing "Audio" assume we are paused
 		if ($files{'PLAYING'}->{'status'} && $files{'PLAYING_TYPE'}->{'status'} ne 'Audio') {
 			$state = 'PLAY';
@@ -299,7 +332,7 @@ while (1) {
 
 	} else {
 
-		# If the projector is off, check the timeouts
+		# If the display is off, check the timeouts
 		my $timeSinceUpdate = time() - $updateLast;
 		if ($timeSinceUpdate > $STATE_TIMEOUT) {
 			$state = 'OFF';