Ankündigung

Einklappen
Keine Ankündigung bisher.

Vorstellung: ETS-Gruppenadressen Generator (Blocksystem)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    ETS Vorstellung: ETS-Gruppenadressen Generator (Blocksystem)

    Hallo zusammen,

    ich habe ein bisschen Zeit in die (kostenfreie) automatisierte Erstellung von Gruppenadressendateien zum Import in die ETS investiert. Geholfen hat mir:
    • https://github.com/cpauls/knx-ga-generator (der Code dort ist prima für ein Mittelgruppensystem) und
    • ChatGPT (Modell 4o, mit Abo)
      • Ich habe mir den Code für Python erstellen lassen, was eigentlich auf jedem System lauffähig ist.
      • Ich selbst setze Debian Linux ein und lasse das im Terminal als user (nicht root) laufen.
    Vielleicht können wir in diesem Thread das Thema gemeinsam optimieren. Ich lade den Prompt, den generierten Code, und die Konfigurationsdatei im zweiten Kommentar hoch und zähle bei Versionsänderungen immer um eins hoch. (Bisher waren über 70 Iterationen notwendig, um eine Lösung zu erhalten, die mich erstmal zufrieden stellt.

    Copyright: keins / alles zur freien Verwendung. Auch zur kommerziellen, die aber hoffentlich durch den freien Code obsolet wird.

    Wundert Euch nicht über "Ab/Auf" als Text anstelle "Auf/Ab". Das mache ich, damit 1/0 analog zu "Ein/Aus" ist, kann aber jeder anpassen, wenn einem das nicht passt.

    Gruß

    lopiuh

    Änderungshistorie im Folgebeitrag
    Angehängte Dateien
    Zuletzt geändert von lopiuh; 27.02.2025, 22:18.

    #2
    Dateiendung .py mussten entfernt werden, um sie hochladen zu können. Nach dem Download sollte die Dateien umbenannt werden.

    Updates:

    V95: 05.03.2025 Zentraladressen werden angelegt und die Hauptgruppe am Ende (31...) werden für Messwerte verwendet, Details siehe Forumseintrag
    V89: 01.03.2025 reupload, der Prompttext fehlte​​
    V89: 27.02.2025 Die GAs wurden mittelgruppenübergreifend weiter hochgezählt und nicht mit der neuen Mittelgruppe neu gestartet​​
    V88: 25.02.2025 Spaltenbefüllung war falsch
    V87: 25.02.2025 automatisierte Vergabe des richtigen Datentyps anhand des GA-Textes stark erweitert. Ich lade die yaml und erzeugte csv nicht mehr hoch, da sie durch das Progrmm einfach erzeugt werden können, somit weniger Aufwand und weniger Redundanz. Den Code lade ich nach wievor hoch, da die generierten Ergebnisse aus GPT nicht deterministisch sind und nicht jeder das GPT-o1-Modell verwenden kann.
    V86: 22.02.2025 Manuelle&automatisierte Einstellung des richtigen Datentyps an der GA anhand von Stichwörter im GA-Text​
    V72: 20.02.2025 Este Veröffentlichung im Forum​
    Zuletzt geändert von lopiuh; 05.03.2025, 16:09.

    Kommentar


      #3
      In diesem Kommentar können wir ggf. alte Versionen des Prompts/Generators aufbewahren.
      Zuletzt geändert von lopiuh; 22.02.2025, 11:46.

      Kommentar


        #4
        Also wenn es als Vorlage solch umfangreiche YAMLs benötigt ist in meinen Augen schon was falsch gelaufen beim Design, weil das ist dann ja keine Hilfe mehr.

        Kann man sowas nicht einfach auf Basis zweier simpler Listen machen, einmal ne Gebäude Struktur, dann eine Objektliste und aus beiden dann eben GAs für die ETS, YAMLs für HA und was man alles noch so braucht. Wenn man da erstmal solche yamls gebaut hat, dann ist ne stupide liste an GAs ja wohl gar kein Thema mehr.

        Werden da auch gleich noch DPTs sauber definiert und vergeben an den GAs
        ----------------------------------------------------------------------------------
        "Der Hauptgrund für Stress ist der tägliche Kontakt mit Idioten."
        Albert Einstein

        Kommentar


          #5
          Zitat von gbglace Beitrag anzeigen
          Werden da auch gleich noch DPTs sauber definiert und vergeben an den GAs
          Ich lese das mal als Frage: Wohl eher nicht, in seinem ChatGpt-Prompt wurde ja angegeben "- Central, Unfiltered, Description und DatapointType bleiben immer leer."...


          Zitat von gbglace Beitrag anzeigen
          Also wenn es als Vorlage solch umfangreiche YAMLs benötigt ist in meinen Augen schon was falsch gelaufen beim Design
          Genau das. Da braucht man ja einen YAML-Generator für den GA-Generator...

          Gruß Andreas

          -----------------------------------------------------------
          Immer wieder benötigt: KNX-Grundlagen PDF Englisch, PDF Deutsch oder
          Deutsche Version im KNX-Support.

          Kommentar


            #6
            Zitat von gbglace Beitrag anzeigen
            Also wenn es als Vorlage solch umfangreiche YAMLs benötigt ist in meinen Augen schon was falsch gelaufen beim Design, weil das ist dann ja keine Hilfe mehr.

            Kann man sowas nicht einfach auf Basis zweier simpler Listen machen, einmal ne Gebäude Struktur, dann eine Objektliste und aus beiden dann eben GAs für die ETS, YAMLs für HA und was man alles noch so braucht. Wenn man da erstmal solche yamls gebaut hat, dann ist ne stupide liste an GAs ja wohl gar kein Thema mehr.

            Werden da auch gleich noch DPTs sauber definiert und vergeben an den GAs
            Ja, die YAML schreckt erst mal ab, ist aber einem schnellen Ergebnis geschuldet. Ist ja auch nur ein Spaßprojekt proof of concept (und für mich produktiv), bei dem ich alles offenlege, weil mir alle begegneten "GA-Generator"-Lösungen nicht zielführend waren und ich hoffe, dass es als Anregung taugt.

            it meinem Ansatz (Codegenerierung durch LLM) kann "jeder" seine "eigene" Lösung bauen, das wollte ich mal einfach zur Motivation für andere veröffentlichen. Die Frage nach GA-Generatoren kommt ja häufiger, und ich hatte zunächst nach fertigen Produkten gesucht, anstelle selbst kreativ zu werden.

            Wobei. Das wesentliche in der Konfig-YAML ist jetzt z.B.:

            Mittelgruppen:
            1:
            Name: persönliche Gruppierung
            Räume:

            Bad-OG:
            - 'Umwelt: Tür-Meta'
            - 'Umwelt: Dusch-Sewi'
            - 'Schalten: DeL'
            - 'Schalten: WaL'
            - 'Schalten: NacLi'
            - 'Schalten: Lüfter'
            - 'Rollo: Schieber'​

            Das ist doch schon echt plain, ohne Coderschnickschnack und daraus werden zig GAs generiert. Das finde ich schon toll 😁😁

            ​Wenn "Gebäude Struktur + Objektliste" besser funktioniert, würde ich das vielleicht mal versuchen. Gebäudestruktur hört sich jetzt aber eher komplex an und mir reichen die Räume (ohne strukturierte Etagenzuordnung bspw) Und was wäre in der Objektliste? So wiederverwendbare Dinge wie "Stehlampe", "Präsenzmelder Typ 1"?

            Bei der Stehlampe wollte man aber doch schon den Ort ("Fernseher rechts") angeben wollen oder? Deshalb habe ich mir das gespart und habe hier in der Tat Redundanz. Nicht aber bei den Blöcken. Ich mache erstmal nur die GAs, die ich benötige und kann dann jederzeit erweitern (eine Zeile einfügen, Programm laufen lassen und GAs importieren).

            Meine Geräte sehen momentan erstmal so aus (mehr brauche ich HEUTE nicht, morgen natürlich schon :-) Hab auch erst 260 GAs in Summe.

            Name: Schalten
            Blockgröße: 10
            Elementnamen:
            - E/A
            - RM E/A
            # - DIM
            # - Wert
            # - RM Wert​

            Name: Rollo
            Blockgröße: 15
            Elementnamen:
            - Ab/Auf
            - Stop
            - Höhe
            - RM Höhe
            - RM Richtung
            - RM fährt
            - RM fährt ab
            - RM fährt auf
            - RM unten
            - RM oben​

            Name: Umwelt
            Blockgröße: 10
            Elementnamen:
            - Temp
            - Feuchte
            - Taupunkt
            - Helligkeit

            Gruß und gerne mehr feedback, auch zu den GA-Texten.

            @Gblace: Ich weiß, Du setzt ein Mittelgruppensystem ein. Das hatte ich zunächst mit https://github.com/cpauls/knx-ga-generator anhand Deiner mal veröffentlichten Vorlage umgesetzt, muss jetzt aber auch mit dem Blocksystem Erfahrung sammeln und bau das Projekt in seinem frühen Stadium (35 Geräte) mit allen gesammelten Erfahrungen neu auf. Es kommt auch noch eine Lösung von mir, die aus einer Abhängigkeitsmatrix die Gerätegruppen mit den unterschiedlich Startverzögerungen erstellt, natürlich auch "schnell" mit einer LLM erstellt.

            EDIT: ups, hatte ich ja schon veröffentlicht: https://knx-user-forum.de/forum/%C3%...61#post2019161


            Bin immer noch davon "schockiert", dass die Startreihenfolge darüber entscheidet, ob mein Rollostatus auf dem Meta nach einem Busreset stimmt oder nicht stimmt - und momentan konfiguriere ich viel und hatte schon Reklamationen wegen der falschen Status, also war das <für mich> ein (weiteres) relevantes "KNX-Problem". Und dann ist da noch der Timberwolf und das OpenKNX-Logikmodul, dass eingebunden werden will, seufz ich brauche mehr Zeit🤣🤣🤣

            Gruß lopiuh​
            Zuletzt geändert von lopiuh; 22.02.2025, 11:01.

            Kommentar


              #7
              Ich benutze inzwischen den GA Generator von S-etech.de, den ich inzwischen für mich angepasst habe, teilweisen mit unterschiedlichen Reihenfolgen oder Bezeichnungen für Geräte von unterschiedlichen Herstellern. Für mich hat sich das gerechnet.
              Gruß Florian

              Kommentar


                #8
                Zitat von Beleuchtfix Beitrag anzeigen
                Ich benutze inzwischen den GA Generator von S-etech.de, den ich inzwischen für mich angepasst habe, teilweisen mit unterschiedlichen Reihenfolgen oder Bezeichnungen für Geräte von unterschiedlichen Herstellern. Für mich hat sich das gerechnet.
                Gruß Florian
                oh ja, den habe ich mir leider nur oberflächlich angeguckt, da kommerziell und afaik keine Demo verfügbar. Ansonsten eine tolle Seite mit vielen nützlichen Informationen. Ich denke man verdient mit dem Verkauf so eines Produktes keinen nennenswerten Betrag, dann kann man es auch der Allgemeinheit schenken. Aber nur meine Meinung. Zudem Excel, würg, das ist nun wirklich keine Entwicklungsumgebung. Wenn es noch Libreoffice wäre 😂

                lopiuh

                Kommentar


                  #9
                  Zitat von gbglace Beitrag anzeigen
                  Werden da auch gleich noch DPTs sauber definiert und vergeben an den GAs?

                  Zitat von DirtyHarry Beitrag anzeigen
                  Ich lese das mal als Frage: Wohl eher nicht, in seinem ChatGpt-Prompt wurde ja angegeben "- Central, Unfiltered, Description und DatapointType bleiben immer leer."...
                  Neue Version V86 hochgeladen: automatisierte Einstellung des richtigen Datentyps an der GA anhand von Stichwörter im GA-Text​
                  Zuletzt geändert von lopiuh; 22.02.2025, 17:52.

                  Kommentar


                    #10
                    V89: 27.02.2025 Die GAs wurden mittelgruppenübergreifend weiter hochgezählt und nicht mit der neuen Mittelgruppe neu gestartet​​​
                    V87: 25.02.2025 hochgeladen. Es werden jetzt noch mehr Datentypen automatisiert gesetzt, z.B. erkennt das Programm automatisch "RM" und "Status" GAs und setzt den Datentyp analag der zugehörigen GAs.

                    Ich hätte nicht gedacht, dass mir das automatisierte Setzen der richtigen Datentypen Spaß macht 🤣 Es war kaum Aufwand und chatty hat echt coolen Code dafür generiert.

                    Ich bin immer noch begeistert von den immer weiter fortschreitenden Möglichkeiten zur Codegenerierung. Leider sind die möglichen Abrufe für das o1-Modell auch für die kleine Aboversion begrenzt. Aber ich werde nach wievor neue Versionen mit Erweiterungen hochladen und euch an meinem unserem Tool teilhaben lassen.

                    Gruß

                    lopiuh
                    Zuletzt geändert von lopiuh; 27.02.2025, 22:20.

                    Kommentar


                      #11
                      Hallo zusammen,

                      die Version 95 setzt folgendes um:

                      - Messwerte, die ich nicht verlieren möchte, werden am Ende der Hauptgruppen (beginnend mit 31) und zwar im Mittelgruppensystem aufgenommen. Die sollen in bezug auf die GAs konstant bleiben, damit die Historisierung im Timberwolf nicht gefährdet wird / angepasst werden muss.
                      -Zentraladressen werden angelegt (inkl. Datatype)
                      -Mittelgruppe habe ich (in meiner Konfigurationsdatei) für Räume verwendet
                      -Die Geräte in einem Raum sind im Blocksystem aufgenommen. Die Status-/Rückmeldeadressen (RM) habe ich ans Ende des Blocks gesetzt, damit ich bei Erweiterungen der GAs die RM und die anderen GAs immer voneinander getrennt habe (reine Willkür, gefällt mir besser)

                      Ein bisschen in der Ergebnis-csv aufräumen (löschen) und die files historisieren leistet ein kleines Shell-script:

                      Code:
                      #!/usr/bin/env bash
                      ###############################################
                      # BASH-Verhalten
                      ###############################################
                      #
                      #
                      ### SOLLTE so BLEIBEN (an)
                      #
                      set -o errexit  # (set -e) Bei Fehler abbrechen
                      set -o nounset  # (set -u) bei uninitialisierten Variablen abbrechen
                      set -o pipefail # Wenn ein Befehl in einer Pipe false würde sonst nicht abgebrochen, wichtig
                                                      #  aber dran denken, wenn ein Befehl in der pipe vorzeitig abbricht, dann gibts auch einen Fehler (grep -q macht das z. B.)
                      # Globbing:
                      #  https://blogs.gentoo.org/mgorny/2014/09/05/bash-pitfalls-globbing-everywhere/
                      shopt -s extglob # sonst funktioniert der trim nicht
                      if [ "" ]; then
                          echo "2Do globbing wieder einschalten"
                      else
                          shopt -s nullglob # enable
                          #shopt -s failglob
                          #set -o noglob
                      fi
                      #
                      ### kann variiert werden:
                      #
                      #>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                      #            set -o xtrace #----------> Anschalten <----------- (set -x) echo jeder Zeile
                      #<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                      #trap read debug
                      #trap "echo hit return;read x" DEBUG
                      #
                      clear
                      trap "echo FEHLER" EXIT
                      _filename=GAs_$(date +%s)
                      _output=./output/${_filename}.csv
                      _config=config.yaml
                      python3 ./code.py --config $_config --output $_output
                      cp $_output ${_output}_raw
                      # GPT: konvertier mal den Suchstring "TrockenKeller Zu-/Abluft E/A" einer Datei im Format charset=iso-8859-1 damit ich in sed danach suchen kann
                       sed -i '/\x54\x72\x6f\x63\x6b\x65\x6e\x4b\x65\x6c\x6c\x65\x72\x20\x5a\x75\x2d\x2f\x41\x62\x6c\x75\x66\x74\x20\x45\x2f\x41/d' $_output
                       sed -i "/dummy/d" $_output
                      
                      _GAs="31/0/60 31/0/65 31/0/95 31/0/110 31/0/115 31/0/125 31/0/130 31/0/135 31/0/140"
                      _GAs+=" 31/1/60 31/1/65 31/1/95 31/1/110 31/1/115 31/1/125 31/1/130 31/1/135 31/1/140"
                      _GAs+=" 31/2/10 31/2/60 31/2/65 31/2/95 31/2/110 31/2/115 31/2/125 31/2/130 31/2/135 31/2/140"
                      _GAs+=" 31/3/10 31/3/65 31/3/70 31/3/75 31/3/80 31/3/95 31/3/110 31/3/115 31/3/120 31/3/125 31/3/130 31/3/135 31/3/140 31/3/160"
                      _GAs+=" 31/4/10 31/4/70 31/4/75 31/4/80 31/4/120 31/4/160"
                      _GAs="${_GAs//\//\\/}"
                      for _GA in $_GAs; do
                          _GA="\"${_GA}\""
                          if ! grep -q $_GA $_output; then
                             echo "GA: $_GA nicht vorhanden"
                             exit
                          fi
                          sed -i "/$_GA/d" $_output
                      done;
                      
                      cp -a $_config ./config-bak/${_filename}${_config}
                      echo "Erfolgreich beendet (really)"
                      ​
                      Angehängte Dateien
                      Zuletzt geändert von lopiuh; 05.03.2025, 16:11.

                      Kommentar

                      Lädt...
                      X