HTTP-Push in Firmware 6.x



  • Guten Tag

    Seit dem Update auf Version 6 hat bei mir der HTTP-Push auf Palamoa nicht mehr funktioniert. Heute habe ich herausgefunden, wieso.
    2022-11-30_10h38_30.png

    Um etws flexibler zu sein, hatte ich "$1" in der Service URL für die "Variable 1" verwendet. Dies wird offenbar nicht mehr unterstützt. "Test" ergab einen 404 vom Server.

    Lösung: ich hab das $1 direkt durch den API-Key ersetzt und es funktioniert wieder.

    Natürlich habe ich nach 2 Minuten noch ein 2. Mal getestet indem ich auf "Test" geklickt habe und festgestellt, dass für alle Logeinträge immer die Zeit des letzten Ereignisses angezeigt wird.
    2022-11-30_10h35_40.png

    Bei der Unterstützung von Variablen in der Service-URL weiss ich nicht, ob dies überhaupt ein Bug ist. Die Zietanzeigt bei den Log-Einträgen scheint mir aber nicht so gewollt.

    Heute getestet mit 6.0.10.1, zuvor mit 6.0.7.1


  • Administrators

    Hallo Marco,

    das Ersetzen von "$1" wird nicht mehr unterstützt, weil die Templates jetzt flexibler sind und die Aufgabe übernehmen können. Das integrierte Template palamoa.tpl enthält z.B. folgende Zeile:

    {%option url%}http://palamoa.de/json/{{actiontab_var1}}{%endoption-%}
    

    Damit wird eine Standard-URL gesetzt, die von der ersten Variable abhängt. Wenn man in den Einstellungen der Aktion keine andere URL angibt, dann wird die URL von diesem Template automatisch generiert.

    Bei den Logeinträgen nach Drücken von Test sollten immer nur die letzten Einträge stehen. Die haben dann auch die selbe oder eine ähnliche Zeit. In dem Screenshot ist merkwürdig, dass die Nachricht mit Push zweimal auftaucht. Sieht das auch so aus, wenn man die Logeinträge in den Einstellungen unter Syslog anzeigt? Hier werden die letzten 8 Nachrichten angezeigt.



  • Hallo Tim

    Vielen Dank für die schnelle Antwort.
    Ich verwende für Palamoa eben ein custom template das auch den Status mit überträgt. Mal sehen, ob ich die Originaldatei noch finde (sie ist wahrscheinlich auch hier im Forum, also kein Problem 🙂 ) Ich werde mein Template also entsprechend überarbeiten.

    Das mit dem Logeintrag habe ich nochmals ausprobiert... Ich bekomme jetzt fast immer 2 Einträge (Configuration x saved und den http request).
    Ausser, wenn ich einen Test auslöse, wenn gerade etwas anderes verarbeitet wird:
    2022-11-30_14h20_29.png

    Kann es sein, dass einfach die Log-Einträge von den letzten x Sekunden angezeigt werden? Vom Timing her könnte es in der Original-Nachricht stimmen da ich alle 5 Minuten die Daten an palamoa sende.


  • Administrators

    Hallo Marco,
    wenn das Template noch auf dem Querx ist, dann kann man es sich auch anzeigen lassen. Auf der Firmware-Seite gibt es unten die Liste der Dateien und man kann sie editieren. Auf der Konfigurationsseite der Aktion gibt es neben der Auswahl des Templates auch einen Editier-Button, mit dem man auch integrierte Templates sehen kann.

    Bei dem Test-Knopf werden immer die Log-Einträge seit Start des Tests angezeigt. Dabei können auch Einträge sein, die eigentlich unabhängig vom Test sind.



  • @tim said in HTTP-Push in Firmware 6.x:

    {%option url%}http://palamoa.de/json/{{actiontab_var1}}{%endoption-%}

    Mit dieser Information habe ich ich "mein" Template für palamoa jetzt angepasst:

    {%option url%}http://palamoa.de/json/{{actiontab_var1}}{%endoption-%}
    {%option method%}POST{%endoption-%}
    {%option num_variables%}1{%endoption-%}
    {%option title1%}API-Key{%endoption-%}
    add=/tpl/j/p_thpdp.tpl
    
    Content-Type: application/json; charset=utf-8
    {# #}
    {
        "device_name":   "{{hostname}}",
        "{{sensortab_name.0}}": 
        {
          "unit":     "{{sensortab_unit.0}}",
          "color":     "#5F8AFF",
          "label":     "{{sensortab_name.0}}",
          "value":     "{{sensortab_value.0}}"
        },
        "{{sensortab_name.1}}": 
        {
          "unit":     "{{sensortab_unit.1}}",
          "color":     "#32d08e",
          "label":     "{{sensortab_name.1}}",
          "value":     "{{sensortab_value.1}}"
        },
        "{{sensortab_name.2}}": 
        {
          "unit":     "{{sensortab_unit.2}}",
          "color":     "#e86161",
          "label":     "{{sensortab_name.2}}",
          "value":     "{{sensortab_value.2}}"
        },
        "{{sensortab_name.3}}": 
        {
          "unit":     "{{sensortab_unit.3}}",
          "color":     "#2222F0",
          "label":     "{{sensortab_name.3}}",
          "value":     "{{sensortab_value.3}}"
        },
    	"{{sensortab_name.0}}_Status": 
        {
          "unit":     "Status",
          "color":     "#5F8AFF",
          "label":     "{{sensortab_name.0}}_Status",
          "value":     "{{sensortab_status.0}}"
        },
        "{{sensortab_name.1}}_Status": 
        {
          "unit":     "Status",
          "color":     "#32d08e",
          "label":     "{{sensortab_name.1}}_Status",
          "value":     "{{sensortab_status.1}}"
        },
        "{{sensortab_name.2}}_Status": 
        {
          "unit":     "status",
          "color":     "#e86161",
          "label":     "{{sensortab_name.2}}_Status",
          "value":     "{{sensortab_status.2}}"
        },
        "{{sensortab_name.3}}_Status": 
        {
          "unit":     "Status",
          "color":     "#2222F0",
          "label":     "{{sensortab_name.3}}_Status",
          "value":     "{{sensortab_status.3}}"
        }
      }
    

    So funktioniert alles wieder wie bisher und erst noch schöner 🙂

    Was ich festgestellt habe ist, dass jetzt im Syslog die url nicht mehr angezeigt wird. Solange ich nur einen http push habe ist das kein Thema, könnte aber bei mehreren pushes schnell unübersichtlich werden.

    2022-11-30_15h00_05.png
    Dafür kann ich den Screenshot davon jetzt posten ohne den API-Key zuerst verschwinden lassen zu müssen.


  • Administrators

    Die Zeile add=... ist eigentlich nicht Teil des Templates und müsste dann noch vor den Optionen sein. Sie wird aber nur benötigt, wenn man das Template als Datei hochladen will. Wenn man das Template direkt in der Weboberfläche editiert, dann wird diese Zeile nicht benötigt.

    Guter Hinweis, dass bei den Nachrichten die URL nicht mehr auftaucht.

    Man könnte den API-Key bei Palamoa auch als HTTP-Header übertragen, damit er nicht mehr Teil der URL ist.



  • @tim said in HTTP-Push in Firmware 6.x:

    Man könnte den API-Key bei Palamoa auch als HTTP-Header übertragen, damit er nicht mehr Teil der URL ist.

    Das ist ein guter Hinweis. Wobei ich in der Doku keine Möglichkeit sehe, custom header zu setzen.
    Aber Palamoa bietet ja auch die Möglichkeit, den Key ins JSON zu packen... das muss ich mal ausprobieren.

    A few minutes later...
    Cool, es hat funktioniert!

    {%option url%}http://palamoa.de/json/{%endoption-%}
    {%option method%}POST{%endoption-%}
    {%option num_variables%}1{%endoption-%}
    {%option title1%}API-Key{%endoption-%}
    Content-Type: application/json; charset=utf-8
    {# #}
    {
    "apikey": "{{actiontab_var1}}",
    "device_name":   "{{hostname}}",
    "{{sensortab_name.0}}": 
    {
    "unit":     "{{sensortab_unit.0}}",
    

    Jetzt ist der API-Key schön im JSON verpackt...
    Achja, in der Doku auf palamoa.de fehlen die Anführungszeichen um "apikey". Ohne die Danführungszeichen gibt es nen http error 400 vom palamoa Server.
    Screenshot von palamoa.de


  • Administrators

    Eigene Header können einfach am Anfang des Templates nach den Optionen stehen. Die Zeile "{# #}" ist ein Kommentar, der nicht übertragen wird. Stattdessen ist hier eine leere Zeile, die bei HTTP die Header von dem Inhalt trennt. In dem Template gibt es bereits den Header "Content-Type". Hier ist ein Beispiel-Template, das den API-Key für Palamoa als Header überträgt:

    {%escape json-%}
    {%option method%}POST{%endoption-%}
    {%option url%}http://palamoa.de/json/{%endoption-%}
    {%option num_variables%}1{%endoption-%}
    {%option title1%}API-Key{%endoption-%}
    Content-Type: application/json; charset=utf-8
    Apikey: {{actiontab_var1}}
    {# #}
    {
    "device_name": "{{hostname}}",
    "temperature": {"label": "{{sensortab_name.0}}","value": "{{sensortab_value.0}}", "unit":"{{sensortab_unit.0}}", "color": "{{sensortab_chart_color_html.0}}"}
    }
    

    Danke für den Hinweis zu den Anführungszeichen.


Log in to reply