# MONITOR # Monitors the vehicle's ignition switch to determine when # certain processes are launched or killed. # TUNABLE VARIABLES # Name for the CAN-IHS interface (can0, can1, vcan0, etc) CANIHS=can0 # Name of the WiFi device used in ifconfig, iwconfig WIFIDEV=wlan0 # ENABLE OR DISABLE DEBUG STATEMENTS DEBUG=true # Values: true,false,raw # LOCAL VARIABLES WHICH STORE STATE INFORMATION dumpid=0 LASTIGNITION=99 # Wait five seconds and then change the CPU governor to powersave mode. sleep 5 echo "powersave" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor # CONSTANTLY MONITOR THE IGNITION SWITCH FOR ITS LATEST VALUE. candump -L $CANIHS,0122:0FFFF | while read TIME BUS IGNITION do [ $DEBUG == "raw" ] && echo CAN-IHS data: $IGNITION HEADER="TIME : $TIME $( date )\nDATA : $IGNITION" # CONVERT $IGNITION TO A *DECIMAL NUMBER* SO WE CAN DO EASY COMPARISONS # RUN MODE OR ENGINE STARTING/RUNNING: GREATER THAN 67108863 # ACCESSORY MODE OR VEHICLE OFF: LESS THAN 67108864 IGNITION=$( echo $IGNITION | cut -d"#" -f2 ) IGNITION=$( printf %d 0x$IGNITION ) # DEBUGGING STATEMENT [ $DEBUG == "raw" ] && echo IGNITION: $IGNITION LASTIGNITION: $LASTIGNITION # WHEN ENGINE GOES FROM OFF TO ON, LAUNCH OUR ROUTINES. if [ $IGNITION -gt 67108863 ] ; then if [ $LASTIGNITION -lt 67108864 ] ; then [ $DEBUG == "true" ] && echo -e $HEADER [ $DEBUG == "true" ] && echo "EVENT : VEHICLE HAS BEEN TURNED ON" # CHANGING CPU GOVERNOR TO THE ONDEMAND POLICY # Make more CPU power available while the engine is running. [ $DEBUG == "true" ] && echo "ACTION: CHANGING CPU GOVERNOR TO ONDEMAND" echo "ondemand" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor # STARTING THE BLACK BOX RECORDER, STORING INTO: /home/pi/log [ $DEBUG == "true" ] && echo "ACTION: STARTING BLACK BOX RECORDER" nohup /home/pi/bin/dump any > /dev/null & dumpid="$!" sleep 2 dumpid=$( pgrep -P $dumpid ) echo "DUMP STARTED, PID: $dumpid" # A SHORT DELAY BEFORE STARTING THE NEXT SECTION sleep 5 # STARTUP ROUTINE FOR HVAC AUTOMATION AFTER IGNITION-START # When the vehicle is started, we want the remote-start HVAC automation routine # to run. The only exemption is if the engine was already running when this # script was launched. If that's the case ($LASTIGNITION == 99), then we do nothing. if [ $LASTIGNITION != 99 ] ; then [ $DEBUG == "true" ] && echo "ACTION: STARTING HVAC AUTOMATION FOR REMOTE-START" # The heater routine will exit if the vehicle was not remote started. # Either way, it will shortly terminate after starting and does not need monitoring. /home/pi/bin/autohvac & fi [ $DEBUG == "true" ] && echo "" fi fi # ENGINE IS NO LONGER RUNNING, KILL THE BLACK BOX if [ $IGNITION -lt 67108864 ] ; then if [ $LASTIGNITION -gt 67108863 ] ; then [ $DEBUG == "true" ] && echo -e $HEADER [ $DEBUG == "true" ] && echo "EVENT : VEHICLE HAS BEEN TURNED OFF" [ $DEBUG == "true" ] && echo "ACTION: TERMINATING BLACK BOX RECORDER" # KILLING THE BLACK BOX RECORDER (IF ACTIVE) if [ $dumpid -gt 0 ] ; then sleep 2 echo "ENGINE OFF, KILLING DUMP." pkill -TERM -P $dumpid kill -TERM $dumpid dumpid=0 fi # CHANGING CPU GOVERNOR TO THE POWERSAVE POLICY # Become more energy efficient while the engine is not running. [ $DEBUG == "true" ] && echo "ACTION: CHANGING CPU GOVERNOR TO POWERSAVE" echo "powersave" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor [ $DEBUG == "true" ] && echo "" fi fi # KEEP TRACK OF WHAT THE PREVIOUS STATE OF THE IGNITIOIN SWITCH WAS. # This is how we can tell if it has changed or not, since we want to # take action only when there has been a change in it's value. LASTIGNITION=$IGNITION done