txt-Datei auslesen

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
webjochen
Beiträge: 3
Registriert: 12. Jan 2018 06:27
Answers: 0

txt-Datei auslesen

Beitrag von webjochen »

Hallo,

gibt es bei OpenHab eine Möglichkeit eine normale txt Datei auszulesen und in Variablen zu schreiben.
Meine txt Datei sieht wie folgt aus und liegt auf meiner Homepage:

20240326|58.178|20240327|17.911|20240328|24.673|20240329|26.066|20240330|17.432|

(PV-Prognose für die nächsten Tage)

Gruß Jochen

Benutzeravatar
udo1toni
Beiträge: 13985
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: txt-Datei auslesen

Beitrag von udo1toni »

Das einfachste wäre vermutlich, den kompletten String einzulesen (z.B. über das exec Binding) und anschließend in einer Rule zu zerlegen.
Die bessere Option wäre vermutlich, dafür zu sorgen, dass die Textdatei von vornherein ein besseres Format aufweist - oder anders gesagt: wo kommen die Daten denn ursprünglich her, wie wird die Textdatei gefüllt?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

webjochen
Beiträge: 3
Registriert: 12. Jan 2018 06:27
Answers: 0

Re: txt-Datei auslesen

Beitrag von webjochen »

ursprünglich kommen die Daten von www.solarprognose.de per API,
ich habe es aber nicht geschafft es direkt von dort einzulesen.


API von dort sieht so aus:

[data] => SimpleXMLElement Object
( [item] => Array ( [0] =>
SimpleXMLElement Object ( [item] => Array ( [0] => 20240320 [1] => 48.92 ) ) [1] =>
SimpleXMLElement Object ( [item] => Array ( [0] => 20240321 [1] => 28.555 ) ) [2] =>
SimpleXMLElement Object ( [item] => Array ( [0] => 20240322 [1] => 41.867 ) ) [3] =>
SimpleXMLElement Object ( [item] => Array ( [0] => 20240323 [1] => 23.77 ) ) [4] =>
SimpleXMLElement Object ( [item] => Array ( [0] => 20240324 [1] => 27.039 ) ) ) ) )

tim.l
Beiträge: 60
Registriert: 24. Jun 2022 08:16
Answers: 2
Wohnort: Bielefeld
Kontaktdaten:

Re: txt-Datei auslesen

Beitrag von tim.l »

Hey @webjochen,

die API unterstützt auch JSON:
http://www.solarprognose.de/web/de-de/s ... n/page/api

&_format=json|xml

Dies ist schöner auszulesen und kann einfach selektiert werden. Würde dann das HTTP Binding empfehlen und die Daten mit JSONPATH extrahieren. Das ist deutlich einfacher, als dies vorher durch z.B. ein PHP Skript zu kagen und dann noch relativ "unstrukturiert" in einer txt zu speichern.

Beste Grüße,
Tim
Meine openHAB Erfahrungen bei mir im Blog: https://360friends.de/tag/openhab/ ;)

webjochen
Beiträge: 3
Registriert: 12. Jan 2018 06:27
Answers: 0

Re: txt-Datei auslesen

Beitrag von webjochen »

Hallo,

ich habe es versucht über json, aber irgendwie weis ich nicht genau wie ich das machen soll.
Ich habe ein HTTP Thing erstellt, aber glaube das funktioniert schon nicht?
Token habe ich in der URL geändert im original funktioniert die URL
Bildschirmfoto 2024-03-28 um 15.44.02.png
Bildschirmfoto 2024-03-28 um 15.44.11.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Harka
Beiträge: 308
Registriert: 30. Apr 2021 13:13
Answers: 15

Re: txt-Datei auslesen

Beitrag von Harka »

Moin,

ich habe gerade damit auch ein wenig rum gespielt. Mit der URL "https://www.solarprognose.de/web/solarp ... ormat=json" bekomme ich folgende Ausgabe

Code: Alles auswählen

{
  "preferredNextApiRequestAt": {
    "secondOfHour": 729,
    "epochTimeUtc": 1711649529
  },
  "status": 0,
  "iLastPredictionGenerationEpochTime": 1711646345,
  "weather_source_text": "Kurzfristig (3 Tage): Powered by <a href=\"https://www.weatherapi.com/\" title=\"Free Weather API\">WeatherAPI.com</a> und Langfristig (10 Tage): Powered by <a href=\"https://www.visualcrossing.com/weather-data\" target=\"_blank\">Visual Crossing Weather</a>",
  "datalinename": "Germany > xxxxxx",
  "data": {
    "20240328": 2.018,
    "20240329": 3.501
  }
}
Die API-Abfragen pro Tag (je nach Tarif) sind limitiert. Von daher ist Dein Aktivierungsintervall viel zu kurz.
Ich weiß jetzt nicht wie eine vernünftige Zuordnung der Werte unter data per Things erfolgen kann. Ich würde die Abfrage daher eher per Script abwickeln. Hier ein grobes Beispiel in Javascript (mit Blockly erstellt und noch ohne Fehlerabsicherungen)

Code: Alles auswählen

var url, Rueckgabe, oData, PlusTage, dictValue;
function HTTP_Get(URL) {
  return actions.HTTP.sendHttpGetRequest(URL, 3000);
}
url = 'https://www.solarprognose.de/web/solarprediction/api/v1?access-token=xxxxxxxxxxxxxxxx&type=daily&_format=json';
Rueckgabe = (JSON.parse(HTTP_Get(url)));
console.info(Rueckgabe);
oData = Rueckgabe['data'];
PlusTage = 0;
for (var dictValueKey in oData) {
  dictValue = oData[dictValueKey];
  // statt der folgenden Zeile eine Zuordnung der Werte an Items PrognoseTag0-1bzw.4
  console.info((['PrognoseTag_',PlusTage,' : ',dictValue].join('')));
  PlusTage = + 1;
}
Die Rule 1 bis 2 mal am Tag Zeitgesteuert aufrufen sollte reichen.

Benutzeravatar
udo1toni
Beiträge: 13985
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: txt-Datei auslesen

Beitrag von udo1toni »

Ein gutes Beispiel für eine schlechte API :)
Wobei, die API geht ja sogar, aber das gelieferte JSON ist einfach grauslig.
Bezogen auf die hourly Ausgabe:
Statt die Werte in benannten Feldern zu liefern, wird je Stunde ein Array geliefert. Die einzelnen Stunden sind benannt, wodurch man die Möglichkeit verliert, die einzelnen Stunden ohne Nennung des exakten Zeitpunkts zu extrahieren. Man muss also vor extrahieren der Daten die Daten bereits kennen...
Das fällt in die Kategorie "Warum nur?"
Der Zeitstempel dürfte übrigens UTC sein (die einzelnen Stunden gehen derzeit von 4 bis 17 Uhr, in unseren Breiten liefert die PV allerdings eher zwischen 6 und 19 Uhr Energie (also, momentan, falls die Sonne scheint...)

Da hat sich also jemand viel Mühe gemacht, aber ohne so richtig über das nachzudenken, was er da fabriziert...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten