PV Erzeugung über forecast.solar

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: PV Erzeugung über forecast.solar

Beitrag von Quautiputzli »

Jetzt komme ich der Sache schon etwas näher. Ich hab nun nochmal etwas mit dem JSONPAtH rumprobiert, so wie du ja am Anfang vorgeschlagen hast.

Mit:

Code: Alles auswählen

JSONPATH:$.result.watt_hours_day.[*]
bekomme ich:

Code: Alles auswählen

[30119, 30000, 27444, 23976, 14147, 28539]
Das sieht schonmal nicht schlecht aus. (Ich hab testweise auf den demo-key umgestellt, da bekomme ich 6 Werte für 6 Tage, ist aber ansonsten gleich.

Nun habe ich das Item über ein Profil mit Javascript verlinkt:

Code: Alles auswählen

(function(string) {
    var myval = string.split(", ");
    return myval[0];
})(input)
Dann habe ich allerdings beim ersten Wert die eckige Klammer mit dabei:

Code: Alles auswählen

[30119
bei den weiteren nicht mehr. Die muss ich also noch wegbekommen.
Servus

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

Re: PV Erzeugung über forecast.solar

Beitrag von udo1toni »

Cool. evtl. kannst Du die eckigen Klammern mit replace entfernen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: PV Erzeugung über forecast.solar

Beitrag von Quautiputzli »

Heureka

Ich habe das Javascript abändern, sodass die Klammern entfernt werden. Außerdem ist es wohl auch beim http-Thing möglich mehrere Transformationen mit diesem Zeichen "∩" aneinander zu ketten, obwohl es dort nicht extra in der Erklärung steht. Darum habe ich das Profil wieder entfernt. Das Thing sieht nun so aus:

Code: Alles auswählen

UID: http:url:forecast
label: forecast
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: https://api.forecast.solar
  refresh: 60
  commandMethod: GET
  timeout: 40000
  bufferSize: 2048
channels:
  - id: forecast_schupfa_e
    channelTypeUID: http:number
    label: forecast_schupfa_e
    description: ""
    configuration:
      stateExtension: /demo-key/estimate/51.15/10.45/30/0/5.json?time=seconds
      stateTransformation: JSONPATH:$.result.watt_hours_day.*∩JS:split.js
Das Javascript folgendermaßern:

Code: Alles auswählen

(function(string) {
    var value = string.replace("["," ").replace("]"," ");
    var myval = value.split(", ");
    return myval[0];
})(input)
Nun muss ich mir das nur noch anpassen, an meine beiden Anlagen, mit den Voorhersagen für heute und morgen. Dann sollte es passen.

Danke für die Unterstützung.
Servus

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: PV Erzeugung über forecast.solar

Beitrag von Quautiputzli »

Pustekuchen. Hab nun alles soweit hergerichtet, aber im "scharfen" System funktioniert es nicht. Der zweite Wert wird übertragen, aber der erste kommt nicht an. Wenn das Item vom Typ String ist, passt es noch. Wenn man es jedoch auf Number umstellt funktioniert es nicht.

Kann man in dem Javascirpt noch was machen, dass der Wert wirklich als Number ausgegeben wird?
Servus

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: PV Erzeugung über forecast.solar

Beitrag von Quautiputzli »

Ach, war wohl mein Fehler. Mit den Items vom Typ Number funktioniert es, jedoch nicht mit Number:energie
Servus

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

Re: PV Erzeugung über forecast.solar

Beitrag von udo1toni »

Vollkommen korrekt. Um ein UoM Item zu verwenden, müsstest Du die Einheit mit übergeben. In der Therie solle es reichen, im JS an das Ergebnis
ein | W anzuhängen. Die Pipe signalisiert, dass noch eine Unit folgt. Ausprobiert habe ich das bisher aber nicht.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

Re: PV Erzeugung über forecast.solar

Beitrag von Quautiputzli »

Hab das mal probiert mit der Einheit im Javascript, hat aber auf Anhieb nicht funktioniert. Ist aber auch nicht wichtig. Einfach mit Number funktioniert es ja.
Servus

denni
Beiträge: 24
Registriert: 4. Sep 2019 15:25

Re: PV Erzeugung über forecast.solar

Beitrag von denni »

vielen Dank erstmal für diesen tollen Beitrag. Das was ihr hier besprochen habt, hat mir bisher sehr geholfen.
Ich versuche das aktuell über Code zu implementieren:

Dafür sieht meine .Things Datei so aus:

Ich habe folgenden Code in meiner .thing stehen:

Code: Alles auswählen

Thing http:url:forecastsolar "forecastsolar" [ authMode="BASIC", baseURL="https://api.forecast.solar", refresh=60, stateMethod= "GET", timeout=40000, bufferSize=2048] {
        Channels:
            Type string : forecastsolar_watts "forecastsolar_watts" [ stateExtension="/demo-key/estimate/51.15/10.45/30/0/5.json?time=minutes", stateTransformation="JSONPATH:$.result.watt_hours_day[*]" ] 
}
unter dem Ordner "transform" habe ich die split.js erstellt mit Inhalt:

Code: Alles auswählen

(function(string) {
    var value = string.replace("["," ").replace("]"," ");
    var myval = value.split(", ");
    return myval[0];
})(input)
in meiner .Items sieht es so aus:

Code: Alles auswählen

String forecastsolar_current  { channel="http:url:forecastsolar:forecastsolar_watts" [ profile="transform:JS", function="split.js"] }
In den String forecastsolar_current schreibt er dann folgendes rein:
[10579, 2847, 10332, 15191, 5859, 7562, 7824]
Wo liegt der Fehler, dass er die split.js nicht anwendet?
Wenn ich das Item forecastsolar_current als Number definiere bekommt es den Status 'NULL'

Hat jemand einen Tipp?

Danke euch. Grüße

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: PV Erzeugung über forecast.solar

Beitrag von violine21 »

Du bekommst die Werte in einem Array geliefert. Die musst Du einzeln "abgreifen".
Hier meine Konfiguration (OH 2.5.12) für zwei Werte (heute und morgen):
http.cfg

Code: Alles auswählen

http:solarforecast.url=https://api.forecast.solar/estimate/Länge/Breite/45/0/6
http:solarforecast.updateInterval=21600000
Item-Datei

Code: Alles auswählen

String    Solar_forecast       "PV_Vorhersage [JS(forecast.js):%s]"     {http="<[solarforecast:60000:JSONPATH($.result.watt_hours_day.[*])]"}
String    Solar_today          "PV_Vorhersage [JS(todaycast.js):%s]"    {http="<[solarforecast:60000:JSONPATH($.result.watt_hours_day.[*])]"}
forecast.js
Array-Wert [1]

Code: Alles auswählen

(function(string) {
    var value = string.replace("["," ").replace("]"," ");
    var forecast = value.split(", ");
    return (forecast[1]/1000).toFixed(1).replace(".",",") + " kWh";
})(input)
todaycast.js
Array-Wert [0]

Code: Alles auswählen

(function(string) {
    var value = string.replace("["," ").replace("]"," ");
    var forecast = value.split(", ");
    return (forecast[0]/1000).toFixed(1).replace(".",",") + " kWh";
})(input)
Auszug aus Sitemap

Code: Alles auswählen

        Text item=Solar_today label="Vorhersage heute" icon="line"
        Text item=Solar_forecast label="Vorhersage morgen" icon="line"
Ergebnis
Bild
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

denni
Beiträge: 24
Registriert: 4. Sep 2019 15:25

Re: PV Erzeugung über forecast.solar

Beitrag von denni »

violine21 hat geschrieben: 17. Dez 2021 20:10

Code: Alles auswählen

(function(string) {
    var value = string.replace("["," ").replace("]"," ");
    var forecast = value.split(", ");
    return (forecast[0]/1000).toFixed(1).replace(".",",") + " kWh";
})(input)
Das hat super geklappt. Durch das Skript wird der erste Wert des Array angezeigt.
Nächste Frage: Ist es möglich im Js auch von String direkt zu einem Int/Float zu wechseln und diesen zurückzugeben?

Hintergrund: Ich würde gerne direkt eine Zahl im Item stehen haben, damit eine einfachere Weiterverarbeitung möglich ist.
Ich habe schon im JS es mit parseInt(value, 10); probiert aber das hat nicht geklappt, das Item bleibt dann "NULL"

Wenn ich in Visual Studio mouseover über die Variable mache, sehe ich dass der String (obwohl das JS angewandt ist) noch ein Array bleibt.
Solar.JPG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten