txt-Datei auslesen
-
- Beiträge: 3
- Registriert: 12. Jan 2018 06:27
txt-Datei auslesen
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
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
- udo1toni
- Beiträge: 15240
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: txt-Datei auslesen
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?
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.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 3
- Registriert: 12. Jan 2018 06:27
Re: txt-Datei auslesen
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 ) ) ) ) )
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 ) ) ) ) )
-
- Beiträge: 71
- Registriert: 24. Jun 2022 08:16
- Wohnort: Bielefeld
- Kontaktdaten:
Re: txt-Datei auslesen
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
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/ 

-
- Beiträge: 3
- Registriert: 12. Jan 2018 06:27
Re: txt-Datei auslesen
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
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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
- Beiträge: 487
- Registriert: 30. Apr 2021 13:13
Re: txt-Datei auslesen
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
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)
Die Rule 1 bis 2 mal am Tag Zeitgesteuert aufrufen sollte reichen.
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
}
}
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;
}
- udo1toni
- Beiträge: 15240
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: txt-Datei auslesen
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...

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.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 488
- Registriert: 6. Jan 2021 18:05
Re: txt-Datei auslesen
Edit:
Ich habe es Online, und nun bekomme ich auch Daten rein.
Nur Wie bekomme ich das jetzt in Zahlen für Heute und Morgen??
Ich habe ein String ITEM und da kommt dieses hier:
Nun steht weit unten: data... Ich denke das ich hier 2 Number ITEM brauche??
Ich habe es Online, und nun bekomme ich auch Daten rein.
Nur Wie bekomme ich das jetzt in Zahlen für Heute und Morgen??
Ich habe ein String ITEM und da kommt dieses hier:
Code: Alles auswählen
{"preferredNextApiRequestAt":{"secondOfHour":2083,"epochTimeUtc":1740324883},"status":0,"iLastPredictionGenerationEpochTime":1740322929,"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 > HIER","data":{"20250223":12.909,"20250224":8.385}}
Gruss mad-mike
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)

- udo1toni
- Beiträge: 15240
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: txt-Datei auslesen
Schau mal, so sieht das "hübsch" formatiert aus:
Du kannst also aus dem Datum, an dem Du die Abfrage sendest, rückschließen, wie die beiden Datenpunkte heißen (JJJJMMTT für heute und morgen)
In einem Thing gibt es die Möglichkeit, das per Script Transfoprmation zu ermitteln, aber irgendwie erscheint mir das reichlich zerrupft.
Meine Empfehlung: Schreibe eine Rule, welche die Daten direkt per http Request holt (ohne Thing) und nutze innerhalb der Rule den JSONPATH transformation service mit den errechneten Feldnamen (die kennst Du ja jeweils, bzw. kannst sie anhand des aktuellen Zeitstempels leicht bestimmen).
Die Daten kannst Du dann direkt in zwei Number:Energy Items schreiben.
Code: Alles auswählen
{
"preferredNextApiRequestAt": {
"secondOfHour": 2083,
"epochTimeUtc": 1740324883
},
"status": 0,
"iLastPredictionGenerationEpochTime": 1740322929,
"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 > HIER",
"data": {
"20250223": 12.909,
"20250224": 8.385
}
}
In einem Thing gibt es die Möglichkeit, das per Script Transfoprmation zu ermitteln, aber irgendwie erscheint mir das reichlich zerrupft.
Meine Empfehlung: Schreibe eine Rule, welche die Daten direkt per http Request holt (ohne Thing) und nutze innerhalb der Rule den JSONPATH transformation service mit den errechneten Feldnamen (die kennst Du ja jeweils, bzw. kannst sie anhand des aktuellen Zeitstempels leicht bestimmen).
Die Daten kannst Du dann direkt in zwei Number:Energy Items schreiben.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 488
- Registriert: 6. Jan 2021 18:05
Re: txt-Datei auslesen

Und wie??In einem Thing gibt es die Möglichkeit, das per Script Transfoprmation zu ermitteln, aber irgendwie erscheint mir das reichlich zerrupft.
Meine Empfehlung: Schreibe eine Rule, welche die Daten direkt per http Request holt (ohne Thing) und nutze innerhalb der Rule den JSONPATH transformation service mit den errechneten Feldnamen
Ich habe nun seit einigen Abenden mich versucht in diese Thematik einzulesen, aber irgendwie bekomme ich immer nur Fehlermeldungen...
Ich habe ein Channel - String und Number erstellt....
Dann habe ich jeweils ein Item Verlinkt und versucht über das Profil an die Werte zu kommen...
Bei den Item String kommt entweder alles, oder garnichts. Nur ein wert der hinter ""Data"" steht, habe ich nicht erstellen können.
Und wie ich eine Profil Script Rule erstellen kann, weiss ich nicht. Bei meinem Versuch hat openHAB gejammert... ich habe versucht den String mittel ""split"" an die werte zu kommen??


Oder wird das nicht in ein Profil hinterlegt?
Danke und Gruss
Gruss mad-mike
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)
