PowerShell/Scripts/check-moon-phase.ps1

44 lines
1.5 KiB
PowerShell
Raw Normal View History

2021-12-04 14:35:37 +01:00
<#
.SYNOPSIS
2021-12-06 11:18:33 +01:00
Checks the Moon phase
2021-12-04 14:35:37 +01:00
.DESCRIPTION
2022-01-29 12:47:46 +01:00
This PowerShell script determines the Moon phase and answers by text-to-speech (TTS).
2021-12-04 14:35:37 +01:00
.EXAMPLE
2021-12-05 11:28:14 +01:00
PS> ./check-moon-phase
2021-12-04 14:35:37 +01:00
.LINK
https://github.com/fleschutz/PowerShell
2022-01-29 12:47:46 +01:00
.NOTES
2022-09-06 21:42:04 +02:00
Author: Markus Fleschutz | License: CC0
2021-12-04 14:35:37 +01:00
#>
try {
2021-12-06 11:27:03 +01:00
$LunarCycle = 29.53058868 # synodic period in days, time between successive new moons
2021-12-06 11:18:33 +01:00
$LunarHalfCycle = $LunarCycle / 2.0
$Phases = @("New moon", "Waxing crescent moon", "First quarter moon", "Waxing gibbous moon", "Full moon", "Waning gibbous moon", "Last quarter moon", "Waning crescent moon")
$PhaseLength = $LunarCycle / 8.0
$PhaseHalfLength = $PhaseLength / 2.0
$RefDate = get-date -Year 2021 -Month 12 -Day 4 -Hour 6 -Minute 43 # Dec 4, 2021 06:43 UTC [New Moon]
$Now = get-date
$TimeInterval = New-TimeSpan -Start $RefDate -End $Now
$Days = $TimeInterval.TotalDays
$MDays = $Days % $LunarCycle
$PhaseIndex = [int]($MDays * (8.0 / $LunarCycle))
2021-12-04 14:35:37 +01:00
2021-12-06 11:18:33 +01:00
$Visibility = [math]::Round((($Days % $LunarHalfCycle) * 100) / $LunarHalfCycle)
$Reply = "$($Phases[$PhaseIndex]) with $($Visibility)% visibility"
$MoonAge = [math]::Round($Days % $LunarCycle)
if ($MoonAge -eq "0") { $Reply += " today"
} elseif ($MoonAge -eq "1") { $Reply += " since yesterday"
} else { $Reply += ", last new moon was $MoonAge days ago"
2021-12-04 14:35:37 +01:00
}
2021-12-06 11:18:33 +01:00
2022-11-18 16:54:04 +01:00
& "$PSScriptRoot/speak-english.ps1" "$Reply"
2021-12-04 14:35:37 +01:00
exit 0 # success
} catch {
2022-04-13 12:06:32 +02:00
"⚠️ Error in line $($_.InvocationInfo.ScriptLineNumber): $($Error[0])"
2021-12-04 14:35:37 +01:00
exit 1
}