NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[Beantwortet] [V4.0 IP9] Hilfe bei Dateninterpretation

Wissen, Planung & Diskussion zur Unterstützung von Rest-API & Webabfragen im Timberwolf Server.
Stellt uns hier Eure Projekte und Ideen vor.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
0lek
Reactions:
Beiträge: 175
Registriert: Di Jan 14, 2020 5:30 pm
Hat sich bedankt: 20 Mal
Danksagung erhalten: 80 Mal

[V4.0 IP9] Hilfe bei Dateninterpretation

#1

Beitrag von 0lek »

Hallo,

Ich bin auf keinen besseren Titel gekommen. Ich brauch etwas Hilfe bei der Interpretation von Daten aus einem HTTP-API und wie ich diese in die InfluxDB kriege.

Was will ich machen?
Daten aus einem PM10 (Smog) Sensor in die InfluxDB und weiter in Grafana bringen

Welche Daten
Ich bekomme die Daten ueber die API als Stunden-Durchschnitt. Hier der API-Link.

Code: Alles auswählen

{"key":"PM10","values":[{"date":"2024-04-14 00:00:00","value":null},{"date":"2024-04-13 23:00:00","value":null},{"date":"2024-04-13 22:00:00","value":47.1014},{"date":"2024-04-13 21:00:00","value":29.4315},{"date":"2024-04-13 20:00:00","value":26.969},{"date":"2024-04-13 19:00:00","value":19.2261},{"date":"2024-04-13 18:00:00","value":13.6227},{"date":"2024-04-13 17:00:00","value":17.4531},{"date":"2024-04-13 16:00:00","value":15.408},{"date":"2024-04-13 15:00:00","value":19.6642},{"date":"2024-04-13 14:00:00","value":22.4598},{"date":"2024-04-13 13:00:00","value":20.917},{"date":"2024-04-13 12:00:00","value":22.4817},{"date":"2024-04-13 11:00:00","value":26.0218},{"date":"2024-04-13 10:00:00","value":28.5203},{"date":"2024-04-13 09:00:00","value":30.0228},{"date":"2024-04-13 08:00:00","value":34.3197},{"date":"2024-04-13 07:00:00","value":39.7655},{"date":"2024-04-13 06:00:00","value":45.2811},{"date":"2024-04-13 05:00:00","value":40.2013},{"date":"2024-04-13 04:00:00","value":39.4061},{"date":"2024-04-13 03:00:00","value":39.4717},{"date":"2024-04-13 02:00:00","value":45.1994},{"date":"2024-04-13 01:00:00","value":53.3304},{"date":"2024-04-13 00:00:00","value":49.5936},{"date":"2024-04-12 23:00:00","value":44.5269},{"date":"2024-04-12 22:00:00","value":45.888},{"date":"2024-04-12 21:00:00","value":null},{"date":"2024-04-12 20:00:00","value":25.8567},{"date":"2024-04-12 19:00:00","value":30.6745},{"date":"2024-04-12 18:00:00","value":25.3573},{"date":"2024-04-12 17:00:00","value":25.2729},{"date":"2024-04-12 16:00:00","value":18.7357},{"date":"2024-04-12 15:00:00","value":21.3768},{"date":"2024-04-12 14:00:00","value":20.8551},{"date":"2024-04-12 13:00:00","value":17.1416},{"date":"2024-04-12 12:00:00","value":21.2267},{"date":"2024-04-12 11:00:00","value":30.914},{"date":"2024-04-12 10:00:00","value":43.5125},{"date":"2024-04-12 09:00:00","value":61.0938},{"date":"2024-04-12 08:00:00","value":65.0691},{"date":"2024-04-12 07:00:00","value":53.0703},{"date":"2024-04-12 06:00:00","value":50.2484},{"date":"2024-04-12 05:00:00","value":45.0144},{"date":"2024-04-12 04:00:00","value":44.6426},{"date":"2024-04-12 03:00:00","value":44.7471},{"date":"2024-04-12 02:00:00","value":42.7786},{"date":"2024-04-12 01:00:00","value":null}]}
Ich kriege die Daten ueber den Selektor

Code: Alles auswählen

values[1].value
auch raus.

Was ist denn dann das Problem?
Vielleicht ist es nur ein Verstaendnissproblem. Soll ich nur den "value" in die Influxdb schreiben? Und den Timestamp generiert die DB? Oder lieber beides? Aber kann ich dann diesen Timestamp fuer die Zeitachse bei Grafana nutzen?
Oder einfach besser die Transaktion alle 60 Minuten laufen lassen, und dann so getimed dass es zur vollen Stude ist? Dann waeren die Timestamps aus dem JSON und in der InfluxDB ja mehr oder weniger synchronisiert.

