Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Widget (basic-images): Veränderte Quell-Datei wird ignoriert.

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Widget (basic-images): Veränderte Quell-Datei wird ignoriert.

    This topic has been deleted. Only users with topic management privileges can see it.
    • Bluefox
      Bluefox last edited by

      @PrinzEisenherz1:

      Also wenn ich im VIS App auf resync gehe dann holt er sich das aktuelle Bild! Nur nicht von selbst!

      Obwohl mit

      iobroker upload filename.ext /vis.0/img/filename.ext
      

      die Aktualisierung klappt. `
      Das ist das Problem mit dem Austauschen vom URL link.

      Vermutlich dein Link wird ausgetauscht und vis nimmt dann immer das Bild von Handy. Ich bin noch am denken, wie ich das lösen kann.

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        @PrinzEisenherz1:

        Also wenn ich im VIS App auf resync gehe dann holt er sich das aktuelle Bild! Nur nicht von selbst!

        Obwohl mit

        iobroker upload filename.ext /vis.0/img/filename.ext
        

        die Aktualisierung klappt. `
        Vermutlich müssen wir auf ein Pattern uns einigen. Z.b. wenn in der Dateinamen "_refresh" am Ende steht, dann wird den Link nicht ausgetauscht.

        iobroker upload filename.ext /vis.0/img/filename_refresh.ext
        
        1 Reply Last reply Reply Quote 0
        • P
          PrinzEisenherz1 last edited by

          Ups jetzt versteh ich Bahnhof! Was meinst du mit refresh anhängen?

          Es ist egal ob ich im basic-image den Pfad so angebe

          /vis.0/img/filename.ext
          

          Oder so

          http://<ip>:8082/vis.0/img/filename.ext</ip>
          

          Beides wird im vis app nicht aktualisiert

          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            Du hast mich nicht verstanden und verstehst auch vermutlich nicht, wie APP funktioniert.

            Ich versuche zu erklären.

            Um Trafik zu sparen versucht APP alle Bilder (die Pläne sind z.B. oft über 1 MB) auf das Handy zu holen. Die sehen normalerweise wie /vis.0/main/img/myPicture.png.

            Dein Bild, was du manuell hoch lädst sieht genauso aus "/vis.0/img/filename.ext". D.h. das Bild wird bei Resync geholt und gespeichert auf dem handy.

            Du willst aber das Bild immer wieder selbst updaten, aber du kannst das Bild so oft updaten wie du willst, auf dem Handy wird es aber nicht upgedated, weil das Bild heist schon längst "file://vis.0/imgfilename.ext"

            Um jetzt den APP zu sagen, dass das Bild nicht ge"cached" sein sollte braucht man einen Regel. Entwider muss die Datei heißen "/vis.0/img/filename_refresh.ext" damit widget weiß, dass er das Bild über Socket Schnittstelle von ioBroker abholen muss, oder keine Ahnung. 😄

            1 Reply Last reply Reply Quote 0
            • P
              PrinzEisenherz1 last edited by

              Soweit hab ich das schon verstanden das Bilder gecached werden!

              Ich hatte das bloß mit dem beisatz _refresh im Dateinamen nicht verstanden!

              Das heißt aber jetzt das solch eine Funktion derzeit im App noch nicht integriert ist, richtig?

              Gruß Johnny

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                @PrinzEisenherz1:

                Soweit hab ich das schon verstanden das Bilder gecached werden!

                Ich hatte das bloß mit dem beisatz _refresh im Dateinamen nicht verstanden!

                Das heißt aber jetzt das solch eine Funktion derzeit im App noch nicht integriert ist, richtig?

                Gruß Johnny `
                Ja. Ich ich überlege noch, wie ich das realisieren kann. Vielleicht nobody hat eine Idee. :mrgreen:

                1 Reply Last reply Reply Quote 0
                • P
                  PrinzEisenherz1 last edited by

                  Vielleicht besteht ja die Möglichkeit dass das VIS App prüft ob sich bei der Bilddatei das Erstellungsdatum /-Uhrzeit geändert hat und dann im basic-image refresht!

                  Ich hoffe du verstehst was ich meine!

                  Es ändert sich zwar der Dateiname beim upload nicht aber die Uhrzeit der Dateierstellung! Vielleicht kann man das ja verwenden!

                  Gruß Johnny

                  1 Reply Last reply Reply Quote 0
                  • N
                    nobody last edited by

                    > Ja. Ich ich überlege noch, wie ich das realisieren kann. Vielleicht nobody hat eine Idee. :mrgreen:

                    Ich hab da mal ein wenig drüber nachgedacht. Dies in die App rein zu quetschen, ist eigentlich keine so gute Idee. Die App hat einen vollwertigen Browser und kann aktuelle Inhalte über http/https laden. Die Ersetzung der Pfade auf lokale Adressen erfolgt nur, wenn man einen absoluten lokalen Pfad angibt. Wenn man aber einen vollständigen Pfad mit <u>http://[meine URL]/vis.0/…</u> angibt, werden die Inhalten direkt vom Server geladen und die App verhält sich wie jeder andere Browser auch. Dann funktionieren auch die Refresh-Einstellungen der Widgets.

                    Wenn man aber versuchen würde, die geänderten Dateien über die Socket-Verbindung zu laden, gäbe es mehrere Herausforderungen. Das Kennzeichnen der relevanten Dateien ist da noch die einfachste. Die App müsste sich aber die Zuordnung der lokalen und Server-Pfade merken und persistieren.

                    Auch wäre eine Poll-Mechanismus nicht für größere Anzahlen von Dateien geeignet. Hier müsste man ein Push-Mechanismus auf dem Server schaffen um die Socket-Verbindung zu entlasten. Da es nur eine einzige socket-Verbindung für die App gibt, würde es hier zu einer Serialisierung mit den Poll-Requests für Änderungen kommen und je nach Dateigröße und Verbindung die Anwendung sehr träge machen. Und ohne Kopplung mit den Widgets wäre trotzdem eine deutliche Verzögerung bis zur Anzeige.

                    Da der Abruf von Bildern mittels http(s)-URL problemlos funktioniert und man in der uri auch die Credentials für eine eventuelle HTTP-Authentifizierung einbetten kann, sieht dies für mich als der bessere Weg aus. Für die Integration von Webcams muss man das ja sowieso so machen.

                    Mir sind aber zwei andere Möglichkeiten für das Cache-Problem eingefallen:

                    Anlegen eines neuen Verzeichnisses, welches nicht gecached wird

                    Der eingesetzte expressjs-Server bietet laut Doku die Möglichkeit, die Cache-Zeit für statische Inhalte über den Parameter MaxAge zu steuern. Dies soll pro Verzeichnis möglich sein. Wenn man nun ein separates Verzeichnis für Dateien anlegen würde, die nicht im Cache landen sollen, könnte man für dieses eine andere Cache-Zeit einstellen. Dies setzt aber eine Änderung im Web-Adapter voraus.

                    Änderung des Dateinamens

                    Die zweite Idee stammt aus der Trickkiste, wie man Proxy-Server in Firmennetzen umgeht:

                    • Man legt ein neues Unterverzeichnis an, in das das aktuelle Bild gespeichert wird. Der Dateiname wird beim kopieren um Datum und Uhrzeit erweitert, damit sich die Dateinamen mit jeden neuen Bild unterscheiden

                    • Für die Anzeige wird ein basic string src verwendet, die die URL des Bilds aus einem State holt. Somit kann der Dateiname während der Anzeige geändert werden. Der Pfad wird als vollständiger absoluter Pfad eingetragen, sodass die Anzeige sowohl im beliebigen Webbrowser als auch in der App funktioniert.

                    • Nun kommt ein wenig Logik ins Spiel, die sehr einfach in node-red aber wahrscheinlich auch im Javascript-Adapter implementiert werden kann:

                      • Ein Flow triggert auf Änderungen im speziell angelegten Unterverzeichnis

                      • Falls eine neue Datei gefunden wird, wird der State mit der URL auf eine neue vollständige externe URL zur neuen Datei geändert

                      • Die alte Datei wird gelöscht

                    Da sich der Dateiname geändert hat, greift der Cache nicht und die Datei wird sofort ohne Verzögerung im View angezeigt. Der Vorteil ist, dass dies garantiert immer funktioniert, egal welche Server in der Kommunikationskette zwischengeschaltet sind und das dafür keine Anpassungen an den Adaptern oder der App erforderlich sind.

                    1 Reply Last reply Reply Quote 0
                    • Bluefox
                      Bluefox last edited by

                      Ich denke, dass die Lösung mit http://[meine URL]/vis.0/… ist am einfachsten.

                      Die Bilder werden jedes mal neu gefragt, weil "basic-image" jedes Mal URL ändert:

                      http://[meine URL]/vis.0/…/picture.png?1

                      http://[meine URL]/vis.0/…/picture.png?2

                      http://[meine URL]/vis.0/…/picture.png?3

                      …

                      Und so wird Cache vom Browser umgegangen.

                      Natürlich gibt es Rahmenbedingungen:

                      • Web server muss vom Handy erreichbar sein, d.h. nur socket.io recht nicht aus.

                      • Adresse muss so sein, dass es von Aussen und von Innen errechbar ist.

                      1 Reply Last reply Reply Quote 0
                      • P
                        PrinzEisenherz1 last edited by

                        Hi Bluefox, sorry das ich mich jetzt erst melde!

                        Funktioniert denn Dein Lösungsvorschlag mit dem App schon?

                        Oder bastelst Du noch an einer Lösung?

                        Gruß

                        Johnny

                        1 Reply Last reply Reply Quote 0
                        • Bluefox
                          Bluefox last edited by

                          Dass was "nobody" vorgeschlagen hat, sollte gehen.

                          1 Reply Last reply Reply Quote 0
                          • P
                            PrinzEisenherz1 last edited by

                            @nobody:

                            ` > ….

                            .....

                            Änderung des Dateinamens

                            Die zweite Idee stammt aus der Trickkiste, wie man Proxy-Server in Firmennetzen umgeht:

                            • Man legt ein neues Unterverzeichnis an, in das das aktuelle Bild gespeichert wird. Der Dateiname wird beim kopieren um Datum und Uhrzeit erweitert, damit sich die Dateinamen mit jeden neuen Bild unterscheiden

                            • Für die Anzeige wird ein basic string src verwendet, die die URL des Bilds aus einem State holt. Somit kann der Dateiname während der Anzeige geändert werden. Der Pfad wird als vollständiger absoluter Pfad eingetragen, sodass die Anzeige sowohl im beliebigen Webbrowser als auch in der App funktioniert.

                            • Nun kommt ein wenig Logik ins Spiel, die sehr einfach in node-red aber wahrscheinlich auch im Javascript-Adapter implementiert werden kann:

                              • Ein Flow triggert auf Änderungen im speziell angelegten Unterverzeichnis

                              • Falls eine neue Datei gefunden wird, wird der State mit der URL auf eine neue vollständige externe URL zur neuen Datei geändert

                              • Die alte Datei wird gelöscht

                            Da sich der Dateiname geändert hat, greift der Cache nicht und die Datei wird sofort ohne Verzögerung im View angezeigt. Der Vorteil ist, dass dies garantiert immer funktioniert, egal welche Server in der Kommunikationskette zwischengeschaltet sind und das dafür keine Anpassungen an den Adaptern oder der App erforderlich sind.

                            Danke Bluefox für die Info!

                            @nobody

                            kannst mir das bitte genauer erklären wie ich sowas umsetzen?

                            Wäre klasse von Dir!

                            Gruß Johnny

                            1 Reply Last reply Reply Quote 0
                            • N
                              nobody last edited by

                              Kann ich gerne machen, wird aber etwas dauern.

                              Gesendet von meinem SM-G900F mit Tapatalk

                              1 Reply Last reply Reply Quote 0
                              • P
                                PrinzEisenherz1 last edited by

                                Du bist ne Wucht! Danke!

                                Keine Problem! Kann warten!

                                Gruß Johnny

                                1 Reply Last reply Reply Quote 0
                                • N
                                  nobody last edited by

                                  hier nun das Skript.

                                  Da ich keine Lust auf die Diskussion habe, ob nun node-red oder javascript die bessere Lösung ist, hab ich es komplett als Bash-Skript mit der Simple-API umgesetzt. So kann es ganz einfach mit wget oder curl so erweitert werden, dass die Datei direkt von einem Server geladen und anschließend kopiert wird.

                                  ! #!/bin/bash
                                  ! # Konfiguration
                                  ! # Verzeichnisse, State und Source-Datei müssen existieren
                                  ! # Simple-API muss aktiviert sein
                                  ! # Verzeichnis, in dem die Source-Datei liegt
                                  ! SOURCEDIR=/tmp
                                  ! # Absoluter Pfad bis zu dem Verzeichnis, in dem sich der Ordner vis.0 befindet
                                  ! DATADIRECTORY=/opt/iobroker/iobroker-data/files
                                  ! # Pfad unterhalb des DATADIRECTORY bis zum Bildverzeichnis. Wichtig: in diesem Unterverzeichnis dürfen sich keine weitere Dateien befinden, da diese automatisch gelöscht werden
                                  ! VISIMAGEDIRECTORY=vis.0/main/floatingimage
                                  ! # Dateiname der Quelldatei
                                  ! SOURCEFILENAME=myimage.png
                                  ! # In der Admin-Oberfläche angelegter State für die Bild-URL. Im VIS-View ist ein basic string image src Widget einzufügen, das auf diesen State verweist.
                                  ! STATE=vis.0.main.floatingimage
                                  ! # URL für den Zugriff auf die Simple-API. Kann eine im Web-Adapter aktivierte Simple-API sein.
                                  ! SIMPLEAPIURL=http://127.0.0.1:8082
                                  ! # Die externe URL für den Zugriff auf VIS. Falls erforderlich auch mit Angabe des Ports. Absoluter Pfad nur für App erforderlich, ansonsten reicht /
                                  ! EXTERNALVISURL=https://yourdomain.dyndns.com
                                  ! # Kommandos
                                  ! NEWFILE=img$(date +%Y%m%d_%H%M%S).png
                                  ! cp $SOURCEDIR/$SOURCEFILENAME $DATADIRECTORY/$VISIMAGEDIRECTORY/$NEWFILE
                                  ! curl -I $SIMPLEAPIURL/set/$STATE?value=$EXTERNALVISURL/$VISIMAGEDIRECTORY/$NEWFILE
                                  ! current_dir=$PWD
                                  ! cd $DATADIRECTORY/$VISIMAGEDIRECTORY
                                  ! shopt -s extglob
                                  ! rm !($NEWFILE)
                                  ! cd $current_dir

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    PrinzEisenherz1 last edited by

                                    Danke nobody für das Skript!

                                    Funktioniert perfekt!

                                    Tausend dank!

                                    Gruß Johnny

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    534
                                    Online

                                    31.8k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    5
                                    32
                                    4700
                                    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