Hejsan.
Jag försöker få till ett schema för att tända och släcka lite lampor här hemma. Själva tändningen och släckningen av lamporna funkar utomordentligt bra, men det gör däremot inte timingen.
Jag lägger med koden här nedanför till en aktivitet i iCal.
-- Sätter variabeln till dagens datum
property tDate : current date
-- Namnet på kalendern i iCal som vi använder
property calName : "Lampa"
-- Filen som skall läsas för att få ut tiden
set theFileToRead to "Macintosh HD:Users:iMac:Documents:HemmaFix:Sol.txt"
-- Filen som skall köras för att tända lamporna
set theFileToRun to POSIX path of file "Macintosh HD:Users:iMac:Documents:HemmaFix:Automator:LightsOn.scpt"
-- Först läser vi in tiden för solnedgången
set theFile to theFileToRead as alias
open for access theFile
set varHours to (read theFile from 9 for 2)
set varMins to (read theFile from 12 for 2)
close access theFile
-- Sen räknar vi om allt till sekunder och lägger till eller tar bort en kvart ifrån tiden vi läste in
set randMins to (random number from -15 to 15)
set varTotal to (varHours * hours + varMins * minutes + randMins * minutes)
set myHour to (varTotal div 3600)
set myMins to ((varTotal - myHour * 3600) div 60)
set varTime to (myHour & ":" & myMins)
-- Innan vi lägger in nåt nytt så tömmer vi kalendern
tell application "iCal"
delete every event of (item 1 of (calendars whose title is calName))
end tell
-- Sen sätter vi variablerna myLabel, myAlarm och willAlarm
set mylabel to "Lamporna tänds " & varTime
set myTime to varTotal
set myFile to theFileToRun
my insertAlarm(mylabel, myTime, myFile)
-- Efter det så lägger vi in det i iCal
on insertAlarm(mylabel, myTime, myFile)
tell application "iCal"
set startDate to tDate
set month of startDate to month of tDate
set day of startDate to day of tDate
set time of startDate to myTime
set stampDate to startDate - 432000
set endDate to startDate + 900
set tCal to (item 1 of (calendars whose title is calName))
set theEvent to make new event at the end of events of tCal with properties {start date:startDate, end date:endDate, summary:mylabel}
set nAlarm to make open file alarm at the end of open file alarms of theEvent with properties {trigger interval:-1, filepath:myFile}
quit
end tell
end insertAlarm
Aktiviteten läggs till jättefint och allting ser rätt ut om jag tittar på det i iCal. Men sedan när iCal skall köra scriptet för att tända lamporna vid tiden som bestäms i scriptet ovan så funkar det väl sådär. Scriptet körs nämligen helt tillfälligt. Allt från en minut för tidigt till flera timmar efteråt.
Har läst om tidszonsproblem, men då borde det väl alltid varit heltimmar fel?
Så är det någon som har några idéer gällande vad som går fel?
Förbättringstips på koden och/eller alternativa sätt att lösa detta på mottages tacksamt.
