ESF Import? Oder: wie bekomme ich alle GA in die FHEM?

Begonnen von JooNey, 27 Juli 2022, 20:43:34

Vorheriges Thema - Nächstes Thema

JooNey

Hallo liebe Community,

ich habe eine kleine Herausforderung, und hoffe, dass ihr evtl. eine Idee habt:
Meine Haupt-Visu für die KNX ist die Edomi. Mit der bin ich auch echt glücklich, und es läuft alles zu meiner Zufriedenheit. Allerdings habe ich aufgrund baulicher Maßnahmen die Notwendigkeit gehabt, mir ein EnOcean und HUE Gateway zu bauen (die KNX eigenen Produkte sind da teilweise doch unverschämt teuer) und so kam ich zu FHEM auf nem RPi4.

Aus diesem Anwendungszweck geht relativ schnell hervor, dass meine eigentliche KNX Kommunikation und Steuerung nicht über die FHEM läuft. Demnach sind nur die notwendigen Gruppenadressen wirklich auf der FHEM angelegt. Der ganze große Rest steckt in der Edomi, in die ich per ESF-Import alle Gruppenadressen aus der ETS bekommen kann.

Nun überlege ich die FHEM zum Füllen einer KairosDB zu nutzen, weil ich hoffe, dass das etwas einfacher geht, als in Edomi. Allerdings ist echt echt ein tierischer Aufwand alle GAs anzulegen bzw. den vorhandenen die Datentypen zuzuordnen. Nun bin ich grundsätzlich recht "faul", und frage mich, ob es nicht eine bessere Alternative gibt - z.B. den ESF Import oder etwas ähnliches.

Danke für die Antworten und beste Grüße
JooNey

Amenophis86

Hey,

Ich habe mir dazu etwas gebastelt, was immer noch umständlich aber teilweise wenigstens "automatisiert" ist. Ich versuche es morgen mal zu posten, wenn ich dran denke.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Löwenzahn

Hi JooNey,
ich bin ganz bei dir.
Aktuell habe ich eine ähnliche Konfiguration. Edomi mach den Hauptteil und fhem habe ich als Gateway für die Heizung und einige 1wire Sensoren.

Früher (also vor 6 Jahren) hatte ich nur fhem, aber nach dem 2ten oder dritten a passen der Schnittstelle und dem damit verbundenen anpassen aller Definition, hatte ich die Lust verloren. War vielleicht irgendwie auch bei anderen hier der Fall, denn die Aktivitäten haben spürbar nachgelassen. Außerdem gab es seinerzeit nicht die Visus und FTui war nicht so kompatibel wie zu anderen Modulen. So bin dann ich zu Edomi gewechselt. (Was mir durch diese "one-man-show" nun wohl wieder auf die Füße fallen wird.

Um mal diesen kurzen Ausflug und Hintergründe zu beenden, würde ich eine komfortable Importmöglichkeit sehr begrüßen. Ich denke auch, das dann wesentlich mehr Anwender diese nutzen würden. Vielleicht wäre der Umweg über Excel-Export denkbar?! (Habe ich seinerzeit so angefangen und dann die txt Files editiert.)

Bei einem Neustart, würde ich wohl auch nicht mehr mehrere GAs auf ein device anlegen, sondern jede GA separat. Macht das jemand von euch schon?.... oder hat es große Nachteile,die ich gerade übersehe?

@Amenophis86, ich bin sehr gespannt, wie du vorgehst. Es wäre cool, wenn wir daran teilhaben können.

Gruß Löwenzahn

JooNey

Hey Löwenzahn,

Dass was du schreibst kann ich so gut nachvollziehen. :D

Ich hatte auch auch schon versucht mit der ESF und Excel eine Lösung zu schaffen, aber da fehlen mir irgendwie Informationen, keine Ahnung wie oder wo gaert die her nimmt, um seine Import Funktion zu füttern.

Was mir heute noch durch den Kopf gibt, war entweder direkt aus der Edomi SQL DB die Infos zu ziehen (dazu müsste man nur wissen, wie die Daten da gespeichert sind), oder eben die ESF-Import Funktion aus dem Edomi Quelltext zu untersuchen.

Muss mal schauen, wie man an das eine oder das andere ran kommt.

Aber vielleicht hat ja Amenophis auch schon ne gute Basis für eine Lösung.

Beste Grüße

Amenophis86

Mein Weg ist sicher nicht der schönste und wurde damals nur Quick and Dirty umgesetzt. Eigentlich müsste ich da nochmal ran aber nutze es kaum noch, dass ich nix mehr gemacht habe:

Ich habe folgende GA-Struktur (siehe Bild GA-Struktur.png)

1. Ich exportiere in Excel alle GAs mit folgender Einstellung (siehe Export.png)
2. Dann nehme ich den Excel Export und jage ihn durch eine Excel Datei, welche die Daten etwas aufbereitet (siehe Umbau.xlsm)
3. Dann muss ich allerdings das Ergebnis nochmal im Editor aufbereiten, weil ich diese Schritte noch nicht automatisiert habe. Ich lösche die Zeilenumbrüche und ersetze die <br> durch neue. Damit wird es etwas lesbarer.
4. Ich kopiere das Ergebnis in eine myUtilsDatei an die entsprechende Stelle der Funktion.
5. Lasse die Funktion ausführen und habe damit alle GA in FHEM und auch bereits einige Änderungen an diesen vorgenommen.

Probleme:
- Es könnte der Prozess weiter automatisiert werden
- Manchmal stimmen die DPT Werte nicht im Detail. Also zB anstelle von dpt1.000 sollte es dpt1.001 sein. Das liegt glaube daran, wenn in der ETS die GA keinen Wert hat oder in der GA manche KO einen anderen Wert. Kann ich nicht genau sagen. Hatte ich auch mal im KNXFU gefragt aber wusste keiner warum.
- Das Script zum einfügen der GA ist inzwischen ziemlich Komplex und hat noch weitere Funktionen. Insgesamt müsste ich da eigentlich mal ran und aufräumen aber hatte weder Zeit noch Lust zu
- Die Dokumentation ist so lala sie oben drüber ;)
- Ich bin kein Programmierer und habe mir alles selbst beigebracht :D

Hier der wichtige Teil aus der myUtil:
Edit:
Der Code war zu lang. Lade gleich die Datei hoch.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

#5
Hier der Code als Datei. Das Ergebnis wird bei den +++++++++++ eingesetzt und diese natürlich ersetzt. Habe einen Teil drin gelassen als Beispiel aber will nicht meine gesamte GA Struktur hier offenlegen ;)

Es gibt in der Datei eigentlich noch weitere Funktionen, habe ich aber raus genommen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Löwenzahn

Okay, cool. Danke

Also Softwerker bin ich auch nicht, aber das ist schon mal ne Menge Code. Leider kann ich das nicht voll überblicken, da ich unterwegs bin und nicht viel bei mir habe.
Habe ich das richtig verstanden, dass du dann deine GA Definition ausschließlich in eine myUtills Sub packst und die Devices damit zur Laufzeit erzeugt werden?
Darüber habe noch gar nicht nachgedacht.
Ich muss mir das Mal unbedingt auf einem Rechner ansehen und nachstellen.
Danke

erwin

Hi,
... ich bin noch fauler  ;D als Amenophis86
Ich hab das schon lange nicht mehr gemacht, aber ich hab nicht programmiert, sonder mit dem Editor notepad++ (free windows DL) gewerkt:
notepad++ ist deswegen wichtig, weil dieser search/replace mit regex kann!
### 1:abschnitt export esf-file
xxx.Balkontür.10/1/13 Balkontür Jal Auf/Ab EIS 1 'Switching' (1 Bit) Low
xxx.Balkontür.10/1/15 Balkontür Jal Stop EIS 1 'Switching' (1 Bit) Low
xxx.Balkontür.10/1/18 Balkontür Jal AbsPosition Uncertain (1 Byte) Low
xxx.Balkontür.10/1/17 Balkontür Jal movestatus EIS 1 'Switching' (1 Bit) Low
xxx.Balkontür.10/1/20 Balkontür Jal positionstatus Uncertain (1 Byte) Low
xxx.Balkontür.10/1/26 Balkontür Jal lowposstatus EIS 1 'Switching' (1 Bit) Low
xxx.Balkontür.10/1/25 Balkontür Jal upposstatus EIS 1 'Switching' (1 Bit) Low
xxx.Balkontür.10/1/32 Balkontür Jal Block EIS 1 'Switching' (1 Bit) Low

Schritt1: SUchen nach xxx.Balkontür. -> Ersetzen durch: define Jal_Balkontuer KNX

define JAL_Balkontuer KNX 10/1/13 Balkontür Jal Auf/Ab EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/15 Balkontür Jal Stop EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/18 Balkontür Jal AbsPosition Uncertain (1 Byte) Low
define JAL_Balkontuer KNX 10/1/17 Balkontür Jal movestatus EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/20 Balkontür Jal positionstatus Uncertain (1 Byte) Low
define JAL_Balkontuer KNX 10/1/26 Balkontür Jal lowposstatus EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/25 Balkontür Jal upposstatus EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/32 Balkontür Jal Block EIS 1 'Switching' (1 Bit) Low

Schritt2: Suchen nach : (define.*?\/[\d]+\/[\d]+)\s?.*? .*? (.*?)\t.*?\r?  -> ersetzen: $1:dpt1:$2                                   
... und zwar mit Param: Reguläre Ausdrücke !!

define JAL_Balkontuer KNX 10/1/13:dpt1:Auf/Ab                                    EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/15:dpt1:Stop                                    EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/18:dpt1:AbsPosition                                    Uncertain (1 Byte) Low
define JAL_Balkontuer KNX 10/1/17:dpt1:movestatus                                    EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/20:dpt1:positionstatus                                    Uncertain (1 Byte) Low
define JAL_Balkontuer KNX 10/1/26:dpt1:lowposstatus                                    EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/25:dpt1:upposstatus                                    EIS 1 'Switching' (1 Bit) Low
define JAL_Balkontuer KNX 10/1/32:dpt1:Block                                    EIS 1 'Switching' (1 Bit) Low


Schritt3: alle Zeilen, die nicht 'EIS 1' enthalten auf dptxyz ändern -> Handarbeit!
Schritt4: alles was nach EIS... kommt : löschen, und file auf UNIX (lf) umstetllen.
Schritt5: import via FHEM-Telnet interface (cut/paste)
Schritt6:  FHEM-cmdline: Attr Jal_.* room Jalouie # für alle bisherigen KNX-defs attribute definieren (room,IODEV,...)
Schritt7: FHEM-save nicht vergessen!
Viele Wege führen zum Ziel....
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Amenophis86

@Löwenzahn:
Fast korrekt. Wer sendet wird ja eh automatisch erstellt, wenn man es nicht deaktiviert hat aber halt mit disable 1. Das Script lasse ich bei Bedarf über einen Dummy ausführen. Dabei wird unterschieden zwischen alle GA "neu anlegen", zB weil die Struktur sich geändert hat oder nur neue GA korrigieren und disable auf 0 setzen.

Dazu kommt, dass ich mit einem anderen Script mir Device erstellen lasse, die zB state und schalten in einem haben. Beispiel Lichter. Das sind dann verschiedene Scripte am Ende, welche nochmal separat ausgeführt werden. Irgendwie ist alles einfach historisch gewachsen, weil ich am Anfang häufig meine GA Struktur geändert habe und dann in FHEM immer händisch nachziehen musste. Inzwischen habe ich eine relativ gute Struktur, dass selten alles neu gemacht werden muss, sondern ich nur die neuen GAs anfassen lasse.

@erwinb
Auch eine gute Idee.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

erwin

Hi nochmal,

ich kenn die edomi SW nicht, aber gibts da eine Möglichkeit KNX-GA's,Namen,dpt,... zu exportieren ?
Evtl. sogar in einem einfacher zu konvertierenden Format als esf?
Alternativ-Methode: KNX-GA Export Group-Adresses aus der ETS, allerdings fehlt da der dpt-Typ! Bei mit sind allerdings ca. 80% dpt1
...schaut beipielhaft so aus:
,"Balkontür", ,"10","1"," "
, ,"Balkontür Jal Auf/Ab","10","1","13"

...mit ganz wenig perl-code könnte man daraus:
define Jal_Balkontuer_AufAb KNX 10/1/13:dpt1
machen...
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

JooNey

Moin zusammen,

na hier ging es ja ab. :)

@erwin: Edomi kann leider nicht exportieren. Das wäre genial.

@Rest: Wenn ich eins kann, dann Excel! :)
Habe mir also mal den Gruppenadressen-Export genommen, und ein Excel-Sheet gebaut, welches mir erstmal voll geholfen hat. Für jede GA wird ein device angelegt, und mit dem richtigen Datentyp versehen. Dabei ist mir aufgefallen, dass n paar Datentypen nicht existieren, aber das ist ja kein Thema.

Ich würde die Excel mal noch etwas anpassen, damit ich sie hochladen kann, aber vllt. hilft sie ja dann auch anderen hier. Wird aber vermutlich erst nach dem Wochenende. Anbei aber mal ein Screenshot, wie das aktuell aussieht.

Beste Grüße

Löwenzahn

Also die Tabelle mach ja einen schlanken Fuss.  8)
Ich denke das die Exportfunktion der ETS erstmal der kleinste gemeinsame Nenner ist.

Von daher....
@ervin:  du kannst Edomi getrost wieder vergessen. ;)

@JooNey: was hast du als Startpunkt genommen? Ein esf oder CSV Export? Wie kommen die GAs da rein, die so aussehen, als wenn sie per "fhem autocreate" reingekommen sind?

Ich finde es übrigens sehr cool das die KNX section mal wieder etwas Leben eingehaucht bekommt und hier wieder was cooles entsteht. Danke euch.

PS: Ich bin echt gespannt auf das Ergebnis, .... aber kein Druck.  :)

JooNey

Hey Löwenzahn,

Basis ist einfach nur der GA Export aus der ETS als CSV. Die Excel hat auch keinerlei Makros, sondern macht alles nur über PQ. Da die "autocreate KNX devices" alle KNX_XXYYZZZ heißen, wobei X, Y und Z die 2 bzw. 3 stelligen GA Gruppenwerte sind, ist das sehr easy. Deshalb auch die mehreren Spalten: create & modify, das dann wie erwin schrieb einfach per Telnet reingeschoben: alles, was schon existiert, meckert, alles was noch nicht existiert meckert, und alles was da ist wird angepasst... Ist in dem Moment zwar mehr "Holzhammer" als das schöne Script von Amenophis, welches da schon sauber die Daten prüft, aber für den Anwendungszweck meinerseits reicht es erstmal.

Theoretisch lässt sich die Tabelle auch aufbohren, sodass man auch die Infos bekommt, die Amenophis hat oder braucht - oder die von Erwin... das ist das schöne an PQ, es ist extrem flexibel, unglaublich schnell, und braucht nur die entsprechende CSV einzulesen - fertig.

Das alles macht die Tabelle aber schon... :D Also kein Grund sich da den Kopf zu zerbrechen... ich muss hier noch n Kundenauftrag fertig machen, sonst krieg ich ärger, danach bau ich die XLSX mal noch etwas um... ;)

VG

erwin

Hi,
das schaut gut aus!
...und sehr oft wird man das nicht brauchen, aber jeder zumindest einmal!
Tip:
Zitateinfach per Telnet reingeschoben: alles, was schon existiert, meckert,
was schon existiert, meckert nicht wenn man statt define -> defmod schreibt! - wird komplett überschrieben!
und: Falls beim import alles schief geht: shutdown-restart OHNE save!
Was ich vor solchen Aktionen auch praktiziere: shutdown - ein backup der fhem.cfg - start fhem
Man kann den devices auch "sprechende Namen" geben. z.b: Kueche_DeckenLampe_schalten... macht sich gut in der GUI statt KNX_0101060.
Diese KNX_aabbccc werden vom autocreate erfunden, weil zu diesem Zeitpunkt nichts bekannt ist, ausser der GA-Addr.
Evtl. auch noch einen Blick ins wiki werfen, das gibts unter KNX-Definitionen-Beispiele einiges....
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

erwin

...und noch 2 Sachen:
ZitatDabei ist mir aufgefallen, dass n paar Datentypen nicht existieren,...
Um welche geht es, bitte spezifizieren, ich bin gerade dabei die KNX.pm zu überarbeiten, wenn ich die genauen specs bekomme, sollte das kein Problem sein....
Zum Thema jede GA ein eigenes FHEM-device:
Ich bin eher für mehrfach GA's pro device - ein Bsp. für eine Lampe:
Ich definiere die GA für xxx.Lampe_schalten und xxx.Lampe_status im einem FHEM-device xxx.Lampe  (mit beiden GA's und als GAD-Name verwende ich schalten und status. Das ist ja das schöne am KNX (im Gegensatz zu anderen Lösungen), dass jeder Aktor ein definiertes Feedback hat!
Damit hab ich in FHEM immer den korrekten Zustand vom xxx.Lampe, egal ob via FHEM oder durch einen KNX-Taster  oder FB oder andere Logik (z.b: Timer/Presence) geschalten. geloggt in der Datenbank wird dann nur das status-GA... Ich verwende meist Floorplan als GUI, da hab ich ein Lampen-symbol an der richtigen stelle, das zeigt den status und ist anklickbar.....(thema: WAF  ;D)
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...