From 4af8366517fe4b230b2cc1d49ae416cd07107fcc Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Thu, 13 Aug 2026 11:09:16 +0200 Subject: [PATCH] fix: der Merker wird erst gesetzt, wenn die Meldung wirklich rausging Beim ersten echten Meldetest lief das Skript ohne -Webhook. Es hat den Alarm angezeigt, NICHTS gesendet -- und den Zustand trotzdem als "gemeldet" abgehakt. 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 ausgerechnet der Fehlerfall die Meldung, fuer die das Ganze da ist. Jetzt vier Faelle, sauber getrennt: alles gut -> Merker leeren, keine Nachricht noetig schon gemeldet -> still bleiben kein Webhook -> sagen, dass NICHTS gemeldet wurde, Merker nicht setzen Webhook da -> senden; NUR bei HTTP 200/204 den Merker setzen Der letzte Punkt ist der zweite Teil derselben Sache: schlaegt das Senden fehl, bleibt der Merker leer und der naechste Lauf versucht es erneut. Eine Meldung, die im Netz haengengeblieben ist, ist keine Meldung. Nachgemessen, beide Richtungen: Alarm ohne Webhook -> "NICHTS gemeldet", Merker vorhanden: False derselbe mit Webhook -> "Gemeldet (HTTP 204)", Merker gesetzt: True Co-Authored-By: Claude Opus 5 --- tools/heim-abholen.ps1 | 63 +++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 19 deletions(-) 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." + } }