Hatte jetzt auch das Problem mit dem yahoo Kursen, deshalb habe ich folgendes als javascript eingebaut (ruft alle 5 Minuten die aktuellen daten ab.) :
const axios = require('axios');
// Intervall in Millisekunden
const UPDATE_INTERVAL = 5 * 60 * 1000; // 5 Minuten
// Crypto-Coins
const coins = [
{ id: 'BTC', dp: 'crypto.bitcoin.eur' },
{ id: 'FET', dp: 'crypto.fet.eur' },
{ id: 'SOL', dp: 'crypto.solana.eur' },
{ id: 'HNT', dp: 'crypto.helium.eur' },
{ id: 'IOT', dp: 'crypto.iota.eur' }
];
// Aktien
const stocks = [
{ symbol: 'RWE.DE', dp: 'stocks.rwe.eur' }
];
// States anlegen
coins.forEach(c => {
if (!existsState(`javascript.0.${c.dp}`)) {
createState(`javascript.0.${c.dp}`, 0, {
name: c.id + ' Kurs EUR',
type: 'number',
unit: '€',
role: 'value.currency'
});
}
});
stocks.forEach(s => {
if (!existsState(`javascript.0.${s.dp}`)) {
createState(`javascript.0.${s.dp}`, 0, {
name: s.symbol + ' Kurs EUR',
type: 'number',
unit: '€',
role: 'value.currency'
});
}
});
// Funktion: Crypto-Kurse abrufen
async function updateCrypto() {
for (const c of coins) {
try {
const url = `https://min-api.cryptocompare.com/data/price?fsym=${c.id}&tsyms=EUR`;
const response = await axios.get(url, { timeout: 10000 });
const data = response.data;
if (data && data.EUR) {
setState(`javascript.0.${c.dp}`, parseFloat(data.EUR), true);
log(`${c.id} Kurs aktualisiert: ${data.EUR} €`, 'info');
} else {
log(`Unerwartete API-Antwort für ${c.id}: ${JSON.stringify(data)}`, 'warn');
}
} catch (err) {
log(`Fehler bei ${c.id}: ${err}`, 'error');
}
}
}
// Funktion: RWE über Yahoo Chart API
async function updateRWE() {
try {
const url = 'https://query1.finance.yahoo.com/v8/finance/chart/RWE.DE';
const response = await axios.get(url, { timeout: 10000 });
const json = response.data;
const price = json?.chart?.result?.[0]?.meta?.regularMarketPrice;
if (price !== undefined) {
setState('javascript.0.stocks.rwe.eur', price, true);
log(`RWE Kurs aktualisiert: ${price} €`, 'info');
} else {
log('RWE regularMarketPrice nicht gefunden', 'warn');
}
} catch (err) {
log(`Fehler beim Abrufen von RWE: ${err}`, 'error');
}
}
// Hauptfunktion: alle Kurse abrufen
async function updateAll() {
await updateCrypto();
await updateRWE();
}
// Start + Intervall
updateAll();
setInterval(updateAll, UPDATE_INTERVAL);