NEWS
myPV AC Elwa2 auslesen.
-
Hallo, da ich krank bin und etwas zeit habe, habe ich mir von Chatgpt ein script bauen lassen um die MyPV AC Elwa2 die Daten auslesen zu lassen zb für meine VIS2.
Ich weiß es ist kein Hexenwerk aber ich kann halt kein Java programmieren.
Ihr müsst nur die IP ändern und eure dort eintragen und die Datenpunkte werden im Javascript Ordner angelegt.
// ===================================== // my-PV AC ELWA 2 – Daten auslesen // ioBroker JavaScript-Skript // ===================================== // >>> HIER IP deiner ELWA eintragen <<< const ELWA_IP = '192.168.178.145'; // aus deinem JSON: "cur_ip":"192.168.178.145" // Abfrage-Intervall in Sekunden const POLL_SECONDS = 10; // Basis-Pfad der States const base = 'mypv.acelwa2'; // =============================== // States anlegen // =============================== createState(base + '.rawJson', '', { name: 'Rohdaten JSON', type: 'string', role: 'json', read: true, write: true }); // „einfache“ Temperatur / Leistung (für VIS usw.) createState(base + '.temperature', 0, { name: 'Speichertemperatur oben', type: 'number', role: 'value.temperature', read: true, write: true }); createState(base + '.power', 0, { name: 'Heizleistung ELWA', type: 'number', role: 'value.power', read: true, write: true }); // Detail-States createState(base + '.temperature_tank', 0, { name: 'Speichertemperatur oben (temp2)', type: 'number', role: 'value.temperature', read: true, write: true }); createState(base + '.temperature_inlet', 0, { name: 'Temperatur unten / Zulauf (temp1)', type: 'number', role: 'value.temperature', read: true, write: true }); createState(base + '.temperature_ps', 0, { name: 'Elektronik-Temperatur (temp_ps)', type: 'number', role: 'value.temperature', read: true, write: true }); createState(base + '.power_elwa2', 0, { name: 'Heizleistung ELWA (power_elwa2)', type: 'number', role: 'value.power', read: true, write: true }); createState(base + '.power_solar', 0, { name: 'PV-Leistung (power_solar)', type: 'number', role: 'value.power', read: true, write: true }); createState(base + '.power_grid', 0, { name: 'Netzleistung (power_grid)', type: 'number', role: 'value.power', read: true, write: true }); createState(base + '.surplus', 0, { name: 'Überschussleistung (surplus)', type: 'number', role: 'value.power', read: true, write: true }); createState(base + '.freq', 0, { name: 'Netzfrequenz', type: 'number', role: 'value.frequency', read: true, write: true }); createState(base + '.wifi_signal', 0, { name: 'WLAN-Signalstärke', type: 'number', role: 'value', read: true, write: true }); createState(base + '.ctrlstate', '', { name: 'Status-Text (ctrlstate)', type: 'string', role: 'text', read: true, write: true }); createState(base + '.date', '', { name: 'Datum', type: 'string', role: 'date', read: true, write: true }); createState(base + '.time', '', { name: 'Uhrzeit', type: 'string', role: 'text', read: true, write: true }); // =============================== // Funktion: Daten holen // =============================== const http = require('http'); function fetchElwaData() { const url = `http://${ELWA_IP}/data.jsn`; log(`Hole Daten von ${url}`, 'debug'); http.get(url, (res) => { let body = ''; res.on('data', (chunk) => { body += chunk; }); res.on('end', () => { try { const json = JSON.parse(body); // Roh-JSON speichern setState(base + '.rawJson', JSON.stringify(json), true); // Zum Debuggen einmal ins Log log('ELWA JSON: ' + JSON.stringify(json), 'debug'); // =============================== // Werte umrechnen und mappen // =============================== // Temperaturen sind in Zehntel-Grad const t_inlet = (json.temp1 != null) ? json.temp1 / 10 : null; const t_tank = (json.temp2 != null) ? json.temp2 / 10 : null; const t_ps = (json.temp_ps != null) ? json.temp_ps / 10 : null; if (t_inlet !== null) { setState(base + '.temperature_inlet', Number(t_inlet), true); } if (t_tank !== null) { setState(base + '.temperature_tank', Number(t_tank), true); // „Haupt-Temperatur“: setState(base + '.temperature', Number(t_tank), true); } if (t_ps !== null) { setState(base + '.temperature_ps', Number(t_ps), true); } // Leistungen (in Watt) const p_elwa2 = json.power_elwa2 != null ? json.power_elwa2 : 0; const p_solar = json.power_solar != null ? json.power_solar : 0; const p_grid = json.power_grid != null ? json.power_grid : 0; const surplus = json.surplus != null ? json.surplus : 0; setState(base + '.power_elwa2', Number(p_elwa2), true); setState(base + '.power_solar', Number(p_solar), true); setState(base + '.power_grid', Number(p_grid), true); setState(base + '.surplus', Number(surplus), true); // „Haupt-Leistungs“-State: setState(base + '.power', Number(p_elwa2), true); // Netzfrequenz (49979 → 49.979 Hz) if (json.freq != null) { const freqHz = json.freq / 1000; setState(base + '.freq', Number(freqHz), true); } // WLAN-Signal (0–3) if (json.wifi_signal != null) { setState(base + '.wifi_signal', Number(json.wifi_signal), true); } // Status-Text if (json.ctrlstate != null) { setState(base + '.ctrlstate', String(json.ctrlstate), true); } // Datum / Zeit if (json.date != null) { setState(base + '.date', String(json.date), true); } if (json.loctime != null) { setState(base + '.time', String(json.loctime), true); } } catch (e) { log('Fehler beim Auswerten der ELWA-Daten: ' + e, 'error'); } }); }).on('error', (err) => { log('Fehler beim HTTP-Aufruf der ELWA: ' + err, 'error'); }); } // =============================== // Zyklisches Polling // =============================== schedule(`*/${POLL_SECONDS} * * * * *`, fetchElwaData); // Direkt beim Start einmal ausführen fetchElwaData(); -
Meines Wissens nach, sollte man keine Ordner anlegen, die nicht unter "0_userdata.0" abgelegt werden.
-
Meines Wissens nach, sollte man keine Ordner anlegen, die nicht unter "0_userdata.0" abgelegt werden.
@Chrille1507 sagte in myPV AC Elwa2 auslesen.:
Meines Wissens nach, sollte man keine Ordner anlegen, die nicht unter "0_userdata.0" abgelegt werden.
Bei Javascript geht auch.
-
@denjo sagte in myPV AC Elwa2 auslesen.:
vom Wifi Meter
Du hast ioBroker und nutzt son teures Ding? Ich "sende" das was verheizt werden darf auch per Modbus.
