Seite 1 von 1

[V4.5 IP3] Custom Logik "REST API gesuchter Wert nicht gefunden"

Verfasst: Mi Dez 25, 2024 5:27 pm
von ms20de
Hallo Zusammen,

mein Problem ist, was ich tun kann, wenn ich über die HTTP-API eine Schnittstelle abfrage, die JSON-Daten zurückgibt, jedoch nicht immer alle Schlüssel vorhanden sind. Ich möchte eine Aktion auslösen, wenn ein bestimmter Schlüssel fehlt.

Konkretes Beispiel: Ich möchte die NINA API abfragen und eine aktive Warnung in der Visualisierung anzeigen. Wenn eine Warnung aufgehoben wird, könnte es eine Entwarnung geben, die jedoch ebenfalls aus dem JSON verschwindet. Stattdessen wird nur noch ein leeres Array von der API zurückgegeben. Wie kann ich anzeigen, dass es keine Warnung mehr gibt, anstatt dass der letzte Text bestehen bleibt?

Meine Lösung ist, dass die Logik mit zwei Eingängen mit der HTTP-API verbunden wird, einen der die optionale Warnmeldung enthält und einer der immer aufgerufen wird wenn die Abfrage ausgeführt wurde. Beide Eingänge Triggern die Logik und es wird überprüft welcher Eingang die Logik gestartet hat, um die Entscheidungen zu treffen: Traf eine Warnmeldung ein und danach kann die Info dass die Abfrage lief → Warnmeldung weitergeben. Keine Warnmeldung vorher und die Abfrage wurde ausgeführt → Konstanten Text weitergeben, den man in der VISU in den Darstellungsregeln mappen kann.


Bild

Bild

Das Status-Objekt "request warning occurred" benutze ich aktuell nur als Trigger dass die Abfrage gelaufen ist und der Wert wird ignoriert. Man könnte das noch ausbauen, dass dann eine weitere Meldung angezeigt wird, dass die Warnungen nicht abgefragt werden konnten.

Code: Alles auswählen

{
    
    "Level": [
        
        // Input Level
        ["$in_current_warning","string,64", ""],
        ["$in_request_run","bool",false],

        // Output Level
        ["$out_warning","string,64", ""],

        // Internal Level
        ["$is_triggered_by_str","bool",false],
        ["$was_triggered_by_str","bool",false],
        ["$is_triggered_by_run","bool",false],

        // Constants
        ["$const_no_warning", "string", "all good"]
    ],
    "Input": [
        ["Current Warning", "", "$in_current_warning", "a"],
        ["Request Run", "", "$in_request_run", "a"]
    ],
    "Output": [
        ["Warning", "", "$out_warning", "a"]
    ],
  
    "Module": [
      [ "Triggered", "$in_current_warning", "$is_triggered_by_str" ],
      [ "Triggered", "$in_request_run", "$is_triggered_by_run" ],
      
      
      // str triggered, set str was triggered to true and break
      ["Latch","$true","$was_triggered_by_str","$is_triggered_by_str",0],
      ["Break", ["$is_triggered_by_str"]],

           
      // Send out warning if was triggered by str
      ["Latch","$in_current_warning","$out_warning","$was_triggered_by_str",0],

      // Send out no warning if was not triggered by str
      ["Latch","$const_no_warning","$out_warning","-$was_triggered_by_str",0],

      // Reset was triggered by str
      ["Latch","$false","$was_triggered_by_str","$was_triggered_by_str",0]
    ]
  }
Nutzungsrechte:
Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.

Viele Grüße,
Matthias

Re: [V4.5 IP3] Custom Logik "REST API gesucher Wert nicht gefunden"

Verfasst: Mi Dez 25, 2024 10:20 pm
von AndererStefan
Hallo Matthias,

das ist ja großartig! Und was für ein Zufall (ist es Zufall?!).
Ich war beim Abruf von Wetterdaten auf eine ähnliche Situation gestoßen, dass wenn’s nicht regnet, gar keine Regenmenge angegeben ist.(viewtopic.php?f=82&t=5635).

Ich hatte mal „mal eben schnell“ eine Logik versucht die aber nicht geklappt hat. Die Lösung von dir kommt daher just in time. :dance:

VG Stefan

Re: [V4.5 IP3] Custom Logik "REST API gesucher Wert nicht gefunden"

Verfasst: Do Dez 26, 2024 10:36 pm
von AndererStefan
Ich wollte mich eigentlich gar nicht mit Custom-Logiken auseinander setzen, aber mit der Vorlage von Matthias hat es mich gereizt den Code etwas anzupassen. Mein erster Kontakt mit Custom Logiken war auch einfacher als erwartet. :handgestures-thumbupright:

Hier daher eine Abwandlung, die es ermöglicht fehlende float-Daten bei einer HTTP-REST Abfrage durch einen Fehlwert zu ersetzen. Der Fehlwert kann gewählt werden, voreingestellt ist 0.0.

Bild

Ich benutze die Logik um beim Abruf der Wetterdaten von openweathermaps.com fehlende Messwerte für Regen (es gibt nur Daten wenn es regnet) durch 0.0 l/h zu ersetzen.

Code: Alles auswählen

 {
    
    "Level": [
        
        // Input Level
        ["$in_value","float",0.0],
        ["$in_request_run","bool",false],
        ["$in_error_value","float",0.0],

        // Output Level
        ["$out_value","float",0.0],

        // Internal Level
        ["$is_triggered_by_value","bool",false],
        ["$was_triggered_by_value","bool",false],
        ["$is_triggered_by_run","bool",false]

        // Constants
    ],
    "Input": [
        ["Value", "Eingangswert (float)", "$in_value", "a"],
        ["Trigger", "Trigger für Ausführung", "$in_request_run", "a"],
        ["Error Value", "Fehlerwert um Lücken zu füllen", "$in_error_value", "c"]
    ],
    "Output": [
        ["Value", "Eingabewert mit gefüllten Lücken (float)", "$out_value", "a"]
    ],
  
    "Module": [
      [ "Triggered", "$in_value", "$is_triggered_by_value" ],
      [ "Triggered", "$in_request_run", "$is_triggered_by_run" ],
      
      
      // str triggered, set str was triggered to true and break
      ["Latch","$true","$was_triggered_by_value","$is_triggered_by_value",0],
      ["Break", ["$is_triggered_by_value"]],

           
      // Send out value if was triggered by value
      ["Latch","$in_value","$out_value","$was_triggered_by_value",0],

      // Send out error value if was not triggered by value
      ["Latch","$in_error_value","$out_value","-$was_triggered_by_value",0],

      // Reset was triggered by value
      ["Latch","$false","$was_triggered_by_value","$was_triggered_by_value",0]
    ]
  }
"Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht."