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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. Bindings in einem HTML Widget [gelöst]

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    484

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

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

Bindings in einem HTML Widget [gelöst]

Geplant Angeheftet Gesperrt Verschoben Visualisierung
27 Beiträge 4 Kommentatoren 1.6k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • liv-in-skyL liv-in-sky

    @hotshot14167

    dann sollten wir wohl eher einfach anfangen - das wird aber jetzt nicht mehr zeitlich möglich sein

    hast du noch kein blockly in anwendung ? oder evtl den script adapter noch nie genutzt ?

    H Offline
    H Offline
    hotshot14167
    schrieb am zuletzt editiert von
    #17

    @liv-in-sky Nein habe ich nicht aber ich bin ja auch erst 2 Wochen dabei. Ich weiß ja jetzt den Weg und werde es schon rausfinden.

    liv-in-skyL 1 Antwort Letzte Antwort
    0
    • H hotshot14167

      @liv-in-sky Nein habe ich nicht aber ich bin ja auch erst 2 Wochen dabei. Ich weiß ja jetzt den Weg und werde es schon rausfinden.

      liv-in-skyL Offline
      liv-in-skyL Offline
      liv-in-sky
      schrieb am zuletzt editiert von
      #18

      @hotshot14167

      hier mal super einfaches beispiel, wie man das dann theoretisch aufbaut

      Image 034.png

      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

      H 1 Antwort Letzte Antwort
      0
      • liv-in-skyL liv-in-sky

        @hotshot14167

        hier mal super einfaches beispiel, wie man das dann theoretisch aufbaut

        Image 034.png

        H Offline
        H Offline
        hotshot14167
        schrieb am zuletzt editiert von hotshot14167
        #19

        @liv-in-sky So ich habe es geschafft mit einem Java Script jedoch werden die Daten nur beim Neustart des Skriptes aktualisiert. Warum?

        Screenshot 2023-03-21 191539.jpg

        1 Antwort Letzte Antwort
        0
        • G GombersIOB

          @hotshot14167 said in Bindings in einem HTML Widget:

          Ich möchte mehrere Werte von Datenpunkten (Shellys) zusammen rechnen Plus

          Ganz offen. Selbst wenn man das mit VIS hinbekommt, finde ich den Ansatz maximal unhandlich. Besonders, wenn man das systematisch, für alle möglichen Anzeigen, machen will. Es widerspricht auch dem objektorientierten Ansatz: "Jede Methode hat nur eine Aufgabe"!
          Warum nicht einen eigenen Datenpunkt darstellen, der per JavaScript berechnet wird?

          H Offline
          H Offline
          hotshot14167
          schrieb am zuletzt editiert von
          #20

          @gombersiob Ja habe ich hin bekommen:
          Screenshot 2023-03-21 191539.jpg

          Leider werden die Daten aber nur beim Neustart aktualisierte. Warum?

          G 1 Antwort Letzte Antwort
          0
          • H hotshot14167

            @gombersiob Ja habe ich hin bekommen:
            Screenshot 2023-03-21 191539.jpg

            Leider werden die Daten aber nur beim Neustart aktualisierte. Warum?

            G Offline
            G Offline
            GombersIOB
            schrieb am zuletzt editiert von GombersIOB
            #21

            @hotshot14167 said in Bindings in einem HTML Widget:

            Leider werden die Daten aber nur beim Neustart aktualisierte. Warum?

            Da fehlt ein Trigger:

            Meine Lösung sähe so aus:

            schedule("* * * * *", async function () {
            	let shelly1Path:string="shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.";
            	let shelly2Path:string="shelly.0.SHPLG-S#5A6DB5#1.Relay0.";
            	let userDataPath:string="0_userdata.0.Datenpunkt.Messwerte_Wohnzimmer.";
            
            	let shelly1Power:number=Number(getState(shelly1Path+"Power").val);
            	let shelly2Power:number=Number(getState(shelly2Path+"Power").val);
            	let sum:number=shelly1Power+shelly2Power;
            
            	setState(userDataPath+"Verbrauch-summe", sum, true);
            });
            

            Die "schedule"-Anweisung lässt über die CRON-Parameter das Script jede Minute anlaufen.

            Noch eins: Bitte Code nicht als Bild, sondern als echten anzeigen.
            Man klickt dazu das entprechende Editor-Zeichen an
            05095bfd-4ff7-4bbb-9882-14d4b55b4c97-grafik.png

            Es werden dann an die Stelle, wo der Cursor steht, diese drei Zeilen erzeugt:
            c63c7c2b-9329-4808-9206-13026f3e8d6e-grafik.png .
            Und den Code fügt man dann anstelle des Wortes "code_text" ein.

            Noch eine Anmerkung kann ich mir nicht verkneifen.
            Es geht mir um die Namensgebung des neuen Datenpunktes.

            1. Das Wort "Datenpunkt" würde ich im Namen weglassen. Das macht den String nur lang und gibt null Information. Was soll es den anders sein als ein Datenpunkt?
            2. Ich würde vermutlich nicht ein Verzeichnis "Messwerte_Wohnzimmer" anlegen. Sondern ein Verzeichnis "Messwerte" und darunter ein Verzeichnis "Wohnzimmer". Also "Messwerte.Wohnzimmer". Und fürs Schlafzimmer wäre es dann ein Pfad "0_userdata.0.Messwerte.Schlafzimmer.". Unter Objekten findet sich dann die Strukur
            0_userdata
               0
                  Messwerte
                     Schlafzimmer
                        Verbraucher-X
                     Wohnzimmer
                        Verbraucher-Y 
            
            H 1 Antwort Letzte Antwort
            0
            • H hotshot14167

              @liv-in-sky Stimmt das ist es!
              erster Wert: {value1:shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.Power; value1} <br/>
              erster Wert: {value1:shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.Power; typeof(value1)} <br/>
              zweiter Wert: {value2:0_userdata.0.Textstrings.Ein-shelly-test; value2} <br/>
              zweiter Wert: {value2:0_userdata.0.Textstrings.Ein-shelly-test; typeof(value2)} <br/>
              erster Wert: Umwandlung: {value1:shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.Power;parseFloat(value1)} <br/>
              zweiter Wert: Umwandlung: {value2:0_userdata.0.Textstrings.Ein-shelly-test;parseFloat(value2)} <br/>
              Ausgabe1: {value1:shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.Power; value2:0_userdata.0.Textstrings.Ein-shelly-test;value1} <br/>
              Ausgabe2: {value1:shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.Power; value2:0_userdata.0.Textstrings.Ein-shelly-test;value2} <br/>
              Berechnung: {value1:shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.Power; value2:0_userdata.0.Textstrings.Ein-shelly-test;parseFloat(value1)+parseFloat(value2)} <br/>

              erster Wert: 10.29
              erster Wert: string
              zweiter Wert: 12.3
              zweiter Wert: string
              erster Wert: Umwandlung: 10.29
              zweiter Wert: Umwandlung: 12.3
              Ausgabe1: 10.29
              Ausgabe2: 12.3
              Berechnung: 22.59

              Aber wie kann ich das lösen?

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von OliverIO
              #22

              @hotshot14167

              ich will evtl auch mal noch auf die folgende rein client-seitige technik hinweisen.
              das folgende skript in ein html-widget kopiert funktioniert ebenfalls.

              <div id="val1" style="display:none">{0_userdata.0.test.test1}</div>
              <div id="val2" style="display:none">{0_userdata.0.test.test2}</div>
              <script>
                  debugger;
                  var val1 = parseFloat($("#val1").html());
                  var val2 = parseFloat($("#val2").html());
              
                  $("#meineID").html(val1+val2);
              
              </script> 
              
              <div id="meineID"></div>
              
              

              In Zeile 1 und 2 werden die datenpunkte per binding in versteckte html-elemente geschrieben und von vis auch regelmäßig aktualisiert
              Zeile 4 habe ich mal das debugger statement eingefügt, mit dem man im edit (aber da wird das binding nicht eingetragen) wie auch im runtime durch sein skript debuggen kann
              In zeile 5+6 werden dann die Werte mit jquery aus den elementen geholt und entsprechend typ geparset
              zeile 8 wird zusammengerechnet und das ergebnis wieder per jquery in ein anderes element geschrieben.
              Zeile 12 enthält das sichtbare Platzhalterelement, in das dann das Ergebnis geschrieben wird.

              Man kann auch den Umweg über die versteckten html-elemente sparen und das binding direkt in den skriptteil schreiben:

              var val1 = {0_userdata.0.test.test1};
              

              allerdings wird dann das browser log mit fehlermeldungen zugespammt, da im edit modus keine gültige anweisung ist.
              im runtime modus funktioniert es aber.
              Als workaround könnte man es noch als String notieren

              <script>
              debugger;
                  var val1 = parseFloat("{0_userdata.0.test.test1}");
                  var val2 = parseFloat("{0_userdata.0.test.test2}");
              
                  $("#meineID").html(val1+val2);
              
              </script> 
              test
              <div id="meineID"></div>
              
              

              wer es genauer verstehen will, schaut sich den html inhalt des widgets in der runtime an.

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              G 1 Antwort Letzte Antwort
              0
              • OliverIOO OliverIO

                @hotshot14167

                ich will evtl auch mal noch auf die folgende rein client-seitige technik hinweisen.
                das folgende skript in ein html-widget kopiert funktioniert ebenfalls.

                <div id="val1" style="display:none">{0_userdata.0.test.test1}</div>
                <div id="val2" style="display:none">{0_userdata.0.test.test2}</div>
                <script>
                    debugger;
                    var val1 = parseFloat($("#val1").html());
                    var val2 = parseFloat($("#val2").html());
                
                    $("#meineID").html(val1+val2);
                
                </script> 
                
                <div id="meineID"></div>
                
                

                In Zeile 1 und 2 werden die datenpunkte per binding in versteckte html-elemente geschrieben und von vis auch regelmäßig aktualisiert
                Zeile 4 habe ich mal das debugger statement eingefügt, mit dem man im edit (aber da wird das binding nicht eingetragen) wie auch im runtime durch sein skript debuggen kann
                In zeile 5+6 werden dann die Werte mit jquery aus den elementen geholt und entsprechend typ geparset
                zeile 8 wird zusammengerechnet und das ergebnis wieder per jquery in ein anderes element geschrieben.
                Zeile 12 enthält das sichtbare Platzhalterelement, in das dann das Ergebnis geschrieben wird.

                Man kann auch den Umweg über die versteckten html-elemente sparen und das binding direkt in den skriptteil schreiben:

                var val1 = {0_userdata.0.test.test1};
                

                allerdings wird dann das browser log mit fehlermeldungen zugespammt, da im edit modus keine gültige anweisung ist.
                im runtime modus funktioniert es aber.
                Als workaround könnte man es noch als String notieren

                <script>
                debugger;
                    var val1 = parseFloat("{0_userdata.0.test.test1}");
                    var val2 = parseFloat("{0_userdata.0.test.test2}");
                
                    $("#meineID").html(val1+val2);
                
                </script> 
                test
                <div id="meineID"></div>
                
                

                wer es genauer verstehen will, schaut sich den html inhalt des widgets in der runtime an.

                G Offline
                G Offline
                GombersIOB
                schrieb am zuletzt editiert von
                #23

                @oliverio said in Bindings in einem HTML Widget:

                das folgende skript in ein html-widget kopiert funktioniert ebenfalls.

                Dazu kann ich technisch wenig sagen, ich bin jetzt auch gerade mal 2 Monate mit ioBroker unterwegs.
                Nur so viel: Ich habe ganz am Anfang mal versucht im Widget eine zu machen, wie es hier auch, als Grund für diesen Thread, gemacht wurde.
                Aber ich habe gleich wieder die Finger davon gelassen. Ich finde das vom Ansatz her schon falsch. Das Widget hat die Aufgabe, die Darstellung zu gestalten. Da jetzt noch komplizierte sonstige Logik reinzupacken würde mir definitv nicht zusagen. Es widerspricht aus meiner Sicht, wie ich oben schon sagte, dem Gedanken der Objektorientierung und macht dadurch das Ganze schlecht pflegbar.

                OliverIOO 1 Antwort Letzte Antwort
                0
                • G GombersIOB

                  @oliverio said in Bindings in einem HTML Widget:

                  das folgende skript in ein html-widget kopiert funktioniert ebenfalls.

                  Dazu kann ich technisch wenig sagen, ich bin jetzt auch gerade mal 2 Monate mit ioBroker unterwegs.
                  Nur so viel: Ich habe ganz am Anfang mal versucht im Widget eine zu machen, wie es hier auch, als Grund für diesen Thread, gemacht wurde.
                  Aber ich habe gleich wieder die Finger davon gelassen. Ich finde das vom Ansatz her schon falsch. Das Widget hat die Aufgabe, die Darstellung zu gestalten. Da jetzt noch komplizierte sonstige Logik reinzupacken würde mir definitv nicht zusagen. Es widerspricht aus meiner Sicht, wie ich oben schon sagte, dem Gedanken der Objektorientierung und macht dadurch das Ganze schlecht pflegbar.

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von OliverIO
                  #24

                  @gombersiob

                  in einem html-widget kannst du dir dein eigenes widget gestalten, wie du es haben möchtest.
                  solange zeichen in datenpunktnamen existieren, die in javascript nicht erlaubt sind, bzw. schwierigkeiten machen, wird man mit workarounds leben müssen.

                  und von objektorientierung ist javascript und insbesondere der iobroker meilenweit weg

                  auch ob man das skript serverseitig oder client seitig baut, kann ja der anwender selber entscheiden.

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  G 1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

                    @gombersiob

                    in einem html-widget kannst du dir dein eigenes widget gestalten, wie du es haben möchtest.
                    solange zeichen in datenpunktnamen existieren, die in javascript nicht erlaubt sind, bzw. schwierigkeiten machen, wird man mit workarounds leben müssen.

                    und von objektorientierung ist javascript und insbesondere der iobroker meilenweit weg

                    auch ob man das skript serverseitig oder client seitig baut, kann ja der anwender selber entscheiden.

                    G Offline
                    G Offline
                    GombersIOB
                    schrieb am zuletzt editiert von
                    #25

                    @oliverio said in Bindings in einem HTML Widget:

                    solange zeichen in datenpunktnamen existieren, die in javascript nicht erlaubt sind, bzw. schwierigkeiten machen, wird man mit workarounds leben müssen.

                    Es mag Gründe geben, warum man es im Widget machen muss. Mir ist bisher noch keiner begegnet. Da würde ich doch noch lieber Zeichen escapen als Logik gemischt in den Skripten und in den Widgets zu betreiben.

                    und von objektorientierung ist javascript und insbesondere der iobroker meilenweit weg.

                    Objektorientierung war insofern der falsche Begriff, weil er zugegeben auch Eigenschaften beinhaltet, wie Vererbung, die JavaScript, nicht leisten kann. Trotzdem halte ich die Objektorientierung auch wesentlich eher für eine Philosopie. Ich kann umgekehrt eben auch Spagetti-Code in Java schreiben.
                    Folgende Gedanken der Objektorientierung halte aber für wesentlich überall zu verfolgen: Die Kapselung (Verwendung von Funktionen) und das Prinzip, dass jede Methode/Funktion nur eine Aufgabe haben sollte

                    1 Antwort Letzte Antwort
                    0
                    • G GombersIOB

                      @hotshot14167 said in Bindings in einem HTML Widget:

                      Leider werden die Daten aber nur beim Neustart aktualisierte. Warum?

                      Da fehlt ein Trigger:

                      Meine Lösung sähe so aus:

                      schedule("* * * * *", async function () {
                      	let shelly1Path:string="shelly.0.SHPLG-S#C8C9A3890BCB#1.Relay0.";
                      	let shelly2Path:string="shelly.0.SHPLG-S#5A6DB5#1.Relay0.";
                      	let userDataPath:string="0_userdata.0.Datenpunkt.Messwerte_Wohnzimmer.";
                      
                      	let shelly1Power:number=Number(getState(shelly1Path+"Power").val);
                      	let shelly2Power:number=Number(getState(shelly2Path+"Power").val);
                      	let sum:number=shelly1Power+shelly2Power;
                      
                      	setState(userDataPath+"Verbrauch-summe", sum, true);
                      });
                      

                      Die "schedule"-Anweisung lässt über die CRON-Parameter das Script jede Minute anlaufen.

                      Noch eins: Bitte Code nicht als Bild, sondern als echten anzeigen.
                      Man klickt dazu das entprechende Editor-Zeichen an
                      05095bfd-4ff7-4bbb-9882-14d4b55b4c97-grafik.png

                      Es werden dann an die Stelle, wo der Cursor steht, diese drei Zeilen erzeugt:
                      c63c7c2b-9329-4808-9206-13026f3e8d6e-grafik.png .
                      Und den Code fügt man dann anstelle des Wortes "code_text" ein.

                      Noch eine Anmerkung kann ich mir nicht verkneifen.
                      Es geht mir um die Namensgebung des neuen Datenpunktes.

                      1. Das Wort "Datenpunkt" würde ich im Namen weglassen. Das macht den String nur lang und gibt null Information. Was soll es den anders sein als ein Datenpunkt?
                      2. Ich würde vermutlich nicht ein Verzeichnis "Messwerte_Wohnzimmer" anlegen. Sondern ein Verzeichnis "Messwerte" und darunter ein Verzeichnis "Wohnzimmer". Also "Messwerte.Wohnzimmer". Und fürs Schlafzimmer wäre es dann ein Pfad "0_userdata.0.Messwerte.Schlafzimmer.". Unter Objekten findet sich dann die Strukur
                      0_userdata
                         0
                            Messwerte
                               Schlafzimmer
                                  Verbraucher-X
                               Wohnzimmer
                                  Verbraucher-Y 
                      
                      H Offline
                      H Offline
                      hotshot14167
                      schrieb am zuletzt editiert von
                      #26

                      @gombersiob Danke für die info alle klar. Jetzt weiß ich bescheid.

                      G 1 Antwort Letzte Antwort
                      0
                      • H hotshot14167

                        @gombersiob Danke für die info alle klar. Jetzt weiß ich bescheid.

                        G Offline
                        G Offline
                        GombersIOB
                        schrieb am zuletzt editiert von
                        #27

                        @hotshot14167

                        Beachte: Der Code ist nicht JavaScript sondern TypeScript!

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        533

                        Online

                        32.7k

                        Benutzer

                        82.5k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe