Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Einsteigerfragen
  4. Ext Website steuern (Enpal)

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.8k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    747

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

Ext Website steuern (Enpal)

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
13 Beiträge 4 Kommentatoren 402 Aufrufe 4 Beobachtet
  • Ä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.
  • K Offline
    K Offline
    ktsalti
    schrieb am zuletzt editiert von ktsalti
    #4

    Hi OliverIO,

    vielen Dank für deine Antwort!
    Leider passiert in den DEV-Tools unter Network garnichts, wenn ich auf den Button klicke.
    Das war meine (und sogar von der KI) erste Idee.

    Deshalb den Umweg. Bin natürlich für jede weitere Idee offen :)

    NegaleinN OliverIOO 2 Antworten Letzte Antwort
    0
    • K ktsalti

      Hi OliverIO,

      vielen Dank für deine Antwort!
      Leider passiert in den DEV-Tools unter Network garnichts, wenn ich auf den Button klicke.
      Das war meine (und sogar von der KI) erste Idee.

      Deshalb den Umweg. Bin natürlich für jede weitere Idee offen :)

      NegaleinN Offline
      NegaleinN Offline
      Negalein
      schrieb am zuletzt editiert von
      #5

      @ktsalti sagte:

      Leider passiert in den DEV-Tools unter Network garnichts, wenn ich auf den Button klicke.

      aktivier mal invert.
      Ist bei mir zumindest so.

      cc873ead-aa11-4314-98bb-bddd147f61dc-image.jpeg

      ° Node.js & System Update ---> sudo apt update, iob stop, sudo apt full-upgrade
      ° Node.js Fixer ---> iob nodejs-update
      ° Fixer ---> iob fix

      1 Antwort Letzte Antwort
      0
      • K ktsalti

        Hi OliverIO,

        vielen Dank für deine Antwort!
        Leider passiert in den DEV-Tools unter Network garnichts, wenn ich auf den Button klicke.
        Das war meine (und sogar von der KI) erste Idee.

        Deshalb den Umweg. Bin natürlich für jede weitere Idee offen :)

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von OliverIO
        #6

        @ktsalti

        All muss selektiert sein
        Und im Suchfeld darf auch nix drin stehen
        Sonst wird alles ausgefiltert

        Invert kehrt das Suchfeld glaube ich um

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        1 Antwort Letzte Antwort
        0
        • skvarelS Online
          skvarelS Online
          skvarel
          Developer
          schrieb am zuletzt editiert von skvarel
          #7

          Mit dem Thema habe ich mich intensiv beschäftigt, als ich den Enpal Adapter gebaut habe.

          Ein Steuern wird von Enpal nicht gedultet, es gibt auch keine API-Doku. Lediglich das Auslesen der Daten ist gestattet.

          EDIT:
          Enpal ist da sehr streng mit ihrem geschlossenen System. Es kann sogar zur Sperrung der lokalen Ui kommen (Info von deren IT)

          EDIT:
          Aus diesem Grund ist mein Enpal Adapter auch Read-Only, um nicht gegen deren Bestimmungen zu verstoßen.

          #TeamInventwo
          Unsere Adapter:
          Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

          Wer uns mit einem Kaffee unterstützen möchte: PayPal

          1 Antwort Letzte Antwort
          1
          • K Offline
            K Offline
            ktsalti
            schrieb am zuletzt editiert von
            #8

            Ich habe nochmal mit den DEV-Tools rumgespielt - leider kein Erfolg. Es bleibt leer wenn ich den Button drücke. Mit und ohne Invert - beides ausprobiert.
            PS: Ein Reload der Seite bringt viele Daten. Aber das hilft ja nicht bei meinen Problem.

            Screenshot 2026-04-16 213446.png

            @skvarel
            wenn sie das umschalten per WebSite nicht erlauben würden, wäre es bestimmt nicht so sichtbar. Aber ja- man sollte es nicht übertreiben.
            Früher konnte man über die Enpal-Box noch viel mehr Sachen einstellen. Aber das ist verschwunden - aber auch besser so. Da konnte man echt viel kaputt machen. Habe selbst mal ausversehen was angeklickt und mein Speicher hat nicht mehr geladen...😕

            Ich werde es jetzt erstmal so weiterlaufen lassen - Vorbereitung für den Winter und die Tibber-Ladung, wenn die Sonne nicht mehr ausreicht

            Danke euch und Viele Grüße
            Marcus

            OliverIOO skvarelS 2 Antworten Letzte Antwort
            0
            • K ktsalti

              Ich habe nochmal mit den DEV-Tools rumgespielt - leider kein Erfolg. Es bleibt leer wenn ich den Button drücke. Mit und ohne Invert - beides ausprobiert.
              PS: Ein Reload der Seite bringt viele Daten. Aber das hilft ja nicht bei meinen Problem.

              Screenshot 2026-04-16 213446.png

              @skvarel
              wenn sie das umschalten per WebSite nicht erlauben würden, wäre es bestimmt nicht so sichtbar. Aber ja- man sollte es nicht übertreiben.
              Früher konnte man über die Enpal-Box noch viel mehr Sachen einstellen. Aber das ist verschwunden - aber auch besser so. Da konnte man echt viel kaputt machen. Habe selbst mal ausversehen was angeklickt und mein Speicher hat nicht mehr geladen...😕

              Ich werde es jetzt erstmal so weiterlaufen lassen - Vorbereitung für den Winter und die Tibber-Ladung, wenn die Sonne nicht mehr ausreicht

              Danke euch und Viele Grüße
              Marcus

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von
              #9

              @ktsalti

              Du hast jetzt das Suchfeld leer und invert angekreutzt. Das könnte schon ausfiltern.

              Ganz ohne ein Request wäre seltsam.
              Als Nächstes bleibt dann eigentlich nur noch websocket. Die Verbindung wurde dann aber bereits am Anfang aufgebaut.

              Da wäre dann die Vorgehensweise

              • Rekord der Seite mit F5
              • Filtern auf socket
              • dann in den Request rein klicken und im untertan dass auf messages gehen. Mit jedem Klick auf einen Knopf müssten dann mehr messages erscheinen

              Websocket ist allerdings etwas aufwändiger zu programmieren

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              1 Antwort Letzte Antwort
              0
              • K ktsalti

                Ich habe nochmal mit den DEV-Tools rumgespielt - leider kein Erfolg. Es bleibt leer wenn ich den Button drücke. Mit und ohne Invert - beides ausprobiert.
                PS: Ein Reload der Seite bringt viele Daten. Aber das hilft ja nicht bei meinen Problem.

                Screenshot 2026-04-16 213446.png

                @skvarel
                wenn sie das umschalten per WebSite nicht erlauben würden, wäre es bestimmt nicht so sichtbar. Aber ja- man sollte es nicht übertreiben.
                Früher konnte man über die Enpal-Box noch viel mehr Sachen einstellen. Aber das ist verschwunden - aber auch besser so. Da konnte man echt viel kaputt machen. Habe selbst mal ausversehen was angeklickt und mein Speicher hat nicht mehr geladen...😕

                Ich werde es jetzt erstmal so weiterlaufen lassen - Vorbereitung für den Winter und die Tibber-Ladung, wenn die Sonne nicht mehr ausreicht

                Danke euch und Viele Grüße
                Marcus

                skvarelS Online
                skvarelS Online
                skvarel
                Developer
                schrieb am zuletzt editiert von skvarel
                #10

                @ktsalti .. ich habe mich etwas unglücklich ausgedrückt.

                Ja, das Schalten über die Ui ist natürlich zulässig und gewollt. Es geht um automatisierte Zugriffe, die nicht gestattet sind. Ob Enpal kontrollieren kann, ob man den Button mit dem Finger oder einem Befehl drückt, bezweifle ich.

                Ich schaue mir das aber auch mal an. Die Wallbox per VIS zu starten wäre schon nicht schlecht. Allerdings würde ich das bei mir auch nur als Script laufen lassen und es nicht in den Enpal Adapter übernehmen.

                #TeamInventwo
                Unsere Adapter:
                Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                Wer uns mit einem Kaffee unterstützen möchte: PayPal

                1 Antwort Letzte Antwort
                0
                • K Offline
                  K Offline
                  ktsalti
                  schrieb am zuletzt editiert von
                  #11

                  @oliverio
                  ist das die richtige Stelle? Auch ohne das ich klicke, werden dort in Millisekunden-Bereich Messages geschickt.

                  Screenshot 2026-04-19 203559.png

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • K ktsalti

                    @oliverio
                    ist das die richtige Stelle? Auch ohne das ich klicke, werden dort in Millisekunden-Bereich Messages geschickt.

                    Screenshot 2026-04-19 203559.png

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von
                    #12

                    @ktsalti

                    Ja das ist die richtige Stelle,
                    Die vielen nachrichten bedeuten das die Webseite Regelmäßig mit dem Server Daten austauscht.

                    Da du eine Nachricht markiert hast, sehe ich das der Inhalt leider binär Daten sind.
                    Jetzt wird es leider noch komplizierter. Jetzt müsste man das ebenfalls noch aufschlüsseln. Ohne Dokumentation wird das schwierig.
                    An der Stelle überwiegt dann der Aufwand den nutzen. Insbesondere dann, wenn die Firma da sagt das sie den Zugang nur sehr restriktiv handhaben.

                    Du kannst mal probieren mehrfach hintereinander einen Knopf zu drücken und schauen ob du den messages irgendwelche Unterschiede Gemeinsamkeiten findest die sich auf den Knopfdruck zurück führen lassen.

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    1 Antwort Letzte Antwort
                    0
                    • K Offline
                      K Offline
                      ktsalti
                      schrieb am zuletzt editiert von
                      #13

                      Ich habe es mit Websockets / Binary Message nicht hinbekommen. Ich bleibe bei dem Script - auch wenn es einiges an overhead generiert. Aber es funktioniert sehr gut und ich klicke da ja nicht jeden Tag drauf :)

                      Anbei jetzt mein Script zum Steuern:

                      const puppeteer = require('puppeteer');
                      
                      // Hilfsfunktion für kurze Pause
                      const delay = (ms) => new Promise(res => setTimeout(res, ms));
                      
                      // Konfiguration aller Wallbox-Aktionen
                      const ACTIONS = {
                      
                          ECO: {
                              trigger: '0_userdata.0.Wallbox.SET_ECO',
                              selector: 'body > div.page > main > div:nth-child(3) > div.mud-card-actions > button:nth-child(1) > span'
                          },
                      
                          FULL: {
                              trigger: '0_userdata.0.Wallbox.SET_FULL',
                              selector: 'body > div.page > main > div:nth-child(3) > div.mud-card-actions > button:nth-child(2) > span'
                          },
                      
                          SOLAR: {
                              trigger: '0_userdata.0.Wallbox.SET_SOLAR',
                              selector: 'body > div.page > main > div:nth-child(3) > div.mud-card-actions > button:nth-child(3) > span'
                          },
                      
                          START_CHARGING: {
                              trigger: '0_userdata.0.Wallbox.START_CHARGING',
                              selector: 'body > div.page > main > div:nth-child(2) > div.mud-card-actions > button:nth-child(1) > span'
                          },
                      
                          STOP_CHARGING: {
                              trigger: '0_userdata.0.Wallbox.STOP_CHARGING',
                              selector: 'body > div.page > main > div:nth-child(2) > div.mud-card-actions > button:nth-child(2) > span'
                          }
                      };
                      
                      async function wallboxKlick(actionName, selector) {
                      
                          console.log(`Starte Browser für Aktion: ${actionName}`);
                      
                          const browser = await puppeteer.launch({
                              headless: true,
                              args: ['--no-sandbox', '--disable-setuid-sandbox']
                          });
                      
                          try {
                      
                              const page = await browser.newPage();
                      
                              await page.goto('http://192.168.188.110/wallbox', {
                                  waitUntil: 'networkidle2',
                                  timeout: 30000
                              });
                      
                              // Warten bis Element sichtbar
                              await page.waitForSelector(selector, {
                                  visible: true,
                                  timeout: 10000
                              });
                      
                              // Klick ausführen
                              await page.click(selector);
                      
                              console.log(`Aktion ${actionName} erfolgreich ausgeführt!`);
                      
                          } catch (e) {
                      
                              console.error(`Fehler bei Aktion ${actionName}: ${e.message}`);
                      
                          } finally {
                      
                              await browser.close();
                      
                              console.log('Browser geschlossen.');
                      
                              // Kurz warten und Status aktualisieren
                              await delay(2000);
                      
                              setState("0_userdata.0.Wallbox.Refresh", true);
                          }
                      }
                      
                      // Trigger für alle Aktionen anlegen
                      for (const [actionName, config] of Object.entries(ACTIONS)) {
                      
                          on({
                              id: config.trigger,
                              val: true,
                              ack: false
                          }, async (obj) => {
                      
                              await wallboxKlick(actionName, config.selector);
                      
                              // Trigger zurücksetzen
                              setState(obj.id, false, true);
                          });
                      }
                      

                      und das Script zum abrufen des Status (alle 10 Min und wenn die View aktualisiert wird)

                      const puppeteer = require('puppeteer');
                      
                      // Ziel-Datenpunkte
                      const dpStatus = '0_userdata.0.Wallbox.Status';
                      const dpMode = '0_userdata.0.Wallbox.Mode';
                      
                      async function updateWallboxData() {
                          console.log('Abfrage Wallbox-Daten (Status & Mode) gestartet...');
                          
                          const browser = await puppeteer.launch({
                              headless: true,
                              args: ['--no-sandbox', '--disable-setuid-sandbox']
                          });
                      
                          try {
                              const page = await browser.newPage();
                              await page.goto('http://192.168.188.110/wallbox', { 
                                  waitUntil: 'networkidle2', 
                                  timeout: 30000 
                              });
                      
                              // 1. Status auslesen (h6)
                              
                              const statusSelector = 'body > div.page > main > div:nth-child(4) > div > p';
                      
                              await page.waitForSelector(statusSelector, { timeout: 10000 });
                              const statusText = await page.$eval(statusSelector, el => el.innerText);
                              setState(dpStatus, statusText, true);
                      
                              // 2. Modus auslesen (p)
                              const modeSelector = 'body > div.page > main > div:nth-child(4) > div > h6';
                              
                              await page.waitForSelector(modeSelector, { timeout: 5000 });
                              const modeText = await page.$eval(modeSelector, el => el.innerText);
                              setState(dpMode, modeText, true);
                              
                              console.log(`Daten aktualisiert: Status "${statusText}", Mode "${modeText}"`);
                      
                          } catch (e) {
                              console.error('Fehler beim Auslesen der Wallbox-Daten: ' + e.message);
                          } finally {
                              await browser.close();
                          }
                      }
                      
                      // Trigger: Alle 10 Minuten automatisch
                      schedule("*/10 * * * *", () => {
                          updateWallboxData();
                      });
                      
                      // Manueller Trigger
                      on({id: '0_userdata.0.Wallbox.Refresh', val: true, ack: false}, () => {
                          updateWallboxData();
                          setState('0_userdata.0.Wallbox.Refresh', false, true);
                      });
                      
                      

                      Wie gesagt - funktioniert bisher ohne Probleme und jetzt kümmere ich mich erstmal um eine hübsche View, Telegramm-Nachrichten und Einbindung des eUP - es gibt immer was zu tun :)

                      Gruß
                      Marcus

                      1 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      360

                      Online

                      32.9k

                      Benutzer

                      83.0k

                      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