Virtueller HTTP Eingang mit dynamischer URL

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • mpeyer
    Smart Home'r
    • 29.11.2017
    • 52

    Virtueller HTTP Eingang mit dynamischer URL

    Hallo zusammen
    Ich will eigentlich "nur" folgendes: den Maximalwert einer Temperatur der letzten 10 Tage. Und dies "gleitend" d.H. heute will ich den Max-Wert zwischen 14.10. und 24.10. Morgen will ich ihn zwischen 15.10. und 25.10. usw. Also ähnlich dem Baustein "Gleitender Mittelwert" müsste ich vom Baustein "MinMax Zeitraum" eine gleitende variante haben. Dies entspräche genau diesem Feature Request: https://loxfeedback.uservoice.com/fo...itende-min-max gevoted habe ich da - mich erstaunt, dass es da nicht mehr Votes dafür gibt - wird das so selten gebraucht?
    Wie auch immer, ich habe nun keine Zeit darauf zu warten, bis Loxone dies vielleicht irgendwann mal implementiert. Daher versuche ich folgendes:
    Die Temperatur-Werte schreibe ich via Node-Red in eine InfluxDB. Von dort kann ich den Max-Wert in einem Zeitraum via Query auslesen. Z.B. so:
    Code:
    http://<influxDbIP>/query?pretty=true&db=heatpump&q=SELECT max("Warmwasser-Ist") FROM "temperatures" WHERE time >= '2018-10-14T08:30:00Z'​
    ​​​​​​Ihr seht schon - im Query schicke ich das Datum mit "jetzt - 10 Tage".
    Nun, dieses Query könnte ich ja so als virtueller http Eingang in der Config verwenden. Doch sollte das Datum natürlich dynamisch erstellt und in der URL eingesetzt werden. Gibts da irgend ne Möglichkeit in der Config? Wenn nicht, gibts ein Loxberry Plugin um sowas zu erreichen?
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11217

    #2
    Als "Datenbankmensch" - und wenn die Intelligenz sowieso schon ausgelagert ist - würde ich das anders machen, und die Zeit direkt in der Query die Datenbank berechnen lassen.

    Ich kenne die Funktionen von Influx nicht - laut Google müsste in Influx sowas gehen:
    SELECT max("Warmwasser-Ist") FROM "temperatures" WHERE time >= NOW()-1w

    (Syntax ggf. anpassen, aber von der Idee her)

    PS: Du wolltest 10 Tage, dann wohl SELECT max("Warmwasser-Ist") FROM "temperatures" WHERE time >= NOW()-10d

    NOW() und das Rechnen mit Zeit in der Query sind datenbankspezifisch. Der SQL Server will da beispielsweise GETDATE().
    Zuletzt geändert von Christian Fenzl; 24.10.2018, 09:05.
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • mpeyer
      Smart Home'r
      • 29.11.2017
      • 52

      #3
      Hey cool, das funktioniert! Besten Dank Christian! Ich hatte danach gesucht, aber es irgendwie nicht gefunden... dann muss ich mich nun nur noch mit der Syntax für das Auslesen mittels HTTP Eingang Befehlen auseindersetzen - das hab ich nämlich noch nie gemacht ;-)

      Kommentar

    • mpeyer
      Smart Home'r
      • 29.11.2017
      • 52

      #4
      Aber noch interessehalber zur Klärung: dynamisch die URL zusammenbasteln für virtuelle HTTP Eingengänge in der Config geht nicht, oder?
      kann das jemand bestätigen?

      Kommentar

      • Christian Fenzl
        Lebende Foren Legende
        • 31.08.2015
        • 11217

        #5
        JA SICHER, alles ist möglich! (Zitat Loxone Marketing )
        Realität: JNJNEIN.

        Ein öfter schon gelesener Workaround (sehr grauslich):
        • Du kannst den Text, oder die komplette URL für einen Virtuellen Ausgangs-Befehl (nicht Virt. HTTP Eingang!) per Status-Baustein zusammensetzen. Das hat Romildo sehr gut beschrieben: https://www.loxforum.com/forum/germa...5831#post65831
        • Dieser virtuelle Ausgangsbefehl kann aber selbst keine Befehlserkennung, deswegen verwendet man im Befehl "HTTP-Antwort speichern" und erzeugt auf der Miniserver-SD die Antwort als Textfile.
        • Dann weiter, man erzeugt einen virtuellen HTTP-Eingang, und fragt http://localhost/datei.txt per Webrequest ab und kann dann die Befehlserkennung verwenden.

        Alles in allem ein echt grauenhaftes Szenario, wo ich schreien könnte mangels einer vernünftigen Schnittstelle.

        Mit LoxBerry würde ich das gleiche mit dem Any-Plugin lösen:
        • Per Status-Baustein den Command zusammensetzen und per virtuellem Ausgang (TCP) ans Any-Plugin schicken.
        • Im Command fürs Any-Plugin würde ich curl aufrufen mit dem http-Request, oder irgendein Script, dass die Daten zurückliefert.
        • Das Any-Plugin schickt den Output von curl (oder Script) per UDP zurück an den Miniserver, wo du dann Befehlserkennung machen kannst.
        Damit ist zwar nochmal eine Schnittstelle - der LoxBerry - dazwischen, jedoch kann ich auf diese Weise
        1. Jegliche Schreibzugriffe auf die MS-SD-Karte sparen
        2. Selbst per Trigger bestimmen, wann Daten abgerufen werden sollen, und nicht stupid mit einem fest eingestellten Intervall im Virt. HTTP-Eingang


        Was deinen konrekten Use-Case mit der Zeit angeht, ist das auch noch ein Gebastel in Loxone, aus Tag, Monat, Jahr, Stunde, Minute einen ISO-Timestamp zu erstellen. Aber das ist dann auch schon egal.

        lg, Christian
        Zuletzt geändert von Christian Fenzl; 24.10.2018, 12:30.
        Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

        Kommentar


        • mpeyer
          mpeyer kommentierte
          Kommentar bearbeiten
          *würg*... das ist ja wirklich ein ganz grausliger Workaround (der erste mittels Textfile)! Da würd ich definitiv die Variante via LoxBerry vorziehen. Danke für diese Hints! Zum Glück ist ja mein konkreter Use-Case wie in deiner ersten Antwort mit statischer URL lösbar. Daran mach ich mich jetzt.
      Lädt...