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.
    • S
      Sushibomba @Homoran last edited by Sushibomba

      @homoran
      Oh tut mir leid das ich es nicht sofort verstanden habe 😕

      Entweder basic - Number -> Object ID
      Oder am liebsten materialdesign - Input -> Object ID

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

        @sushibomba warum in Object-ID.
        da muss der Datenpunkt rein, von wo die Daten bezogen werden.

        IMHO darf/kann da kein Binding rein. Das funktioniert nicht (immer)

        SBorg S 2 Replies Last reply Reply Quote 1
        • SBorg
          SBorg Forum Testing Most Active @Homoran last edited by

          @homoran sagte in "Rechnen" in Widgets:

          IMHO~darf/ kann da kein Binding rein. Das funktioniert nicht (immer)

          Jepp, in der ObjectID geht das nicht. Das hat aber mit dem System an sich zu tun, also Laufzeiten wann, was, wo gemacht wird.

          1 Reply Last reply Reply Quote 1
          • S
            Sushibomba @Homoran last edited by

            @homoran Ok alles klar. Dann muss ich es wohl anderweitig versuchen.

            @SBorg Vielen Dank für deine Erklärung.

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

              @sushibomba sagte in "Rechnen" in Widgets:

              Dann muss ich es wohl anderweitig versuchen.

              So ganz verstehe ich noch nicht was du bezwecken willst. Du berechnest eine (Rest-)Laufzeit, die ist dynamisch (=verändert sich also). Warum willst du die dann als statische ObjectID?

              Dies ist eine ObjectID worx.0.123.rawMqtt.raw.blade_work_time
              Die wird iaR nie geändert (außer mal bei einem Adapter-Update), denn darauf greifen dann die Skripte, Blockly, Node-RED, VIS... zu. Die kann, und darf, sich also nie ändern (bis der Dev dies aus "Gründen" tut 😉 ).
              Deine berechnete Zeit wäre dann ein state der ObjectID. Der darf/kann sich dann beliebig ändern.

              Wenn du versuchst aus "123456 Sekunden" des Bindings eine formatierte Zeitanzeige ala hh:mm zu generieren, musst du das anders lösen (Blockly, Hilfsdatenpunkt, JS-Snippet...).
              So ein JS-Snippet habe ich die Tage beim Shelly-Adapter gepostet, da dessen Uptime nun in Sekunden angezeigt wird 😉

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

                @sborg

                es gab hier schon anfragen, per binding die objectid zu berechnen, damit man nicht soviele widgets anlegen muss.

                aber vis kann keine dynamischen object ids

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

                  @sborg

                  Ich habe es jetzt mit nem JS und nem Datenpunkt gelöst. Mal schauen ob es funktioniert.

                  'use strict';
                   
                  const idBladeWorkTime = 'worx.0.xxx.rawMqtt.raw.blade_work_time';
                  const idBladeWorkTimeReset = 'worx.0.xxx.rawMqtt.raw.blade_work_time_reset';
                  const idBladeWorkTimeCurrent = '0_userdata.0.VIS.Eigene_Datenpunkte.WORX.xxx.blade_work_time_current';
                   
                  function zweiStellig(zahl) {
                      return zahl < 10 ? '0' + zahl : zahl
                  }
                   
                  function stundenMinuten(minuten) {
                      return parseInt(minuten / 60) + ':' + zweiStellig(minuten % 60);
                  }
                   
                  on ({id: [idBladeWorkTime, idBladeWorkTimeReset], change: 'ne'}, function() {
                      setState(idBladeWorkTimeCurrent, stundenMinuten(getState(idBladeWorkTime).val - getState(idBladeWorkTimeReset).val));
                  })
                  
                  1 Reply Last reply Reply Quote 0
                  • SBorg
                    SBorg Forum Testing Most Active @OliverIO last edited by

                    @oliverio Dass kann ich mir auch noch vorstellen, immerhin spart man sich den Alias.
                    Aber wie ich es mir schon dachte, ging es eher darum die (Rest-)Laufzeit in die ObjectID zu "pressen", damit man dann schön mittels Widget wie bspw. Basic Number die Ausgabe formatieren kann 😉


                    @Sushibomba Sollte gehen, zumindest sehe ich so erst mal keinen Fehler, aaaabbbbbeeeerrrr....

                    brauchst du das nur für die VIS? Du berechnest fortwährend die Laufzeit neu. Sagen wir mal er schickt alle 10 Sekunden ein Update und mäht täglich 1h. Dann sind das 360 Berechnungen täglich, ob du sie brauchst oder nicht. Zwar noch nicht die Summe im Einzelnen, aber potenziere das noch mit anderen "unnützen" Berechnungen.
                    Wenn es nur für die VIS ist, wäre es zumindest sinnvoller, es auch nur dann auszuführen wenn du auch drauf schaust/aufrufst.
                    Schließlich wird auch niemand alle Minute melden "es regnet nicht", wenn er den Auftrag bekommt "sag mir bei Regen Bescheid"... 😉

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

                      @sborg
                      Ja da hast du absolut recht.
                      Und wie optimiere ich das dann am einfachsten?
                      Genau brauche es nur als Number in der Vis.

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

                        @sushibomba Ist im Grunde so gut wie das selbe wie dein JS, nur ohne Datenpunkte.

                        Zur Anzeige nimmst du bspw. ein HTML-Widget.
                        Dort nutzt du dann ein Binding zur Berechnung und Ausgabe:
                        {val1:worx.0.123.rawMqtt.raw.blade_work_time;val2:worx.0.123.rawMqtt.raw.blade_work_time_reset; toHHMMSS(parseFloat(val1)-parseFloat(val2))}

                        Dann musst du beim Widget unter "Skript" nur noch die Funktion einfügen:

                        var toHHMMSS = (secs) => {
                            var sec_num = parseInt(secs, 10)
                            var hours   = Math.floor(sec_num / 3600) % 24
                            var minutes = Math.floor(sec_num / 60) % 60
                            var seconds = sec_num % 60    
                        
                            return [hours,minutes,seconds]
                                .map(v => v < 10 ? "0" + v : v)
                                .filter((v,i) => v !== "00" || i > 0)
                                .join(":")
                        }
                        

                        Somit steht dir die Funktion in jedem Widget deiner VIS zur Verfügung und wird auch nur noch bei Bedarf ausgeführt. Da ein Binding auch auf Änderungen getriggert wird, aktualisiert sich die Anzeige selbst dann wenn du in der View stehst und nicht nur beim laden/neu laden 😉

                        1 Reply Last reply Reply Quote 1
                        • Nashra
                          Nashra Most Active Forum Testing last edited by Nashra

                          Hey, schließe mich hier mal an mit der Frage.
                          Um mir die Laufzeit von Proxmox anzuzeigen benutze ich folgendes (irgendwo mal hier im Forum gefunden)

                          {d:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((d)/60/60/24) )} Tage‚ {h:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((h)/60/60) % 24 )} Std.
                          

                          Ich würde aber noch gerne die Minuten dabei haben und bekomme es natürlich wieder nicht hin 😵
                          Da kann mir doch bestimmt einer von euch helfen 😀

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

                            @nashra sagte in "Rechnen" in Widgets:

                            Da kann mir doch bestimmt einer von euch helfen

                            Verrate ich aber nicht... 😀

                            {m:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((m)/60) % 60 )} Min. 
                            
                            Nashra 1 Reply Last reply Reply Quote 1
                            • Nashra
                              Nashra Most Active Forum Testing @SBorg last edited by

                              @sborg sagte in "Rechnen" in Widgets:

                              @nashra sagte in "Rechnen" in Widgets:

                              Da kann mir doch bestimmt einer von euch helfen

                              Verrate ich aber nicht... 😀

                              {m:proxmox.0.node_Rechenzentrum.uptime;Math.floor( ((m)/60) % 60 )} Min. 
                              

                              Ich kann schweigen 😁
                              Danke

                              L 1 Reply Last reply Reply Quote 0
                              • L
                                legro @Nashra last edited by legro

                                Hab's selbst gelöst.

                                L 1 Reply Last reply Reply Quote 0
                                • L
                                  legro @legro last edited by legro

                                  Ich verstehe einfach überhaupt nichts mehr.😞

                                  Nun habe ich in meiner Visualisierung von Anfang an Berechnungen in Widgets durchgeführt. Ich kann mich noch an die Anfänge erinnern: Erst wollte nichts funktionieren, irgendwann klappte es und ich wusste nicht warum. Egal, dachte ich; Hauptsache es funktioniert.

                                  Nun holt mich das Ganze wieder ein, als ich Ergänzungen vornehmen wollte. Hier zwei Beispiele, wie ich sie in HTML-Widgets verwende ..

                                  • altes funktionierende Beispiel: {a:0_userdata.0.Heizung.tmp_jahr;b:0_userdata.0.Heizung.Umrechnungsfaktor;parseFloat(a*b).toFixed(2)}
                                  • neues Beispiel, das stets bloß "0" als Ergebnis liefert: {a:0_userdata.GeräteÜberwachung.Spülmaschine.Energie_Verbrauch;b:0_userdata.0.GeräteÜberwachung.Waschmaschine.Energie_Verbrauch;parseFloat(a*b).toFixed(2)}

                                  Ich bin völlig ratlos und hoffe verzweifelt auf eure Hilfe.

                                  Codierknecht Homoran 2 Replies Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @legro last edited by Codierknecht

                                    @legro
                                    Keine Umlaute verwenden‼

                                    (Warum man Verbräuche miteinander multipliziert, erschließt sich mir allerdings auch nicht)

                                    L 1 Reply Last reply Reply Quote 0
                                    • L
                                      legro @Codierknecht last edited by

                                      @codierknecht said in "Rechnen" in Widgets:

                                      @legro
                                      Keine Umlaute verwenden‼

                                      Hier ein Beispiel, das Umlaute enthält und dennoch funktioniert ..
                                      <h2>Kosten</h2>
                                      Verbrauch: {x:0_userdata.0.Gaszähler.TempGasJahr;parseFloat(x).toFixed(1)} m<sup>3</sup><br>Energie:
                                      {a:0_userdata.0.Heizung.tmp_jahr;b:0_userdata.0.Heizung.Umrechnungsfaktor;c:0_userdata.0.Heizung.Zustandszahl;parseFloat(a
                                      bc).toFixed(0)} KWh<br> Kosten:
                                      {a:0_userdata.0.Heizung.tmp_jahr;b:0_userdata.0.Heizung.Umrechnungsfaktor;c:0_userdata.0.Heizung.Zustandszahl;d:0_userdata.0.Heizung.Energiepreis;parseFloat(a
                                      bcd).toFixed(2)} €*

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

                                        @legro sagte in "Rechnen" in Widgets:

                                        Ich bin völlig ratlos

                                        beide DPs enthalten Zahlen?

                                        1 Reply Last reply Reply Quote 0
                                        • Codierknecht
                                          Codierknecht Developer Most Active @legro last edited by

                                          @legro sagte in "Rechnen" in Widgets:

                                          Hier ein Beispiel, das Umlaute enthält und dennoch funktioniert ..

                                          Sollte man dennoch grundsätzlich vermeiden.

                                          Ansonsten gilt was @Homoran geschrieben hat.

                                          L 1 Reply Last reply Reply Quote 0
                                          • L
                                            legro @Codierknecht last edited by

                                            @codierknecht

                                            Selbstverständlich sind in den Datenpunkten Zahlen enthalten.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            538
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

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