Danke fuer Eure Hilfe!
Aleksander
Zuletzt geändert von Mibr85 am So Apr 14, 2024 1:03 am, insgesamt 1-mal geändert.
TWS 3500XL ID:1412, VPN offen, Reboot erlaubt

gbglace
Reactions:
Beiträge: 3615
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1274 Mal
Danksagung erhalten: 1674 Mal

#2

Beitrag von gbglace »

In der TWS-Instanz Influxdb kannst Du nur den Value speichern. Die Randattribute ergeben sich dabei selbst.

Wenn Du eine eigene Influxdb in einem Container hostest, kannst Du es auch zu einem eigenen definierten Zeitstempel speichern.

Die Lösung ist TWS nativ, ein stündlich getriggerter API Abruf.
Grüße
Göran

#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#3 PBM 3 Kanäle, #4 Modbus-Extension

Ersteller
0lek
Reactions:
Beiträge: 175
Registriert: Di Jan 14, 2020 5:30 pm
Hat sich bedankt: 20 Mal
Danksagung erhalten: 80 Mal

#3

Beitrag von 0lek »

@gbglace Danke. War auch mein Verstaendniss.

Ich habe hier noch einen Fall. Ich wuerde das mal in dem Topic belassen, weil es auf dem vorher aufbaut. Und zwar habe ich folgende
Daten.

Das sind Strahlenwerte. Ich habe leider kein API-Dokumentation dazu gefunden. Ich kann die Daten nach bestimmten Zeitraeumen (mit "dateFrom" und "dateTo" in URL) begrenzen.

Wie wuerde ich jetzt vorgehen, wenn ich das in die Influx schreiben moechte? Die Wette gibt es ja stuendlich, aber wie kann ich eine "dynamische" URL generieren fuer HTTP Abfrage?

Wuerde ich das in Python umsetzen, wuerde ich wahrscheinlich sowas machen, wie: bei "dateFrom" now - 1h und bei "dateTo" now, dann CURL laufen lassen. Klar, kann ich das machen, aber wuerde es lieber nativ auf dem TWS umsetzen.

Oder vielleicht mal etwas generischer gefragt: Wie gehe ich mit APIs um, die mir nicht den aktuellen Wert sondern eine Zeitreihe geben?

Danke!
Zuletzt geändert von 0lek am Di Apr 16, 2024 11:16 am, insgesamt 1-mal geändert.
TWS 3500XL ID:1412, VPN offen, Reboot erlaubt

gbglace
Reactions:
Beiträge: 3615
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1274 Mal
Danksagung erhalten: 1674 Mal

#4

Beitrag von gbglace »

Das ist eine ähnliche Aufgabe wie gezielt die Stundenpreise aus der Tibber-API abzufragen. Wobei Du das hier in einer Logik vor dem API-Aufruf basteln musst, beim Tibber brauchst das um den passenden Wert aus dem Antwort-JSON zu extrahieren.

Bei solchen JSON Arrays wo man eine fixe Anzahl an Objekten bekommt, musst eigentlich nur wissen die wievielte Stunde des Tages ist JETZT, dann kennst eigentlich immer die genaue Position im Array und kannst die passenden Werte dann aus der Gesamt-Antwort einfach selektieren.

Die Kunst besteht dann eigentlich immer nur eine Build-In Funktion zu haben, die einem als quasi einfache Zahl die laufende Sekunde/Minute/Stunde/Tag/Monat/Jahr liefert.
Aus einem String geht das dann noch mit Substrings usw. und da hat der TWs ja passende Logikbausteine um Stringsoperationen durchzuführen. nur seinen eigenen internen Unix-Zeitstempel bekommst eben so nicht zerlegt. Daher läuft das bei mir noch im NR.
Grüße
Göran

#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#3 PBM 3 Kanäle, #4 Modbus-Extension

MrWilson
Reactions:
Beiträge: 232
Registriert: Do Dez 27, 2018 2:19 pm
Wohnort: Borgsdorf
Hat sich bedankt: 44 Mal
Danksagung erhalten: 146 Mal

#5

Beitrag von MrWilson »

aber wie kann ich eine "dynamische" URL generieren fuer HTTP Abfrage?
Du setzt den Wert für dateFrom und dateTo in der URI in <> mit einem Namen und erstellst dann zwei Abfragen, die Start- und Endzeit aus einer Logik z.B. kommend, an die URI übergeben.
TWS 2500 ID: 341 + PBM ID: 463, VPN offen, Reboot nur nach Absprache
Antworten

Zurück zu „HTTP-API, REST & Web-Abfragen“