From 37ebad91c69a4929671e6fe0f36631906eb71ac6 Mon Sep 17 00:00:00 2001 From: Dicken Date: Fri, 10 Jul 2026 20:26:37 +0200 Subject: [PATCH] fix: KoePi HA-Button ist reiner Anzeige-Refresh ohne Pushover --- backend/src/index.js | 6 +++--- backend/src/tools/koepi/routes.js | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/backend/src/index.js b/backend/src/index.js index 56ae2af..7127e90 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -261,9 +261,9 @@ const mediaRoutes = require('./tools/media/routes'); const mqttClient = require('./mqtt'); mqttClient.connectMqtt(); -// HA-Button "KöPi Check jetzt" löst denselben Check wie der 06:00-Cron aus -// (respektiert den normalen Diff — Pushover geht nur bei echter Änderung raus) -mqttClient.setKoepiCheckHandler(() => koepiRoutes.runDailyCheck()); +// HA-Button "KöPi Check jetzt" ist ein reiner Anzeige-Refresh — sendet nie +// Pushover. Benachrichtigungen bleiben exklusiv dem 06:00-Cron vorbehalten. +mqttClient.setKoepiCheckHandler(() => koepiRoutes.refreshOffersOnly()); // HA-Buttons "Media Quittieren" / "Media Alle quittieren" — danach sofort den // Media-Anfragen-Sensor + die dynamischen Buttons in HA aktualisieren mqttClient.setMediaAckHandler((id) => { diff --git a/backend/src/tools/koepi/routes.js b/backend/src/tools/koepi/routes.js index f0362fd..22372c1 100644 --- a/backend/src/tools/koepi/routes.js +++ b/backend/src/tools/koepi/routes.js @@ -301,6 +301,25 @@ async function sendKoepiPushover(offers) { } } +// Reiner Anzeige-Refresh für den HA-Button "KöPi Check jetzt" — scraped frisch +// und aktualisiert nur die MQTT-Entitäten. Sendet NIE Pushover und rührt den +// in admin_settings gespeicherten Vergleichsstand nicht an (der bleibt exklusiv +// dem 06:00-Cron vorbehalten, damit dessen Diff-Erkennung korrekt bleibt). +async function refreshOffersOnly() { + try { + const { offers } = await scrapeMarktguru(true); + const currentSig = offerSignature(offers); + const lastSig = db.prepare('SELECT value FROM admin_settings WHERE key=?').get(KOEPI_SETTINGS_KEY)?.value || ''; + const changed = currentSig !== lastSig; // nur zur Anzeige im "geändert"-Sensor, löst nichts aus + mqttClient.publishKoepiState({ offers, changed }); + console.log(`🍺 KöPi-Refresh (HA-Button): ${offers.length} Angebot(e) angezeigt, keine Pushover.`); + return { changed, sent: false, offerCount: offers.length }; + } catch (e) { + console.error('KöPi Refresh Fehler:', e.message); + return { error: e.message }; + } +} + // Wird täglich um 06:00 vom Scheduler in index.js aufgerufen. // forceNotify=true (manueller Admin-Test): Pushover wird auch ohne Änderung verschickt. async function runDailyCheck(forceNotify = false) { @@ -357,3 +376,4 @@ router.post('/run-daily-check', authenticate, async (req, res) => { module.exports = router; module.exports.runDailyCheck = runDailyCheck; +module.exports.refreshOffersOnly = refreshOffersOnly;