FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Adimarantis am 05 Juni 2025, 13:39:50

Titel: FHEM2FHEM Synchronisierung nach Ausfall?
Beitrag von: Adimarantis am 05 Juni 2025, 13:39:50
Hallo,

falls das nicht irgendwie schon geht hätte ich einen Feature Request für FHEM2FHEM:

Einen "set" oder "get" Befehl, der eine Synchronisierung aller betroffenen Devices/Readings erzwingt.

Use Case: Ich hatte neulich eine Instanz neu installiert und dabei vergessen das fhem.save zu retten. Als ich die neue Instanz hochgefahren habe, hagelte es nur so an Fehlern aus DOIFs die Readings benötigten, die über FHEM2FHEM synchronisiert wurden, aber eben selten (oder im Fall eines "Settings" Device, welches  statische Einstellungen enthält, die sehr selten und nur manuell geändert werden eher gar nicht) Events erzeugen.
Ist sicherlich auch bei einem längeren Systemaufall einer beteiligten Instanz hilfreich. Am Besten wäre das als "pull" auf der Instanz der Werte fehlen.

Gruß,
Jörg
Titel: Aw: FHEM2FHEM Synchronisierung nach Ausfall?
Beitrag von: betateilchen am 05 Juni 2025, 14:29:32

Oder mit configDB arbeiten, da wird auch das statefile mit versioniert.
Titel: Aw: FHEM2FHEM Synchronisierung nach Ausfall?
Beitrag von: Otto123 am 05 Juni 2025, 16:22:34
Hallo Jörg,

FHEM2FHEM ist doch kein Tool zur Synchronisation. So wie ich es verstanden habe:
Da gibt es doch überhaupt keinen Ansatz für deinen Wunsch? Du könntest für Dein Vorhaben in der Remote Instanz alle Readings neu setzen und dabei Events erzeugen.

Den Use Case den Du beschreibst würde ich eher als persönlichen Designfehler bezeichnen  ;D

Gruß Otto
Titel: Aw: FHEM2FHEM Synchronisierung nach Ausfall?
Beitrag von: Adimarantis am 05 Juni 2025, 19:19:31
Mir geht es um den Fall, dass man (warum auch immer - spielt eigentlich keine Rolle) Events von der "master" Instanz verpasst hat, die sehr selten kommen und man würde die gerne aktualisieren, damit beide Instanzen wieder synchron sind.
Beholfen habe ich mir, indem ich die "setstate" Kommandos aus der "Raw Definition" einfach auf der anderen Instanz ausgeführt hab. Das ging jetzt, weil es nur wenige betroffene Devices waren.
Praktischer wäre halt ein Feature, dass anhand des FHEM2FHEM Filters alle Readings durchrattert - aber wohl nur wenn das mit wenig Aufwand zu implementieren ist. Ich gebe zu dass der Use Case wohl eher selten vorkommen wird.

Jörg
Titel: Aw: FHEM2FHEM Synchronisierung nach Ausfall?
Beitrag von: Guybrush am 05 Juni 2025, 20:30:44
hat betateilchen doch gepostet
Titel: Aw: FHEM2FHEM Synchronisierung nach Ausfall?
Beitrag von: Adimarantis am 05 Juni 2025, 21:10:18
Mein Ziel war eine userfreundliche Lösung an der Stelle (FHEM2FHEM) an der man als erstes sucht.
Klar gibt es für fortgeschrittene User immer einen Weg.

Um den Vorschlag mit JsonList2 zu vertiefen:
Wie importiert man das wieder?
Kann ich nur die Readings importieren? (denn auf der "anderen Seite" sind üblicherweise nur Dummys - also andere Devicetypen und hier auch Attribute etc. zu importieren oder gar die Device identisch zu erzeugen würde das Chaos nur vergrößeren)
Titel: Aw: FHEM2FHEM Synchronisierung nach Ausfall?
Beitrag von: passibe am 06 Juni 2025, 00:29:57
Zitat von: Adimarantis am 05 Juni 2025, 21:10:18Mein Ziel war eine userfreundliche Lösung an der Stelle (FHEM2FHEM) an der man als erstes sucht.
Die userfreundlichste Lösung ist hier wohl, dass die User Sorge dafür tragen, dass das Problem gar nicht erst entsteht.

Aber siehe unten zu meinem Vorschlag, vielleicht wars das ja schon. Man könnte das dann auch einfach irgendwo in einem Helper-Skript ablegen, damit man es bei Notwendigkeit schnell ausführen kann. Theoretisch kann man das, sofern sich zwischen den beiden Geräten eine SSH-Verbindung aufbauen lässt, auch komplett automatisieren.

Generell ist das hier aber etwas, das nicht unbedingt so häufig vorkommt – es scheint dir ja auch erst 1x passiert zu sein, und das einerseits beim Neuaufsetzen und andererseits auch vermeidbar, weil fhem.save nicht gebackuped wurde. Dass man in so einem Fall vielleicht zu einer etwas komplizierteren Lösung greifen muss, und selbst ein bisschen was skripten muss, ist jetzt meiner Meinung nach kein Weltuntergang.

Hier mein Vorschlag:
1. Auf dem Quellsystem (DEVSPEC natürlich entsprechend setzen):
/opt/fhem/fhem.pl 7072 "jsonlist2 <DEVSPEC>" > /tmp/saved_readings.json2. saved_readings.json auf das Zielsystem übertragen
3. Auf dem Zielsystem (natürlich Pfad zu saved_readings.json anpassen):while read -r cmd; do
    echo "executing $cmd"
    /opt/fhem/fhem.pl 7072 "$cmd"
done < <(jq -r \
    '.Results[] | .Name as $name | .Readings | to_entries[] | "setreading \($name) \(.key) \(.value.Value)"' \
    /tmp/saved_readings.json)

Nr. 3 geht natürlich auch als Einzeiler ...while read -r cmd; do echo "executing $cmd" && /opt/fhem/fhem.pl 7072 "$cmd"; done < <(jq -r '.Results[] | .Name as $name | .Readings | to_entries[] | "setreading \($name) \(.key) \(.value.Value)"' /tmp/saved_readings.json)