@OliverIO
hab doch hinbekommen, falls es noch jemand gebrauchen kann.
const http = require('https');
const url = "https://www.solarweb.com/PvSystems/GetWeatherWidgetDataForPublicDisplay?publicDisplayToken=";
const displayToken = "xxxxxx-xxxxxxx-xxxxxxx-xxxxxx";
const path = '0_userdata.0.Datenpunkte.PV_Anlage.Solarforecast.Solarweb.';
const data_solarweb = path + 'JSON_Data_Solarweb';
const datapoint_forecast_today = path + 'Forecast_Today';
const datapoint_forecast_tomorrow = path + 'Forecast_Tomorrow';
const datapoint_energy_remaining_today = path + 'Energy_remaining_today';
const datapoint_current_energy_generated_today = path + 'Current_energy_generated_today';
// Create Datenpunkte
createState(path + 'JSON_Data_Solarweb', { type: 'json', name: 'JSON_Data', role: 'state' });
createState(path + 'Forecast_Today', { name: 'Forecast_Today', role: 'state', type: 'number', read: true, write: true, desc: 'Manuell erzeugt', def: 0, unit: 'kWh' });
createState(path + 'Forecast_Tomorrow', { name: 'Forecast_Tomorrow', role: 'state', type: 'number', read: true, write: true, desc: 'Manuell erzeugt', def: 0, unit: 'kWh' });
createState(path + 'Current_energy_generated_today', { name: 'Current_energy_generated_today', role: 'state', type: 'number', read: true, write: true, desc: 'Manuell erzeugt', def: 0, unit: 'kWh' });
createState(path + 'Energy_remaining_today', { name: 'Energy_remaining_today', role: 'state', type: 'number', read: true, write: true, desc: 'Manuell erzeugt', def: 0, unit: 'kWh' });
async function getWebContent(url, displayToken) {
return new Promise((resolve, reject) => {
const requestUrl = url + displayToken;
http.get(requestUrl, { headers: { "User-Agent": "Mozilla/5.0" } }, (response) => {
let data = '';
// Daten aus dem Stream sammeln
response.on('data', chunk => {
data += chunk;
});
response.on('end', () => {
try {
const parsedData = JSON.parse(data);
resolve(parsedData);
} catch (error) {
reject('Fehler beim Parsen der Antwort: ' + error);
}
});
response.on('error', (error) => {
reject('Fehler bei der Anfrage: ' + error);
});
}).on('error', (error) => {
reject('Fehler bei der HTTP-Anfrage: ' + error);
});
});
}
async function main() {
try {
const content = await getWebContent(url, displayToken);
const data = content.data;
setState(data_solarweb, JSON.stringify(data), true);
console.log(data.Forecast.find(el => el.ExpectedYieldDayLabel == "Today").ExpectedEnergyYield.Value);
setState(datapoint_forecast_today, parseFloat(data.Forecast.find(el => el.ExpectedYieldDayLabel == "Today").ExpectedEnergyYield.Value), true);
console.log(data.Forecast.find(el => el.ExpectedYieldDayLabel == "Tomorrow").ExpectedEnergyYield.Value);
setState(datapoint_forecast_tomorrow, parseFloat(data.Forecast.find(el => el.ExpectedYieldDayLabel == "Tomorrow").ExpectedEnergyYield.Value), true);
setState(datapoint_current_energy_generated_today, getState("0_userdata.0.Datenpunkte.PV_Anlage.Solarweb.Current.01_Day.Energy.EnergyProductionTotal").val, true);
setState(datapoint_energy_remaining_today, Math.min(Math.max(getState(datapoint_forecast_today).val - getState(datapoint_current_energy_generated_today).val, 0), 200), true);
} catch (error) {
log("Fehler im Hauptprozess: " + error, "error");
}
}
main();
// Jede Stunde 6 neu berechnen
schedule("6,16,26,36,46,56 * * * *", async function () {
await main();
});