diff --git a/tools/heim-abholen.ps1 b/tools/heim-abholen.ps1 index 8531c5d..39c94b1 100644 --- a/tools/heim-abholen.ps1 +++ b/tools/heim-abholen.ps1 @@ -240,24 +240,49 @@ $merker = Join-Path $zVoll '.letzter-alarm.txt' $zuletzt = if (Test-Path $merker) { (Get-Content $merker -Raw).Trim() } else { '' } $jetzt = if ($text) { $text } else { '' } -if ($jetzt -ne $zuletzt) { - Set-Content $merker $jetzt -Encoding UTF8 - if ($Webhook -and $jetzt) { - $rumpf = @{ - username = 'Sicherungs-Abholung' - embeds = @(@{ - title = 'Bei dir zu Hause kommt keine Sicherung mehr an' - description = $jetzt - color = 15158332 - fields = @(@{ name = 'Ablage'; value = "``$zVoll``"; inline = $false }) - footer = @{ text = 'D4RKST3R // ABHOLUNG' } - }) - } | ConvertTo-Json -Depth 6 - $code = $rumpf | curl.exe -s -o NUL -w '%{http_code}' -X POST ` - -H 'content-type: application/json' --data-binary '@-' $Webhook - Write-Host '' - if ($code -in '200', '204') { Gut "Gemeldet (HTTP $code)." } else { Schlecht "Melden fehlgeschlagen: HTTP $code" } - } -} elseif ($jetzt) { +# DER MERKER WIRD ERST GESETZT, WENN DIE MELDUNG WIRKLICH RAUSGING. +# +# Vorher stand er ganz oben und wurde bei jedem Zustandswechsel geschrieben -- +# auch wenn gar kein Webhook konfiguriert war oder das Senden fehlschlug. Beim +# ersten echten Test ist genau das passiert: ein Lauf OHNE -Webhook hat den +# Alarm als "gemeldet" abgehakt, und der naechste Lauf MIT Webhook waere still +# geblieben. +# +# Ein Merker bedeutet "dieser Zustand wurde berichtet". Wenn nichts berichtet +# wurde, darf er nicht gesetzt werden -- sonst verschluckt genau der Fehlerfall +# die Meldung, fuer die das Ganze da ist. + +if (-not $jetzt) { + # Alles in Ordnung: Entwarnung braucht keine Nachricht, aber der Merker + # muss weg, damit derselbe Zustand spaeter wieder gemeldet werden kann. + if ($zuletzt) { Set-Content $merker '' -Encoding UTF8; Gut 'Wieder in Ordnung.' } +} elseif ($jetzt -eq $zuletzt) { Warn 'Schon gemeldet -- bleibt still, bis sich etwas aendert.' +} elseif (-not $Webhook) { + Write-Host '' + Warn 'Kein -Webhook angegeben -- es wurde NICHTS gemeldet.' + Warn 'Der Merker bleibt deshalb leer: beim naechsten Lauf mit Webhook' + Warn 'geht die Meldung dann wirklich raus.' +} else { + $rumpf = @{ + username = 'Sicherungs-Abholung' + embeds = @(@{ + title = 'Bei dir zu Hause kommt keine Sicherung mehr an' + description = $jetzt + color = 15158332 + fields = @(@{ name = 'Ablage'; value = "``$zVoll``"; inline = $false }) + footer = @{ text = 'D4RKST3R // ABHOLUNG' } + }) + } | ConvertTo-Json -Depth 6 + $code = $rumpf | curl.exe -s -o NUL -w '%{http_code}' -X POST ` + -H 'content-type: application/json' --data-binary '@-' $Webhook + Write-Host '' + if ($code -in '200', '204') { + Gut "Gemeldet (HTTP $code)." + Set-Content $merker $jetzt -Encoding UTF8 + } else { + # NICHT merken: beim naechsten Lauf noch einmal versuchen. Eine + # Meldung, die im Netz haengengeblieben ist, ist keine Meldung. + Schlecht "Melden fehlgeschlagen: HTTP $code -- wird beim naechsten Lauf erneut versucht." + } }