Willkommen im Forum!
Zu fhem im speziellen kann ich nichts sagen, ich habe mir das "damals" mal angeschaut und habe es sofort verworfen. Ich muss aber dazu sagen, dass ich beim Hausbau 2005 knx verbaut habe (ein Kollege von mir hat mich Ende der 90er damit angesteckt...), so das ich ohnehin nie wirklich zur Zielgruppe von fhem gehört habe.
Ich habe allerdings einige Systeme angeschaut und teilweise auch genutzt, MisterHouse, den Gira HomeServer (zum Testen als geknackte Software Appliance...

), LEIBnix... das war alles immer sehr kompliziert, sehr unkomfortabel und grottig in der Konfiguration (ja, auch den HomeServer habe ich da in schlechter Erinnerung, und das ist ein professionelles Gerät für > 2000 € - ohne jegliche Konfiguration).
Und dann las ich einen Bericht über openHAB1.0(!), lud mir das Archiv runter, entpackte es, lud die Beispielkonfiguration, entpackte sie ins angegebene Unterverzeichnis und war vom Ergebnis geflasht. Ich habe damals keine 5 Minuten gebraucht, um den ersten echten Schalter in die Beispieloberfläche einzubauen (gemessen vom Downloadbeginn!) und mein Licht im Zimmer zu schalten.
Damals habe ich xen als Hypervisor laufen lassen, habe also danach eine paravirtualisierte virtuelle Maschine für openHAB erstellt, dort Java installiert (das war bei weitem das schwierigste daran), openHAB eingerichtet, gestartet und hatte innerhalb weniger Stunden alles, was bisher auf mehreren eher schlecht konfigurierten Systemen lief unter einen Hut gebracht. Plötzlich war mein Leben mit der Hausautomation einfach geworden
Mein "Leidensweg" begann dann, als das System mit openHAB2 benutzerfreundlich werden sollte

und die Administration über eine neu GUI eingeführt wurde.
Inzwischen sind wir bei openHAB3 und einer neuen GUI, in der viele Dinge tatsächlich komfortabler sind als über die angestaubte Textkonfiguration. Aber bis das in meinen Augen perfekt ist, wird es noch etwas dauern

ich liebe Textkonfiguration.
Stabilität: openHAB gibt es immer in drei Geschmacksrichtungen, stable, testing und unstable. (Begrifflichkeiten wechseln gerne mal, momentan heißt es stable, milestone und unstable, früher hieß unstable mal nightly). Gemeint ist damit aber lediglich:
stable -> Dies ist ein offizieller Stand mit einem festgelegten Funktionsumfang. Da ändert sich nix mehr (es sei denn, man findet wirklich schwerwiegende Fehler, die ein umgehendes Update unerlässlich machen) Erscheinungszyklus ca. halbjährlich.
milestone -> monatlich eingefrorener Entwicklungsstand.
unstable -> meist täglich frisch kompiliert, hier sind alle Korrekturen und Neuerungen enthalten, die offiziell verfügbar sind.
Es gibt für jede dieser Versionen gute Gründe.
Wenn Du mit dem Stand von stable zufrieden bist, wunderbar. Setze das System auf und lasse es jahrelang laufen, ohne Gewissensbisse.
Willst Du eine Funktion nutzen, die erst kürzlich dazu kam, nutze milestone (zumindest, bis die Funktion in stable verfügbar ist).
Willst Du immer den neuesten Scheiß haben, nimm unstable. Entgegen dem Namen läuft auch diese Version so gut wie immer super stabil. Niemand ist gezwungen, ständig Updates zu machen

wenn ein Problem auftritt, sollte man die alte Version aber am besten noch verfügbar haben, denn es kann schon mal ein paar Tage dauern, bis ein Fehler gefixt ist und eine kaputte unstable Version wieder stabil funktioniert.