Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. "Rechnen" in Widgets

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    "Rechnen" in Widgets

    This topic has been deleted. Only users with topic management privileges can see it.
    • SBorg
      SBorg Forum Testing Most Active @tigiba last edited by

      @tigiba Ich denke mal, dafür sind die Bindings nicht unbedingt gedacht 😉
      Aber nein, Teilergebnisse gibt es nicht, zumindest wüsste ich nicht wie.
      Du könntest aber auch wenn es nur um die Berechnung und Darstellung derer geht, direkt JS im HTML-Code nutzen (worauf ich wg. "g (water)/m³" mal tippe). Das ist aber leider wg. des VIS-Editors etwas tricky. Nutzt du bspw. dann "document. write" um dein Ergebnis auszugeben, läuft der Editor nicht mehr, da er nur noch das "document.write" der HTML-Seite ausführt...

      Ich würde da lieber auf ein externes JS/Blockly zurückgreifen und das Ergebis in einem neuen Datenpunkt speichern.

      T 1 Reply Last reply Reply Quote 0
      • T
        tigiba @SBorg last edited by tigiba

        @SBorg Danke für die Antwort!

        Ja darüber hab ich auch schon nachgedacht. Hatte hald gehofft, dass ich das alles direkt in der Anzeige ohne zusätzliche Datenpunkte machen könnte, wobei ich wegen der notwendigen Aliasse ohne Doppelpunkt im Namen jetzt eh schon zusätzliche gebraucht hab 😉

        UPDATE: Jetzt hab ich noch ne andre Frage:
        Ich kann mir im VIS im HTML Widgets den Wert eines Datenpunkt's so holen:
        {alias.0.EG.table.temperature}
        Und ich kann mir im Javascript den Zeitpunkt der letzten Änderung eines Datenpunkts so holen:
        getState('alias.0.EG.table.temperature').ts
        --> Kann ich diesen Zeitpunkt der letzten Änderung auch im VIS in einem HTML-Widget irgendwie auslesen?

        SBorg 1 Reply Last reply Reply Quote 0
        • SBorg
          SBorg Forum Testing Most Active @tigiba last edited by

          @tigiba sagte in "Rechnen" in Widgets:

          Kann ich diesen Zeitpunkt der letzten Änderung auch im VIS in einem HTML-Widget irgendwie auslesen?

          Sogar ziemlich einfach:

          {ts:alias.0.EG.table.temperature.ts; ts;}
          
          T 1 Reply Last reply Reply Quote 0
          • T
            tigiba @SBorg last edited by tigiba

            @SBorg
            Vielen Dank!
            Um das ganze besser formatiert zu haben bin ich zu folgendem Term gekommen:
            {t:alias.0.EG.table.temperature.ts; new Date(t-((new Date()).getTimezoneOffset()*60000)).toISOString().slice(0,-1).replace('T',' ')}

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @tigiba last edited by

              @tigiba
              etwas einfacher ist noch die im binding eingebaute date-funktion.
              https://github.com/ioBroker/ioBroker.vis

              {alias.0.EG.table.temperature.ts;date(TT.MM.SS hh:mm)}
              
              T 1 Reply Last reply Reply Quote 0
              • T
                tigiba @OliverIO last edited by

                @OliverIO
                Perfekt, vielen Dank!
                Das selbe Format wie der komplizierte Term oben habe ich mit dieser Anpassung erreicht:

                {alias.0.EG.table.temperature.ts;date(YYYY-MM-DD hh:mm:ss.sss)}

                Martin Schlender 1 Reply Last reply Reply Quote 0
                • Martin Schlender
                  Martin Schlender @tigiba last edited by

                  Hallo Zusammen,
                  ein sehr ergiebiger Thread. Ich hätte auch mal eine Frage - vielleicht hat ja einer von Euch die Lösung.
                  Ich rechne in einer Tabelle Temperaturprognosen hoch:

                      <td align="right"><b>{v1:0_userdata.0.WLANTHERMO.Kanal0_5_Minuten;v2:0_userdata.0.WLANTHERMO.Kanal0;parseFloat(v1)*6+parseFloat(v2)} °C</b></td>
                  

                  führt zu folgendem Ergebnis:
                  3c47f4aa-a521-476f-8065-ee1d06fe1c4e-image.png

                  Eigentlich sollte da: 181,4 rauskommen. Tut es aber nicht. Wenn ich versuche zu runden mit:

                  <td align="right"><b>{v1:0_userdata.0.WLANTHERMO.Kanal0_5_Minuten;v2:0_userdata.0.WLANTHERMO.Kanal0;parseFloat(v1)*6+parseFloat(v2);round(1)} °C</b></td>
                  

                  wird der Wert immer 0.
                  9eaac86d-1137-4aad-a9b6-5bd71c55b41b-image.png

                  Jemand ne Idee wie ich das lösen könnte. Ich hab jetzt schon aufgegeben und mache ein parseInt() - dann hat die Temperatur halt keine Nachkommastellen mehr....
                  LG Martin

                  OliverIO 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @Martin Schlender last edited by OliverIO

                    @martin-schlender

                    Ich habe mir das gerade mal angeschaut.
                    Der Ausdruck wird intern analysiert und dann entschieden, ob es rein javascript ist oder ob die internen Funktionen verwendet werden.
                    In diesem Fall wird entschieden das es javascript ist, daher wird der Befehl round nicht gefunden.

                    Als Workaround kannst du aber das hier verwenden

                    <td align="right"><b>{v1:0_userdata.0.WLANTHERMO.Kanal0_5_Minuten;v2:0_userdata.0.WLANTHERMO.Kanal0;(parseFloat(v1)*6+parseFloat(v2)).toFixed(1)} °C</b></td>
                    

                    https://github.com/ioBroker/ioBroker.vis/issues/454

                    oweitman created this issue in ioBroker/ioBroker.vis

                    open the vis-functions are not called #454

                    Martin Schlender 2 Replies Last reply Reply Quote 1
                    • Martin Schlender
                      Martin Schlender @OliverIO last edited by

                      @oliverio Grandios - vielen Dank!!!
                      Du hast ja sogar schon einen issue auf Github aufgemacht 👍

                      1 Reply Last reply Reply Quote 0
                      • Martin Schlender
                        Martin Schlender @OliverIO last edited by

                        @oliverio

                        hast mir noch ne Idee. Ich möchte die "in 5 Minuten" durch tatsächliche Zeiten ersetzten (letzte Änderung + 5 Minuten).

                        Das funktioniert auch solange ich keine 5 Minuten (300.000 ms) dazuzähle. Scheint ein ähnliches Problem zu sein.

                        <b>{0_userdata.0.WLANTHERMO.Kanal0_5_Minuten.ts;date(hh:mm:ss)}</b> 
                        <br>
                        <b>{v1:0_userdata.0.WLANTHERMO.Kanal0_5_Minuten.ts;(parseInt(v1) + parseInt(300000));date(hh:mm:ss)}</b> 
                        

                        Ergebnis:
                        b9d4988b-e2ac-429d-a1ad-96b07dcbf007-image.png

                        Ich hab es auch schon mit toTimeString() versucht - geht auch nicht.

                        {v1:0_userdata.0.WLANTHERMO.Kanal0_5_Minuten.ts;v1.toTimeString()}
                        
                        OliverIO 1 Reply Last reply Reply Quote 0
                        • OliverIO
                          OliverIO @Martin Schlender last edited by

                          @martin-schlender
                          das habe ich befürchtet, das da auch andere vis-funktionen betroffen sind.
                          leider ist @apollon77 der Meinung das das so korrekt ist und hat den Issue geschlossen

                          Martin Schlender apollon77 2 Replies Last reply Reply Quote 0
                          • Martin Schlender
                            Martin Schlender @OliverIO last edited by

                            @oliverio ja - das hab ich gesehen. Gibt es hierfür auch einen Workaround über javascript?

                            OliverIO 1 Reply Last reply Reply Quote 0
                            • OliverIO
                              OliverIO @Martin Schlender last edited by

                              @martin-schlender

                              so müsste es gehen. Beim ersten geht die normale Syntax.
                              sobald man aber den datenpunkt einer variable (v1) zuweist, wird es intern javascript und dann kennt er die eigenen Funktionen nicht mehr.
                              Der 2.Fall ruft einfach die gleiche Funktion auf, die round aufruft. Im Gegensatz zum eingebauten, benötigt man hier die Anführungsstriche um das format muster.

                              <b>{0_userdata.0.WLANTHERMO.Kanal0_5_Minuten.ts;date(hh:mm:ss)}</b> 
                              <br>
                              <b>{v1:0_userdata.0.WLANTHERMO.Kanal0_5_Minuten.ts;vis.formatDate(parseInt(v1) + parseInt(300000),"hh:mm:ss")}</b> 
                              
                              
                              1 Reply Last reply Reply Quote 1
                              • OliverIO
                                OliverIO last edited by

                                issue ist wieder offen

                                1 Reply Last reply Reply Quote 1
                                • apollon77
                                  apollon77 @OliverIO last edited by

                                  @oliverio Und hat ihn wieder auf gemacht nachdem er eines besseren belehrt wurde 🙂

                                  Martin Schlender 1 Reply Last reply Reply Quote 2
                                  • Martin Schlender
                                    Martin Schlender @apollon77 last edited by

                                    @apollon77 cool. Aber das sind ja auch komplexe Fälle.

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      Sushibomba last edited by

                                      Gibt es mittlerweile eine funktionierenden String den ich bei Objekt-ID einfügen kann?

                                      Wenn ich

                                      code_text
                                      {value1:worx.0.123.rawMqtt.raw.blade_work_time;value2:worx.0.123.rawMqtt.raw.blade_work_time_reset;value1-value2}
                                      

                                      einfüge, dann zeigt er mir immer keinen Wert an. Was mache ich falsch?

                                      OliverIO 1 Reply Last reply Reply Quote 0
                                      • OliverIO
                                        OliverIO @Sushibomba last edited by OliverIO

                                        @sushibomba

                                        die werte aus den datenpunkten kommen meist/immer als strings an.
                                        daher muss man sie erst in den DAtentyp number umwandeln damit man rechnen kann

                                        {value1:worx.0.123.rawMqtt.raw.blade_work_time;value2:worx.0.123.rawMqtt.raw.blade_work_time_reset;parseFloat(value1)-parseFloat(value2)}
                                        
                                        
                                        S 1 Reply Last reply Reply Quote 0
                                        • S
                                          Sushibomba @OliverIO last edited by

                                          @oliverio
                                          Vielen Dank. Habe ich gerade direkt probiert aber er spuckt trotzdem keinen Wert aus 😞

                                          SBorg 1 Reply Last reply Reply Quote 0
                                          • SBorg
                                            SBorg Forum Testing Most Active @Sushibomba last edited by

                                            @sushibomba Dann wäre mal ein "Debug" angebracht. Einfaches HTML-Widget mit entsprechendem Inhalt:

                                            erster Wert: {value1:worx.0.123.rawMqtt.raw.blade_work_time; value1} <br/>
                                            erster Wert: {value1:worx.0.123.rawMqtt.raw.blade_work_time;  typeof(value1)} <br/>
                                            zweiter Wert: {value2:worx.0.123.rawMqtt.raw.blade_work_time_reset; value2} <br/>
                                            zweiter Wert: {value2:worx.0.123.rawMqtt.raw.blade_work_time_reset; typeof(value2)} <br/>
                                            Berechnung: {value1:worx.0.123.rawMqtt.raw.blade_work_time;value2:worx.0.123.rawMqtt.raw.blade_work_time_reset;parseFloat(value1)-parseFloat(value2)}
                                            

                                            Was spuckt er denn da aus?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            504
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            21
                                            128
                                            19392
                                            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