Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly Frage zum loggen von Zuständen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Blockly Frage zum loggen von Zuständen

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      weimaraner last edited by

      Ich möchte die Dauer eines Zustandes loggen, um es mit history zu visualisieren. Einzelheiten zum Vorhaben http://forum.iobroker.net/viewtopic.php … 074#p55182

      Mein erster Versuch mit Blockly sieht nun so aus, daß ich den timestamp beim Starten und beim Stoppen in zwei Variablen schreibe. TimeStart und TimeStop.

      Jetzt möchte ich im nächsten Schritt die Variable "DauerFahrt" aus TimeStop minus TimeStart berechnen.

      Welches Blöckchen muß ich dafür verwenden?

      Danke und Grüße

      Andreas

      Die Objekt-ID heißt im Moment noch "Kellertürkontakt", weil der TFK noch dort verbaut ist.
      1884_blockly_maehroboter.jpg

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

        Hallo weimaraner

        Mit dem timestamp müssten noch einige Konvertierungen gemacht werden.

        Eine einfache Lösung könnte so aussehen.
        147_timediff.png

        Die Berechnung funktioniert allerdings nicht über einen Tageswechsel hinaus!

        Dann wird das ganze wieder komplexer.

        Hier noch der Export

        ! ````
        <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id=";HVkIK%xDV*hfg5kGhZK" x="-1387" y="-662"><mutation items="1"></mutation>
        <field name="CONDITION">ne</field>

        <value name="OID0"><shadow type="field_oid" id="`h{W|EEJ_2vq}hmhx[S/"><field name="oid">javascript.1.bolTest01</field></shadow></value> 
        <statement name="STATEMENT"><block type="controls_if" id="y,)_no9bSoe+qt#3^Y}H"><mutation else="1"></mutation>
            <value name="IF0"><block type="logic_compare" id="~ajXk0%CiC`QN86X?(CJ"><field name="OP">EQ</field>
                <value name="A"><block type="get_value" id="VT1Pj)5C7:n;w3z5JZ23"><field name="ATTR">val</field>
                    <field name="OID">javascript.1.bolTest01</field></block></value> 
                <value name="B"><block type="logic_boolean" id="B(Y7/,N|SMqnfh]6;%)V"><field name="BOOL">TRUE</field></block></value></block></value> 
            <statement name="DO0"><block type="variables_set" id="p?oe83FptKFq,K*YT;a4"><field name="VAR">TimeStart</field>
                <value name="VALUE"><block type="time_get" id="Yftzf+X9i2YJD}YpN??|"><mutation format="false" language="false"></mutation>
                    <field name="OPTION">sid</field></block></value></block></statement> 
            <statement name="ELSE"><block type="variables_set" id="hfKNl]+nTN3RN3wj%qXM"><field name="VAR">TimeStop</field>
                <value name="VALUE"><block type="time_get" id="|Yr~}d{|jmkg6mKE%4ME"><mutation format="false" language="false"></mutation>
                    <field name="OPTION">sid</field></block></value> 
                <next><block type="variables_set" id="+Y~vjk`Hv8}[6qVJhtOY"><field name="VAR">TimeDiff</field>
                    <value name="VALUE"><block type="math_arithmetic" id="gkY(egaQS,%tf6iaH}/."><field name="OP">MINUS</field>
                        <value name="A"><shadow type="math_number" id="lXZR6{CRHSk1iZDT3oO/"><field name="NUM">1</field></shadow> 
                          <block type="variables_get" id="WYs:bX7BZKath^oFSXrY"><field name="VAR">TimeStop</field></block></value> 
                        <value name="B"><shadow type="math_number" id="{b%.79|%M%x7m+D:_P9?"><field name="NUM">1</field></shadow> 
                          <block type="variables_get" id="1FeI#T(Je3V.Xq(5cujG"><field name="VAR">TimeStart</field></block></value></block></value> 
                    <next><block type="debug" id="x)M[!d}o@`N9+;mY8c,g"><field name="Severity">log</field>
                        <value name="TEXT"><shadow type="text" id="POVS+U[=i]S%2WLeMN.9"><field name="TEXT">test</field></shadow> 
                          <block type="text_join" id="KK!Ge-G[]lp4ynS`0eAW"><mutation items="2"></mutation>
                            <value name="ADD0"><block type="variables_get" id="Lx7(:Ql@0+Tnh3=3)=tO"><field name="VAR">TimeDiff</field></block></value> 
                            <value name="ADD1"><block type="text" id="[UYujye7FkQD*Bw2QxnM"><field name="TEXT"> Sekunden</field></block></value></block></value></block></next></block></next></block></statement></block></statement></block></xml> 
        
        
        Grüße
        1 Reply Last reply Reply Quote 0
        • W
          weimaraner last edited by

          Vielen Dank, Rantanplan!

          Das werde ich gleich morgen mal ausprobieren. Über den Tageswechsel dürfte vielleicht gar kein Problem sein, da ich nachts ja nicht mähe und mich die Ruhepause nicht interessiert.

          Mal schauen, wie ich das dann in history dargestellt bekomme.

          Ich werde weiter berichten (und fragen 😉 ).

          Grüße Andreas

          1 Reply Last reply Reply Quote 0
          • W
            weimaraner last edited by

            So, ich habe nun Rantanplans Skript angepaßt und gleich noch ein zweites "spiegelverkehrtes" für den jeweils anderen Zustand erstellt.

            Mähen:
            1884_skript_maehen.jpg

            Laden:
            1884_skriptladen.jpg

            Nun tut sich wieder ein bunter Straus an Fragen auf. 😮 😄 😄

            Ich habe die Skripte in einer weiteren JavaSkript-Instanz laufen lassen, da ich im Forum gelesen hatte, daß man das zum Testen tuen soll. Also die "1" gewählt (siehe Bilder oben)

            Warum sehe ich aber im Reiter Objekte die Skripte unter javascript.0 ?

            siehe hier:
            1884_objekte_skript.jpg

            Nächste Frage: Wo finde ich die geloggten Zeiten meiner Zustände? Unter Objekte?

            Ich habe auf dieser Seite das Zahnrad ganz rechts geklickt. Da komme ich in den history-Adapter. Dort auf "aktiviert". Es passiert aber nichts. Der Kontakt wurde mehrmals bedient, aber ich sehe keine Dauern.
            1884_skript_history.jpg

            Und noch eine generelle Frage: Könnte ich beide Skripte zu einem Skript zusammen fassen? Hätte das Vor- oder Nachteile?

            Danke und viele Grüße

            Andreas

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

              @weimaraner:

              Nun tut sich wieder ein bunter Straus an Fragen auf. 😮 😄 😄 `

              Ich habe es befürchtet 😄

              @weimaraner:

              Ich habe die Skripte in einer weiteren JavaSkript-Instanz laufen lassen, da ich im Forum gelesen hatte, daß man das zum Testen tuen soll. Also die "1" gewählt (siehe Bilder oben)

              Warum sehe ich aber im Reiter Objekte die Skripte unter javascript.0 ? `
              Ja, sollte man so machen. Ich habe die 0 für produktiv und die 1 zum Testen.

              Das die Scripte manchmal in der falschen Instanz angezeigt werden ist bei mir auch so. Reorganiesiert sich aber irgenwann.

              @weimaraner:

              Und noch eine generelle Frage: Könnte ich beide Skripte zu einem Skript zusammen fassen? Hätte das Vor- oder Nachteile? `
              Ja könntest Du. Ein Blockly kann mehrere Trigger beinhalten.

              Dann solltest Du aber zusätzliche lokale Variablen nehmen. z.B. TimerStartMaehen, TimerStopMaehen. TimerStartLaden, TimerStopLaden

              Und die Trigger nicht auf "Änderung" sondern jeweils auf "wahr" oder "unwahr" reagieren lassen.

              @weimaraner:

              Nächste Frage: Wo finde ich die geloggten Zeiten meiner Zustände? Unter Objekte?

              Ich habe auf dieser Seite das Zahnrad ganz rechts geklickt. Da komme ich in den history-Adapter. Dort auf "aktiviert". Es passiert aber nichts. Der Kontakt wurde mehrmals bedient, aber ich sehe keine Dauern. `
              In Deinem Screenshot hast Du das Script selbst ausgewählt.

              Ein Script kennt nur 2 Zustände. Läuft oder läuft nicht.

              Da würde also nur geloggt wann Du das Script startest und wann Du auf Pause klickst.

              Ich habe immer geflissentlich überlesen, dass Du mit "History" loggen willst :oops: :roll:

              Dafür brauchst Du kein Blockly. 😢

              Geh unter Objekte, wähle den STATE von dem Adapter aus und dann das "Zahnrädchen".

              History zeigt Dir dann wie lange das Teil offen oder zu war.

              Das hat aber alles nichts mehr mit Blockly zutun.

              Kurz zum Verständnis.

              Wenn Du dies mit Blockly lösen wolltest, müsstest Du

              1. Ein Objekt/Datenpunkt anlegen, Typ Logikwert, Bezeichnung "LadenAktiv" (lokale Variablen kannst Du nicht unter Objekte finden!)

              2. Ein Blockly, wo der Datenpunkt "LadenAktiv" auf "wahr" oder "unwahr" gesetzt wird.

              3. "LadenAktiv" unter Objekte auswählen und mit "History" verbinden.

              Grüße

              1 Reply Last reply Reply Quote 0
              • W
                weimaraner last edited by

                Okay, 😉 blockly war ein Irrweg. Aber ich habe was gelernt. 🙂

                Bei history habe ich geschaut, aber die geloggten Uhrzeiten über history lassen sich aber irgenwie nicht gut darstellen.

                Meine Idee ist ein Graph in einem Koordinatensystem, wobei auf der X-Achse die (Uhr)Zeit ist und auf der Y-Achse der Zustand 0=Laden, 1=Mähen.

                I-Tüpfelchen wäre dann eine Warnmeldung, wenn die Mähdauer eine Zeit x überschreitet, weil festgefahren, umgekippt, geklaut… 😮 😞

                Deshalb wollte ich aus den Uhrzeiten ja anfänglich die Dauer des Zustandes ermitteln. Daher kam ich zu blockly. Du siehst der Kreis schließt sich. 😄

                Grüße Andreas

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

                  @weimaraner:

                  Okay, 😉 blockly war ein Irrweg. Aber ich habe was gelernt. 🙂 `
                  Jeder Tag an dem man etwas lernt ist ein guter Tag. 😉
                  @weimaraner:

                  Bei history habe ich geschaut, aber die geloggten Uhrzeiten über history lassen sich aber irgenwie nicht gut darstellen.

                  Meine Idee ist ein Graph in einem Koordinatensystem, wobei auf der X-Achse die (Uhr)Zeit ist und auf der Y-Achse der Zustand 0=Laden, 1=Mähen. `
                  Da gibt es bestimmt Möglichkeiten. Mach doch einen neuen Fred auf.

                  Hier gibt es bestimmt jemanden, der Dir weiterhelfen kann.

                  @weimaraner:

                  I-Tüpfelchen wäre dann eine Warnmeldung, wenn die Mähdauer eine Zeit x überschreitet, weil festgefahren, umgekippt, geklaut… 😮 😞 `
                  Na, da kann ich wieder versuchen Dir zu helfen. 😄
                  147_beispiel.png

                  Der Import:

                  ! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
                  ! <block type="on_ext" id="hWe3oOsT9qm9n2FDJ^" x="-112" y="38"><mutation items="1"></mutation>
                  ! <field name="CONDITION">ne</field>
                  ! <value name="OID0"><shadow type="field_oid" id="Rcde!sY/svk9PIQLQZ^;"><field name="oid">default</field></shadow></value>
                  ! <statement name="STATEMENT"><block type="controls_if" id="0Ob]KV][t6rD5_#FX~Tt"><mutation else="1"></mutation>
                  ! <value name="IF0"><block type="logic_compare" id="[mb4E5oRS;wD}!LxvcRw"><field name="OP">EQ</field>
                  ! <value name="A"><block type="get_value" id="Wc?S@q%|PQBr;y=fnp(M"><field name="ATTR">val</field>
                  ! <field name="OID">ID auswählen</field></block></value>
                  ! <value name="B"><block type="logic_boolean" id="4Ay!O+qV!O^G;vp|gQ99"><field name="BOOL">TRUE</field></block></value></block></value>
                  ! <statement name="DO0"><block type="pushover" id="s{f8]F),e==dhjq,kI^"><field name="PRIORITY">0</field> ! <value name="MESSAGE"><shadow type="text" id="]hr~.X}J_r:THi68IF_;"><field name="TEXT">Hey Boss, beginne meinen schlecht bezahlten Job!</field></shadow></value> ! <value name="TITLE"><block type="text" id="z2Y,NPD4{[[U4NPGY+Pu"><field name="TEXT">Vom Rasen-Sklaven</field></block></value> ! <next><block type="timeouts_settimeout" id="1+SYeYF_P:RxreH=7L^@"><field name="NAME">timeout</field> ! <field name="DELAY">1800000</field> ! <statement name="STATEMENT"><block type="comment" id="e7yoscMDR(@+P4:?X8#E"><field name="COMMENT">Nach 30 Minuten</field> ! <next><block type="pushover" id="GBHg_}E~kV|i~/GrZ@9"><field name="PRIORITY">0</field>
                  ! <value name="MESSAGE"><shadow type="text" id="h9WKC=fHrkIp[N[vz_7x"><field name="TEXT">Hey Boss, brauche Hilfe!!!</field></shadow></value>
                  ! <value name="TITLE"><block type="text" id="g{2bJ|Tr|eskt:}6lcdt"><field name="TEXT">Vom Rasen-Sklaven</field></block></value></block></next></block></statement></block></next></block></statement>
                  ! <statement name="ELSE"><block type="timeouts_cleartimeout" id="AeHq]M4eR):X_f2-I?.t"><field name="NAME">timeout</field>
                  ! <next><block type="pushover" id="4IkGMCW#)A,Oq-N-|;Kd"><field name="PRIORITY">0</field>
                  ! <value name="MESSAGE"><shadow type="text" id="-BIt^-hW9Y%pHxVGBa"><field name="TEXT">Hey Boss, mache Pause!</field></shadow></value>
                  ! <value name="TITLE"><block type="text" id="I@2lY3Q]%,QP=(E;,X3("><field name="TEXT">Vom Rasen-Sklaven</field></block></value></block></next></block></statement></block></statement></block></xml>
                  @weimaraner:

                  Daher kam ich zu blockly. Du siehst der Kreis schließt sich. 😄 `
                  Gut so 😉

                  Grüße

                  1 Reply Last reply Reply Quote 0
                  • W
                    weimaraner last edited by

                    Schönes Blockly! 😉 😄

                    Werde ich morgen mal umsetzen.

                    Ich berichte!

                    Danke und Grüße

                    Andreas

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    824
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    2375
                    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