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.
    • Xantrox
      Xantrox last edited by Xantrox

      Ich wärme das Topic mal neu an. Vielleicht ist ja ein Rechengenie in der Lage obige Berechnungen für die Anzeige von Tasmote Pulsetime1 in Minuten, Sekunden zu machen.

      Ihr wisst schon 0 = off
      1-111 Pulsetime *0,1sek
      112-64900 Pulsetime/100 *1sek

      Als Problem habe ich imo die schwelle bei 111, vielleicht hat ja jemand schonmal sowas probiert.
      Das würde ich aber mit einem Regler der bei 112 - ca.700 geht lösen wollen.
      Für 0 =off nehme ich einen Standard Button

      {sonoff.0.OG_Flur_Li_A9A4CD.PulseTime1;-(100);/(60);round(0)}
      

      Angezeigt wird die eingestellte Zeit in einem HTML Widget.
      Das Funktioniert schon mal für die Minuten ab 112, allerdings müsste noch irgenwie mit rein das er immer abrundet.

      Für Sekunden bin ich noch am probieren

      Ideen welcome!!!

      {sonoff.0.OG_Flur_Li_A9A4CD.PulseTime1;-(100);/(60);-(0.5);round(0)}
      

      Minuten ^^ gefixt 🙂 So rundet er immer ab durch den -0.5 Trick

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

        Hat jemand eine Idee wie man im HTML Widget die restlichen Sekunden berechnen kann, die im Beitrag drüber beim berechnen der Minuten übrig bleiben.

        Dargestellt werden soll

        ((Pulsetime-100)/60) - Abgrundet((Pulsetime-100)/60) => sek_temp (Nachkommastellen würden Sekunden entsprechen)
        gerundet auf 2 stellen (sek_temp*60) = Sekunden Ergebnis

        ^^ die Frage ist nur wie ich das in einer HTML Anweisung verpacke

        Beispiel:

        300-100 = 200
        200/60 = 3,33333  { <= entspricht (Pulsetime-100)/60 }
        3,33333-3 = 0,33333 { <= Pulsetime_berechnet - Pulsetime_berechnet_abgerundet }
        0,33333*60 = 20 Sekunden
        
        

        Kann bitte jemand beim aufstellen der Formel helfen?

        1 Reply Last reply Reply Quote 0
        • Archimedeus A
          Archimedeus A last edited by

          @Xanto
          Schau mal hier: (https://github.com/ioBroker/ioBroker.vis)
          Beispiel: {javascript.0.Misc.Number;+(100)} liest den Wert und addiert 100.

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

            @Archimedeus-A
            Generell Rechnen im HTML Widget ich nicht das Problem, das habe ich weiter oben ja schon mit den pulsetime Minuten gemacht, was mir ein wenig Probleme macht ist das bei den Sekunden ja der Ganzzahlwert der Minuten abgezogen werden müsste und ich nicht weiss wie ich das am besten in ein HTML Widget rechne

            Beispiel:

            Pulsetime 300 => 300-100 = 200 Sekunden => 3 Minuten 20 Sekunden
            
            Die Formel für die 20 Sekunden suche ich ^^ 
            
            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @Xantrox last edited by OliverIO

              @Xanto

              wenn ich es richtig verstehe hast du den wert 200 sekunden und du möchtest 3 minuten 20 sekunden anzeigen. dann

              200/60 = 3.33333, davon die ganzzahl ist 3
              Math.floor(3.333333) = 3
              dann wilst du aus dem rest die 20 sekunden berechnen
              dann musst du den rest wieder mit 60 (sekunden) multiplizieren
              3.33333-3=0.33333
              0.33333*60 = 20

              Alternativ kann man auch den modulo-operator nehmen
              200 % 60 = 20

              und das als komplette Formel
              var sec = 200;
              Math.floor(sec/60) + ' Minuten ' + sec % 60 + ' Sekunden';

              Wenn du den Chrome installiert hast, dann kann man das in der dev-console sehr gut direkt ausprobieren und rumspielen
              https://developers.google.com/web/tools/chrome-devtools/console

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

                @OliverIO
                Das ist ein sehr guter Ansatz mit dem modulo-operator. Mit dem hatte ich vorher noch nicht gearbeitet und da es den im HTML Widget auch gibt habe ich den da mal probiert.

                Leider funktionierte das nicht so wie gewünscht

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

                brachte mir als Ausgabe bei Pulsetime 250

                2 min	250 (Active 250) sek
                

                Wenn ich alles berücksichtige müsste es ja

                {sonoff.0.OG_Flur_Li_A9A4CD.PulseTime1;-(100);%(60)} sek
                

                heißen, was bei den Sekunden allerdings ein 150 bringt. Jemand eine Idee wie das funktionieren könnte?

                OliverIO SBorg 2 Replies Last reply Reply Quote 0
                • OliverIO
                  OliverIO @Xantrox last edited by

                  @Xanto hm da könnte natürlich noch das problem sein, das die logik des bindings das falsch versteht und nicht als operator verwendet. da müsste man mal rein debuggen

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

                    @Xanto sagte in "Rechnen" in Widgets:

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

                    ändere mal in

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

                    dann geht es 😉

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            938
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

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