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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    "Rechnen" in Widgets

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

      @SBorg Das hatte ich zwischenzeitlich auch schon probiert, da gibts als Ergebnis nur ein "NaN"

      Ich versuche mal ob ich die Formel mit math.floor (floor im HTML Widget) hin bekomme. Ich vermute auch stark das modulo entweder in dem Widget anders zu verstehen ist oder einfach nicht funktioniert.

      Aber das sehe ich nach dem Test.

      Edit: Test beendet... egal wie, die Berechnung wie oben bei den Minuten beschrieben funktioniert. Mit Value Zuweisung geht nicht.
      Die Probleme liegen bei dem Datenpunkt. Jedesmal wenn der Datenpunkt verändert wird, dann verarbeitet das Tasmota Sonoff Endgerät die Daten und schreibt wie in dem letzten Post schon beschrieben z.B. 250 ( Active 250 ) in den Datenpunkt. Deshalb hatte ich gestern auch die Ausgabe

      2 min	250 (Active 250) sek
      

      Ich habe das ganze mal mit einem manuell erstellten Nummer-Datenpunkt probiert. Das funktionierte wie gewünscht.
      Jetzt muss ich mal überlegen wie ich diese neuen Erkenntnisse verwenden kann.

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

        @Xanto auch kein Problem 🙂

        {v:sonoff.0.OG_Flur_Li_A9A4CD.PulseTime1; parseFloat(v)%(60)}
        

        oder parseInt für Ganzzahl.

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

          @SBorg cool das funktioniert wie gewünscht....

          der Code sieht jetzt also innerhalb des Widget wie folgt aus und kann ohne Javascript direkt vom HTML Widget aus benutzt werden

          <table>
          <tr>
          <td>{sonoff.0.OG_Flur_Li_A9A4CD.PulseTime1;-(100);/(60);-(0.5);round(0)} min</td>
          <td>{v:sonoff.0.OG_Flur_Li_A9A4CD.PulseTime1; (parseFloat(v)-(100))%(60)} sek</td>
          </tr>
          </table>
          
          

          Danke an die Helfer 🙂

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

            @Xanto Ob es so unbedingt einfacher ist, geht aber und kommt mit der Hälfte der Berechnungen aus:

            {v:javascript.0.VIS.Wunschliste.Nummer_0.Sender; parseInt((parseFloat(v)-100)/(60))} min
            {v:javascript.0.VIS.Wunschliste.Nummer_0.Sender; (parseFloat(v)-100)%(60)} sek
            
            Xantrox 1 Reply Last reply Reply Quote 0
            • Xantrox
              Xantrox @SBorg last edited by

              @SBorg sehr schön, kann man negative werte auch ausschließen und stattdessen nur 0 ausgeben... alle werte unter 100 würde ich dann 0 setzen wollen.
              Probiere noch ein wenig rum, wenn du es natürlich gleich parat hast wäre es nett... 🙂

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

                @Xanto zB. so:

                {v:javascript.0.VIS.Wunschliste.Nummer_0.Sender; parseInt(v) > 100 ? parseInt((parseFloat(v)-100)/(60)) : 0} Min
                
                Xantrox 1 Reply Last reply Reply Quote 0
                • Xantrox
                  Xantrox @SBorg last edited by

                  @SBorg said in "Rechnen" in Widgets:

                  parseInt(v) > 100 ? parseInt((parseFloat(v)-100)/(60)) : 0

                  cool, wenn ich das sehe verstehe ich das auch immer, allerdings um das selber hinzubekommen muss ich wohl noch üben... danke dafür

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

                    @Xanto sagte in "Rechnen" in Widgets:

                    muss ich wohl noch üben...

                    Ist noch kein Meister vom Himmel gefallen 😉
                    ...aber Übung macht den Meister 😇

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

                      Ich hab ein Problem: Meine Variablen mit denen ich gerne rechen würden enthalten Doppelpunkte im Namen (mqtt mit mac adresse des jeweiligen ursprungsgeräts...) gibt's da nen workaround? hab probiert mit einfachen und doppelten anführungszeichen, oder auch mit \ escapen hat leider alles nix genutzt bisher...

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @tigiba last edited by

                        @tigiba sagte in "Rechnen" in Widgets:

                        gibt's da nen workaround

                        Nicht dass ich wüsste.

                        Vielleicht die Werte in andere Datenpunkte schreiben/synchronisieren.
                        Oder mit Aliasen?

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

                          @Homoran said in "Rechnen" in Widgets:

                          Oder mit Aliasen?

                          Wie funktioniert das mit Aliasen, wo definier ich die?
                          update: okey, hab das hier gefunden, werd ich mal lesen:
                          https://forum.iobroker.net/topic/25772/fragen-antworten-rund-um-die-neue-alias-funktion

                          update2: ah, jetzt hab ich endlich gefunden wie man aliase anlegt:
                          https://forum.iobroker.net/topic/25772/fragen-antworten-rund-um-die-neue-alias-funktion/161

                          jetzt wo das erledigt ist & ich die variablen so anzapfen kann, bräucht ich noch die info ob / falls wie ich e^var rechnen kann - würd gern aus temperatur und relative luftfeuchte die absolute berrechnen
                          --> (6.112 × e^[(17.67 × T)/(T+243.5)] × rh × 2.1674 ) / (273.15+T)

                          update3: okey, also ich habs geschafft ne rechnung zu basteln die nicht 0, NaN oder undefined ergibt:
                          {h:alias.0.EG.table.humidity; t:alias.0.EG.table.temperature; (6.112*Math.pow(Math.E,((17.67*parseFloat(t))/(parseFloat(t)+243.5))*parseFloat(h)*0.021674))/(273.15+parseFloat(t))}
                          aber stimmen tut das ergebnis trotzdem nicht 😉 ich muss wohl noch mehr recherchieren...

                          update4: ahh, heute hab ich's endlich geschafft auf den richtigen Wert für die Absolute Luftfeuchte zu kommen:
                          {h:alias.0.EG.table.humidity; t:alias.0.EG.table.temperature; (6.112*Math.pow(Math.E,((17.67*parseFloat(t))/(parseFloat(t)+243.5)))*parseFloat(h)*18.02)/((273.15+parseFloat(t))*100*0.08314)} g/m³

                          Und Taupunkt hab ich auch hinbekommen:
                          {h:alias.0.EG.table.humidity; t:alias.0.EG.table.temperature; ((243.5*(Math.log(parseFloat(h)/100)+((17.67*parseFloat(t))/(243.5+parseFloat(t)))))/(17.67-Math.log(parseFloat(h)/100)-((17.67*parseFloat(t))/(243.5+parseFloat(t))))).toFixed(2)} °C

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

                            Kann ich bei solchen Rechnungen in VIS Widgets eigentlich irgendwie Teilergebnisse abspeichern und wieder verwenden?

                            Also z.B. brauch ich den Term "parseFloat(t)" recht häufig, wäre toll wenn ich das durch einen (kurzen) Variablennamen ersetzen könnte und die Funktion nur einmal auseführt werden müsste.

                            SBorg 1 Reply Last reply Reply Quote 0
                            • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            661
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

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