Ideensuche: Webseiten periodisch & zufällig abfragen

Begonnen von yersinia, 09 März 2026, 09:48:42

Vorheriges Thema - Nächstes Thema

yersinia

Hallo zusammen,
vlt. kann mir jemand ein paar Ideen geben, wie ich eine Webseite periodisch abfragen kann.
Gegeben ist ein Webshop mit Artikeln. Jeder Artikel hat eine eindeutig aufrufbare Produktseite mit Preis - wenn das Produkt nicht verfügbar ist, wird eine Fehlerseite zurückgeliefert. Ich möchte für verschiedene Produkte (derzeit 23) werktags (genauer: Mo-Fr) periodisch die Preise bzw. Verfügbarkleit abfragen.

Derzeit löse ich das mit einem DOIF Device, welches die 23 HTTPMOD Devices nacheinander aufruft (set xxx reread). Darauf reagiert ein notify welches dann einmalig eine Nachricht verschickt. Vorteile des DOIFs:
- Abfrage kann auf Wochentage begrenzt werden
- Abfragebeginn und -ende kann ich variabel definieren (feste Zeit plus zufällige Anzahl von Sekunden)
- Abfragepausen zwischen den einzelnen HTTPMOD Devices kann ich per wait definieren
- Pausen zwischen den "Runden" kann ich per repeatcmd steuern
Nachteilig dieser Lösung ist, dass wenn ich Änderungen an dem Produktportfolio vornehmen möchte, ich, neben HTPPMOD Devices, das DOIF jedes mal ändern muss (DEF & wait).

Bezüglich des Nachteils, frage ich mich, ob ich das auch via at (und dem Aufruf von perl code mit perl specials) lösen könnte. Die Devices bekomm' ich über die devspec (TYPE=HTTPMOD:FILTER=NAME=Namensschema.*), allerdings bin ich mir nicht sicher wie ich
- das at device nur in einem bestimmten Zeitfenster ausführe (ggf via disabledForInterval)
- den Startzeitpunkt des at device per Zufall auswählen lasse -> starte nicht jeden Tag zur gleichen Uhrzeit
- das at device nach Abarbeitung in eine zufällig gewählte Pause (1,5h + rand(x)) übergeht (und nach Ablauf wieder ausgeführt wird)
- die einzelnen HTTPMOD Devices mit zufälligen Abständen (45s + rand(y)) ausführen (reread) - ggf per jeweils einmalig erstellten, weiteren at devices
und das ganze non-blocking ohne perl-sleep. ;)

Ein at Device anstelle eines DOIF devices war für mich erstmal naheliegend; aber vlt gibt es ja noch andere Ideen?
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Trixie (perl 5.40.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

JoWiemann

Hallo,

ich habe bei der Suche mit Fhem & randomize folgendes gefunden: https://wiki.fhem.de/wiki/RandomTimer, aber nicht geprüft, ob das genau Deine Anforderungen abdeckt.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

betateilchen

Grundsätzlich kann ein at die Ausführungszeit über eine perl Funktion ermitteln, die HH:MM:SS zurückliefert.
Diese Funktion kann auch wiederholend aufgerufen werden, also mit *{perlCode}

Dazu muss man wissen, dass diese Funktion für den folgenden Ausführungszeitpunkt immer erst nach der Ausführung des at aufgerufen wird.

Wenn also in der Funktion festgelegt ist, dass sie einen Zeitpunkt "45 Minuten + random()-Sekunden" zurückliefert, wird der Zufälligkeitsteil bei jeder Berechnung neu ausgewertet. Es sollten also immer unterschiedliche Abstände dabei herauskommen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Bei den Nachteilen sprichst du immer von zufälliger Verzögerung. Warum baust du sie nicht in deinem DOIF ein? Den Zufall kannst du sowohl im wait-Attribut, als auch bei berechneten Zeittriggern angeben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF