Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. myPV AC Elwa2 auslesen.

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

myPV AC Elwa2 auslesen.

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
8 Beiträge 3 Kommentatoren 102 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    denjo
    schrieb am zuletzt editiert von
    #1

    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();
    
    
    1 Antwort Letzte Antwort
    0
    • W Offline
      W Offline
      warp735
      schrieb am zuletzt editiert von
      #2

      Ich hab einfach den Modbus Adapter genommen ;-)

      grafik.png

      D 2 Antworten Letzte Antwort
      0
      • W warp735

        Ich hab einfach den Modbus Adapter genommen ;-)

        grafik.png

        D Offline
        D Offline
        denjo
        schrieb am zuletzt editiert von
        #3

        @warp735 der Modbus ist bei mir schon belegt vom Wifi Meter

        W 1 Antwort Letzte Antwort
        0
        • C Offline
          C Offline
          Chrille1507
          schrieb am zuletzt editiert von
          #4

          Meines Wissens nach, sollte man keine Ordner anlegen, die nicht unter "0_userdata.0" abgelegt werden.

          W 1 Antwort Letzte Antwort
          1
          • D denjo

            @warp735 der Modbus ist bei mir schon belegt vom Wifi Meter

            W Offline
            W Offline
            warp735
            schrieb am zuletzt editiert von
            #5

            @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.

            D 1 Antwort Letzte Antwort
            0
            • C Chrille1507

              Meines Wissens nach, sollte man keine Ordner anlegen, die nicht unter "0_userdata.0" abgelegt werden.

              W Offline
              W Offline
              warp735
              schrieb am zuletzt editiert von
              #6

              @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.

              1 Antwort Letzte Antwort
              1
              • W warp735

                @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.

                D Offline
                D Offline
                denjo
                schrieb am zuletzt editiert von
                #7

                @warp735 habe den ziemlich günstig bekommen und möchte nicht das halt alles über iOBroker läuft. Jeder so wie er möchte denk ich.

                1 Antwort Letzte Antwort
                0
                • W warp735

                  Ich hab einfach den Modbus Adapter genommen ;-)

                  grafik.png

                  D Offline
                  D Offline
                  denjo
                  schrieb am zuletzt editiert von
                  #8

                  @warp735 sagte in myPV AC Elwa2 auslesen.:

                  Ich hab einfach den Modbus Adapter genommen ;-)

                  oder vielleicht habe ich es nur falsch eingestellt mit modbus in der elwa, kannst du mir sagen/zeigen wo du das eingestellt hast?

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate
                  FAQ Cloud / IOT
                  HowTo: Node.js-Update
                  HowTo: Backup/Restore
                  Downloads
                  BLOG

                  723

                  Online

                  32.7k

                  Benutzer

                  82.4k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe