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

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

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

E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
1.0k Beiträge 48 Kommentatoren 343.8k 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.
  • EisbaeeerE Eisbaeeer

    Ok, ich erklär doch noch kurz, wie das Script zu befüllen ist.

    Für jede View (HTML Seite), die man anzeigen möchte benötigt man ein separates Script. Einfach das Script kopieren und anpassen.
    In dem Script wird genau ein Screenshot erzeugt und auf ein Display gesendet. Möchte man mehrere Displays mit dem selben Bild ansteuern, müsste man den Teil "function sendScreenshotToTag()" erweitern. Wer sich das nicht zutraut, einfach das Script kopieren und die MAC-Addresse des TAG´s anpassen.

    Zu den Einstellungen:
    In dem Beispiel wollen wir den roten Kasten auf dem Display anzeigen.

    276c8243-5352-4f7e-8028-5a348df922bd-image.png

    Grün: Abstand des Screenshots von links
    Gelb: Abstand des Screenshots von oben
    Violet: Größe des Screenshots
    Blau: Höhe des Screenshots

    Was auf jeden Fall auf Eure Umgebung angepasst werden muss:
    urlOfVISView: Das ist die URL, von der der Screenshot gemacht werden soll. Kann auch eine Webseite sein.
    targetWidht: Das hängt von Eurem Display ab (Breite des Displays)
    targetHeigth: Das hängt von Eurem Display ab (Höhe des Displays)
    waitForSelector: Puppeteer wartet vor dem Screenshot, bis dieses Element vollständig geladen ist. Bei externen Seiten, also nicht VIS Seiten muss das angepasst werden.
    inputPath: Das ist der Dateiname des Screenshots. Hier muss sich der Name pro Script unterscheiden!
    uploadUrl: Hier müsst ihr die IP-Adresse von Eurem AccessPoint eintragen. http://<AP-IPAddress>/imgupload
    macAddress: Die MAC-Addresse von Eurem TAG

    Im Scirpt-Beispiel wird alle 5 Minuten ein Screenshot gesendet. Wollt ihr das ändern, müsst ihr ganz unten den Scheduler anpassen.

    Beispiel alle 5 Minuten:

    schedule("*/5 * * * *", async () => {
    

    Beispiel alle 30 Minuten:

    schedule("*/30 * * * *", async () => {
    

    Beipiel jede Stunde zur vollen Stunde:

    schedule("0 * * * *", async () => {
    

    usw.

    Gut beschrieben hier:

    * * * * * auszuführender Befehl
    ┬ ┬ ┬ ┬ ┬
    │ │ │ │ │
    │ │ │ │ └──── Wochentag (0-7, Sonntag ist 0 oder 7)
    │ │ │ └────── Monat (1-12)
    │ │ └──────── Tag (1-31)
    │ └────────── Stunde (0-23)
    └──────────── Minute (0-59)
    

    Wenn ihr auf ein Ereignis reagieren wollt, dann würde das so aussehen:

    Im Script den Scheduler tauschen:

    schedule("*/5 * * * *", async () => {
    

    gegen:

    on("hm-rpc.0.LEQ03420032.1.STATE", function(obj) {
    

    wobei der grüne Teil Euer Status ist, auf den ihr reagieren wollt. Also z.B. ein Relais Zustand oder ein Fensterkontakt (hier im Beispiel ein Fensterkontakt). Immer wenn sich dieser Status aktualisiert, wird dann ein Screenshot erstellt.

    Falls es noch Fragen gibt, gerne hier stellen.

    // #############################################
    // Author:  Eisbaeeer
    // Date:    20250415
    // Version: 0.1 :   Convert from Blockly to js
    //
    // Benötigt: 
    // - Puppeteer Adapter
    // - Chrome Headless
    //
    // Ab hier die Anpassungen vornehmen!
     
    const urlOfVISView = 'http://192.168.1.200:8082/vis/?OpenEpaper#Tag2';	// Eure View oder URL vom Bild						// URL zur View
    const targetWidth = 296;												// Breite des Displays
    const targetHeight = 128;												// Höhe des Displays
    const cutoutX = 0;													    // Abstand Pixel von links für Screenshot
    const cutoutY = 0;														// Abstand Pixel von oben für Screenshot
    const pquality = 100;	                                                // Bildqualität
    const waitForSelector = "#w00017"										// Letztes Widget in der View
    const inputPath = "/tmp/<TAG_Bildername>.jpg";									// Screenshot temporär
    const uploadUrl = 'http://<AP-IPAddress>/imgupload';						// IP-Adresse Accesspoint anpassen
    const macAddress = '0000021EEB013B10';									// MAC-Adresse des Displays anpassen
    const ditherValue = 0; 												    // Setze den Dither-Wert (Farbanpassungen: 0 = View hat gleiche Farben | 1 = View hat andere Farben als das Display
     
    // Anpassungen für die Trigger ganz unten. (Zeiten oder Trigger einrichten)
    // ENDE Anpassungen! Ab hier nichts mehr ändern!
    // #############################################
     
     
    // Requirements
    const puppeteer = require('puppeteer');
    const axios = require('axios');
    const fs = require('fs');
    const FormData = require('form-data');
     
    async function takeScreenshots() {
        sendTo('puppeteer.0', 'screenshot', {
            url: urlOfVISView,                     
            path: inputPath,     
            width: targetWidth,                      
            height: targetHeight,                    
            quality: pquality,                   
         
            waitOption: {
                waitForSelector: waitForSelector,  
                waitForTimeout: 20000              
            },
         
            fullPage: false,                       
         
            clip: {         
                x: cutoutX,                        
                y: cutoutY,                        
                width: targetWidth,                
                height: targetHeight               
            }
        })
        sendScreenshotToTag()
        };
     
    function sendScreenshotToTag(){
    	
    	async function uploadImage() {
    		try {
    			// Prüfen, ob die Datei existiert
    			if (!fs.existsSync(inputPath)) {
    			throw new Error(`Datei nicht gefunden: ${inputPath}`);
    		}
    	// FormData erstellen
    	const form = new FormData();
    	form.append("mac", macAddress);
    	form.append("dither", ditherValue); // Dither-Parameter hinzufügen
    	form.append("file", fs.createReadStream(inputPath));
    	// POST-Anfrage senden
    	const response = await axios.post(uploadUrl, form, {
    	headers: {
    		...form.getHeaders(),
    	},
    	});
     
    	console.log('Upload erfolgreich:', response.data);
    	} catch (error) {
    	if (error.response) {
    		console.error('Server-Antwort:', error.response.status, error.response.data);
    	} else if (error.request) {
    		console.error('Keine Antwort erhalten:', error.request);
    	} else {
    		console.error('Fehler beim Hochladen:', error.message);
    	}
    	}
    	}
    	uploadImage();
    	}
     
    schedule("*/5 * * * *", async () => {
        await takeScreenshots();
    });    
    
    B Offline
    B Offline
    Beowolf
    schrieb am zuletzt editiert von Beowolf
    #947

    @eisbaeeer

    Ich habe das Skript ein wenig verändert. Ich hoffe das das ok für dich ist.

    // #############################################
    // Author:  Eisbaeeer
    // Date:    20250415
    // Version: 0.2 : Verbesserte async-Logik, Timing, saubere Struktur
    // Version: 0.3 : ordentlichem await, sauberen async-Aufrufen und besserer Struktur
    //
    // Benötigt: 
    // - Puppeteer Adapter
    // - Chrome Headless
    //
    // Ab hier die Anpassungen vornehmen!
    
    const urlOfVISView = 'http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#ToDo_Liste_1'; // URL zur View
    const targetWidth = 800;                         // Breite des Displays
    const targetHeight = 480;                        // Höhe des Displays
    const cutoutX = 0;                               // Abstand Pixel von links
    const cutoutY = 0;                               // Abstand Pixel von oben
    const pquality = 100;                            // Bildqualität
    const waitForSelector = "#w00047";               // Letztes Widget in der View
    const inputPath = "/tmp/todoliste1.jpg";         // Screenshot-Pfad
    const uploadUrl = 'http://192.168.49.185/imgupload'; // IP-Adresse Accesspoint
    const macAddress = '000004B4FED2BC9B';           // MAC-Adresse des Displays
    const ditherValue = 0;                           // Dither-Wert (0 = Farben gleich)
    
    // ENDE Anpassungen! Ab hier nichts mehr ändern!
    // #############################################
    
    const axios = require('axios');
    const fs = require('fs');
    const FormData = require('form-data');
    
    async function takeScreenshotAndUpload() {
        try {
            // Screenshot machen und warten, bis abgeschlossen
            await new Promise((resolve, reject) => {
                sendTo('puppeteer.0', 'screenshot', {
                    url: urlOfVISView,
                    path: inputPath,
                    width: targetWidth,
                    height: targetHeight,
                    quality: pquality,
                    waitOption: {
                        waitForSelector: waitForSelector,
                        waitForTimeout: 20000
                    },
                    fullPage: false,
                    clip: {
                        x: cutoutX,
                        y: cutoutY,
                        width: targetWidth,
                        height: targetHeight
                    }
                }, (res) => {
                    if (res && res.error) {
                        reject(new Error(res.error));
                    } else {
                        resolve();
                    }
                });
            });
    
            // Kurze Wartezeit, um sicherzugehen, dass Datei geschrieben wurde
            await new Promise(r => setTimeout(r, 1000));
    
            await uploadImage();
        } catch (err) {
            console.error('Fehler bei Screenshot oder Upload:', err.message);
        }
    }
    
    async function uploadImage() {
        try {
            if (!fs.existsSync(inputPath)) {
                throw new Error(`Datei nicht gefunden: ${inputPath}`);
            }
    
            const form = new FormData();
            form.append("mac", macAddress);
            form.append("dither", ditherValue.toString());
            form.append("file", fs.createReadStream(inputPath));
    
            const response = await axios.post(uploadUrl, form, {
                headers: {
                    ...form.getHeaders(),
                },
            });
    
            console.log('Upload erfolgreich:', response.data);
        } catch (error) {
            if (error.response) {
                console.error('Server-Antwort:', error.response.status, error.response.data);
            } else if (error.request) {
                console.error('Keine Antwort erhalten:', error.request);
            } else {
                console.error('Fehler beim Hochladen:', error.message);
            }
        }
    }
    
    // Trigger: Reagiere auf Änderung im Datenpunkt
    on("javascript.0.Todoist.Kleines Gartenhaus", function (obj) {
        takeScreenshotAndUpload();
    });
    

    Jetzt werden die Änderungen die ich bei todoist mache auch direkt und richtig übernommen.

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

    EisbaeeerE 1 Antwort Letzte Antwort
    1
    • B Beowolf

      @eisbaeeer

      Ich habe das Skript ein wenig verändert. Ich hoffe das das ok für dich ist.

      // #############################################
      // Author:  Eisbaeeer
      // Date:    20250415
      // Version: 0.2 : Verbesserte async-Logik, Timing, saubere Struktur
      // Version: 0.3 : ordentlichem await, sauberen async-Aufrufen und besserer Struktur
      //
      // Benötigt: 
      // - Puppeteer Adapter
      // - Chrome Headless
      //
      // Ab hier die Anpassungen vornehmen!
      
      const urlOfVISView = 'http://192.168.49.38:8082/vis/index.html?E-Paper-Allgemein#ToDo_Liste_1'; // URL zur View
      const targetWidth = 800;                         // Breite des Displays
      const targetHeight = 480;                        // Höhe des Displays
      const cutoutX = 0;                               // Abstand Pixel von links
      const cutoutY = 0;                               // Abstand Pixel von oben
      const pquality = 100;                            // Bildqualität
      const waitForSelector = "#w00047";               // Letztes Widget in der View
      const inputPath = "/tmp/todoliste1.jpg";         // Screenshot-Pfad
      const uploadUrl = 'http://192.168.49.185/imgupload'; // IP-Adresse Accesspoint
      const macAddress = '000004B4FED2BC9B';           // MAC-Adresse des Displays
      const ditherValue = 0;                           // Dither-Wert (0 = Farben gleich)
      
      // ENDE Anpassungen! Ab hier nichts mehr ändern!
      // #############################################
      
      const axios = require('axios');
      const fs = require('fs');
      const FormData = require('form-data');
      
      async function takeScreenshotAndUpload() {
          try {
              // Screenshot machen und warten, bis abgeschlossen
              await new Promise((resolve, reject) => {
                  sendTo('puppeteer.0', 'screenshot', {
                      url: urlOfVISView,
                      path: inputPath,
                      width: targetWidth,
                      height: targetHeight,
                      quality: pquality,
                      waitOption: {
                          waitForSelector: waitForSelector,
                          waitForTimeout: 20000
                      },
                      fullPage: false,
                      clip: {
                          x: cutoutX,
                          y: cutoutY,
                          width: targetWidth,
                          height: targetHeight
                      }
                  }, (res) => {
                      if (res && res.error) {
                          reject(new Error(res.error));
                      } else {
                          resolve();
                      }
                  });
              });
      
              // Kurze Wartezeit, um sicherzugehen, dass Datei geschrieben wurde
              await new Promise(r => setTimeout(r, 1000));
      
              await uploadImage();
          } catch (err) {
              console.error('Fehler bei Screenshot oder Upload:', err.message);
          }
      }
      
      async function uploadImage() {
          try {
              if (!fs.existsSync(inputPath)) {
                  throw new Error(`Datei nicht gefunden: ${inputPath}`);
              }
      
              const form = new FormData();
              form.append("mac", macAddress);
              form.append("dither", ditherValue.toString());
              form.append("file", fs.createReadStream(inputPath));
      
              const response = await axios.post(uploadUrl, form, {
                  headers: {
                      ...form.getHeaders(),
                  },
              });
      
              console.log('Upload erfolgreich:', response.data);
          } catch (error) {
              if (error.response) {
                  console.error('Server-Antwort:', error.response.status, error.response.data);
              } else if (error.request) {
                  console.error('Keine Antwort erhalten:', error.request);
              } else {
                  console.error('Fehler beim Hochladen:', error.message);
              }
          }
      }
      
      // Trigger: Reagiere auf Änderung im Datenpunkt
      on("javascript.0.Todoist.Kleines Gartenhaus", function (obj) {
          takeScreenshotAndUpload();
      });
      

      Jetzt werden die Änderungen die ich bei todoist mache auch direkt und richtig übernommen.

      EisbaeeerE Offline
      EisbaeeerE Offline
      Eisbaeeer
      Developer
      schrieb am zuletzt editiert von Eisbaeeer
      #948

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

      @eisbaeeer

      Ich habe das Skript ein wenig verändert. Ich hoffe das das ok für dich ist.

      Aber klar ist das in Ordnung! Davon lebt ja die Community!
      Ich hab jetzt das ganze in eine Funktion gepackt und werte auch noch aus, ob der Screenshot auch funktioniert hat. Das ganze ist jetzt auch schneller, weil keine Wartezeit mehr enthalten ist.

      Die Trigger hab ich noch in den Editierbereich gepackt. Jetzt muss man nur noch im oberen Bereich alle Einstellungen editieren oder um Trigger ergänzen.

      Wer das Script schon benutzt muss nur seine Trigger von unten nach oben packen und alles ab "ENDE Anpassungen ...." ersetzten.

      Bin gerade noch in Kontakt mit dem Adapter Entwickler von:
      https://github.com/DrozmotiX/ioBroker.open-epaper-link

      Eventuell bekommen wir das ganze in den Adapter integriert 😉

      // #############################################
      // Author:  Eisbaeeer
      // Date:    20250415
      // Version  0.2 :   Bugfix async pictures 
      // Version: 0.1 :   Convert from Blockly to js
      //
      // Benötigt: 
      // - Puppeteer Adapter
      // - Chrome Headless
      //
      // #############################################
      // Hier die Anpassungen vornehmen!
      
      const urlOfVISView = 'http://192.168.1.200:8082/vis/?OpenEpaper#Tag2';	// Eure View oder URL vom Bild						// URL zur View
      const targetWidth = 296;												// Breite des Displays
      const targetHeight = 128;												// Höhe des Displays
      const cutoutX = 0;													    // Abstand Pixel von links für Screenshot
      const cutoutY = 0;														// Abstand Pixel von oben für Screenshot
      const pquality = 100;	                                                // Bildqualität
      const waitForSelector = "#w00017"										// Screenshot Qualität
      const inputPath = "/tmp/epaperTag01.jpg";								// Screenshot temporär
      const uploadUrl = 'http://192.168.1.180/imgupload';						// IP-Adresse Accesspoint anpassen
      const macAddress = '0000021F7E2C3B12';									// MAC-Adresse des Displays anpassen
      const ditherValue = 1; 												    // Setze den Dither-Wert (Farbanpassungen: 0 = View hat gleiche Farben | 1 = View hat andere Farben als das Display
      
      // Hier werden die Trigger eingestellt (wann ein Screenshot erstellt werden soll)
      
      // Hier im Beispiel alle 15 Minuten 
      schedule("*/15 * * * *", async () => {
          takeScreenshots();
      });
          
      // Hier auf einen STATE im userdata.0
      on("0_userdata.0.TESTING.STATE",function(obj) {
          takeScreenshots();
      });
      
      // Hier auf einen STATE von Homematic Türkontakt
      on("hm-rpc.0.LEQ9129032.1.STATE",function(obj) {
          takeScreenshots();
      });    
      
      // ENDE Anpassungen! Ab hier nichts mehr ändern!
      // #############################################
      
      // Requirements
      const puppeteer = require('puppeteer');
      const axios = require('axios');
      const fs = require('fs');
      const FormData = require('form-data');
      
      async function takeScreenshots() {
          console.log("*** function takeScreenshot");
          sendTo('puppeteer.0', 'screenshot', { 
            url: urlOfVISView,                     
              path: inputPath,     
              width: targetWidth,                      
              height: targetHeight,                    
              quality: pquality,                   
           
              waitOption: {
                  waitForSelector: waitForSelector,  
                  waitForTimeout: 20000              
              },
           
              fullPage: false,                       
           
              clip: {         
                  x: cutoutX,                        
                  y: cutoutY,                        
                  width: targetWidth,                
                  height: targetHeight               
              }
          }, obj => {
            if (obj.error) {
              log(`Error taking screenshot: ${obj.error.message}`, 'error');
            } else {
              // the binary representation of the image is contained in `obj.result`
              log(`Successfully took screenshot: ${obj.result}`);
              console.log("*** upload Image");
              // uploading Screenshot
              async function uploadImage() {
      		try {
      			// Prüfen, ob die Datei existiert
      			if (!fs.existsSync(inputPath)) {
      			throw new Error(`Datei nicht gefunden: ${inputPath}`);
      		}
      	// FormData erstellen
      	const form = new FormData();
      	form.append("mac", macAddress);
      	form.append("dither", ditherValue); // Dither-Parameter hinzufügen
      	form.append("file", fs.createReadStream(inputPath));
      	// POST-Anfrage senden
      	const response = await axios.post(uploadUrl, form, {
      	headers: {
      		...form.getHeaders(),
      	},
      	});
      
      	console.log('Upload erfolgreich:', response.data);
      	} catch (error) {
      	if (error.response) {
      		console.error('Server-Antwort:', error.response.status, error.response.data);
      	} else if (error.request) {
      		console.error('Keine Antwort erhalten:', error.request);
      	} else {
      		console.error('Fehler beim Hochladen:', error.message);
      	}
      	}
          }
          uploadImage();
          }
          })
      }
       
      

      Kein support per PM. Bitte im Forum Fragen stellen!

      B 1 Antwort Letzte Antwort
      0
      • EisbaeeerE Eisbaeeer

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

        @eisbaeeer

        Ich habe das Skript ein wenig verändert. Ich hoffe das das ok für dich ist.

        Aber klar ist das in Ordnung! Davon lebt ja die Community!
        Ich hab jetzt das ganze in eine Funktion gepackt und werte auch noch aus, ob der Screenshot auch funktioniert hat. Das ganze ist jetzt auch schneller, weil keine Wartezeit mehr enthalten ist.

        Die Trigger hab ich noch in den Editierbereich gepackt. Jetzt muss man nur noch im oberen Bereich alle Einstellungen editieren oder um Trigger ergänzen.

        Wer das Script schon benutzt muss nur seine Trigger von unten nach oben packen und alles ab "ENDE Anpassungen ...." ersetzten.

        Bin gerade noch in Kontakt mit dem Adapter Entwickler von:
        https://github.com/DrozmotiX/ioBroker.open-epaper-link

        Eventuell bekommen wir das ganze in den Adapter integriert 😉

        // #############################################
        // Author:  Eisbaeeer
        // Date:    20250415
        // Version  0.2 :   Bugfix async pictures 
        // Version: 0.1 :   Convert from Blockly to js
        //
        // Benötigt: 
        // - Puppeteer Adapter
        // - Chrome Headless
        //
        // #############################################
        // Hier die Anpassungen vornehmen!
        
        const urlOfVISView = 'http://192.168.1.200:8082/vis/?OpenEpaper#Tag2';	// Eure View oder URL vom Bild						// URL zur View
        const targetWidth = 296;												// Breite des Displays
        const targetHeight = 128;												// Höhe des Displays
        const cutoutX = 0;													    // Abstand Pixel von links für Screenshot
        const cutoutY = 0;														// Abstand Pixel von oben für Screenshot
        const pquality = 100;	                                                // Bildqualität
        const waitForSelector = "#w00017"										// Screenshot Qualität
        const inputPath = "/tmp/epaperTag01.jpg";								// Screenshot temporär
        const uploadUrl = 'http://192.168.1.180/imgupload';						// IP-Adresse Accesspoint anpassen
        const macAddress = '0000021F7E2C3B12';									// MAC-Adresse des Displays anpassen
        const ditherValue = 1; 												    // Setze den Dither-Wert (Farbanpassungen: 0 = View hat gleiche Farben | 1 = View hat andere Farben als das Display
        
        // Hier werden die Trigger eingestellt (wann ein Screenshot erstellt werden soll)
        
        // Hier im Beispiel alle 15 Minuten 
        schedule("*/15 * * * *", async () => {
            takeScreenshots();
        });
            
        // Hier auf einen STATE im userdata.0
        on("0_userdata.0.TESTING.STATE",function(obj) {
            takeScreenshots();
        });
        
        // Hier auf einen STATE von Homematic Türkontakt
        on("hm-rpc.0.LEQ9129032.1.STATE",function(obj) {
            takeScreenshots();
        });    
        
        // ENDE Anpassungen! Ab hier nichts mehr ändern!
        // #############################################
        
        // Requirements
        const puppeteer = require('puppeteer');
        const axios = require('axios');
        const fs = require('fs');
        const FormData = require('form-data');
        
        async function takeScreenshots() {
            console.log("*** function takeScreenshot");
            sendTo('puppeteer.0', 'screenshot', { 
              url: urlOfVISView,                     
                path: inputPath,     
                width: targetWidth,                      
                height: targetHeight,                    
                quality: pquality,                   
             
                waitOption: {
                    waitForSelector: waitForSelector,  
                    waitForTimeout: 20000              
                },
             
                fullPage: false,                       
             
                clip: {         
                    x: cutoutX,                        
                    y: cutoutY,                        
                    width: targetWidth,                
                    height: targetHeight               
                }
            }, obj => {
              if (obj.error) {
                log(`Error taking screenshot: ${obj.error.message}`, 'error');
              } else {
                // the binary representation of the image is contained in `obj.result`
                log(`Successfully took screenshot: ${obj.result}`);
                console.log("*** upload Image");
                // uploading Screenshot
                async function uploadImage() {
        		try {
        			// Prüfen, ob die Datei existiert
        			if (!fs.existsSync(inputPath)) {
        			throw new Error(`Datei nicht gefunden: ${inputPath}`);
        		}
        	// FormData erstellen
        	const form = new FormData();
        	form.append("mac", macAddress);
        	form.append("dither", ditherValue); // Dither-Parameter hinzufügen
        	form.append("file", fs.createReadStream(inputPath));
        	// POST-Anfrage senden
        	const response = await axios.post(uploadUrl, form, {
        	headers: {
        		...form.getHeaders(),
        	},
        	});
        
        	console.log('Upload erfolgreich:', response.data);
        	} catch (error) {
        	if (error.response) {
        		console.error('Server-Antwort:', error.response.status, error.response.data);
        	} else if (error.request) {
        		console.error('Keine Antwort erhalten:', error.request);
        	} else {
        		console.error('Fehler beim Hochladen:', error.message);
        	}
        	}
            }
            uploadImage();
            }
            })
        }
         
        
        B Offline
        B Offline
        Beowolf
        schrieb am zuletzt editiert von
        #949

        @eisbaeeer

        Adapter wäre cool.

        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
          #950

          @eisbaeeer
          Ich habe ja diese TAGs

          displ3.jpg

          Die haben ja zwei Tasten. Der AP reagiert bzw. zeigt es auch an, das sie bestätigt worden sind.

          Gibt es da mittlerweile eine Möglichkeit diese zu erfassen und in ioBroker zu verwenden?

          Solum NEWTON 2.9 BWR

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

          EisbaeeerE 1 Antwort Letzte Antwort
          0
          • B Beowolf

            @eisbaeeer
            Ich habe ja diese TAGs

            displ3.jpg

            Die haben ja zwei Tasten. Der AP reagiert bzw. zeigt es auch an, das sie bestätigt worden sind.

            Gibt es da mittlerweile eine Möglichkeit diese zu erfassen und in ioBroker zu verwenden?

            Solum NEWTON 2.9 BWR

            EisbaeeerE Offline
            EisbaeeerE Offline
            Eisbaeeer
            Developer
            schrieb am zuletzt editiert von
            #951

            @beowolf sagte in [E-INK Display OpenEPaperLink

            Gibt es da mittlerweile eine Möglichkeit diese zu erfassen und in ioBroker zu verwenden?

            Solum NEWTON 2.9 BWR

            Ja, du brauchst den iobroker Adapter. Dort wird der Tastendruck registriert.

            Kein support per PM. Bitte im Forum Fragen stellen!

            B 1 Antwort Letzte Antwort
            0
            • EisbaeeerE Eisbaeeer

              @beowolf sagte in [E-INK Display OpenEPaperLink

              Gibt es da mittlerweile eine Möglichkeit diese zu erfassen und in ioBroker zu verwenden?

              Solum NEWTON 2.9 BWR

              Ja, du brauchst den iobroker Adapter. Dort wird der Tastendruck registriert.

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

              @eisbaeeer
              Den hatte ich schon. Der hing dann aber immer nach einer gewissen Zeit.

              Ich hatte auch schon dieses Skript

              https://github.com/slimline33/OpenEPaperLink-IOBROKER-JavaScript/blob/main/OpenEPaperLink-Websocket

              Dann ist aber extrem viel "Datenverkehr" über den javaskript Adapter.

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

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                M-A-X
                schrieb am zuletzt editiert von
                #953

                Hi.
                Da unser Standard billig Außenthermometer den Geist aufgegeben hat (die LCD Segmente sind reihenweise ausgefallen), suche ich eine einfache Möglichkeit die eh schon vorhandene Außentemperatur aus iobroker anzeigen zu lassen. Dabei steht das Display im Sichtberich, sodass es optisch einigermaßen ok aussehen sollte.
                Ich habe hier einen thread gefunden bei dem es darum geht eink Preisdisplays umzuflashen. Did links zu fertigen Angeboten sind jedoch offline oder die Angebote ausverkauft. Außerdem scheint es mir, dass ich da zusätzlich zum Display der Temperatur noch eine Art Router brauche. Das ganze möchte ich gerne umgehen.
                Ich habe an der Stelle, wo das Display hin soll keine Strom und auch keine Bedarf mehr als nur die Temperatur anzuzeigen, sodass nen tablet mit bis absoluter Overkill (preislich und zur Einrichtung) wäre.
                Hat jemand einen Tipp? Oder bin ich nur zu blöd ein Angebot zu finden ohne dass das Display dann sehr gebastelt aussieht.
                Vielen Dank im Voraus
                Max

                haselchenH 1 Antwort Letzte Antwort
                0
                • M M-A-X

                  Hi.
                  Da unser Standard billig Außenthermometer den Geist aufgegeben hat (die LCD Segmente sind reihenweise ausgefallen), suche ich eine einfache Möglichkeit die eh schon vorhandene Außentemperatur aus iobroker anzeigen zu lassen. Dabei steht das Display im Sichtberich, sodass es optisch einigermaßen ok aussehen sollte.
                  Ich habe hier einen thread gefunden bei dem es darum geht eink Preisdisplays umzuflashen. Did links zu fertigen Angeboten sind jedoch offline oder die Angebote ausverkauft. Außerdem scheint es mir, dass ich da zusätzlich zum Display der Temperatur noch eine Art Router brauche. Das ganze möchte ich gerne umgehen.
                  Ich habe an der Stelle, wo das Display hin soll keine Strom und auch keine Bedarf mehr als nur die Temperatur anzuzeigen, sodass nen tablet mit bis absoluter Overkill (preislich und zur Einrichtung) wäre.
                  Hat jemand einen Tipp? Oder bin ich nur zu blöd ein Angebot zu finden ohne dass das Display dann sehr gebastelt aussieht.
                  Vielen Dank im Voraus
                  Max

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

                  @m-a-x

                  https://forum.iobroker.net/topic/66380/e-ink-display-openepaperlink-displayanzeige-mit-batterie/952

                  @Homoran
                  @Negalein
                  @Samson71

                  Kann einer von euch bitte diesen Thread in den oben verlinkten integrieren.

                  Dankeschön

                  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

                  M 1 Antwort Letzte Antwort
                  0
                  • haselchenH haselchen

                    @m-a-x

                    https://forum.iobroker.net/topic/66380/e-ink-display-openepaperlink-displayanzeige-mit-batterie/952

                    @Homoran
                    @Negalein
                    @Samson71

                    Kann einer von euch bitte diesen Thread in den oben verlinkten integrieren.

                    Dankeschön

                    M Offline
                    M Offline
                    M-A-X
                    schrieb am zuletzt editiert von M-A-X
                    #955

                    @haselchen hi, genau den thread meinte ich. Da geht es aber darum eine Art Router ans laufen zu bringen und dann ein billig Display zu Flashen und einzubinden, etc.
                    Ich suche eine fertige Lösung. Wenn es die nicht gibt, reicht mir das als Antwort 🙂
                    Edit: an der von dir verlinkten Lösung gefällt mir nicht: zusätzlicher Router (Strom Verbrauch und mehr Hardware), die displays sehen sehr oft / immer billig aus (kein Gehäuse oder nur ein seitlich offenes).

                    HomoranH haselchenH B 3 Antworten Letzte Antwort
                    0
                    • HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von Homoran
                      #956

                      erledigt

                      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
                      1
                      • HomoranH Homoran

                        erledigt

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

                        @atc

                        Hast Du eine Idee für den User @M-A-X ?

                        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

                        S 1 Antwort Letzte Antwort
                        0
                        • M M-A-X

                          @haselchen hi, genau den thread meinte ich. Da geht es aber darum eine Art Router ans laufen zu bringen und dann ein billig Display zu Flashen und einzubinden, etc.
                          Ich suche eine fertige Lösung. Wenn es die nicht gibt, reicht mir das als Antwort 🙂
                          Edit: an der von dir verlinkten Lösung gefällt mir nicht: zusätzlicher Router (Strom Verbrauch und mehr Hardware), die displays sehen sehr oft / immer billig aus (kein Gehäuse oder nur ein seitlich offenes).

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

                          @m-a-x ich hab diese Kombination
                          2016_03_04_hm_kopfbild.jpg

                          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 -

                          1 Antwort Letzte Antwort
                          0
                          • haselchenH haselchen

                            @atc

                            Hast Du eine Idee für den User @M-A-X ?

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

                            @haselchen
                            Einen Access Point braucht man da derzeit immer, da die Displays ein extra stromsparendes Protokoll sprechen muss auch die AP Seite das können und es gibt hier derzeit noch keine direkte Integration in Raspi, HA etc.

                            Hier aber dennoch nen derzeitiger funktionierender link zu Displays und AP:
                            https://www.kleinanzeigen.de/s-anzeige/2-66-bwr-epaper-display-geflasht-mit-openepaperlink-preisschild/3015200420-168-2829

                            1 Antwort Letzte Antwort
                            0
                            • M M-A-X

                              @haselchen hi, genau den thread meinte ich. Da geht es aber darum eine Art Router ans laufen zu bringen und dann ein billig Display zu Flashen und einzubinden, etc.
                              Ich suche eine fertige Lösung. Wenn es die nicht gibt, reicht mir das als Antwort 🙂
                              Edit: an der von dir verlinkten Lösung gefällt mir nicht: zusätzlicher Router (Strom Verbrauch und mehr Hardware), die displays sehen sehr oft / immer billig aus (kein Gehäuse oder nur ein seitlich offenes).

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

                              @m-a-x

                              Siehe Antwort über mir

                              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
                              • M M-A-X

                                @haselchen hi, genau den thread meinte ich. Da geht es aber darum eine Art Router ans laufen zu bringen und dann ein billig Display zu Flashen und einzubinden, etc.
                                Ich suche eine fertige Lösung. Wenn es die nicht gibt, reicht mir das als Antwort 🙂
                                Edit: an der von dir verlinkten Lösung gefällt mir nicht: zusätzlicher Router (Strom Verbrauch und mehr Hardware), die displays sehen sehr oft / immer billig aus (kein Gehäuse oder nur ein seitlich offenes).

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

                                @m-a-x sagte in E-INK Display OpenEPaperLink - Displayanzeige mit Batterie:

                                Edit: an der von dir verlinkten Lösung gefällt mir nicht: zusätzlicher Router (Strom Verbrauch und mehr Hardware), die displays sehen sehr oft / immer billig aus (kein Gehäuse oder nur ein seitlich offenes).

                                Nichts für ungut, aber ob ein ESP32 jetzt "den" Stromverbrauch hat? Nun gut.

                                Displays billig? Schau dir diese an

                                displ1.jpg
                                Anzeige steht gerade auf dem Kopf.
                                displ2.jpg
                                IMG_20240529_091954.jpg

                                Weder billig noch offen.

                                Was möchtest du denn noch mehr?

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

                                EisbaeeerE 1 Antwort Letzte Antwort
                                2
                                • B Beowolf

                                  @m-a-x sagte in E-INK Display OpenEPaperLink - Displayanzeige mit Batterie:

                                  Edit: an der von dir verlinkten Lösung gefällt mir nicht: zusätzlicher Router (Strom Verbrauch und mehr Hardware), die displays sehen sehr oft / immer billig aus (kein Gehäuse oder nur ein seitlich offenes).

                                  Nichts für ungut, aber ob ein ESP32 jetzt "den" Stromverbrauch hat? Nun gut.

                                  Displays billig? Schau dir diese an

                                  displ1.jpg
                                  Anzeige steht gerade auf dem Kopf.
                                  displ2.jpg
                                  IMG_20240529_091954.jpg

                                  Weder billig noch offen.

                                  Was möchtest du denn noch mehr?

                                  EisbaeeerE Offline
                                  EisbaeeerE Offline
                                  Eisbaeeer
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #962

                                  So, eben noch realisiert. Müllkalender Erinnerungsdisplay 😉
                                  Ein Tag vorher wird die Anzeige Rot, sonst weißer Hintergrund mit schwarzer Schrift als Ankündigung.
                                  Verwendete Adapter:

                                  • ical
                                  • trashschedule

                                  95a879fd-951c-4514-9483-600f08151dc7-20250418_224126.jpg

                                  Kein support per PM. Bitte im Forum Fragen stellen!

                                  haselchenH B 2 Antworten Letzte Antwort
                                  2
                                  • EisbaeeerE Eisbaeeer

                                    So, eben noch realisiert. Müllkalender Erinnerungsdisplay 😉
                                    Ein Tag vorher wird die Anzeige Rot, sonst weißer Hintergrund mit schwarzer Schrift als Ankündigung.
                                    Verwendete Adapter:

                                    • ical
                                    • trashschedule

                                    95a879fd-951c-4514-9483-600f08151dc7-20250418_224126.jpg

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

                                    @eisbaeeer

                                    Geht auch über den Googlekalender.
                                    Implementierung auf der Weboberfläche der Tags.
                                    Da haste dann die nächsten Termine alle und die aktuellen dann in rot.
                                    Geschmacksache, aber für mich informativer , da mehrere Termine zu sehen sind 😜

                                    IMG_3352.jpeg

                                    Schön auf dem Gäste WC, lesen vertreibt die Zeit 🤣

                                    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
                                    • EisbaeeerE Eisbaeeer

                                      So, eben noch realisiert. Müllkalender Erinnerungsdisplay 😉
                                      Ein Tag vorher wird die Anzeige Rot, sonst weißer Hintergrund mit schwarzer Schrift als Ankündigung.
                                      Verwendete Adapter:

                                      • ical
                                      • trashschedule

                                      95a879fd-951c-4514-9483-600f08151dc7-20250418_224126.jpg

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

                                      @eisbaeeer

                                      Stell das Script doch mal hier ein

                                      https://forum.iobroker.net/topic/79728/e-ink-display-openepaperlink-blockly-java-skripte-usw

                                      Grüße

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

                                      M 1 Antwort Letzte Antwort
                                      0
                                      • B Beowolf

                                        @eisbaeeer

                                        Stell das Script doch mal hier ein

                                        https://forum.iobroker.net/topic/79728/e-ink-display-openepaperlink-blockly-java-skripte-usw

                                        Grüße

                                        M Offline
                                        M Offline
                                        M-A-X
                                        schrieb am zuletzt editiert von
                                        #965

                                        Vielen Dank für die vielen Antworten.
                                        Ich hätte früher reagiert, bekomme aber irgendwie keine Benachrichtigungsmails.
                                        Ich schaue es mir morgen in Ruhe an.

                                        EisbaeeerE 1 Antwort Letzte Antwort
                                        0
                                        • M M-A-X

                                          Vielen Dank für die vielen Antworten.
                                          Ich hätte früher reagiert, bekomme aber irgendwie keine Benachrichtigungsmails.
                                          Ich schaue es mir morgen in Ruhe an.

                                          EisbaeeerE Offline
                                          EisbaeeerE Offline
                                          Eisbaeeer
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #966

                                          So, hängt jetzt in unserem Schlüsselschrank.
                                          Schickt mal gerne mehr use-cases von Euch.
                                          Was macht ihr noch alles mit den Epaper?
                                          931d54d3-a6aa-4187-99f6-43a02b17d22c-20250420_104609.jpg

                                          Kein support per PM. Bitte im Forum Fragen stellen!

                                          BananaJoeB 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

                                          754

                                          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