I was hoping that a couple of script lines using the "date" command
would do the trick here, in terms of translating an epoch time into a
"local" epoch time.  But I haven't been able to make that work.

So here's the primitive-pete version that (hopefully) sets the wakeup
time correctly regardless of whether the hardware clock is set to UTC
or local time.

scwakeup.sh:

Code:
--------------------
    
  #!/bin/sh
  # 
  # SrvrPowerCtrl plugin helper script for linux.
  #
  # This script will set the system's RTC to wake the system up in advance of a 
programmed SqueezeCenter alarm.
  #
  # It attempts to accommodate hardware clocks set either to UTC or local time. 
(Thnx to rickwookie.)
  #
  #
  # Copy this script to /usr/bin/scwakeup.sh: cp ./scwakeup.sh 
/usr/bin/scwakeup.sh
  #
  # Give root only permissions: chown root:root /usr/bin/scwakeup.sh
  #
  # Make it executable: chmod a+x /usr/bin/scwakeup.sh
  #
  # Test it:  sudo /usr/bin/scwakeup.sh 1234567890
  #
  # View the log: cat /var/log/squeezecenter/srvrpowerctrl.log
  # 
  # See http://www.mythtv.org/wiki/index.php/ACPI_Wakeup
  # for apci wakeup troubleshooting...
  #
  
  debug=1
  log_file=/var/log/squeezecenter/srvrpowerctrl.log
  clear
  rm $log_file
  
  #Try to figure out if RTC is set to UTC or local time..
  rtcStatus=`/sbin/hwclock --debug --directisa`
  if [[ "$rtcStatus" =~ "Hardware clock is on UTC time" ]]
  then
        RTCisUTC=1
  else
        RTCisUTC=0
  fi
  
  #Get the wakeup time from the cmd line arg..
  waketimeUTC=$1
  waketimeUTCp=`/bin/date -u -d "1970-01-01 $waketimeUTC seconds" +"%Y-%m-%d 
%H:%M:%S"`
  
  #Compute the local time offset in seconds from UTC..
  localOffsetStr=`/bin/date +%z`
  #Is our offset from UTC positive (east) or negative (west)?
  if [[ "$localOffsetStr" =~ "\+" ]]
  then
        IsWest=0
  else
        IsWest=1
  fi
  
  localOffsetHours="${localOffsetStr:1:2}"
  localOffsetMinutes="${localOffsetStr:3:2}"
  var="($localOffsetHours*3600)+($localOffsetMinutes*60)"
  localOffsetSeconds="`/bin/echo $var | /usr/bin/bc`"
  if [[ $IsWest>0 ]]
  then
        localOffsetSeconds=-$localOffsetSeconds
  fi
  
  #Compute the local wakeup time..
  var="$waketimeUTC+$localOffsetSeconds"
  waketimeLocal="`/bin/echo $var | /usr/bin/bc`"
  waketimeLocalp=`/bin/date -u -d "1970-01-01 $waketimeLocal seconds" 
+"%Y-%m-%d %H:%M:%S"`
  
  if [[ $debug>0 ]]
  then
        if [[ $RTCisUTC>0 ]]
        then
                echo "                    RTC is set to == UTC" >>$log_file
        else
                echo "                    RTC is set to == localtime" 
>>$log_file
        fi
        /bin/echo "        Localtime offset from UTC == $localOffsetStr" 
>>$log_file
        /bin/echo "Localtime offset seconds form UTC == $localOffsetSeconds" 
>>$log_file
        /bin/echo "                      waketimeUTC == $waketimeUTC" 
>>$log_file
        /bin/echo "                     waketimeUTCp == $waketimeUTCp" 
>>$log_file
        /bin/echo "                   waketime local == $waketimeLocal" 
>>$log_file
        /bin/echo "                  waketime localp == $waketimeLocalp" 
>>$log_file
  fi
  
  
  #Which type of RTC interface is present?
  
  if [ -f /sys/class/rtc/rtc0/wakealarm ]
  then
        if [[ $RTCisUTC>0 ]]
        then
                #Kernels > 2.6.22 and higher use /sys/class/rtc/rtc0/wakealarm 
                /bin/echo "Setting /sys/class/rtc/rtc0/wakealarm to 
$waketimeUTC ($waketimeUTCp)" >>$log_file
                /bin/echo 0 >/sys/class/rtc/rtc0/wakealarm
                /bin/echo $waketimeUTC >/sys/class/rtc/rtc0/wakealarm
        else
                /bin/echo "Setting /sys/class/rtc/rtc0/wakealarm to 
$waketimeLocal ($waketimeLocalp)" >>$log_file
                /bin/echo 0 >/sys/class/rtc/rtc0/wakealarm
                /bin/echo $waketimeLocal >/sys/class/rtc/rtc0/wakealarm
        fi
  
  elif [ -f /proc/acpi/alarm ]
  then
        if [ $RTCisUTC>0 ]
        then
                #Kernels < 2.6.21 and lower use /proc/acpi/alarm
                /bin/echo "Setting /proc/acpi/alarm to $waketimeUTCp" 
>>$log_file
                /bin/echo $waketimeUTCp >/proc/acpi/alarm
        else
                /bin/echo "Setting /proc/acpi/alarm to $waketimeLocalp" 
>>$log_file
                /bin/echo $waketimeLocalp >/proc/acpi/alarm
        fi
  else
        /bin/echo "SrvrPowerCtrl does not support RTC wakeup on this system!" 
>>$log_file
  fi
  
  if [[ $debug>0 ]]
  then
        /bin/cat $log_file
  fi
  
--------------------

rickwookie: would you be willing to test this?


-- 
gharris999
------------------------------------------------------------------------
gharris999's Profile: http://forums.slimdevices.com/member.php?userid=115
View this thread: http://forums.slimdevices.com/showthread.php?t=62339

_______________________________________________
plugins mailing list
[email protected]
http://lists.slimdevices.com/mailman/listinfo/plugins

Reply via email to