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

    Ich habe ab chatgpt wieder ein wenig gequält.

    Es geht um die Abfrage der Buttons bei den schwarzen Displays.

    Diese meine ich

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

    Hier das Skript

    // HIER DIE IP ADRESSE VOM OEPL ACCESS POINT EINTRAGEN
    const serverIP = '192.168.49.185';  // z.B. 192.168.1.71
    
    
    //Im Skript müssen noch zwei weiter Einträge event. der eigenen Umgebung angepasst werden
    // Zeile 17  -  "Datenpunkt zur Steuerung des Skripts"
    // Zeile 21  -  "Datenordner der empfangenen TAGs"
    // Zeile 176 -  "Diesen Eintrag auch noch entsprechend der eigenen Umgebung anpassen"
    
    // 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_Erdgeschoss';  // Datenpunkt zur Steuerung des Skripts
    
    function ensureOpenEPaperLinkFolderExists(callback) {
        const OpenEPaperLinkFolderPath = '0_userdata.0.Tag_Buttons.Erdgeschoss'; // Datenordner der empfangenen TAGs
        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.Erdgeschoss.${tag.mac.replace(/:/g, '')}`;  //Diesen Eintrag auch noch entsprechend der eigenen Umgebung anpassen
                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();
    

    Jetzt kann das Skript durch Setzen des Datenpunkts 0_userdata.0.ScriptControl.EPaperScript auf true oder false gestartet und gestoppt werden.

    Bei mir funktioniert es.

    Bitte die Einstellung im Skript beachten !!!

    Die Fehlermeldungen bei dem ersten Durchlauf sind wohl normal.

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

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

    Ich habe ab chatgpt wieder ein wenig gequält.

    Es geht um die Abfrage der Buttons bei den schwarzen Displays.

    Diese meine ich

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

    Hier das Skript

    // HIER DIE IP ADRESSE VOM OEPL ACCESS POINT EINTRAGEN
    const serverIP = '192.168.49.185';  // z.B. 192.168.1.71
    
    
    //Im Skript müssen noch zwei weiter Einträge event. der eigenen Umgebung angepasst werden
    // Zeile 17  -  "Datenpunkt zur Steuerung des Skripts"
    // Zeile 21  -  "Datenordner der empfangenen TAGs"
    // Zeile 176 -  "Diesen Eintrag auch noch entsprechend der eigenen Umgebung anpassen"
    
    // 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_Erdgeschoss';  // Datenpunkt zur Steuerung des Skripts
    
    function ensureOpenEPaperLinkFolderExists(callback) {
        const OpenEPaperLinkFolderPath = '0_userdata.0.Tag_Buttons.Erdgeschoss'; // Datenordner der empfangenen TAGs
        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.Erdgeschoss.${tag.mac.replace(/:/g, '')}`;  //Diesen Eintrag auch noch entsprechend der eigenen Umgebung anpassen
                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();
    

    Jetzt kann das Skript durch Setzen des Datenpunkts 0_userdata.0.ScriptControl.EPaperScript auf true oder false gestartet und gestoppt werden.

    Bei mir funktioniert es.

    Bitte die Einstellung im Skript beachten !!!

    Die Fehlermeldungen bei dem ersten Durchlauf sind wohl normal.

    Ich habe noch einmal zu diesem Skript eine Frage.

    Wenn ich die Buttons nutzen möchte, muß das Skript laufen.

    Wenn es aber läuft, habe ich das im Protokoll stehen:

    javascript.0	15:57:27.401	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:27.402	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:28.822	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
    javascript.0	15:57:28.928	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
    javascript.0	15:57:31.304	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:31.304	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:31.726	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:31.727	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:35.154	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:35.155	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:35.651	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:35.652	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:36.787	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:36.788	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:38.823	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
    javascript.0	15:57:38.854	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
    javascript.0	15:57:39.271	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:39.272	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:40.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:40.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:40.342	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:40.343	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:41.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:41.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:41.790	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:41.790	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:42.276	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:42.277	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:43.525	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:43.526	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:44.582	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:44.583	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:46.853	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:46.854	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:48.441	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:48.441	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:48.824	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
    javascript.0	15:57:48.847	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
    javascript.0	15:57:50.673	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:50.673	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:52.308	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:52.308	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:52.501	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:52.501	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:52.761	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:52.762	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:55.489	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:55.490	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:57.005	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:57.005	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:57.257	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:57.258	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:57.424	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:57.425	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:57.594	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:57.594	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:58.106	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:58.107	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:58.234	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:58.234	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:57:58.823	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
    javascript.0	15:57:58.936	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
    javascript.0	15:57:59.522	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:57:59.522	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:58:00.619	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:58:00.620	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:58:02.135	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:58:02.135	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    javascript.0	15:58:03.096	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
    javascript.0	15:58:03.096	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
    
    

    Da ist also heftig was los.

    Gibt es keine Möglichkeit, das das Skript auf eine "Buttonbetätigung" wartet?

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

    S 1 Antwort Letzte Antwort
    0
    • B Beowolf

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

      Ich habe ab chatgpt wieder ein wenig gequält.

      Es geht um die Abfrage der Buttons bei den schwarzen Displays.

      Diese meine ich

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

      Hier das Skript

      // HIER DIE IP ADRESSE VOM OEPL ACCESS POINT EINTRAGEN
      const serverIP = '192.168.49.185';  // z.B. 192.168.1.71
      
      
      //Im Skript müssen noch zwei weiter Einträge event. der eigenen Umgebung angepasst werden
      // Zeile 17  -  "Datenpunkt zur Steuerung des Skripts"
      // Zeile 21  -  "Datenordner der empfangenen TAGs"
      // Zeile 176 -  "Diesen Eintrag auch noch entsprechend der eigenen Umgebung anpassen"
      
      // 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_Erdgeschoss';  // Datenpunkt zur Steuerung des Skripts
      
      function ensureOpenEPaperLinkFolderExists(callback) {
          const OpenEPaperLinkFolderPath = '0_userdata.0.Tag_Buttons.Erdgeschoss'; // Datenordner der empfangenen TAGs
          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.Erdgeschoss.${tag.mac.replace(/:/g, '')}`;  //Diesen Eintrag auch noch entsprechend der eigenen Umgebung anpassen
                  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();
      

      Jetzt kann das Skript durch Setzen des Datenpunkts 0_userdata.0.ScriptControl.EPaperScript auf true oder false gestartet und gestoppt werden.

      Bei mir funktioniert es.

      Bitte die Einstellung im Skript beachten !!!

      Die Fehlermeldungen bei dem ersten Durchlauf sind wohl normal.

      Ich habe noch einmal zu diesem Skript eine Frage.

      Wenn ich die Buttons nutzen möchte, muß das Skript laufen.

      Wenn es aber läuft, habe ich das im Protokoll stehen:

      javascript.0	15:57:27.401	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:27.402	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:28.822	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
      javascript.0	15:57:28.928	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
      javascript.0	15:57:31.304	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:31.304	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:31.726	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:31.727	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:35.154	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:35.155	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:35.651	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:35.652	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:36.787	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:36.788	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:38.823	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
      javascript.0	15:57:38.854	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
      javascript.0	15:57:39.271	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:39.272	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:40.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:40.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:40.342	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:40.343	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:41.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:41.007	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:41.790	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:41.790	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:42.276	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:42.277	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:43.525	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:43.526	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:44.582	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:44.583	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:46.853	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:46.854	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:48.441	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:48.441	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:48.824	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
      javascript.0	15:57:48.847	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
      javascript.0	15:57:50.673	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:50.673	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:52.308	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:52.308	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:52.501	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:52.501	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:52.761	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:52.762	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:55.489	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:55.490	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:57.005	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:57.005	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:57.257	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:57.258	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:57.424	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:57.425	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:57.594	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:57.594	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:58.106	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:58.107	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:58.234	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:58.234	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:57:58.823	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Ping sent
      javascript.0	15:57:58.936	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Pong received
      javascript.0	15:57:59.522	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:57:59.522	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:58:00.619	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:58:00.620	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:58:02.135	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:58:02.135	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      javascript.0	15:58:03.096	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Daten empfangen:
      javascript.0	15:58:03.096	info	script.js.common.EPaper-Displays.Erdgeschoss.Buttons_der_Erdgeschoss_TAGs: Verarbeitete Daten:
      
      

      Da ist also heftig was los.

      Gibt es keine Möglichkeit, das das Skript auf eine "Buttonbetätigung" wartet?

      S Nicht stören
      S Nicht stören
      stenmic
      schrieb am zuletzt editiert von stenmic
      #694

      Ich bin mir nicht sicher, ob es hier schon eine Lösung für nen Json-String gibt.
      Hab beim Durchlesen jedenfalls keine gefunden.

      Hier ist meine Lösung.

      Als erstes muss "axios" im Javascript Adapter hinzugefügt werden:
      2024-08-03 07 08 27.jpg

      Der Tag muss auf "Json template" eingestellt werden:
      2024-08-03 07 07 34.jpg

      Und hier das Blockly, sollte selbsterklärend sein:

      2024-08-03 07 06 18.jpg

      Die Funktion:
      2024-08-03 07 06 27.jpg

      Blockly:


      <xml xmlns="https://developers.google.com/blockly/xml">
      <variables>
      <variable id="^bhgSAw+X+YJvf?RhU3">AP_IP</variable> <variable id="uc8fh+2kjeHGm-/vox=3">TAG_MAC</variable> <variable id="$Ig5a7mq0|-|sEkjT7ur">JS</variable> </variables> <block type="procedures_defcustomnoreturn" id="l{VWT5d2R8(RDtcq_L|-" x="163" y="-787"> <mutation statements="false"> <arg name="AP_IP" varid="^bhgSAw+X+YJvf?RhU3"></arg>
      <arg name="TAG_MAC" varid="uc8fh+2kjeHGm-/vox=3"></arg>
      <arg name="JS" varid="$Ig5a7mq0|-|sEkjT7ur"></arg>
      </mutation>
      <field name="NAME">OpenEPaperJson</field>
      <field name="SCRIPT">Y29uc3QgYXhpb3MgPSByZXF1aXJlKCdheGlvcycpOw0KDQpjb25zdCBvYmogPSB7DQogIG1hYzogVEFHX01BQywNCiAganNvbjogSlMsDQp9Ow0KDQpjb25zdCBkYXRhID0gT2JqZWN0LmtleXMob2JqKQ0KICAubWFwKChrZXkpID0+IGAke2tleX09JHtlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pfWApDQogIC5qb2luKCcmJyk7DQoNCmNvbnN0IG9wdGlvbnMgPSB7DQogIG1ldGhvZDogJ1BPU1QnLA0KICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LA0KICB1cmw6ICdodHRwOi8vJytBUF9JUCsnL2pzb251cGxvYWQnLA0KICBkYXRhDQp9Ow0KDQphd2FpdCBheGlvcyhvcHRpb25zKTsNCi8vY29uc29sZS5sb2cob3B0aW9ucyk7</field>
      <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
      </block>
      <block type="procedures_callcustomnoreturn" id="ZR0:KP{+eKkQUre=m" x="163" y="-737"> <mutation name="OpenEPaperJson"> <arg name="AP_IP"></arg> <arg name="TAG_MAC"></arg> <arg name="JS"></arg> </mutation> <value name="ARG0"> <block type="text" id="8m.We}frb),Frmeu7S(?"> <field name="TEXT">192.168.178.xxx</field> </block> </value> <value name="ARG1"> <block type="text" id="yk4}TL@=?^fe$@Tct/B">
      <field name="TEXT">0000021F1D31xxxx</field>
      </block>
      </value>
      <value name="ARG2">
      <block type="text" id="Jq[@4;8ac*CU/g}jB82I">
      <field name="TEXT">[ {"text": [5,5,"Bahnschrift 20","fonts/bahnschrift20",1]}, {"box": [10,30,20,20,1]}, {"box": [35,30,20,20,2]}, {"triangle": [60,30,60,50,80,40,1]}, {"text": [5,80,"Plain text glasstown_nbp_tf","glasstown_nbp_tf",1]}, {"text": [5,95,"Plain text 7x14_tf","7x14_tf",2]}, {"text": [5,110,"Plain text t0_14b_tf","t0_14b_tf",1]}, {"text": [135,5,"30","fonts/bahnschrift30",2]}, {"text": [215,5,"70","fonts/bahnschrift70",1]}, {"text": [150,80,"50","fonts/calibrib50",2,0]}, {"text": [205,60,"80","fonts/calibrib80",2]}, {"text": [90,35,"calibrib30","fonts/calibrib30",1]}, {"line": [10,120,290,120,1]}, {"line": [10,115,290,115,2]} ]</field>
      </block>
      </value>
      </block>
      </xml>

      Hier noch die Erklärung wie der json String aussehen muss

      1 Antwort Letzte Antwort
      3
      • F Offline
        F Offline
        Freak
        schrieb am zuletzt editiert von
        #695

        Hallo Zusammen,

        ich habe ein Problem mit einem Tag.
        Ich hatte den Accesspoint einige Zeit außer Betrieb. Als ich ihn wieder verwenden wollte zeigte eines meiner Displays folgendes Bild:
        1.jpg

        Auch beim wechseln der Batterien scheint das Display nicht zu starten. Der Bildschirm bleibt immer gleich.
        Neue Batterien haben auch nicht geholfen.
        Alle anderen Tags funktionieren Tadellos mit dem Accesspoint.
        Gibt es einen Trick um den Tag aus dem Sleepmode zu holen?
        Batteriekontakte kurzschließen bringt leider auch nichts.

        Ich hoffe einer von euch kann mir weiterhelfen.

        danke

        BananaJoeB 1 Antwort Letzte Antwort
        0
        • F Freak

          Hallo Zusammen,

          ich habe ein Problem mit einem Tag.
          Ich hatte den Accesspoint einige Zeit außer Betrieb. Als ich ihn wieder verwenden wollte zeigte eines meiner Displays folgendes Bild:
          1.jpg

          Auch beim wechseln der Batterien scheint das Display nicht zu starten. Der Bildschirm bleibt immer gleich.
          Neue Batterien haben auch nicht geholfen.
          Alle anderen Tags funktionieren Tadellos mit dem Accesspoint.
          Gibt es einen Trick um den Tag aus dem Sleepmode zu holen?
          Batteriekontakte kurzschließen bringt leider auch nichts.

          Ich hoffe einer von euch kann mir weiterhelfen.

          danke

          BananaJoeB Online
          BananaJoeB Online
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von
          #696

          @freak Hast du zwischenzeitlich den Kanal gewechselt? Falls du den Tag vorher auf einen festen Kanal gestellt hast und das Roaming deaktiviert hattest, könnte das ein Problem sein.

          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

          O 1 Antwort Letzte Antwort
          0
          • F Offline
            F Offline
            Freak
            schrieb am zuletzt editiert von
            #697

            @BananaJoe Danke für deine Rückmeldung. Nein, daran habe ich nichts geändert. Schau ich mir aber nochmal an.

            Beim Einlegen der Batterien sollte ja normalerweise auch der Openepaperlink startbildschirm auf dem Display erscheinen, aber das passiert auch nicht. Ich habe eher die Vermutung, dass das Display gar nichts macht.

            D 1 Antwort Letzte Antwort
            0
            • F Freak

              @BananaJoe Danke für deine Rückmeldung. Nein, daran habe ich nichts geändert. Schau ich mir aber nochmal an.

              Beim Einlegen der Batterien sollte ja normalerweise auch der Openepaperlink startbildschirm auf dem Display erscheinen, aber das passiert auch nicht. Ich habe eher die Vermutung, dass das Display gar nichts macht.

              D Offline
              D Offline
              diwoma
              schrieb am zuletzt editiert von
              #698

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

              Beim Einlegen der Batterien sollte ja normalerweise auch der Openepaperlink startbildschirm auf dem Display erscheinen, aber das passiert auch nicht. Ich habe eher die Vermutung, dass das Display gar nichts macht.

              Ja, so einen habe ich auch. Liegt gleich neben dem AP.
              Ich erkläre ihn für tot.

              -- diwoma

              ioBroker in LX-Container in Proxmox
              Zigbee-Coordinator: CC2652P2-TCP FW: 20230507

              1 Antwort Letzte Antwort
              0
              • BananaJoeB Online
                BananaJoeB Online
                BananaJoe
                Most Active
                schrieb am zuletzt editiert von
                #699

                Man könnte neu flashen versuchen ... aber wer hat schon die Ausrüstung dafür.

                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

                F 1 Antwort Letzte Antwort
                0
                • BananaJoeB BananaJoe

                  Man könnte neu flashen versuchen ... aber wer hat schon die Ausrüstung dafür.

                  F Offline
                  F Offline
                  Freak
                  schrieb am zuletzt editiert von
                  #700

                  @bananajoe Ja genau. das Flasher Kabel hab ich mir damals gespart leider.

                  B 1 Antwort Letzte Antwort
                  0
                  • F Freak

                    @bananajoe Ja genau. das Flasher Kabel hab ich mir damals gespart leider.

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

                    @freak

                    Hast du die Kontakte für die Batterien kurzgeschlossen als sie draussen waren?

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

                    F 1 Antwort Letzte Antwort
                    0
                    • B Beowolf

                      @freak

                      Hast du die Kontakte für die Batterien kurzgeschlossen als sie draussen waren?

                      F Offline
                      F Offline
                      Freak
                      schrieb am zuletzt editiert von
                      #702

                      @beowolf Ja, hab ich mehrmals versucht. Danke für die Erinnerung.

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

                        Wie lange sind denn neue Batterien drin? Ich meine, das die TAGs es immer wieder versuchen. Aber das dauert glaube ich.

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

                        F 1 Antwort Letzte Antwort
                        0
                        • B Beowolf

                          Wie lange sind denn neue Batterien drin? Ich meine, das die TAGs es immer wieder versuchen. Aber das dauert glaube ich.

                          F Offline
                          F Offline
                          Freak
                          schrieb am zuletzt editiert von
                          #704

                          @beowolf Ok die Batterien sind jetzt zwei Tage drin. Dann lass ich ihn mal ne weile so liegen. Werde ja sehen. ob er sich nochmal meldet. Danke

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

                            Event. kannst du es hier versuchen. Er kann den TAG neu flashen. Ich habe für diesen Typ von TAG keinen Pogo-Pin Adapter.

                            https://forum.iobroker.net/topic/66380/e-ink-display-openepaperlink-displayanzeige-mit-batterie/671?_=1723619398209

                            Ist halt mit Portokosten verbunden.

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

                            1 Antwort Letzte Antwort
                            0
                            • D Offline
                              D Offline
                              diwoma
                              schrieb am zuletzt editiert von
                              #706

                              Oder gleich fragen, ob er noch welche geflasht hat.
                              Ich habe ihn nach dem Post von @Beowolf kontaktiert, wo man Tag's bekommen kann und er hat mir gleich eine Liste von vorgeflashten Tag's gesendet, die er verkauft. Und ich habe mal gleich bei verschiedenen Größen zugeschlagen. Ist dann nur einmal Porto mit größerem Mehrwert :)

                              -- diwoma

                              ioBroker in LX-Container in Proxmox
                              Zigbee-Coordinator: CC2652P2-TCP FW: 20230507

                              1 Antwort Letzte Antwort
                              2
                              • F Freak

                                @beowolf Ok die Batterien sind jetzt zwei Tage drin. Dann lass ich ihn mal ne weile so liegen. Werde ja sehen. ob er sich nochmal meldet. Danke

                                haselchenH Offline
                                haselchenH Offline
                                haselchen
                                Most Active
                                schrieb am zuletzt editiert von
                                #707

                                @freak

                                Probier es einfach weiter mit kurzschliessen über die Batterien.
                                Es braucht manchmal sehr, sehr viele Anläufe dafür.
                                Eventuell zeitgleich den AP neu starten. Da hilft nur ausprobieren.
                                Den Tag neu flashen, ich denke, dass ist nicht nötig.

                                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
                                1
                                • BananaJoeB BananaJoe

                                  @freak Hast du zwischenzeitlich den Kanal gewechselt? Falls du den Tag vorher auf einen festen Kanal gestellt hast und das Roaming deaktiviert hattest, könnte das ein Problem sein.

                                  O Offline
                                  O Offline
                                  oxident
                                  schrieb am zuletzt editiert von
                                  #708

                                  @bananajoe Kannst Du zu dem Roaming was sagen? Ich dachte immer, es gehen nur fixe Kanäle...

                                  BananaJoeB 1 Antwort Letzte Antwort
                                  0
                                  • O oxident

                                    @bananajoe Kannst Du zu dem Roaming was sagen? Ich dachte immer, es gehen nur fixe Kanäle...

                                    BananaJoeB Online
                                    BananaJoeB Online
                                    BananaJoe
                                    Most Active
                                    schrieb am zuletzt editiert von
                                    #709

                                    @oxident Naja, du kannst ja mehr als einen AP haben. Und dann wechseln die Tag ggf.
                                    Wenn ich im Keller einen Tag einrichte nimmt der den AP hier bei mir im Büro,
                                    bringe ich den Tag dann in die Küche, wechselt der nach einer weile auf den AP in der Küche

                                    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

                                    O 1 Antwort Letzte Antwort
                                    1
                                    • BananaJoeB BananaJoe

                                      @oxident Naja, du kannst ja mehr als einen AP haben. Und dann wechseln die Tag ggf.
                                      Wenn ich im Keller einen Tag einrichte nimmt der den AP hier bei mir im Büro,
                                      bringe ich den Tag dann in die Küche, wechselt der nach einer weile auf den AP in der Küche

                                      O Offline
                                      O Offline
                                      oxident
                                      schrieb am zuletzt editiert von
                                      #710

                                      @bananajoe Hoppla, ich dachte, die müssten dann zwangsläufig auf dem gleichen Kanal funken.

                                      BananaJoeB 1 Antwort Letzte Antwort
                                      0
                                      • O oxident

                                        @bananajoe Hoppla, ich dachte, die müssten dann zwangsläufig auf dem gleichen Kanal funken.

                                        BananaJoeB Online
                                        BananaJoeB Online
                                        BananaJoe
                                        Most Active
                                        schrieb am zuletzt editiert von
                                        #711

                                        @oxident Im Gegenteil, im Gegenteil ...

                                        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

                                        B 1 Antwort Letzte Antwort
                                        1
                                        • BananaJoeB BananaJoe

                                          @oxident Im Gegenteil, im Gegenteil ...

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

                                          @bananajoe

                                          Mit Roaming meinst du den Kanal auf Auto und "Lock tag inventor" auf "no", richtig?

                                          Das hatte ich mal probiert. Dann hören die TAGs nicht damit auf die APs ständig zu wechseln. Über Tage ging das immer hin und her. Das ging mir sehr auf den Zeiger. Erst als jeder AP seine feste Kanalnummer hatte, und jeder TAG seinem AP zugewiesen bekommen hat, war Ruhe.

                                          Wie machst Du das auch mit den Screenshots von Puppeteer? Einfach die MAC Adresse des TAGs und irgend eine IP-Adresse von einem AP?

                                          Grüße

                                          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

                                          853

                                          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