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. 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.5k

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

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

E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
1.0k Beiträge 49 Kommentatoren 346.6k Aufrufe 52 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.
  • 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
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • F Flowski

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

      S Offline
      S Offline
      sameOne
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • BananaJoeB Online
        BananaJoeB Online
        BananaJoe
        Most Active
        schrieb am zuletzt editiert von
        #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 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

        S 1 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

            1 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

              1 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                Beowolf
                schrieb am zuletzt editiert von
                #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 Antworten Letzte Antwort
                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 Offline
                  O Offline
                  oxident
                  schrieb am zuletzt editiert von
                  #831

                  @beowolf 75 Tags? Hast Du damit tapeziert??

                  B 1 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                    1 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von 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 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                      1 Antwort Letzte Antwort
                      0
                      • B Offline
                        B Offline
                        Beowolf
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        1
                        • O oxident

                          @beowolf 75 Tags? Hast Du damit tapeziert??

                          B Offline
                          B Offline
                          Beowolf
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          1
                          • haselchenH haselchen

                            @bimmi

                            Und schon ist das Projekt gestorben :disappointed_relieved:

                            S Offline
                            S Offline
                            Stefan341
                            schrieb am zuletzt editiert von
                            #836

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

                            haselchenH 1 Antwort Letzte Antwort
                            0
                            • S Stefan341

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

                              haselchenH Offline
                              haselchenH Offline
                              haselchen
                              Most Active
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • haselchenH haselchen

                                @bimmi

                                Und schon ist das Projekt gestorben :disappointed_relieved:

                                HomoranH Nicht stören
                                HomoranH Nicht stören
                                Homoran
                                Global Moderator Administrators
                                schrieb am zuletzt editiert von
                                #838

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

                                @bimmi

                                Und schon ist das Projekt gestorben :disappointed_relieved:

                                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 Antwort Letzte Antwort
                                0
                                • HomoranH Homoran

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

                                  @bimmi

                                  Und schon ist das Projekt gestorben :disappointed_relieved:

                                  das

                                  haselchenH Offline
                                  haselchenH Offline
                                  haselchen
                                  Most Active
                                  schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                                  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
                                    schrieb am zuletzt editiert von
                                    #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 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                    S B 2 Antworten Letzte Antwort
                                    0
                                    • BananaJoeB BananaJoe

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

                                      S Offline
                                      S Offline
                                      sameOne
                                      schrieb am zuletzt editiert von sameOne
                                      #841

                                      @bananajoe Der Mikrocontroller in den M2 Displays hat keinen ADC, deswegen wird als Hack das E-Paper Display genutzt um die aktuelle Spannung zu erfahren, dieses hat aber nur eine Range von 2.1-2.6 V also ist jede Batterie über 2.6V nicht detektierbar und wird als 2.6V angezeigt

                                      1 Antwort Letzte Antwort
                                      1
                                      • BananaJoeB BananaJoe

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

                                        B Offline
                                        B Offline
                                        Beowolf
                                        schrieb am zuletzt editiert von
                                        #842

                                        @bananajoe

                                        Ich habe diese hier

                                        https://github.com/OpenEPaperLink/OpenEPaperLink/wiki/2.9″-EL029H3WRA

                                        Dort funktioniert es.

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

                                        S B 2 Antworten Letzte Antwort
                                        0
                                        • B Beowolf

                                          @bananajoe

                                          Ich habe diese hier

                                          https://github.com/OpenEPaperLink/OpenEPaperLink/wiki/2.9″-EL029H3WRA

                                          Dort funktioniert es.

                                          S Offline
                                          S Offline
                                          sameOne
                                          schrieb am zuletzt editiert von
                                          #843

                                          @beowolf Das nutzt einen anderen Mikrocontroller, nRF52811/ARM und ist ein M3, die M2 nutzen den ZBS243/8051 der keinen ADC hat

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          789

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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