webForumDet fria alternativet

Skapa aktivitet i iCal med applescript. Nu löper iCal amok.

macOS

0 svar · 544 visningar · startad av andyoumaydie

Medlem sedan dec. 2006608 inlägg
Frågan#1

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.

255 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)