Ankündigung

Einklappen
Keine Ankündigung bisher.

Homeserver Werte einfach in Microsoft SQL speichern

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

    HS/FS Homeserver Werte einfach in Microsoft SQL speichern

    Hi,

    ich habe lange eine einfache Möglichkeit gesucht, um Werte von dem Gira Homeserver in eine Microsoft SQL Datenbank Tabelle zu speichern.
    Es gibt zwar viele "Drittanbieter" Tools die KNX Werte in SQL speichern können, ich möchte Euch aber die einfachste Lösung mal präsentieren die ich nun seit Monaten erfolgreich nutze:

    Powershell Skript auf dem MS SQL Server:
    Code:
    # SQL Modul für Powershell laden
    Import-Module SqlServer
    
    # Werte von Homeserver über Endpoints abrufen
    $Wert1 = Invoke-WebRequest "https://192.168.x.x/endpoints/call?key=CO@wert1&method=get&user=endpointwiteruser&pw=pw" -SkipCertificateCheck | Select-Object content
    $Wert2 = Invoke-WebRequest "https://192.168.x.x/endpoints/call?key=CO@wert2&method=get&user=endpointwiteruser&pw=pw" -SkipCertificateCheck | Select-Object content​
    
    #Werte aus der Webabfrage extrahieren und in andere Variable speichern
    $Wert1 -match '{"value": (?<content>.*)}}}'
    $Wert1value = $matches['content']
    
    $Wert2-match '{"value": (?<content>.*)}}}'
    $Wert2value = $matches['content']
    
    # Wert zur Kontrolle ausgeben (kann entfernt werden)
    $Wert1value
    $Wert2value
    
    #Wert(e) in SQL Datenbank, Tabelle muss schon vorhanden sein mit den Spalten wie unten angegeben ich mach immer noch ne Spalte DatumZeit datetime default getnow() rein
    Invoke-Sqlcmd -Query "USE [Datenbankname] INSERT INTO [dbo].[Tabellenname] ([Wert1],[Wert2]) VALUES ($Wert1value,$Wert2value)" -ConnectionString "Data Source=Servername;Initial Catalog=Datenbankname;Integrated Security=True;ApplicationIntent=ReadOnly"​
    Eventuell ist dies für den einen oder anderen auch nutzbar um diverse Werte in eine Microsoft SQL Datenbank abzulegen.

    Das Skript entweder als geplanter Task mit Powershell7 ausführen.
    Alternativ manuell oder mit einem helper Skript falls man nur was zeitweise protokollieren möchte.

    #2
    Moin,

    klasse, genau das wonach ich gesucht habe Danke für den Input und dein Posting hier.

    Wenn sich die Werte in einer SQL DB befinden, stehen ja quasi alle Möglichkeiten zur Auswertung offen.

    Den Benutzer, den du verwendest - ist es hier ausreichend einen nomalen Benutzer anzulegen mit der Berechtigung Endpunkte -> externer Zugriff?

    Die Requests enden bei mir noch mit "400 - Bad Request". Kann man z.B. für die Abfrage von "wert1" dann einfach den Namen des Kommunikationsobjekts (= Bezeichnung) verwenden? Oder besteht auch die Möglichkeit, sich alle Werte über einen Request aufzulisten, welche abfragbar sind?

    viele Grüße
    Thomas

    Kommentar


      #3
      Hi,

      Danke.
      Ja, der Benutzer im Homeserver muss auf die Endpunkte lesezugriff haben. Wenn es über den Browser passt, der richtige Wert zurück kommt, kommt auch das kleien Skript damit klar. Die korrekten Namen siehst Du im Kommunikationsobjekt -> Endpunkt. Hier ist auch die Hilfe über Endpunkte vom Homeserver recht gut in der Erklärung.

      Je nach typ des Endpunktes (wird in der Gira Hilfe erklärt), kommen natürlich die Daten in unterschiedlicher Form zurück und das Skript muss evtl. etwas angepasst werden. Hier hilft Dir gerne ne KI (ChatGPT, Copilot,...) 😉

      Kommentar


        #4
        Nur aus Interesse (vorsichtig) gefragt: Warum MS SQL Server und nicht InfluxDB für (Meß-) Werte ?

        Kommentar


          #5
          SQL eh da für anderes, Daten gehen in PowerBi.
          Skript kannst Du anpassen auf eigentlich jede Datenbank.

          Kommentar


            #6
            Einen SQL Server gibt es bereit in meinem Ökosystem, bietet sich daher eher an

            RedSP - vielen Dank für die Infos
            Grundsätzlich würde ich mich in Richtung REST-APIs als ziemlich wissend einstufen. Ich scheitere jedoch gerade an den Basics - alle Requests die ich versuche enden mit Code 400 oder 404 (auch im Browser). Bspw. auch dieser hier (User: rest) gibt 404 (not found) aus, habe es bei 2 unterschiedlichen HS getestet, beide mit FW 4.12:

            https://192.168.0.12/endpoints/call?...er=rest&pw=XXX

            Bei der Berechtigung für den Benutzer auf "Endpunkte" ist "Passwort" augewählt, anhand der Response Codes glaube ich nicht dass es an der Berechtigung liegt. Gibt es noch eine Option im Projekt in welcher die REST API noch aktiviert werden muss?

            Das einzige was funktioniert ist die Info-Ausgabe auf https://192.168.0.12/api/

            Danke & Grüße
            Thomas
            Zuletzt geändert von skynetworks; 26.07.2025, 17:57.

            Kommentar


              #7
              Die Doku unter:
              https://partner.gira.com/en/service/...developer.html
              kennst Du?
              Da ist alles drin, auch paar Demos.

              Damit sollte es klappen.

              Kommentar


                #8
                Ah ok - nee, die kannte ich bisher nicht. Schau' ich mir mal an, Danke!

                Kommentar


                  #9
                  Nun klappts... eigentlich war inhaltlich nichts falsch, ich glaube ich hatte einfach zu viele Fehlversuche bzgl. dem Passwort, es wird wohl nicht jedes Sonderzeichen akzeptiert. Bin dann wohl in die Benutzer Sperre gelaufen.

                  Ich werde es so umsetzen, die Logindaten im Header anzugeben (base64) statt in der URL, siehe dem Beispiel hier aus dem Screenshot. Dann sind die Logindaten nicht Bestandteil der URL.

                  Da ergeben sich nun nette Möglichkeiten, z.B. Temperaturüberwachung beim Kunden im Server Rack -> Wert via Powershell auslesen -> wenn Grenzwert überschritten -> per EMail oder MS Teams Nachricht alarmieren
                  You do not have permission to view this gallery.
                  This gallery has 1 photos.

                  Kommentar

                  Lädt...
                  X