Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
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

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    993

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

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

    @haselchen
    Also für mich sieht das wie ein mUpdate-Button aus. :face_with_cowboy_hat:

    2,811.jpg

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

    @beowolf

    🤔

    Verflixt und zugenäht.
    Den habe ich gar nicht.
    Also , die Anzeige .
    Ich hasse den inneren Monk 🤣

    Solange rumprobieren bis einheitliche Versionsnummern da stehen 😎

    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 Reply Last reply
    0
    • haselchenH haselchen

      @beowolf

      🤔

      Verflixt und zugenäht.
      Den habe ich gar nicht.
      Also , die Anzeige .
      Ich hasse den inneren Monk 🤣

      Solange rumprobieren bis einheitliche Versionsnummern da stehen 😎

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

      @haselchen Es gibt derzeit einen Bug welcher das update Fehlschlägen lässt wenn es nicht im Chrome Browser durchgeführt wird.
      Um wieder auf die aktuelle Version zu kommen kannst du via install.openepaperlink.de die alte Version wieder flashen und dann mit Chrome Browser auf die neuste Version updaten. Sichere deine Einstellungen vorher die werden bei Installation via install... gelöscht

      haselchenH B 2 Replies Last reply
      0
      • B Offline
        B Offline
        Beowolf
        wrote on last edited by
        #917

        Ich hatte hier auch Probleme mit dem Anlernen von neuen TAGs.

        Wenn bei Repro dieses steht "OpenEPaperLink/OpenEPaperLink" werden TAGs besser angelernt.

        Da stand schon mal etwas anderes. was habe ich vergessen. :face_with_rolling_eyes:

        Aber event. liegt es auch an den TAGs die ich hier habe.

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

        1 Reply Last reply
        0
        • S sameOne

          @haselchen Es gibt derzeit einen Bug welcher das update Fehlschlägen lässt wenn es nicht im Chrome Browser durchgeführt wird.
          Um wieder auf die aktuelle Version zu kommen kannst du via install.openepaperlink.de die alte Version wieder flashen und dann mit Chrome Browser auf die neuste Version updaten. Sichere deine Einstellungen vorher die werden bei Installation via install... gelöscht

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

          Hi @atc

          Ich meine das steht auch so in dem Changelog.
          Deswegen habe ich das schon so gemacht .
          Update im Chrome Browser.
          Gibt es da eine Reihenfolge ?
          Erst ESP dann Filesystem oder umgekehrt ?

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

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

            Ich mache immer erst ESP und dann das Filesystem.

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

            haselchenH 1 Reply Last reply
            0
            • B Beowolf

              Ich mache immer erst ESP und dann das Filesystem.

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

              @beowolf

              So hatte ich es auch gemacht.
              Ich probier nachher nochmal weiter rum….

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

              1 Reply Last reply
              0
              • S sameOne

                @haselchen Es gibt derzeit einen Bug welcher das update Fehlschlägen lässt wenn es nicht im Chrome Browser durchgeführt wird.
                Um wieder auf die aktuelle Version zu kommen kannst du via install.openepaperlink.de die alte Version wieder flashen und dann mit Chrome Browser auf die neuste Version updaten. Sichere deine Einstellungen vorher die werden bei Installation via install... gelöscht

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

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

                @haselchen Es gibt derzeit einen Bug welcher das update Fehlschlägen lässt wenn es nicht im Chrome Browser durchgeführt wird.
                ....

                Ich habe es unter Firefox gemacht. Also nur das Update.

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

                S 1 Reply Last reply
                1
                • B Beowolf

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

                  @haselchen Es gibt derzeit einen Bug welcher das update Fehlschlägen lässt wenn es nicht im Chrome Browser durchgeführt wird.
                  ....

                  Ich habe es unter Firefox gemacht. Also nur das Update.

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

                  Die "normale" reihenfolge wäre da erst ESP und dann das Filesystem.

                  Am meisten probleme machen Apple geräte wärend eines updates

                  @haselchen reporte gerne mal ob es nach weiteren versuchen richtig läuft

                  haselchenH 1 Reply Last reply
                  1
                  • S sameOne

                    Die "normale" reihenfolge wäre da erst ESP und dann das Filesystem.

                    Am meisten probleme machen Apple geräte wärend eines updates

                    @haselchen reporte gerne mal ob es nach weiteren versuchen richtig läuft

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

                    @atc

                    Ähm, ich hab nix gemacht. Ich schwöre :flushed:
                    Siehst es ja auch auf meinem Screenshot, die unterschiedlichen Versionen.
                    Eben ruf ich die Update Seite auf des AP und:

                    a75feb34-66ac-45ac-9b59-823d0b799426-grafik.png

                    Alles okay.
                    Das soll einer verstehen.....

                    Ich schliesse mein Issue auf Github.

                    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 B 2 Replies Last reply
                    1
                    • haselchenH haselchen

                      @atc

                      Ähm, ich hab nix gemacht. Ich schwöre :flushed:
                      Siehst es ja auch auf meinem Screenshot, die unterschiedlichen Versionen.
                      Eben ruf ich die Update Seite auf des AP und:

                      a75feb34-66ac-45ac-9b59-823d0b799426-grafik.png

                      Alles okay.
                      Das soll einer verstehen.....

                      Ich schliesse mein Issue auf Github.

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

                      @haselchen Ja gut :D
                      Besser so als das es nicht läuft :)

                      1 Reply Last reply
                      0
                      • haselchenH haselchen

                        @atc

                        Ähm, ich hab nix gemacht. Ich schwöre :flushed:
                        Siehst es ja auch auf meinem Screenshot, die unterschiedlichen Versionen.
                        Eben ruf ich die Update Seite auf des AP und:

                        a75feb34-66ac-45ac-9b59-823d0b799426-grafik.png

                        Alles okay.
                        Das soll einer verstehen.....

                        Ich schliesse mein Issue auf Github.

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

                        @haselchen

                        Ich habe etwas weiter unten bei "ESP32-C6 Firmware" noch auf "001f" aktualisiert.

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

                        haselchenH 1 Reply Last reply
                        0
                        • B Beowolf

                          @haselchen

                          Ich habe etwas weiter unten bei "ESP32-C6 Firmware" noch auf "001f" aktualisiert.

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

                          @beowolf

                          Was für einen Sinn soll das haben?

                          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

                          B S 2 Replies Last reply
                          0
                          • haselchenH haselchen

                            @beowolf

                            Was für einen Sinn soll das haben?

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

                            @haselchen
                            Keinen Dunst. :confused:

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

                            1 Reply Last reply
                            0
                            • haselchenH haselchen

                              @beowolf

                              Was für einen Sinn soll das haben?

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

                              @haselchen Die ESP32-C6 firmware ist das RF-Modul und hat in letzter zeit nicht viele updates bekommen ausser in richtung des SubGhz, wenn dieses also nicht genutzt wird ist auch eine "alte" firmware OK.

                              EisbaeeerE 1 Reply Last reply
                              0
                              • S sameOne

                                @haselchen Die ESP32-C6 firmware ist das RF-Modul und hat in letzter zeit nicht viele updates bekommen ausser in richtung des SubGhz, wenn dieses also nicht genutzt wird ist auch eine "alte" firmware OK.

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

                                @atc Ich musste das letzte Mal die ESP32-C6 als binary selbst herunterladen, auf den AP hochladen und manuell updaten. Das interne laden der ESP32-C6 firmware hat nicht funktioniert. Ich werde meinen mal updaten.

                                Edit:
                                Diesmal scheint es zu funktionieren.
                                98250f71-eca8-4e4e-aa59-681324e8aaac-image.png

                                Kein support per PM. Bitte im Forum Fragen stellen!

                                1 Reply Last reply
                                1
                                • EisbaeeerE Offline
                                  EisbaeeerE Offline
                                  Eisbaeeer
                                  Developer
                                  wrote on last edited by Eisbaeeer
                                  #930

                                  Für alle, die wieder mit dem Puppeteer Adapter ihre E-Papers beschicken wollen. Sollte selbsterklärend sein.

                                  // #############################################
                                  // 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();
                                  });    
                                  
                                  

                                  Kein support per PM. Bitte im Forum Fragen stellen!

                                  B K 2 Replies Last reply
                                  1
                                  • EisbaeeerE Eisbaeeer

                                    Für alle, die wieder mit dem Puppeteer Adapter ihre E-Papers beschicken wollen. Sollte selbsterklärend sein.

                                    // #############################################
                                    // 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
                                    wrote on last edited by Beowolf
                                    #931

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

                                    const uploadUrl = 'http://192.168.1.180/imgupload'; // IP-Adresse Accesspoint anpassen

                                    Vielen Dank für das Skript.

                                    Die Zeile mit dem "imgupload" - muß da nur die IP-Adresse angepasst werden?

                                    Was passiert, wenn zwei Sripte gleichzeitig ein Bild hochladen?

                                    Und noch was.

                                    Die Zeilen:

                                    const cutoutX = 0;
                                    const cutoutY = 0;
                                    

                                    Bleib es da auf "0" oder muß dort die "Fläche" eingegeben werden die man habn möchte?

                                    Also z.B.

                                    const cutoutX = 384;
                                    const cutoutY = 168;
                                    

                                    Grüße

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

                                    B 1 Reply Last reply
                                    0
                                    • B Beowolf

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

                                      const uploadUrl = 'http://192.168.1.180/imgupload'; // IP-Adresse Accesspoint anpassen

                                      Vielen Dank für das Skript.

                                      Die Zeile mit dem "imgupload" - muß da nur die IP-Adresse angepasst werden?

                                      Was passiert, wenn zwei Sripte gleichzeitig ein Bild hochladen?

                                      Und noch was.

                                      Die Zeilen:

                                      const cutoutX = 0;
                                      const cutoutY = 0;
                                      

                                      Bleib es da auf "0" oder muß dort die "Fläche" eingegeben werden die man habn möchte?

                                      Also z.B.

                                      const cutoutX = 384;
                                      const cutoutY = 168;
                                      

                                      Grüße

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

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

                                      Die Zeile mit dem "imgupload" - muß da nur die IP-Adresse angepasst werden?
                                      Was passiert, wenn zwei Sripte gleichzeitig ein Bild hochladen?

                                      Ich antworte mir mal selber. :face_with_rolling_eyes:

                                      Habe das mal bei zweit TAGs probiert. Die wechseln nun ständig die Bilder hin und her.

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

                                      EisbaeeerE 1 Reply Last reply
                                      0
                                      • B Beowolf

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

                                        Die Zeile mit dem "imgupload" - muß da nur die IP-Adresse angepasst werden?
                                        Was passiert, wenn zwei Sripte gleichzeitig ein Bild hochladen?

                                        Ich antworte mir mal selber. :face_with_rolling_eyes:

                                        Habe das mal bei zweit TAGs probiert. Die wechseln nun ständig die Bilder hin und her.

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

                                        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();
                                        });    
                                        

                                        Kein support per PM. Bitte im Forum Fragen stellen!

                                        B 3 Replies Last reply
                                        1
                                        • 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
                                          wrote on last edited by
                                          #934

                                          @eisbaeeer

                                          Ich bekomme diese Fehlermeldung:

                                          16.4.2025, 08:17:13.006	[error]: javascript.0 (294193) script.js.common.EPaper-Displays.Allgemein.Aufgabendisplays.ToDo_Liste_2_neu compile failed:
                                          
                                          at script.js.common.EPaper-Displays.Allgemein.Aufgabendisplays.ToDo_Liste_2_neu:97
                                          16.4.2025, 08:19:22.774	[error]: javascript.0 (294193) script.js.common.EPaper-Displays.Allgemein.Aufgabendisplays.ToDo_Liste_2_neu compile failed:
                                          
                                          at script.js.common.EPaper-Displays.Allgemein.Aufgabendisplays.ToDo_Liste_2_neu:97
                                          16.4.2025, 08:20:26.759	[error]: javascript.0 (294193) script.js.common.EPaper-Displays.Allgemein.Aufgabendisplays.ToDo_Liste_2_neu compile failed:
                                          
                                          at script.js.common.EPaper-Displays.Allgemein.Aufgabendisplays.ToDo_Liste_2_neu:97
                                          

                                          wenn ich dieses unten eingebe

                                          on("sonoff.0.Schreibtischleuchte.POWER", function(obj) {
                                              await takeScreenshots();
                                          });
                                          

                                          Was mache ich falsch?

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

                                          EisbaeeerE 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          381

                                          Online

                                          32.6k

                                          Users

                                          82.3k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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