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

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

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

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

E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
1.0k Beiträge 48 Kommentatoren 344.9k 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.
  • 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
                      • B Offline
                        B Offline
                        bimmi
                        schrieb am zuletzt editiert von
                        #844

                        @atc ah hi Aaron! Jetzt seh ich es erst an deinem Nic! Schön das du auch hier bist!

                        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 😬

                        1 Antwort Letzte Antwort
                        1
                        • B Beowolf

                          @bananajoe

                          Ich habe diese hier

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

                          Dort funktioniert es.

                          B Offline
                          B Offline
                          bimmi
                          schrieb am zuletzt editiert von
                          #845

                          @beowolf das mit dem rescale hat sich denke ich erledigt. Lag wohl am ersten update vom tag. Die neuesten gehen wieder einwandfrei!

                          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 😬

                          1 Antwort Letzte Antwort
                          1
                          • B Offline
                            B Offline
                            Beowolf
                            schrieb am zuletzt editiert von Beowolf
                            #846

                            Ich habe plötzlich diese Meldungen:

                            puppeteer.0
                            	2025-01-06 23:42:16.640	error	Could not take screenshot of "http://192.168.49.38:8082/vis/index.html?E-Paper-Obergeschoss#EPaper-Schlafzimmer-Manfred": Page.captureScreenshot timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
                            javascript.0
                            	2025-01-06 23:40:49.337	warn	script.js.common.EPaper-Displays.Obergeschoss.Schlafzimmer_Manfred: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Obergeschoss#EPaper-Schlafzimmer-Manfred => undefined
                            javascript.0
                            	2025-01-06 23:40:20.117	warn	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerl%C3%BCftung => undefined
                            javascript.0
                            	2025-01-06 23:40:01.357	warn	script.js.common.EPaper-Displays.Erdgeschoss.Büro_Manfred: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Erdgeschoss#B%C3%BCro_Manfred => undefined
                            javascript.0
                            	2025-01-06 23:39:58.468	warn	script.js.common.EPaper-Displays.Obergeschoss.Wohnzimmer: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Obergeschoss#EPaper-Wohnzimmer => undefined
                            javascript.0
                            	2025-01-06 23:39:44.153	warn	script.js.common.EPaper-Displays.Obergeschoss.Küche: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Obergeschoss#EPaper-K%C3%BCche => undefined
                            puppeteer.0
                            	2025-01-06 23:39:16.372	error	Could not take screenshot of "http://192.168.49.38:8082/vis/index.html?E-Paper-Erdgeschoss#CopyShop": Page.captureScreenshot timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
                            javascript.0
                            	2025-01-06 23:39:05.643	warn	script.js.common.EPaper-Displays.Obergeschoss.Hauswirtschaftsraum: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Obergeschoss#EPaper-HWR => undefined
                            javascript.0
                            	2025-01-06 23:37:42.794	warn	script.js.common.EPaper-Displays.Erdgeschoss.Papierraum: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Erdgeschoss#Papierraum => undefined
                            javascript.0
                            	2025-01-06 23:36:57.889	warn	script.js.common.EPaper-Displays.Obergeschoss.Hauswirtschaftsraum: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Obergeschoss#EPaper-HWR => undefined
                            puppeteer.0
                            	2025-01-06 23:36:15.488	error	Could not take screenshot of "http://192.168.49.38:8082/vis/index.html?E-Paper-Erdgeschoss#B%C3%BCro_Manfred": Page.captureScreenshot timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
                            

                            Hatte mal alles wieder upgedatet.
                            Jetzt bin ich mir nicht sicher wo das Problem liegt.

                            Die "VIS-Ansichten" sind alle da.

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

                            1 Antwort Letzte Antwort
                            0
                            • B Offline
                              B Offline
                              Beowolf
                              schrieb am zuletzt editiert von Beowolf
                              #847

                              Muß hier noch etwas rein?

                              pupp.jpg

                              Ich verstehe das nicht.

                              Mit diesem Skript

                              sendTo('puppeteer.0', 'screenshot', { 
                                  url: urlOfVISView,                     
                                  path: imageSaveToFilenameWithPath,     
                                  width: viewWidth,                      
                                  height: viewHeight,                    
                                  quality: jpgQuality,                   
                              
                                  waitOption: {
                                      waitForSelector: waitForSelector,  
                                      waitForTimeout: 25000              
                                  },
                              
                                  fullPage: false,                       
                              
                                  clip: {         
                                      x: cutoutX,                        
                                      y: cutoutY,                        
                                      width: cutoutWidth,                
                                      height: cutoutHeight               
                                  }
                              }, obj => {
                                  if (obj.error) {
                                      console.warn("Fehler beim Aufruf der View: " + urlOfVISView + " => " + obj.error.message);
                                  } else {
                                      const http = require('http'); 
                                      const https = require('https');
                                      const { URL } = require('url');
                              
                                      const boundary = '--------------------------' + Date.now().toString(16);
                                      const CRLF = '\r\n';
                              
                                      // Payload-Erstellung
                                      const payload = Buffer.concat([
                                          Buffer.from(`--${boundary}${CRLF}Content-Disposition: form-data; name="dither"${CRLF}${CRLF}0${CRLF}`),
                                          Buffer.from(`--${boundary}${CRLF}Content-Disposition: form-data; name="mac"${CRLF}${CRLF}${ePaperMAC}${CRLF}`),
                                          Buffer.from(`--${boundary}${CRLF}Content-Disposition: form-data; name="image"; filename="screenshot.jpg"${CRLF}Content-Type: image/jpeg${CRLF}${CRLF}`),
                                          Buffer.from(Object.values(obj.result), 'binary'),
                                          Buffer.from(`${CRLF}--${boundary}--${CRLF}`)
                                      ]);
                              
                                      // URL Parsing
                                      const url = new URL(imageUploadURL);
                                      const options = {
                                          hostname: url.hostname,
                                          port: url.port || (url.protocol === 'https:' ? 443 : 80),
                                          path: url.pathname + (url.search || ''),
                                          method: 'POST',
                                          headers: {
                                              'Content-Type': 'multipart/form-data; boundary=' + boundary,
                                              'Content-Length': payload.length
                                          }
                                      };
                              
                                      // Protokollwahl
                                      const protocol = url.protocol === 'https:' ? https : http;
                              
                                      // HTTP Request
                                      const req = protocol.request(options, function(res) {
                                          console.log('ImageUploadStatusCode:', res.statusCode);
                                          res.on('data', function(chunk) {
                                              console.log('Response:', chunk.toString());
                                          });
                                      });
                              
                                      req.on('error', function(e) {
                                          console.error('Fehler beim Hochladen:', e.message);
                                      });
                              
                                      req.write(payload);
                                      req.end();
                                  }
                              });
                              

                              hat es bis jetzt funktioniert.

                              Jetzt kommt immer das.

                              puppeteer.0
                              	2025-01-07 10:33:06.343	error	Could not take screenshot of "http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung": Page.captureScreenshot timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
                              mqtt.0
                              	2025-01-07 10:32:45.479	warn	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung => undefined
                              

                              Der "VIS-Link" funktioniert. Dort wird auch sofort die Änderung sichtbar.

                              Was kann ich noch testen?

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

                              ? D 2 Antworten Letzte Antwort
                              0
                              • B Beowolf

                                Muß hier noch etwas rein?

                                pupp.jpg

                                Ich verstehe das nicht.

                                Mit diesem Skript

                                sendTo('puppeteer.0', 'screenshot', { 
                                    url: urlOfVISView,                     
                                    path: imageSaveToFilenameWithPath,     
                                    width: viewWidth,                      
                                    height: viewHeight,                    
                                    quality: jpgQuality,                   
                                
                                    waitOption: {
                                        waitForSelector: waitForSelector,  
                                        waitForTimeout: 25000              
                                    },
                                
                                    fullPage: false,                       
                                
                                    clip: {         
                                        x: cutoutX,                        
                                        y: cutoutY,                        
                                        width: cutoutWidth,                
                                        height: cutoutHeight               
                                    }
                                }, obj => {
                                    if (obj.error) {
                                        console.warn("Fehler beim Aufruf der View: " + urlOfVISView + " => " + obj.error.message);
                                    } else {
                                        const http = require('http'); 
                                        const https = require('https');
                                        const { URL } = require('url');
                                
                                        const boundary = '--------------------------' + Date.now().toString(16);
                                        const CRLF = '\r\n';
                                
                                        // Payload-Erstellung
                                        const payload = Buffer.concat([
                                            Buffer.from(`--${boundary}${CRLF}Content-Disposition: form-data; name="dither"${CRLF}${CRLF}0${CRLF}`),
                                            Buffer.from(`--${boundary}${CRLF}Content-Disposition: form-data; name="mac"${CRLF}${CRLF}${ePaperMAC}${CRLF}`),
                                            Buffer.from(`--${boundary}${CRLF}Content-Disposition: form-data; name="image"; filename="screenshot.jpg"${CRLF}Content-Type: image/jpeg${CRLF}${CRLF}`),
                                            Buffer.from(Object.values(obj.result), 'binary'),
                                            Buffer.from(`${CRLF}--${boundary}--${CRLF}`)
                                        ]);
                                
                                        // URL Parsing
                                        const url = new URL(imageUploadURL);
                                        const options = {
                                            hostname: url.hostname,
                                            port: url.port || (url.protocol === 'https:' ? 443 : 80),
                                            path: url.pathname + (url.search || ''),
                                            method: 'POST',
                                            headers: {
                                                'Content-Type': 'multipart/form-data; boundary=' + boundary,
                                                'Content-Length': payload.length
                                            }
                                        };
                                
                                        // Protokollwahl
                                        const protocol = url.protocol === 'https:' ? https : http;
                                
                                        // HTTP Request
                                        const req = protocol.request(options, function(res) {
                                            console.log('ImageUploadStatusCode:', res.statusCode);
                                            res.on('data', function(chunk) {
                                                console.log('Response:', chunk.toString());
                                            });
                                        });
                                
                                        req.on('error', function(e) {
                                            console.error('Fehler beim Hochladen:', e.message);
                                        });
                                
                                        req.write(payload);
                                        req.end();
                                    }
                                });
                                

                                hat es bis jetzt funktioniert.

                                Jetzt kommt immer das.

                                puppeteer.0
                                	2025-01-07 10:33:06.343	error	Could not take screenshot of "http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung": Page.captureScreenshot timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
                                mqtt.0
                                	2025-01-07 10:32:45.479	warn	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung => undefined
                                

                                Der "VIS-Link" funktioniert. Dort wird auch sofort die Änderung sichtbar.

                                Was kann ich noch testen?

                                ? Offline
                                ? Offline
                                Ein ehemaliger Benutzer
                                schrieb am zuletzt editiert von
                                #848

                                @beowolf

                                Hello,
                                die Fehlermeldung sagt, dass deine 25000ms timeout im Script nicht ausreichen, also den mal hoeher stellen.

                                Wird denn der Screenshot richtig erstellt?
                                oder kommt da schon nix?

                                Ansonsten das Script mal auf debug stellen und laufen lassen.

                                B 1 Antwort Letzte Antwort
                                0
                                • ? Ein ehemaliger Benutzer

                                  @beowolf

                                  Hello,
                                  die Fehlermeldung sagt, dass deine 25000ms timeout im Script nicht ausreichen, also den mal hoeher stellen.

                                  Wird denn der Screenshot richtig erstellt?
                                  oder kommt da schon nix?

                                  Ansonsten das Script mal auf debug stellen und laufen lassen.

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

                                  @ilovegym

                                  Es kommt nur diese Nachricht.

                                  javascript.0
                                  	2025-01-08 10:50:48.385	warn	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung => undefined
                                  javascript.0
                                  	2025-01-08 10:50:28.385	info	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: TAG-Lüftung1 wurde aktualisiert
                                  

                                  Das "ü" in Kellerlüftung ist egal. Es kommt solche eine Meldung auch bei anderen TAGs. Diesen kann ich aber einfacher schalten.

                                  Egal welche Zeit ich bei

                                  waitForTimeout: 25000 
                                  

                                  eingebe.

                                  Die Meldung erscheint immer nach genau 20 Sekunden.

                                  Zu Deiner Frage:

                                  Wird denn der Screenshot richtig erstellt?
                                  

                                  Nein, er erscheint auch nicht im /tmp Ordner.
                                  Rufe ich den Link manuell auf, erscheint der TAG-Inhalt so wie es sein soll.

                                  Wenn ich Puppeteer neu starte, funktioniert es ein paar mal.

                                  Wenn es dann funktioniert, erscheint die neue Bilddatei sofort im /tmp Ordner.

                                  Wenn ich bei

                                  waitForTimeout: 25000 
                                  

                                  das einstelle, sollte die neue Datei doch eigentlich erst nach 25 Sekunden erscheinen, oder?

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

                                  ? 1 Antwort Letzte Antwort
                                  0
                                  • B Beowolf

                                    @ilovegym

                                    Es kommt nur diese Nachricht.

                                    javascript.0
                                    	2025-01-08 10:50:48.385	warn	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung => undefined
                                    javascript.0
                                    	2025-01-08 10:50:28.385	info	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: TAG-Lüftung1 wurde aktualisiert
                                    

                                    Das "ü" in Kellerlüftung ist egal. Es kommt solche eine Meldung auch bei anderen TAGs. Diesen kann ich aber einfacher schalten.

                                    Egal welche Zeit ich bei

                                    waitForTimeout: 25000 
                                    

                                    eingebe.

                                    Die Meldung erscheint immer nach genau 20 Sekunden.

                                    Zu Deiner Frage:

                                    Wird denn der Screenshot richtig erstellt?
                                    

                                    Nein, er erscheint auch nicht im /tmp Ordner.
                                    Rufe ich den Link manuell auf, erscheint der TAG-Inhalt so wie es sein soll.

                                    Wenn ich Puppeteer neu starte, funktioniert es ein paar mal.

                                    Wenn es dann funktioniert, erscheint die neue Bilddatei sofort im /tmp Ordner.

                                    Wenn ich bei

                                    waitForTimeout: 25000 
                                    

                                    das einstelle, sollte die neue Datei doch eigentlich erst nach 25 Sekunden erscheinen, oder?

                                    ? Offline
                                    ? Offline
                                    Ein ehemaliger Benutzer
                                    schrieb am zuletzt editiert von
                                    #850

                                    @beowolf

                                    das Problem ist, dass Puppeteer zu lange braucht..
                                    Schau mal nach der Systemlast..

                                    Das Timeout 25000 bedeutet, er wartet bis 25 sek. - falls bis dahin der Screenshot nicht gemacht wurde, gibts n Fehler.

                                    1 Antwort Letzte Antwort
                                    0
                                    • B Offline
                                      B Offline
                                      Beowolf
                                      schrieb am zuletzt editiert von Beowolf
                                      #851

                                      Die Systemlast ist kaum vorhanden (PI5).

                                      Ich habe jetzt 100000 eingestellt.

                                      Es kommt aber doch nach exakt 20 Sekunden die Fehlermeldung.

                                      puppeteer.0
                                      	2025-01-08 16:12:19.171	error	Could not take screenshot of "http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung": Page.captureScreenshot timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
                                      javascript.0
                                      	2025-01-08 16:08:55.368	warn	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung => undefined
                                      javascript.0
                                      	2025-01-08 16:08:35.368	info	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: TAG-Lüftung1 wurde aktualisiert
                                      

                                      Hat jemand eine Idee wo die 20 Sekunden her kommen?

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

                                      ? BananaJoeB 2 Antworten Letzte Antwort
                                      0
                                      • B Beowolf

                                        Die Systemlast ist kaum vorhanden (PI5).

                                        Ich habe jetzt 100000 eingestellt.

                                        Es kommt aber doch nach exakt 20 Sekunden die Fehlermeldung.

                                        puppeteer.0
                                        	2025-01-08 16:12:19.171	error	Could not take screenshot of "http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung": Page.captureScreenshot timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
                                        javascript.0
                                        	2025-01-08 16:08:55.368	warn	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: Fehler beim Aufruf der View: http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#Kellerlüftung => undefined
                                        javascript.0
                                        	2025-01-08 16:08:35.368	info	script.js.common.EPaper-Displays.Allgemein.Kellerlüfter_1: TAG-Lüftung1 wurde aktualisiert
                                        

                                        Hat jemand eine Idee wo die 20 Sekunden her kommen?

                                        ? Offline
                                        ? Offline
                                        Ein ehemaliger Benutzer
                                        schrieb am zuletzt editiert von
                                        #852

                                        @beowolf

                                        vielleicht weil er erst garnicht die View aufrufen kann, wie da steht?
                                        Ich hatte sowas auch schonmal, hab dann den ganzen Vis Kram rausgeworfen, sende Text zu den TAGS, das funktioniert zuverlässig und ich brauche keinen Puppeteer mehr...

                                        B 1 Antwort Letzte Antwort
                                        0
                                        • ? Ein ehemaliger Benutzer

                                          @beowolf

                                          vielleicht weil er erst garnicht die View aufrufen kann, wie da steht?
                                          Ich hatte sowas auch schonmal, hab dann den ganzen Vis Kram rausgeworfen, sende Text zu den TAGS, das funktioniert zuverlässig und ich brauche keinen Puppeteer mehr...

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

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

                                          sende Text zu den TAGS, das funktioniert zuverlässig und ich brauche keinen Puppeteer mehr...

                                          Könntest du beschreiben wie du das machst?

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

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          714

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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