Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX to Oracle XE DB

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

    KNX to Oracle XE DB

    Hallo Zusammen!

    Ich bin gerade auf der Suche nach einem Konzept wie ich meinen bestehenden KNX Bus mit einer bestehenden Oracle XE Datenbank verbinden kann.
    Wie könnte man man das am Besten angehen?

    Ich haben einen IP - Router von MDT und auch die Oracle - DB läuft bereits.

    In die Datenbank möchte ich gerne alle anfallenden Telegamme schreiben und dort mittels Apex in einer WebGUI auswerten.
    - Zimmer Temperaturen
    - Aussentemperaturen
    - Temperatur Wächter: Falls die Temperatur über Nacht unter null grad fällt
    - Windgeschwindigkeiten
    - CO2 Gehalt, Raumfeuchte
    - Lichtverhältnisse
    usw.

    In Schritt zwei möchte ich dann auch wieder aus der Datenbank auf den Bus schreiben.

    Google hat mir bereits einige Python Projekte vorgeschlagen, aber ich bin mir nicht sicher ob das die richtige Wahl ist.
    Im Prinzip soll das Interface möglichst einfach gehalten sein.
    - Alle Telegamme weiterleiten an DB
    - Aufrufe aus der DB auf den Bus übertragen

    Ich würde mich freuen, wenn jemand der bereits mit Bus Listenern experimentiert hat, seine Erfahrungen teilen würde.

    LG Michael

    #2
    Meiner Meinung nach brauchst du nur den EIBd oder KNXd laufen haben und dann einfach alles was über die Gruppenadressen kommt in die DB schreiben.
    Wenn es in Python auch Schnittstellen für den KNX Bus gibt - ist das auch ok.
    Dir ist ja egal wie die Werte in die DB kommen,...

    Kommentar


      #3
      Danke für deine Antwort. Soweit ich weiß, wird EIBd nicht mehr aktiv weiter entwickelt.
      Also eher KNXd... Leider bin ich Linux technisch noch blutiger Anfänger.

      Ich habe vergeblich versucht eine Anleitung für die Installation von knxd auf CentOs 7 zu finden.

      Hast du, oder jemand anders damit Erfahrung?

      lg

      Kommentar


        #4
        Und was ist am eibd dann so schlecht? Es läuft doch. Evtl kannst Du Dich hier bedienen: http://www.knx-home.net/wiki/index.p...d_installieren
        Ist zwar für Centos 6.5 aber für die grobe Richtung sollte es reichen.

        Kommentar


          #5
          Danke für den Link!

          Ich habe ja nicht gesagt, dass der eibd schlecht ist ;-)

          Kommentar


            #6
            Die Anleitung von Micha ist Top - damit schaffst du das auch als Linux Neuling

            Kommentar


              #7
              So... Als erstes habe ich jetzt trotzdem den knxd versucht. Der Grund dafür war ein relativ einfacher:

              Auf github gibt es nämlich ein Installscript, das auf Anhieb durch lief und den knxDeamon installierte.
              https://github.com/Race666/install-k...nxd_systemd.sh

              Aktuell versuche ich gerade das richtige Set an Start Parametern für den knxd zu finden. Hat damit jemand Erfahrungen?

              Bzw. gibt es eine Möglichkeit dass der knxd eingehende Telegramme in die Commandline schreibt. Damit ich überprüfen kann ob er überhaupt etwas empfangt?

              So quasi einen mini Busmonitor?
              lg Michael


              Kommentar


                #8
                das Github Projekt ist sehr gut dukumentiert

                Debugging et al.

                Use -t 0xffc -f 9 if you want to watch in excruciating detail what knxd is doing.

                There are two ways to monitor bus messages with knxtool.
                • The "vbusmonitor" modes hook into the router and get a copy of every message.

                  This is probably the mode you want.
                • The "busmonitor" modes detach your physical interface and send every bus message to the monitor.

                  This mode is disruptive: the interface will not participate in routing KNX messages while you're monitoring it. Currently, the only way to tell knxd which interface you want to affect is to add the -N option in front of every interface you do not want to monitor.

                Kommentar


                  #9
                  Langsam, aber es geht voran... :-)

                  1) Meine aktuell config für den knxd (/etc/default/knxd) lautet:

                  KNXD_OPTIONS="--eibaddr=1.1.225 --client-addrs=1.1.224:1 -t1023 -d -T -R -S -i --listen-local=/tmp/knx -b ipt:10.0.0.1"

                  2) Start des vbusmonitors liefert folgenden Output: (knxtool vbusmonitor1 ip:localhost) --> Bild 1

                  So wie es aussieht empfangt der deamon meine Bus Telegramme, aber wie bekomme ich die nun in die Datenbank?
                  Und in welchem Format...? HEX oder schon in geparsten Strings?

                  Ich wäre dankbar für Hilfe...
                  lg Michael
                  You do not have permission to view this gallery.
                  This gallery has 1 photos.

                  Kommentar


                    #10
                    Zitat von knxmi Beitrag anzeigen
                    Und in welchem Format...? HEX oder schon in geparsten Strings?
                    Ich würde sie vor dem Speichern parsen und dann nur den benötigten Inhalt des Telegramms speichern. Begründung: So muss nur einmal geparst werden. Speicherst Du die Telegramme als Hex-Werte musst Du bei jeder Auswertung parsen. Rufst Du fünf Mal die gleiche Auswertung auf werden die Telegramme fünf Mal geparst (sofern Du keinen Cache verwendest). Die Verwendung bereits geparster Daten dürfte darüberhinaus schneller sein. Das dürfte - je nachdem auf was für einer HW Deine Datenbank läuft - bei umfangreicheren Auswertungen relevant werden.

                    Kommentar


                      #11
                      Gute Idee, und wie würdest du das Telegramm parsen? Kennst du ein Tool, Script oder zumindest eine Anleitung?

                      Bzw wie kriege ich die Inhalte in die Datenbank?

                      Kommentar


                        #12
                        Ist es möglich mit dem eibd/knxd die eingehenden Rohdaten zu parsen und diese als String weiter zu verarbeiten bzw. im vbusmonitor auszugeben?
                        ​​​​
                        Zuletzt geändert von knxmi; 09.05.2017, 22:04.

                        Kommentar


                          #13
                          Vorschlag für eine Vorgehensweise:
                          • In der Doku vom knxd nachschauen, ob der die Telegramme nicht gleich in lesbarer Form ausgeben kann
                          • Rollierende Logfiles mit den Telegrammen erstellen
                          • Mit der Skriptsprache Deines Vertrauens regelmäßig die Logfiles für den Datenbankimport vorbereiten
                          • Die Daten in die Datenbank importieren. Entweder per INSERT-Statements oder (wäre mein bevorzugter Weg) als bulk import der Datei. Das Datenbankschema dürfte ausreichend einfach dafür sein. Foreign keys oder ähnliches würde ich nicht erwarten. Ach ja, wie hast Du das Schema geplant? Nachtrag: Willst Du tatsächlich alle Telegramme (komplett?) speichern wie im Eingangspost geschrieben oder nur die darin gesendeten Werte?


                          Wie häufig "regelmäßig" ist, kommt auf Deine Anforderungen und Systemumgebung an. Willst Du die Daten sofort in der WebGUI sehen oder kann auch mal eine halbe Stunde vergehen bis die Daten sichtbar sind? Oder auch ein Tag? Ist Deine Datenbank 24/7 verfügbar oder wird der Server ab und zu abgeschaltet? Wie sieht es aus wenn Du drei Wochen im Urlaub bist?

                          Zu den Auswertungen: Wie viele User greifen darauf zu? Benötigst Du evtl. eine Vorab-Aggregierung? In welchem Intervall sollen die Werte gespeichert werden? Einmal pro Minute, alle fünf Minuten, jede halbe Stunde? Mit was für einer Historie?


                          Generell stellt sich mir jedoch die Frage warum Du das Rad neu erfinden willst. Es gibt doch genügend Lösungen die genau das machen was Du willst. Bspw. hat OpenHAB eine Datenbank-Anbindung und kann Werte persistieren. Eventuell kommst Du mit solchen Lösungen schneller ans Ziel.
                          Zuletzt geändert von Steilhanggaertner; 10.05.2017, 21:04. Grund: Nachtrag beim vierten Punkt der Aufzählung hinzugefügt.

                          Kommentar


                            #14
                            Hast Du Dir mal EDOMI angeschaut? Ist zwar mySQL-basierend, aber von diesem Punkt aus dürfte es relativ einfach sein zu Oracle zu konvertieren (wenn's denn unbedingt sein muss).
                            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                            Kommentar


                              #15
                              Hallo!

                              Die knxd - Doku habe ich mir durchgeschaut und konnte keinen Hinweis auf einen DPT Parser oder Decoder finden. Bitte korrigiert mich!! In meiner Suche fand ich aber jede Menge Tools (python, java und sogar js) auf github die sich mit der decodier Thematik beschäftigen. Teilweise scheinen sie nicht ganz fertig zu sein. Schaut halt so aus...

                              Ich geb dir vollkommen recht, ich möchte das Rad nicht neu erfinden. Ich dachte nur, es kann doch nicht so schwer sein die Daten von knxd an ein anderes system weiterzuleiten. Es ist doch schwer

                              Das DPT decoding macht mir einen Strich durch die Rechnung. Das möchte ich auf keinen Fall neu erfinden.

                              Zu Edomi: Ich habe sogar schon eine funktionierende Version in einer VM installiert. Mit Edomi spiele ich gerade nebenbei rum und es ist mein absuluter Favorit einer fertigen Lösung. Openhub möchte ich auch noch testen. Aber wie gesagt ich probiere noch aus und bin noch auf der Suche nach meiner Lösung. Aus beruflicher Sicht bewege ich mich sehr sicher im Oracle Umfeld. Linux war bis vor einer Woche überhaupt nicht meine Welt. Aber es wird langsam

                              Heute bin ich auf xknx gestoßen und das sieht für mein Vorhaben wirklich gut aus. Es hat einen eigenen Buslistener und ist python basiert. (Python ist auch noch Neuland für mich) http://xknx.io/

                              Z.B. Initialisiert wird xknx folgendermaßen:

                              Code:
                              #!/usr/bin/python3
                              from xknx import XKNX,Config
                              import time
                              def telegram_received_callback( xknx, device, telegram):
                                  print("Callback received from {0}".format(device.name))
                              
                              xknx = XKNX()
                              Config(xknx).read("/home/software/xknx-master/xknx.yaml")
                              xknx.start( daemon_mode=True, telegram_received_callback = telegram_received_callback )

                              Im Abschnitt telegram_received_callback könnte ich meine inserts einhängen. Derzeit schlägt aber genau diese Initialisierung noch fehl :-/

                              Code:
                              KNXD-01-DEV:/home/software/xknx-master# python3 example_daemon.py
                              Searching on lo / 127.0.0.1
                              Traceback (most recent call last):
                                File "example_daemon.py", line 11, in <module>
                                  xknx = XKNX()
                                File "/home/software/xknx-master/xknx/xknx.py", line 37, in __init__
                                  telegram_received_callback=telegram_received_callback)
                                File "/home/software/xknx-master/xknx/xknx.py", line 58, in start
                                  self.loop.run_until_complete(task)
                                File "/usr/lib/python3.4/asyncio/base_events.py", line 276, in run_until_complete
                                  return future.result()
                                File "/usr/lib/python3.4/asyncio/futures.py", line 277, in result
                                  raise self._exception
                                File "/usr/lib/python3.4/asyncio/tasks.py", line 237, in _step
                                  result = next(coro)
                                File "/home/software/xknx-master/xknx/xknx.py", line 69, in async_start
                                  yield from self.knxip_interface.start()
                                File "/home/software/xknx-master/xknx/io/async/knxip_interface.py", line 22, in start
                                  yield from gatewayscanner.async_start()
                                File "/home/software/xknx-master/xknx/io/async/gateway_scanner.py", line 46, in async_start
                                  yield from self.send_search_requests()
                                File "/home/software/xknx-master/xknx/io/async/gateway_scanner.py", line 65, in send_search_requests
                                  yield from self.search_interface(interface, ip_addr)
                                File "/home/software/xknx-master/xknx/io/async/gateway_scanner.py", line 82, in search_interface
                                  yield from udpclient.connect()
                                File "/home/software/xknx-master/xknx/io/async/udp_client.py", line 145, in connect
                                  lambda: udp_client_factory, sock=sock)
                              TypeError: create_datagram_endpoint() got an unexpected keyword argument 'sock'
                              Also falls jemand in python gut ist, oder sich mit xknx auskennt...





                              Kommentar

                              Lädt...
                              X