Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    E-INK Display OpenEPaperLink - Displayanzeige mit Batterie

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bimmi @oxident last edited by

      @oxident ok, ja im javascript schaut das gut aus soweit. Das wäre für mich auch kein Problem. Bin halt eher der quick&dirty typ und mal fix in blockly was zusammen gestellt ist für mich einfacher! 🐶

      aktualisierst Du auch den Tag in Dauerschleife? Die Batterien halten laut Hersteller 5 Jahre bei 2 Aktualisierungen täglich!

      O 1 Reply Last reply Reply Quote 0
      • O
        oxident @bimmi last edited by

        @bimmi said in EPS E-INK Display Ansteuerung -> Statusdisplay für 2€:

        aktualisierst Du auch den Tag in Dauerschleife? Die Batterien halten laut Hersteller 5 Jahre bei 2 Aktualisierungen täglich!

        Hoppla, ja, derzeit schon. Aber der AP ist ja zum Glück so schlau und sendet nur, wenn sich der Inhalt auch geändert hat. Erstaunlicherweise klappt das auch mit den Puppeteer-Screenshots super. Da ich mir aber auch die PV-Leistung (im 15min-Mittel) anzeigen lasse müsste dort wohl noch optimiert werden 😉

        Danke für den Hinweis!

        B R 2 Replies Last reply Reply Quote 1
        • B
          bimmi @oxident last edited by

          @oxident ich würde den Screenshot dann machen, wenn die PV ihre Daten sendet und dann gleich das Bild übertragen.

          1 Reply Last reply Reply Quote 0
          • draexler
            draexler @bimmi last edited by

            @bimmi Am Rechner habe ich jetzt keine Logs gezogen. Aber das regulieren des DB Wertes war die Lösung. Keine Abbrüche mehr seit zwei Tagen. Danke für den Tipp.

            1 Reply Last reply Reply Quote 0
            • R
              Revobobo @oxident last edited by

              @oxident
              Danke für das Javascript - das Funzt wirklich klasse,
              so kann ich verschiedene Ansichten zu bestimmten Ereignissen anzeigen lassen.

              Auf einem Display nutze ich die "Buienradar" Regenvorhersage. Auch hier wünsche ich mir temporäre Ereignisansichten. Weißt du wie ich die "Buienradar" Ansicht mit einem Javascript wiederhole?

              1 Reply Last reply Reply Quote 0
              • B
                bimmi last edited by bimmi

                habe es leider immer noch nicht geschafft ein funktionierendes blockly zu erstellen. ich hänge immer noch bei den clip einstellungen. leider übernimmt mir das doofe ding die settings nicht. 🦌

                Er übernimmt mir zwar path, url und quality und speichert den screenshot auch da wo ich ihn haben möchte, aber das mit der höhe und breite haut null hin. immer 800x600. Ebenso übernimmt er nicht den waitforselector wie in der puppeteer api beschrieben.

                Da ich jeden Display über Datenpunkte einstelle, wäre ein blockly für mich am einfachsten.

                232a96b4-e650-4266-a294-801186ed17f8-image.png

                Hat noch jemand ne idee?

                B GR 2 Replies Last reply Reply Quote 0
                • B
                  bimmi @bimmi last edited by

                  ich hab aus meiner Platinenbestellung noch Antennen und PCB für die nanoAP über. Falls jemand brauchen kann, gerne eine PM an mich!

                  0e685ad2-6357-499d-9025-95654727293b-image.png

                  B 1 Reply Last reply Reply Quote 0
                  • GR
                    GR @bimmi last edited by

                    Hallo @bimmi,

                    da kann ich Dir leider nicht weiterhelfen. Meine Lösung geht über Node-Red.
                    Das funktioniert bei mir gut.

                    B 1 Reply Last reply Reply Quote 0
                    • R
                      Radi @oxident last edited by Radi

                      @oxident @bimmi Kann man die Empfindlichkeit, bei der der AP ein neues Bild als solches erkennt irgendwo anpassen? Momentan bediene mit dem Script von @oxident 4 Tags. Ich habe das Problem, das der AP im Log bei 2 der Tags immer meldet, es gäbe nichts zu senden, da sich der Inhalt nicht geändert habe. Da ich immer die Uhrzeit des Snapshots in diesem mitsende, halte ich das für sehr unwahrscheinlich. Wo kann ich mir die erstellten Snapshots ansehen?
                      Das Ganze sieht dann so aus:
                      4a19c465-47a9-4d19-bd69-2231b4bc34f6-grafik.png

                      O 1 Reply Last reply Reply Quote 0
                      • O
                        oxident @Radi last edited by

                        @radi Eigentlich ist der AP ziemlich gut dabei, geänderte Dateien zu erkennen. Normalerweise wird Dir doch auf der Webseite des APs eine Vorschau des Bildes angezeigt, oder?

                        Könnte es vielleicht sein, dass der Snapshot der Vis nicht (oder noch nicht) richtig erstellt wurde?

                        Derzeit habe ich auch ein wenig Stress mit meinem Skript und habe testweise nach jedem Aufruf (also nach jedem Tag, der aktualisiert wird) ein

                        Sleep(5000)
                        

                        eingefügt.

                        R 1 Reply Last reply Reply Quote 0
                        • R
                          Radi @oxident last edited by Radi

                          @oxident Das Script ist das von dir hier veröffentlichte. Dort habe ich nur die VIS und die MAC-Adressen der Tags eigetragen. Wie auf dem Bild zu erkennen ist, bekommen die beiden oberen Tags die selbe VIS.

                          Der eine Tag hat aktualisiert, der Andere nicht. Wie gesagt, lasse ich in der VIS für die größeren Tags eine Uhr mitlaufen, um zu sehen, wann die Screenshots übertragen worden sind. Die ändert sich also ständig und der Shot dürfte eigentlich nie den selben Inhalt haben.

                          Zu Testzwecken habe ich den Intervall auf 10 Minuten eingestellt. Der untere Tag mit den Trebstoffpreisen hat also schon mindestens 3 Aktualisierungen ausgelassen. Im Log des Accespoint sehe ich nur, dass sich der Inhalt der Übertragung nicht geändert hat und deshalb nichts übertragen wird.

                          Daher die Frage, ob man die Screenshots der VIS irgendwo noch mal zu sehen bekommt. Im Ordner /current des AP gibt es nur RAW-Dateien, die dann die Endung .pending haben, wenn der AP der Meinung ist das etwas zu übertragen ist.

                          An welcher Stelle hast du das Sleep eingefügt. Habe von Javascript leider Null-Ahnung.

                          O 1 Reply Last reply Reply Quote 0
                          • O
                            oxident @Radi last edited by oxident

                            @radi Hmm, verstehe jetzt Dein Problem, muss aber ehrlich gestehen, dass ich nicht weiß, woran es liegen kann.

                            Wird Dir denn auf der Webseite des AP keine Vorschau angezeigt?

                            Wie sieht denn Dein Skript jetzt aus?

                            R 1 Reply Last reply Reply Quote 0
                            • R
                              Radi @oxident last edited by Radi

                              @oxident Doch, aber die Vorschau dort ändert sich auch nicht, was dem entspricht, was das log des AP sagt.
                              Deswegen ja die Frage, ob ich auf dem IOBroker die erstellten Snapshots noch mal sehen kann, um festzustellen, ob sich da wirklich nichts geändert hat oder die Erkennung von Änderungen im AP dafür sorgt, das da nichts aktualisiert wird.

                              Das Script sieht jetzt so aus:

                              function updateEPaperWithView(sView, sEPaperMac, imgWidth, imgHeight) {
                              
                                  sendTo('puppeteer.0', 'screenshot', { 
                              
                                      url: 'http://localhost:8089/vis/index.html#' + sView,
                              
                                      ioBrokerOptions: {
                              
                                          storagePath: sView + '.jpg',
                              
                                      },
                              
                                      waitOption: {
                              
                                          waitForTimeout: 5000,
                              
                                      },
                              
                                      viewportOptions: {
                              
                                          width: imgWidth,
                              
                                          height: imgHeight
                              
                                      },
                              
                                      type: "jpeg",
                              
                                      quality: 100
                              
                                  }, obj => {
                              
                                      if (obj.error) {
                              
                                          log(`Error taking screenshot: ${obj.error.message}`, 'error');
                              
                                      } else {
                              
                                          //log('Sucessfully took screenshot');
                              
                                          sendImageToEPaper(obj.result, sEPaperMac);
                              
                                      }
                              
                                  });
                              
                              }
                              
                               
                              
                              function sendImageToEPaper(objImage, sMac) {
                              
                                  var request = require('request');
                              
                                  var options = {
                              
                                          url: 'http://192.168.69.195/imgupload',
                              
                                          method: 'POST',
                              
                                          formData: { 
                              
                                              "dither": "0", 
                              
                                              "mac": sMac,
                              
                                              "image": objImage },
                              
                                          
                              
                                      };
                              
                                      
                              
                                  request(options,function (error, response, body){
                              
                                      
                              
                                          //log("Login-Antwort: " + JSON.stringify(response));
                              
                                          if(parseInt(body.error_code)==0) {
                              
                                              
                              
                                          } else {
                              
                                              
                              
                                          }
                              
                                          
                              
                                      });
                              
                              }
                              
                              schedule("*/10 * * * *", function () {
                              
                                  updateEPaperWithView("EPAPER_Tanken", "00000xxxxxxxxx", 296, 128);
                                  Sleep(5000);
                                  updateEPaperWithView("EPAPER_Solar", "00000xxxxxxxxx", 296, 128);
                                  Sleep(5000);
                                  updateEPaperWithView("EPAPER_Muell", "00000xxxxxxxxx", 152, 152);
                                  Sleep(5000);
                                  updateEPaperWithView("EPAPER_Solar", "00000xxxxxxxxxx", 296, 128);
                                  Sleep(5000);
                              });
                              

                              Ich hoffe die sleeps sind an der richtigen Stelle.

                              1 Reply Last reply Reply Quote 0
                              • B
                                berndsolar13 last edited by

                                oh noch jemand der sich mit Hydroponik beschäftigt 😉
                                Hab auch einen Hydro Tower mit dem ich gerade teste, die Erdbeeren blühen gerade.
                                Ultraschal Sensor ist da, und schon getestet, wegen Messung der Wasserhöhe im Tank

                                Nächster Schritt wäre eine PH Messung, und das dann auf so einem Display wäre natürlich ein Traum.
                                Hast du auch einen PH Sensor @bimmi ?

                                B 1 Reply Last reply Reply Quote 0
                                • B
                                  bimmi @GR last edited by

                                  @gr inzwischen hab ich es mithilfe eines anderen Forummitglieds geschafft so wie ich es haben wollte! Danke trotzdem!

                                  @Radi also bei mir funktioniert es auch gut. Ich kontrolliere allerdings hi und da Bilder auf meinem Webspace wo ich die Bilder ablege. Hast Du auf 40 Sekunden gestellt? Ich denke aber es liegt am Timing (https://github.com/jjwbruijn/OpenEPaperLink/wiki/Tag-protocol-timing)

                                  wo wird denn dein Screenshot zwischengespeichert? unter /opt/iobroker/iobroker-data? schau mal da ist bei dir im Script der StoragePath angegeben mit "sView+ '.jpg'

                                  R 1 Reply Last reply Reply Quote 0
                                  • B
                                    bimmi @berndsolar13 last edited by

                                    @berndsolar13 sagte in EPS E-INK Display Ansteuerung -> Statusdisplay für 2€:

                                    oh noch jemand der sich mit Hydroponik beschäftigt 😉
                                    Hab auch einen Hydro Tower mit dem ich gerade teste, die Erdbeeren blühen gerade.
                                    Ultraschal Sensor ist da, und schon getestet, wegen Messung der Wasserhöhe im Tank

                                    Nächster Schritt wäre eine PH Messung, und das dann auf so einem Display wäre natürlich ein Traum.
                                    Hast du auch einen PH Sensor @bimmi ?

                                    😄 meine Erdbeeren hab ich vorbestellt und die kommen denke ich mitte April. Dieses Jahr war meine Erdbeerernte leider nicht so gut. Hatte viel mit Wurzelfäule zu kämpfen und der Hitze denke ich. Bin absoluter Anfänger und hab immer nur eine Saison Zeit zu lernen 🙂 meine Hydro steht im freien!

                                    Ich messe die Wasserhöhe im Tank mit einem Schwimmerschalter. Die PH Sonden sind mir zu teuer zumal die ja auch öfters getauscht werden müssen leider. Ich messe mit einem 5€ Messgerät.

                                    1 Reply Last reply Reply Quote 0
                                    • B
                                      berndsolar13 last edited by

                                      alles klar, das gelbe ding aus deinem Bild hab ich auch, dachte an eines was ich in Iobroker einbinde.
                                      Im Tower hatte ich bisher keine Wurzelfäule, da die Wurzeln ja direkt in der Luft hängen und nur alle 15 min kurz beregnet werden. Bisher sind sie aber auch erst 2 Monate drin, hab noch keine Langzeit Erfahrung 😉

                                      Überwache bisher nur die Pumpe, ob sie wirklich gepumpt hat, weil wenn die 2h nix abbekommen sind sie hin 😉

                                      B 1 Reply Last reply Reply Quote 0
                                      • R
                                        Radi @bimmi last edited by

                                        @bimmi Ich nehme mal an, du meinst diese Einstellung des AP?
                                        0da8ec44-0944-4e2e-a2a7-f1d9a509cba3-grafik.png
                                        Ja, steht auf 40 Sekunden. Sollte man da was ändern?

                                        B 1 Reply Last reply Reply Quote 0
                                        • B
                                          bimmi @Radi last edited by

                                          @radi welchen AP hast Du? Die ESP32 Mini haben wohl einen Layoutfehler. Da kann die Zigbee Antenne vom Display wohl einen Reset auslösen beim ESP.

                                          Es wird empfohlen die Wifi Power auf das mindeste zu setzen je nachdem wie weit dein AP vom Router weg ist. Ich hab ihn ca. 2m vom Router an der Wand kleben und komme mit 2dbm gut zurecht!

                                          Ansonsten, schau doch mal in das Verzeichnis ob Du da deine Screenshots findest? Es sieht so aus in dem Script, dass er nur eine Grafik erstellt und diese dann überschreibt mit dem nächsten Screenshot? Könnte das sein?

                                          B R 2 Replies Last reply Reply Quote 0
                                          • B
                                            bimmi @bimmi last edited by

                                            mein Blockly sieht so aus:

                                            a414d2f3-1317-4336-b097-655811780364-image.png

                                            <xml xmlns="https://developers.google.com/blockly/xml">
                                              <variables>
                                                <variable id="=|-HU{v0HPlybOQ*ghcR">mypath</variable>
                                                <variable id="(O?~p(`|c|(KIhiht#i*">myurl</variable>
                                                <variable id="Kg9b=20h)E,riQJeDEcb">myheight</variable>
                                                <variable id="d?/+]%mL0t@pakXBBv]V">mywidth</variable>
                                                <variable id="ELianL7RIoI]6v](.5H{">clipx</variable>
                                                <variable id="v7~-E}:`3zaZ=MG;7P=[">clipy</variable>
                                                <variable id="WKu^.B?9T66xQ_qJgB@2">clipwidth</variable>
                                                <variable id="$JY/m%d:K3q{;2o7?$9r">clipheight</variable>
                                                <variable id="*^L*3Kju!MAP#u`QL(gE">myselector</variable>
                                                <variable id="8,q0AR=qke3-k-JCj-2U">quality</variable>
                                              </variables>
                                              <block type="procedures_defcustomnoreturn" id="{{Bl:d;+8eDTq,0~J9H2" x="938" y="113">
                                                <mutation statements="false">
                                                  <arg name="mypath" varid="=|-HU{v0HPlybOQ*ghcR"></arg>
                                                  <arg name="myurl" varid="(O?~p(`|c|(KIhiht#i*"></arg>
                                                  <arg name="myheight" varid="Kg9b=20h)E,riQJeDEcb"></arg>
                                                  <arg name="mywidth" varid="d?/+]%mL0t@pakXBBv]V"></arg>
                                                  <arg name="clipx" varid="ELianL7RIoI]6v](.5H{"></arg>
                                                  <arg name="clipy" varid="v7~-E}:`3zaZ=MG;7P=["></arg>
                                                  <arg name="clipwidth" varid="WKu^.B?9T66xQ_qJgB@2"></arg>
                                                  <arg name="clipheight" varid="$JY/m%d:K3q{;2o7?$9r"></arg>
                                                  <arg name="myselector" varid="*^L*3Kju!MAP#u`QL(gE"></arg>
                                                  <arg name="quality" varid="8,q0AR=qke3-k-JCj-2U"></arg>
                                                </mutation>
                                                <field name="NAME">macheScreenshot</field>
                                                <field name="SCRIPT">c2VuZFRvKCdwdXBwZXRlZXIuMCcsICdzY3JlZW5zaG90JywgeyANCg0KICAgIHVybDogbXl1cmwgLA0KDQogICAgcGF0aDogbXlwYXRoICwgDQoNCiAgICB3aWR0aDpteXdpZHRoLA0KDQogICAgcXVhbGl0eTpxdWFsaXR5LA0KDQogICAgaGVpZ2h0Om15aGVpZ2h0LA0KDQogICAgd2FpdE9wdGlvbjogew0KICAgIA0KICAgIC8vIHdhaXRmb3JUaW1lb3V0OiA1MDAwLA0KICAgIHdhaXRGb3JTZWxlY3RvcjpteXNlbGVjdG9yLA0KDQogICAgfSwNCg0KICAgIGZ1bGxQYWdlOiBmYWxzZSwNCg0KICAgIGNsaXA6IHsgICAgICAgICANCiAgICAgICAgeDogY2xpcHgsDQogICAgICAgIHk6IGNsaXB5LA0KICAgICAgICB3aWR0aDogY2xpcHdpZHRoLA0KICAgICAgICBoZWlnaHQ6IGNsaXBoZWlnaHQNCiAgICAgIH0NCn0pOw==</field>
                                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                              </block>
                                              <block type="procedures_callcustomnoreturn" id="a8y(c@2xKnJ~R;]2^j%W" x="938" y="163">
                                                <mutation name="macheScreenshot">
                                                  <arg name="mypath"></arg>
                                                  <arg name="myurl"></arg>
                                                  <arg name="myheight"></arg>
                                                  <arg name="mywidth"></arg>
                                                  <arg name="clipx"></arg>
                                                  <arg name="clipy"></arg>
                                                  <arg name="clipwidth"></arg>
                                                  <arg name="clipheight"></arg>
                                                  <arg name="myselector"></arg>
                                                  <arg name="quality"></arg>
                                                </mutation>
                                                <value name="ARG0">
                                                  <block type="get_value" id="@$eoRt:vgP2{$;eeUch0">
                                                    <field name="ATTR">val</field>
                                                    <field name="OID">00-ZUHAUSE.0.EPS.Test.Display-Bildpfad</field>
                                                  </block>
                                                </value>
                                                <value name="ARG1">
                                                  <block type="get_value" id="xlb5GgfuCSWL[Aergw[6">
                                                    <field name="ATTR">val</field>
                                                    <field name="OID">00-ZUHAUSE.0.EPS.Test.Display-Ziel-URL</field>
                                                  </block>
                                                </value>
                                                <value name="ARG2">
                                                  <block type="math_number" id=";.b]=J)0}vs6=o(9/2N1">
                                                    <field name="NUM">0</field>
                                                  </block>
                                                </value>
                                                <value name="ARG3">
                                                  <block type="math_number" id="ru$[j_Lxmk;?ir^-I?1u">
                                                    <field name="NUM">0</field>
                                                  </block>
                                                </value>
                                                <value name="ARG4">
                                                  <block type="math_number" id="%D9jOfghJtgT{T{T7_sd">
                                                    <field name="NUM">0</field>
                                                  </block>
                                                </value>
                                                <value name="ARG5">
                                                  <block type="math_number" id="AZ5@9Rh4%Q*{L9y9]_nY">
                                                    <field name="NUM">0</field>
                                                  </block>
                                                </value>
                                                <value name="ARG6">
                                                  <block type="get_value" id="s$Lxum-=aMz`$(5TWW3%">
                                                    <field name="ATTR">val</field>
                                                    <field name="OID">00-ZUHAUSE.0.EPS.Test.Display-Breite</field>
                                                  </block>
                                                </value>
                                                <value name="ARG7">
                                                  <block type="get_value" id="P%oRRt;f$Ke}@s`ANY}B">
                                                    <field name="ATTR">val</field>
                                                    <field name="OID">00-ZUHAUSE.0.EPS.Test.Display-Höhe</field>
                                                  </block>
                                                </value>
                                                <value name="ARG8">
                                                  <block type="text" id="{3cIh]jtoaLdIe)!9Vp+">
                                                    <field name="TEXT">#w00098</field>
                                                  </block>
                                                </value>
                                                <value name="ARG9">
                                                  <block type="math_number" id="|nkrAt*)GrI|sQV(?^Bz">
                                                    <field name="NUM">100</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </xml>
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            601
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            41
                                            987
                                            214186
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo