Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
1.0k Posts 47 Posters 342.9k Views 50 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Flowski

    Jemand eine Idee woher man aktuell einen fertigen Access Point zu kaufen bekommt?

    EisbaeeerE Offline
    EisbaeeerE Offline
    Eisbaeeer
    Developer
    wrote on last edited by
    #821

    @flowski sagte in E-INK Display OpenEPaperLink - Displayanzeige mit Batterie:

    Jemand eine Idee woher man aktuell einen fertigen Access Point zu kaufen bekommt?

    Ich hätte noch einen neuen hier liegen. Es ist ein Yellow_AP Zigbee & sub_GHz Modul. Also dualband.
    Post: https://forum.iobroker.net/post/1180802

    Meld dich mal per PM falls du Interesse hast.
    Gruß Lars

    Kein support per PM. Bitte im Forum Fragen stellen!

    1 Reply Last reply
    0
    • B Offline
      B Offline
      bimmi
      wrote on last edited by
      #822

      Gab wieder neue Firmware Version. Da muss glaub ich @BananaJoe wieder ran.

      Für ap und die solum tags

      Die Bildqualität leidet leider mit dem up und downscale 😅 es wird nie langweilig!

      Gruß Bimmi

      iobroker in einer Proxmox Umgebung auf einem ausrangierten DELL OptiPlex 3080 24GB i5 in der VM auf SSD. Nutze den slaeh zigbee Router mit Tür- und Temperatursensoren von Aqara, viele Tasmota Devices, Unifi AP, Sprinklecontrol, günstige E-INK Displays, Adguard und noch vieles mehr 😬

      BananaJoeB 1 Reply Last reply
      0
      • B bimmi

        Gab wieder neue Firmware Version. Da muss glaub ich @BananaJoe wieder ran.

        Für ap und die solum tags

        Die Bildqualität leidet leider mit dem up und downscale 😅 es wird nie langweilig!

        BananaJoeB Online
        BananaJoeB Online
        BananaJoe
        Most Active
        wrote on last edited by
        #823

        @bimmi Schaue ich morgen mal an.
        Mit welcher Lösung skalierst du im Moment? Ich nutze ja nur noch Playwright (wobei ich mal schauen muss, da müsste inzwischen endlich eine Version verfügbar sein die unter Ubuntu 24.04 läuft)

        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

        B 1 Reply Last reply
        0
        • BananaJoeB BananaJoe

          @bimmi Schaue ich morgen mal an.
          Mit welcher Lösung skalierst du im Moment? Ich nutze ja nur noch Playwright (wobei ich mal schauen muss, da müsste inzwischen endlich eine Version verfügbar sein die unter Ubuntu 24.04 läuft)

          B Offline
          B Offline
          bimmi
          wrote on last edited by
          #824

          @bananajoe ich nutze puppeteer in Verbindung mit convert. Es läuft auch super soweit.

          Ich muss ebenfalls noch ein bisschen testen. Ist mir nur an einem Tag bisher aufgefallen und ich hab alle schon geupdatet.

          Gruß Bimmi

          iobroker in einer Proxmox Umgebung auf einem ausrangierten DELL OptiPlex 3080 24GB i5 in der VM auf SSD. Nutze den slaeh zigbee Router mit Tür- und Temperatursensoren von Aqara, viele Tasmota Devices, Unifi AP, Sprinklecontrol, günstige E-INK Displays, Adguard und noch vieles mehr 😬

          BananaJoeB 1 Reply Last reply
          0
          • F Flowski

            Jemand eine Idee woher man aktuell einen fertigen Access Point zu kaufen bekommt?

            S Offline
            S Offline
            sameOne
            wrote on last edited by
            #825

            @flowski Hier gibt es auch einen AP
            https://www.kleinanzeigen.de/s-anzeige/50x-e-paper-elektronische-preisschild-2-6-und-2-2-/2902317130-168-2829

            1 Reply Last reply
            0
            • BananaJoeB Online
              BananaJoeB Online
              BananaJoe
              Most Active
              wrote on last edited by
              #826

              @Eisbaeeer irgendwie zickt mein Yellow nach dem Upgrade herum:
              8e408e48-b53f-44aa-a06a-e104b7d50e3d-image.png
              3e114ad7-2991-4d79-8a61-df2da63bbec2-image.png
              Die Anzeige ist ja auch neu ... meine ich. Auch auf meinem alten AP dauert das nun einige Sekunden bis die auf "Online" umspringt.
              93075718-0bdc-496b-a8d8-4206fee40ef0-image.png
              Was funktioniert und was nicht bin ich noch am schauen ...

              ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

              S 1 Reply Last reply
              0
              • BananaJoeB BananaJoe

                @Eisbaeeer irgendwie zickt mein Yellow nach dem Upgrade herum:
                8e408e48-b53f-44aa-a06a-e104b7d50e3d-image.png
                3e114ad7-2991-4d79-8a61-df2da63bbec2-image.png
                Die Anzeige ist ja auch neu ... meine ich. Auch auf meinem alten AP dauert das nun einige Sekunden bis die auf "Online" umspringt.
                93075718-0bdc-496b-a8d8-4206fee40ef0-image.png
                Was funktioniert und was nicht bin ich noch am schauen ...

                S Offline
                S Offline
                sameOne
                wrote on last edited by
                #827

                @bananajoe Es gibt derzeit einen Bug in der C6 Firmware,
                Um den erst einmal zu Fixen diese 4 dateien einer alten C6 Firmware in den base Ordner vom AP hochladen und dann unter update "Update ESP32-C6" Klicken jedoch vorher den hacken von download latest version entfernen

                https://github.com/OpenEPaperLink/OpenEPaperLink/tree/ddd043f44fae702f82c7132008a323d5e8301a0f/binaries/ESP32-C6

                BananaJoeB 1 Reply Last reply
                1
                • S sameOne

                  @bananajoe Es gibt derzeit einen Bug in der C6 Firmware,
                  Um den erst einmal zu Fixen diese 4 dateien einer alten C6 Firmware in den base Ordner vom AP hochladen und dann unter update "Update ESP32-C6" Klicken jedoch vorher den hacken von download latest version entfernen

                  https://github.com/OpenEPaperLink/OpenEPaperLink/tree/ddd043f44fae702f82c7132008a323d5e8301a0f/binaries/ESP32-C6

                  BananaJoeB Online
                  BananaJoeB Online
                  BananaJoe
                  Most Active
                  wrote on last edited by
                  #828

                  @atc Danke, hast mir den Tag gerettet.
                  Ich hatte mir das schon gedacht (nachdem ich gesehen habe das in der aktuellen Version irgendeine Pin-Belegung geändert wurde) und war auf der Suche nach einer älteren, bin aber noch nicht fündig geworden.

                  ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                  1 Reply Last reply
                  0
                  • B bimmi

                    @bananajoe ich nutze puppeteer in Verbindung mit convert. Es läuft auch super soweit.

                    Ich muss ebenfalls noch ein bisschen testen. Ist mir nur an einem Tag bisher aufgefallen und ich hab alle schon geupdatet.

                    BananaJoeB Online
                    BananaJoeB Online
                    BananaJoe
                    Most Active
                    wrote on last edited by
                    #829

                    @bimmi warum sollte sich da eigentlich was am Bild ändern nach dem Update?

                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                    1 Reply Last reply
                    0
                    • B Offline
                      B Offline
                      Beowolf
                      wrote on last edited by
                      #830

                      Ich habe drei von den yellow APs hier laufen. Damit habe ich keine Probleme.

                      Ich hatte allerdings erst auf "Update latest Version" geklickt und musste danach noch einmal bei "Environment" den "ESP32_S3_16_8_YELLOW_AP" auswählen.
                      Dann habe ich bei ESP32 und Filesystem das Update noch mal manuell angestossen.

                      Habe 75 TAGs am laufen.

                      72.jpg

                      Die Natur braucht nicht unseren Schutz, sie braucht unsere Abwesenheit.

                      O BananaJoeB 3 Replies Last reply
                      1
                      • B Beowolf

                        Ich habe drei von den yellow APs hier laufen. Damit habe ich keine Probleme.

                        Ich hatte allerdings erst auf "Update latest Version" geklickt und musste danach noch einmal bei "Environment" den "ESP32_S3_16_8_YELLOW_AP" auswählen.
                        Dann habe ich bei ESP32 und Filesystem das Update noch mal manuell angestossen.

                        Habe 75 TAGs am laufen.

                        72.jpg

                        O Online
                        O Online
                        oxident
                        wrote on last edited by
                        #831

                        @beowolf 75 Tags? Hast Du damit tapeziert??

                        B 1 Reply Last reply
                        0
                        • B Beowolf

                          Ich habe drei von den yellow APs hier laufen. Damit habe ich keine Probleme.

                          Ich hatte allerdings erst auf "Update latest Version" geklickt und musste danach noch einmal bei "Environment" den "ESP32_S3_16_8_YELLOW_AP" auswählen.
                          Dann habe ich bei ESP32 und Filesystem das Update noch mal manuell angestossen.

                          Habe 75 TAGs am laufen.

                          72.jpg

                          BananaJoeB Online
                          BananaJoeB Online
                          BananaJoe
                          Most Active
                          wrote on last edited by
                          #832

                          @beowolf Ich hatte erst danach geschnallt das es schlich verstellt war, gibt ja auch schon ein Issue dazu auf Github:
                          https://github.com/OpenEPaperLink/OpenEPaperLink/issues/409
                          Und dann unten den ESP geupdated, das war wohl mein Problem

                          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                          1 Reply Last reply
                          0
                          • B Beowolf

                            Ich habe drei von den yellow APs hier laufen. Damit habe ich keine Probleme.

                            Ich hatte allerdings erst auf "Update latest Version" geklickt und musste danach noch einmal bei "Environment" den "ESP32_S3_16_8_YELLOW_AP" auswählen.
                            Dann habe ich bei ESP32 und Filesystem das Update noch mal manuell angestossen.

                            Habe 75 TAGs am laufen.

                            72.jpg

                            BananaJoeB Online
                            BananaJoeB Online
                            BananaJoe
                            Most Active
                            wrote on last edited by BananaJoe
                            #833

                            @beowolf sagte in E-INK Display OpenEPaperLink - Displayanzeige mit Batterie:

                            Habe 75 TAGs am laufen.

                            Ist man da nicht recht viel mit Batteriewechseln beschäftigt? Wie behältst du da den Überblick wo ein Wechsel Notwendig ist? So etwas wie den Device-Watcher gibt es hier ja nicht.

                            ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                            1 Reply Last reply
                            0
                            • B Offline
                              B Offline
                              Beowolf
                              wrote on last edited by
                              #834

                              Die Batteriespannung kann ich mir aber holen.

                              batterie.jpg

                              Ich habe dieses Skript ja am laufen.

                              // HIER DIE IP ADRESSE VOM OEPL ACCESS POINT EINTRAGEN
                              const serverIP = 'xxx.xxx.xxx.xxx';  // z.B. 192.168.1.71
                              
                              // AB HIER NICHTS MEHR ÄNDERN!
                              const WebSocket = require('ws');
                              const http = require('http');
                              const wsUrl = `ws://${serverIP}/ws`;  // WebSocket-URL
                              
                              let ws;
                              let pingInterval;
                              let scriptStopping = false;  // Flag, um zu prüfen, ob das Skript gestoppt wird
                              
                              const controlState = '0_userdata.0.Tag_Buttons.Button_Skript_Steuerung.Button_Tags_Dachgeschoss';  // Datenpunkt zur Steuerung des Skripts
                              
                              function ensureOpenEPaperLinkFolderExists(callback) {
                                  const OpenEPaperLinkFolderPath = '0_userdata.0.Tag_Buttons.Dachgeschoss';
                                  getObject(OpenEPaperLinkFolderPath, (err, obj) => {
                                      if (err || !obj) {
                                          setObject(OpenEPaperLinkFolderPath, {
                                              type: 'channel',
                                              common: { name: 'Open E-Paper Link' },
                                              native: {}
                                          }, callback);
                                      } else {
                                          callback();
                                      }
                                  });
                              }
                              
                              function ensureChannelExists(path, alias, callback) {
                                  getObject(path, (err, obj) => {
                                      if (err || !obj) {
                                          setObject(path, {
                                              type: 'channel',
                                              common: { name: alias || 'Unbekanntes Gerät' },
                                              native: {}
                                          }, callback);
                                      } else if (obj.common.name !== alias) {
                                          extendObject(path, { common: { name: alias } }, callback);
                                      } else {
                                          callback();
                                      }
                                  });
                              }
                              
                              function createStateAndSet(statePath, value) {
                                  setObject(statePath, {
                                      type: 'state',
                                      common: {
                                          name: statePath.split('.').pop(),
                                          type: 'string',
                                          role: 'value',
                                          read: true,
                                          write: true
                                      },
                                      native: {}
                                  }, (err) => {
                                      if (!err) {
                                          setState(statePath, String(value), true);
                                      }
                                  });
                              }
                              
                              function updateStateIfChanged(statePath, value) {
                                  getState(statePath, (err, state) => {
                                      if (err || !state) {
                                          createStateAndSet(statePath, String(value));
                                      } else if (state.val !== String(value)) {
                                          setState(statePath, String(value), true);
                                      }
                                  });
                              }
                              
                              function fetchDimensions(hwType, callback) {
                                  const hwTypeHex = hwType.toString(16).padStart(2, '0').toUpperCase();  // Convert hwType to two-digit uppercase hexadecimal
                                  const url = `http://${serverIP}/tagtypes/${hwTypeHex}.json`;
                                  http.get(url, (res) => {
                                      let data = '';
                                      res.on('data', (chunk) => data += chunk);
                                      res.on('end', () => {
                                          if (res.statusCode === 200) {
                                              try {
                                                  const dimensions = JSON.parse(data);
                                                  callback(null, dimensions);
                                              } catch (e) {
                                                  callback(`Error parsing JSON from ${url}: ${e}`);
                                              }
                                          } else {
                                              callback(`HTTP Error ${res.statusCode} from ${url}`);
                                          }
                                      });
                                  }).on('error', (err) => {
                                      callback(`Error fetching ${url}: ${err.message}`);
                                  });
                              }
                              
                              function handleHWType(basePath, hwType) {
                                  createStateAndSet(`${basePath}.hwType`, String(hwType));  // Save hwType as a state
                                  fetchDimensions(hwType, (err, dimensions) => {
                                      if (!err && dimensions) {
                                          createStateAndSet(`${basePath}.height`, String(dimensions.height));
                                          createStateAndSet(`${basePath}.width`, String(dimensions.width));
                                          createStateAndSet(`${basePath}.name`, String(dimensions.name));
                                          if (dimensions.colors) {
                                              createStateAndSet(`${basePath}.colors`, String(dimensions.colors));
                                          }
                                          if (dimensions.colortable) {
                                              createStateAndSet(`${basePath}.colortable`, JSON.stringify(dimensions.colortable));
                                          }
                                      } else {
                                          // console.error(`Failed to fetch or set dimensions for hwType ${hwType}: ${err}`);
                                      }
                                  });
                              }
                              
                              function connectWebSocket() {
                                  if (scriptStopping) {
                                      return;  // Wenn das Skript gestoppt wird, keine Verbindung mehr herstellen
                                  }
                              
                                  ws = new WebSocket(wsUrl);
                                  ws.on('open', function open() {
                                      // console.log('Verbunden mit WebSocket');
                                      startHeartbeat();
                                  });
                              
                                  ws.on('message', function incoming(data) {
                                      // console.log('Daten empfangen:', data);
                                      if (data) {
                                          try {
                                              let parsedData = JSON.parse(data);
                                              // console.log('Verarbeitete Daten:', JSON.stringify(parsedData, null, 2));
                                              handleData(parsedData);
                                          } catch (err) {
                                              // console.error('Fehler bei der Verarbeitung der Daten:', err);
                                          }
                                      } else {
                                          // console.log('Keine Daten oder leere Nachricht empfangen');
                                      }
                                  });
                              
                                  ws.on('close', function close() {
                                      if (!scriptStopping) {
                                          // console.log('WebSocket-Verbindung geschlossen, versuche neu zu verbinden...');
                                          clearInterval(pingInterval);
                                          setTimeout(connectWebSocket, 5000);
                                      }
                                  });
                              
                                  ws.on('error', function error(err) {
                                      // console.error('WebSocket-Fehler:', err);
                                  });
                              }
                              
                              function startHeartbeat() {
                                  pingInterval = setInterval(() => {
                                      if (ws.readyState === WebSocket.OPEN) {
                                          ws.ping(() => {
                                              // console.log('Ping sent');
                                          });
                                      }
                                  }, 10000); // Send ping every 10 seconds
                              
                                  ws.on('pong', () => {
                                      // console.log('Pong received');
                                  });
                              }
                              
                              function handleData(parsedData) {
                                  if (parsedData.tags && Array.isArray(parsedData.tags)) {
                                      parsedData.tags.forEach(tag => {
                                          let basePath = `0_userdata.0.Tag_Buttons.Dachgeschoss.${tag.mac.replace(/:/g, '')}`;
                                          ensureChannelExists(basePath, tag.alias, () => {
                                              Object.keys(tag).forEach(key => {
                                                  let statePath = `${basePath}.${key}`;
                                                  let value = tag[key];
                                                  updateStateIfChanged(statePath, value);
                                                  if (key === 'hwType') {
                                                      handleHWType(basePath, tag.hwType);
                                                  }
                                              });
                                          });
                                      });
                                  }
                              }
                              
                              function disconnectWebSocket() {
                                  if (ws) {
                                      ws.close();
                                      ws = null;
                                  }
                                  clearInterval(pingInterval);
                              }
                              
                              // Skript-Start und -Stopp basierend auf einem Datenpunkt steuern
                              function setupScriptControl() {
                                  setObject(controlState, {
                                      type: 'state',
                                      common: {
                                          name: 'EPaper Script Control',
                                          type: 'boolean',
                                          role: 'switch',
                                          read: true,
                                          write: true,
                                          def: false
                                      },
                                      native: {}
                                  });
                              
                                  on({id: controlState, change: 'ne'}, (obj) => {
                                      const state = obj.state.val;
                                      if (state) {
                                          // Skript starten
                                          scriptStopping = false;
                                          ensureOpenEPaperLinkFolderExists(connectWebSocket);
                                      } else {
                                          // Skript stoppen
                                          scriptStopping = true;
                                          disconnectWebSocket();
                                          // console.log('Skript beendet durch Steuer-Datenpunkt');
                                      }
                                  });
                              }
                              
                              // Initiale Einrichtung
                              setupScriptControl();
                              

                              Die Natur braucht nicht unseren Schutz, sie braucht unsere Abwesenheit.

                              BananaJoeB 1 Reply Last reply
                              1
                              • O oxident

                                @beowolf 75 Tags? Hast Du damit tapeziert??

                                B Offline
                                B Offline
                                Beowolf
                                wrote on last edited by
                                #835

                                @oxident sagte in E-INK Display OpenEPaperLink - Displayanzeige mit Batterie:

                                @beowolf 75 Tags? Hast Du damit tapeziert??

                                Die sind nur alle am AP angemeldet. Nur zum Testen.

                                Die Natur braucht nicht unseren Schutz, sie braucht unsere Abwesenheit.

                                1 Reply Last reply
                                1
                                • haselchenH haselchen

                                  @bimmi

                                  Und schon ist das Projekt gestorben 😥

                                  S Online
                                  S Online
                                  Stefan341
                                  wrote on last edited by
                                  #836

                                  @haselchen
                                  Ich löte das gerne für dich 🙂

                                  haselchenH 1 Reply Last reply
                                  0
                                  • S Stefan341

                                    @haselchen
                                    Ich löte das gerne für dich 🙂

                                    haselchenH Offline
                                    haselchenH Offline
                                    haselchen
                                    Most Active
                                    wrote on last edited by
                                    #837

                                    @stefan341

                                    Was genau? 🤔

                                    Synology DS218+ & 2 x Fujitsu Esprimo (VM/Container) + FritzBox7590 + 2 AVM 3000 Repeater & Homematic & HUE & Osram & Xiaomi, NPM 10.9.4, Nodejs 22.21.0 ,JS Controller 7.0.7 ,Admin 7.7.19

                                    1 Reply Last reply
                                    0
                                    • haselchenH haselchen

                                      @bimmi

                                      Und schon ist das Projekt gestorben 😥

                                      HomoranH Do not disturb
                                      HomoranH Do not disturb
                                      Homoran
                                      Global Moderator Administrators
                                      wrote on last edited by
                                      #838

                                      @haselchen sagte in E-INK Display OpenEPaperLink - Displayanzeige mit Batterie:

                                      @bimmi

                                      Und schon ist das Projekt gestorben 😥

                                      das

                                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                      haselchenH 1 Reply Last reply
                                      0
                                      • HomoranH Homoran

                                        @haselchen sagte in E-INK Display OpenEPaperLink - Displayanzeige mit Batterie:

                                        @bimmi

                                        Und schon ist das Projekt gestorben 😥

                                        das

                                        haselchenH Offline
                                        haselchenH Offline
                                        haselchen
                                        Most Active
                                        wrote on last edited by haselchen
                                        #839

                                        @homoran
                                        @stefan341

                                        Da muss ich mich natürlich entschuldigen, dass ich einen 1,5 Jahre alten Post nicht mehr weiß 😂

                                        Edit: Dank eines Forumsmitgliedes ist der Lötkolben nichts Fremdes mehr ☺️

                                        Synology DS218+ & 2 x Fujitsu Esprimo (VM/Container) + FritzBox7590 + 2 AVM 3000 Repeater & Homematic & HUE & Osram & Xiaomi, NPM 10.9.4, Nodejs 22.21.0 ,JS Controller 7.0.7 ,Admin 7.7.19

                                        1 Reply Last reply
                                        2
                                        • B Beowolf

                                          Die Batteriespannung kann ich mir aber holen.

                                          batterie.jpg

                                          Ich habe dieses Skript ja am laufen.

                                          // HIER DIE IP ADRESSE VOM OEPL ACCESS POINT EINTRAGEN
                                          const serverIP = 'xxx.xxx.xxx.xxx';  // z.B. 192.168.1.71
                                          
                                          // AB HIER NICHTS MEHR ÄNDERN!
                                          const WebSocket = require('ws');
                                          const http = require('http');
                                          const wsUrl = `ws://${serverIP}/ws`;  // WebSocket-URL
                                          
                                          let ws;
                                          let pingInterval;
                                          let scriptStopping = false;  // Flag, um zu prüfen, ob das Skript gestoppt wird
                                          
                                          const controlState = '0_userdata.0.Tag_Buttons.Button_Skript_Steuerung.Button_Tags_Dachgeschoss';  // Datenpunkt zur Steuerung des Skripts
                                          
                                          function ensureOpenEPaperLinkFolderExists(callback) {
                                              const OpenEPaperLinkFolderPath = '0_userdata.0.Tag_Buttons.Dachgeschoss';
                                              getObject(OpenEPaperLinkFolderPath, (err, obj) => {
                                                  if (err || !obj) {
                                                      setObject(OpenEPaperLinkFolderPath, {
                                                          type: 'channel',
                                                          common: { name: 'Open E-Paper Link' },
                                                          native: {}
                                                      }, callback);
                                                  } else {
                                                      callback();
                                                  }
                                              });
                                          }
                                          
                                          function ensureChannelExists(path, alias, callback) {
                                              getObject(path, (err, obj) => {
                                                  if (err || !obj) {
                                                      setObject(path, {
                                                          type: 'channel',
                                                          common: { name: alias || 'Unbekanntes Gerät' },
                                                          native: {}
                                                      }, callback);
                                                  } else if (obj.common.name !== alias) {
                                                      extendObject(path, { common: { name: alias } }, callback);
                                                  } else {
                                                      callback();
                                                  }
                                              });
                                          }
                                          
                                          function createStateAndSet(statePath, value) {
                                              setObject(statePath, {
                                                  type: 'state',
                                                  common: {
                                                      name: statePath.split('.').pop(),
                                                      type: 'string',
                                                      role: 'value',
                                                      read: true,
                                                      write: true
                                                  },
                                                  native: {}
                                              }, (err) => {
                                                  if (!err) {
                                                      setState(statePath, String(value), true);
                                                  }
                                              });
                                          }
                                          
                                          function updateStateIfChanged(statePath, value) {
                                              getState(statePath, (err, state) => {
                                                  if (err || !state) {
                                                      createStateAndSet(statePath, String(value));
                                                  } else if (state.val !== String(value)) {
                                                      setState(statePath, String(value), true);
                                                  }
                                              });
                                          }
                                          
                                          function fetchDimensions(hwType, callback) {
                                              const hwTypeHex = hwType.toString(16).padStart(2, '0').toUpperCase();  // Convert hwType to two-digit uppercase hexadecimal
                                              const url = `http://${serverIP}/tagtypes/${hwTypeHex}.json`;
                                              http.get(url, (res) => {
                                                  let data = '';
                                                  res.on('data', (chunk) => data += chunk);
                                                  res.on('end', () => {
                                                      if (res.statusCode === 200) {
                                                          try {
                                                              const dimensions = JSON.parse(data);
                                                              callback(null, dimensions);
                                                          } catch (e) {
                                                              callback(`Error parsing JSON from ${url}: ${e}`);
                                                          }
                                                      } else {
                                                          callback(`HTTP Error ${res.statusCode} from ${url}`);
                                                      }
                                                  });
                                              }).on('error', (err) => {
                                                  callback(`Error fetching ${url}: ${err.message}`);
                                              });
                                          }
                                          
                                          function handleHWType(basePath, hwType) {
                                              createStateAndSet(`${basePath}.hwType`, String(hwType));  // Save hwType as a state
                                              fetchDimensions(hwType, (err, dimensions) => {
                                                  if (!err && dimensions) {
                                                      createStateAndSet(`${basePath}.height`, String(dimensions.height));
                                                      createStateAndSet(`${basePath}.width`, String(dimensions.width));
                                                      createStateAndSet(`${basePath}.name`, String(dimensions.name));
                                                      if (dimensions.colors) {
                                                          createStateAndSet(`${basePath}.colors`, String(dimensions.colors));
                                                      }
                                                      if (dimensions.colortable) {
                                                          createStateAndSet(`${basePath}.colortable`, JSON.stringify(dimensions.colortable));
                                                      }
                                                  } else {
                                                      // console.error(`Failed to fetch or set dimensions for hwType ${hwType}: ${err}`);
                                                  }
                                              });
                                          }
                                          
                                          function connectWebSocket() {
                                              if (scriptStopping) {
                                                  return;  // Wenn das Skript gestoppt wird, keine Verbindung mehr herstellen
                                              }
                                          
                                              ws = new WebSocket(wsUrl);
                                              ws.on('open', function open() {
                                                  // console.log('Verbunden mit WebSocket');
                                                  startHeartbeat();
                                              });
                                          
                                              ws.on('message', function incoming(data) {
                                                  // console.log('Daten empfangen:', data);
                                                  if (data) {
                                                      try {
                                                          let parsedData = JSON.parse(data);
                                                          // console.log('Verarbeitete Daten:', JSON.stringify(parsedData, null, 2));
                                                          handleData(parsedData);
                                                      } catch (err) {
                                                          // console.error('Fehler bei der Verarbeitung der Daten:', err);
                                                      }
                                                  } else {
                                                      // console.log('Keine Daten oder leere Nachricht empfangen');
                                                  }
                                              });
                                          
                                              ws.on('close', function close() {
                                                  if (!scriptStopping) {
                                                      // console.log('WebSocket-Verbindung geschlossen, versuche neu zu verbinden...');
                                                      clearInterval(pingInterval);
                                                      setTimeout(connectWebSocket, 5000);
                                                  }
                                              });
                                          
                                              ws.on('error', function error(err) {
                                                  // console.error('WebSocket-Fehler:', err);
                                              });
                                          }
                                          
                                          function startHeartbeat() {
                                              pingInterval = setInterval(() => {
                                                  if (ws.readyState === WebSocket.OPEN) {
                                                      ws.ping(() => {
                                                          // console.log('Ping sent');
                                                      });
                                                  }
                                              }, 10000); // Send ping every 10 seconds
                                          
                                              ws.on('pong', () => {
                                                  // console.log('Pong received');
                                              });
                                          }
                                          
                                          function handleData(parsedData) {
                                              if (parsedData.tags && Array.isArray(parsedData.tags)) {
                                                  parsedData.tags.forEach(tag => {
                                                      let basePath = `0_userdata.0.Tag_Buttons.Dachgeschoss.${tag.mac.replace(/:/g, '')}`;
                                                      ensureChannelExists(basePath, tag.alias, () => {
                                                          Object.keys(tag).forEach(key => {
                                                              let statePath = `${basePath}.${key}`;
                                                              let value = tag[key];
                                                              updateStateIfChanged(statePath, value);
                                                              if (key === 'hwType') {
                                                                  handleHWType(basePath, tag.hwType);
                                                              }
                                                          });
                                                      });
                                                  });
                                              }
                                          }
                                          
                                          function disconnectWebSocket() {
                                              if (ws) {
                                                  ws.close();
                                                  ws = null;
                                              }
                                              clearInterval(pingInterval);
                                          }
                                          
                                          // Skript-Start und -Stopp basierend auf einem Datenpunkt steuern
                                          function setupScriptControl() {
                                              setObject(controlState, {
                                                  type: 'state',
                                                  common: {
                                                      name: 'EPaper Script Control',
                                                      type: 'boolean',
                                                      role: 'switch',
                                                      read: true,
                                                      write: true,
                                                      def: false
                                                  },
                                                  native: {}
                                              });
                                          
                                              on({id: controlState, change: 'ne'}, (obj) => {
                                                  const state = obj.state.val;
                                                  if (state) {
                                                      // Skript starten
                                                      scriptStopping = false;
                                                      ensureOpenEPaperLinkFolderExists(connectWebSocket);
                                                  } else {
                                                      // Skript stoppen
                                                      scriptStopping = true;
                                                      disconnectWebSocket();
                                                      // console.log('Skript beendet durch Steuer-Datenpunkt');
                                                  }
                                              });
                                          }
                                          
                                          // Initiale Einrichtung
                                          setupScriptControl();
                                          
                                          BananaJoeB Online
                                          BananaJoeB Online
                                          BananaJoe
                                          Most Active
                                          wrote on last edited by
                                          #840

                                          @beowolf tja, da gewinne ich wohl keinen Blumentopf mit:
                                          7e631b71-5c68-4da9-9966-3756fe0e8416-image.png
                                          Da steht immer 2600
                                          wobei einen habe ich gefunden wo der wert niedriger ist, dann zeigt der Datenpunkt etwas an wenn der Wert unter dem Schwellwert liegt?

                                          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 44TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=157 Tasmota/Shelly || >=88 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 900/750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                          S B 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          614

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe