Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Trockner / Waschmaschine Blockly

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Trockner / Waschmaschine Blockly

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

      Hier für die, die auf Facebook danach gefragt haben. Es geht bestimmt noch "schöner" aber es funktioniert für mich sehr gut.

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="y~7J[6y=#n^R6V6y{@A#">timeout2 laeuft</variable>
          <variable id="obP`JV;QUU%V#ga-ubf7">WM State</variable>
          <variable type="timeout" id="timeout2">timeout2</variable>
          <variable type="timeout" id="timeout">timeout</variable>
        </variables>
        <block type="on_ext" id="]nm@fXILEu8mmca4J!}S" x="168" y="108">
          <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id="^y^94DZ+R]6b4~Y@S|NF">
              <field name="oid">linkeddevices.0.Keller.load_power-Trockner</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="controls_if" id="JV-H#l({$GTnPrUa8y{3">
              <mutation elseif="1"></mutation>
              <value name="IF0">
                <block type="logic_operation" id="M:@_gjjI/w8vfS2qLOGa">
                  <field name="OP">AND</field>
                  <value name="A">
                    <block type="logic_compare" id="PM)qIzUYsmB^@HycHPHH">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="variables_get" id="JsQ@!uO)bo0B4ul9Lfr~">
                          <field name="VAR" id="y~7J[6y=#n^R6V6y{@A#">timeout2 laeuft</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id=".|#T=RNjlbit^F8MDF]x">
                          <field name="BOOL">FALSE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_operation" id="BT1+lSS:@uduP0a?V87;">
                      <field name="OP">AND</field>
                      <value name="A">
                        <block type="logic_compare" id="-H+iRz]Uqs[l)$HtUlFb">
                          <field name="OP">EQ</field>
                          <value name="A">
                            <block type="get_value" id="w0|7,Rz!7e*(Isl;z^|*">
                              <field name="ATTR">val</field>
                              <field name="OID">linkeddevices.0.Keller.plug4state</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="logic_boolean" id="oRXS=]W|YWHn_j^mTfop">
                              <field name="BOOL">TRUE</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_operation" id="pOk]GXVqIbHV_ageKu)_">
                          <field name="OP">AND</field>
                          <value name="A">
                            <block type="logic_compare" id="/uPHwL2H%FIIbi[,uV?7">
                              <field name="OP">LTE</field>
                              <value name="A">
                                <block type="on_source" id="HF{nrhe:q{Abj{LHZhyL">
                                  <field name="ATTR">state.val</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="math_number" id=";yW3,/MeGY0Xm3-SBT1]">
                                  <field name="NUM">5</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <value name="B">
                            <block type="logic_compare" id="+;dNW$-US?GH.*8%xhDP">
                              <field name="OP">EQ</field>
                              <value name="A">
                                <block type="variables_get" id="$UISt9g$wu6FGFhJM;%1">
                                  <field name="VAR" id="obP`JV;QUU%V#ga-ubf7">WM State</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="logic_boolean" id="#FNXT:j[{g#6^ek$S2YO">
                                  <field name="BOOL">FALSE</field>
                                </block>
                              </value>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="variables_set" id="JL#cs,QR6%KOe9b:_kBl">
                  <field name="VAR" id="y~7J[6y=#n^R6V6y{@A#">timeout2 laeuft</field>
                  <value name="VALUE">
                    <block type="logic_boolean" id="_#exSs!eL3DWJ!F2~wFS">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                  <next>
                    <block type="timeouts_settimeout" id="!onvlitH0:sESCUF:%rG">
                      <field name="NAME">timeout2</field>
                      <field name="DELAY">5</field>
                      <field name="UNIT">min</field>
                      <statement name="STATEMENT">
                        <block type="variables_set" id="`{3,PaU:nQ5f_o%Q4Rue">
                          <field name="VAR" id="obP`JV;QUU%V#ga-ubf7">WM State</field>
                          <value name="VALUE">
                            <block type="logic_boolean" id=",azJL-m/fi@I^13c[|48">
                              <field name="BOOL">TRUE</field>
                            </block>
                          </value>
                        </block>
                      </statement>
                    </block>
                  </next>
                </block>
              </statement>
              <value name="IF1">
                <block type="logic_operation" id="FyT5Xy@*}(|Jl%Irp]Yx">
                  <field name="OP">AND</field>
                  <value name="A">
                    <block type="logic_compare" id="I/sCDvjrlJ+Cq59oa:5-">
                      <field name="OP">GTE</field>
                      <value name="A">
                        <block type="on_source" id="j%w8y9.s{wX3QIfDEp]e">
                          <field name="ATTR">state.val</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="dSIx~IwX%CiF$zVGu?@Q">
                          <field name="NUM">5</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_compare" id="=y*g.8h5{Keb?j]@NMDv">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="get_value" id="SgV`ADWO)?wf:WK3F6T.">
                          <field name="ATTR">val</field>
                          <field name="OID">linkeddevices.0.Keller.plug4state</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id="k.2RVcrdrkcKxh#]Fp2I">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO1">
                <block type="variables_set" id="Q=SNwc@Z;COj!!~.]wWT">
                  <field name="VAR" id="obP`JV;QUU%V#ga-ubf7">WM State</field>
                  <value name="VALUE">
                    <block type="logic_boolean" id="d[O:fYc*ye@Viio:qFc7">
                      <field name="BOOL">FALSE</field>
                    </block>
                  </value>
                  <next>
                    <block type="variables_set" id="D-oDWb#/vUM+[UnpgqvE">
                      <field name="VAR" id="y~7J[6y=#n^R6V6y{@A#">timeout2 laeuft</field>
                      <value name="VALUE">
                        <block type="logic_boolean" id="cv[;g$(]([@Q0SXBZWDV">
                          <field name="BOOL">FALSE</field>
                        </block>
                      </value>
                      <next>
                        <block type="timeouts_cleartimeout" id="2I]L7z7mQO^HVpM-d5^Q">
                          <field name="NAME">timeout2</field>
                          <next>
                            <block type="timeouts_cleartimeout" id="qLVq#~d3PJaW5%tdd:fI">
                              <field name="NAME">timeout</field>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
              <next>
                <block type="controls_if" id=".D(GY(Fu:0Hpl[T;i2gH">
                  <value name="IF0">
                    <block type="logic_compare" id="W7pxvQ8@.auCssuNrHw.">
                      <field name="OP">EQ</field>
                      <value name="A">
                        <block type="variables_get" id="BDhwprXphiuUGv{YowK=">
                          <field name="VAR" id="obP`JV;QUU%V#ga-ubf7">WM State</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="logic_boolean" id="qo;@]3`btuaF!QU,[Y/1">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="control" id="*7uvT_h}6AP/;;|@hNT1">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">alexa2.0.Echo-Devices.G091AA08050426L5.Commands.speak</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="text" id="nG_=]B/h4YoF9fV}xRtg">
                          <field name="TEXT">Trockner ist fertig wird in 30 Minuten ausgeschaltet</field>
                        </block>
                      </value>
                      <next>
                        <block type="control" id="LF7t46?8w~}YOJ!B4wQl">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                          <field name="OID">alexa2.0.Echo-Devices.90F008187205096V.Commands.speak</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="text" id="6@nZ5?ySJlli^Rfim*d;">
                              <field name="TEXT">Trocknerist fertig und wird in 30 Minuten ausgeschaltet</field>
                            </block>
                          </value>
                          <next>
                            <block type="variables_set" id=")gVj-JyVo;gciJjD#dgQ">
                              <field name="VAR" id="obP`JV;QUU%V#ga-ubf7">WM State</field>
                              <value name="VALUE">
                                <block type="logic_boolean" id="=-kkiN(/m7Z1#X2O[@3*">
                                  <field name="BOOL">FALSE</field>
                                </block>
                              </value>
                              <next>
                                <block type="timeouts_cleartimeout" id="PP}#`P%zVKJ@^O=G9.Pg">
                                  <field name="NAME">timeout</field>
                                  <next>
                                    <block type="timeouts_settimeout" id="aW8]DVZba[Vc$Vf^.{nN">
                                      <field name="NAME">timeout</field>
                                      <field name="DELAY">30</field>
                                      <field name="UNIT">min</field>
                                      <statement name="STATEMENT">
                                        <block type="controls_if" id="jr{X%^Jzg},`$Y3q@`@C">
                                          <value name="IF0">
                                            <block type="logic_compare" id="fsyFmmzVJ^.FLEE=%6mS">
                                              <field name="OP">EQ</field>
                                              <value name="A">
                                                <block type="get_value" id="nA|JE%P:q1miCZA^wk[i">
                                                  <field name="ATTR">val</field>
                                                  <field name="OID">linkeddevices.0.Keller.plug4state</field>
                                                </block>
                                              </value>
                                              <value name="B">
                                                <block type="logic_boolean" id="mx8l@g]G|KZ|xo!42)|l">
                                                  <field name="BOOL">TRUE</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <statement name="DO0">
                                            <block type="control" id="[.1|@|NZ*PXxS4B=Tust">
                                              <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                              <field name="OID">linkeddevices.0.Keller.plug4state</field>
                                              <field name="WITH_DELAY">FALSE</field>
                                              <value name="VALUE">
                                                <block type="logic_boolean" id="Hm8X4#5^[40j:=B[8fGJ">
                                                  <field name="BOOL">FALSE</field>
                                                </block>
                                              </value>
                                              <next>
                                                <block type="control" id="]EJj$ZO_@,Bt[nD:xrwW">
                                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                  <field name="OID">alexa2.0.Echo-Devices.G091AA08050426L5.Commands.speak</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="text" id="#sXGwOrKz@.O_EvTG@[?">
                                                      <field name="TEXT">Trockner wurde nun ausgeschaltet</field>
                                                    </block>
                                                  </value>
                                                  <next>
                                                    <block type="control" id="9.6p6AHB]J=#dC$SRg#b">
                                                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                      <field name="OID">alexa2.0.Echo-Devices.90F008187205096V.Commands.speak</field>
                                                      <field name="WITH_DELAY">FALSE</field>
                                                      <value name="VALUE">
                                                        <block type="text" id="swKiI00;_#Nn#`6s(iBy">
                                                          <field name="TEXT">Trockner wurde nun ausgeschaltet</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </next>
                                                </block>
                                              </next>
                                            </block>
                                          </statement>
                                        </block>
                                      </statement>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </statement>
        </block>
      </xml>
      
      

      4f29040a-6535-4961-901c-411d4633d3e2-image.png

      haselchen 1 Reply Last reply Reply Quote 1
      • haselchen
        haselchen Most Active @goliat0815 last edited by

        @goliat0815

        Hallo und guten Morgen,

        Danke fürs Teilen.
        Aber vielleicht erklärst Du noch den nicht Facebook-Wissenden die einzelnen Datenpunkte und Blockly Bausteine.

        G 1 Reply Last reply Reply Quote 0
        • G
          goliat0815 @haselchen last edited by

          @haselchen
          🙂 ist eine gute Frage ... musste selbst gerade erstmal überlegen.

          Im Endeffekt überwache ich den Momentanverbrauch der Waschmaschine bzw. des Trockners. Da ich mir vorher den Verlauf eines Waschgangs mal angeschaut habe und der Verbrauch auch während des Waschgangs kurzzeitig mal auf unter 5W sinkt, habe ich eine Verzögerung eingebaut und den eigentlichen "Vorgang" des Meldens und Abschaltens, mit Variablen abstrahiert.
          Wenn also der Verbrauch sich unter 5W ändert, wird erstmal 5 Minuten gewartet, bis die Variable "WM State" auf true gesetzt wird. Falls in den fünf Minuten sich der Wert wieder ändert und erhöht, wird der Timeout wieder gelöscht. Auch wird der Timeout nur gesetzt, wenn dieser nicht bereits läuft, sonst "swingt" der ja ständig. Das wird in der ersten "falls" Abfrage daher berücksichtigt. Auch wird da überprüft, ob der WM State nicht bereits auf "true" gesetzt wurde, dann muss das ja nicht nochmal mittels Timeout passieren. Das muss sich auch deshalb machen, da selbst nach dem Waschgang, wenn die Maschine fertig ist, der Momentanverbrauch von 1-5 W schwankt und sich daher immer wieder Änderungen des Verbrauchs ergeben, die dennoch ein "WM ist fertig" bedeuten und den Verlauf des Scriptes nicht beeinflussen sollen.
          Wenn das Gerät aber mehr als 5 Minuten unter 5W bleibt, dann wird der "WM State" auf true gesetzt und das untere "falls" wird getriggert. Da sollte ja soweit selbsterklärend sein, was da passiert. Es wird aus zwei Alexas gemeldet, dass das Gerät fertig ist und nach weiteren 30 Minuten wird gemeldet, dass das Gerät abgeschaltet wird und dies dann auch so durchgeführt.
          Sollte sich innerhalb der Alexa Meldungen (30 Minuten) etwas am Momentanverbrauch ändern, z.B. weil meine Frau eine neue Waschmaschine ansetzt, werden die Zustände udn Trigger wieder alle gelöscht und es beginnt von vorn.

          da_Woody 1 Reply Last reply Reply Quote 1
          • da_Woody
            da_Woody @goliat0815 last edited by

            @goliat0815 hut ab vor deinen blockly künsten, aber für das hat @Xenon den Device Reminder in adapterform ins leben gerufen... 🙂

            Xenon Slowman G 3 Replies Last reply Reply Quote 0
            • Xenon
              Xenon Forum Testing Developer @da_Woody last edited by Xenon

              @da_woody sagte in Trockner / Waschmaschine Blockly:

              @goliat0815 hut ab vor deinen blockly künsten, aber für das hat @Xenon den Device Reminder in adapterform ins leben gerufen... 🙂

              Gibs auf, das Rad muss halt ständig neu erfunden werden 😉
              Dann nutzen die Leute lieber für jedes einzelne Gerät ein einzelnes Script, deren Entscheidung

              Und wenn dann wieder Fragen kommen wie " Wie integriere ich noch das und das" kommt kein Support von den Leuten

              da_Woody G 2 Replies Last reply Reply Quote 0
              • da_Woody
                da_Woody @Xenon last edited by

                @xenon man munkelt, du hast den adapter so gut versteckt, daß ihn keiner findet... 😄

                A 1 Reply Last reply Reply Quote 0
                • Slowman
                  Slowman @da_Woody last edited by

                  @da_woody sagte in Trockner / Waschmaschine Blockly:

                  @goliat0815 hut ab vor deinen blockly künsten, aber für das hat @Xenon den Device Reminder in adapterform ins leben gerufen... 🙂

                  Es soll auch Leute geben, bei denen der Adapter nicht richtig funktioniert (liegt wahrscheinlich am Benutzer, wie mich das man zu doof dazu ist). Selbst meine WM iQ800 wird nicht richtig erkannt. Also nimmt man lieber einen Blockly der Funktioniert, als sich ständig über sich selber zu ärgern, dass man den Adapter nicht richtig eingestellt bekommt mit seinen exotischen Geräten, wie Siemens, Bosch und Miele.

                  @goliat0815

                  Danke für die Teilung deines Blockly, wenn alle so denken, da gibt es ja was von Ratiopharm. Dann bräuchten wir die Rubrik Blockly ja nicht mehr. Es gibt ja schon für fast alles Ersatz.

                  Xenon 1 Reply Last reply Reply Quote 1
                  • Xenon
                    Xenon Forum Testing Developer @Slowman last edited by

                    @slowman ich hab dir mehrfach hilfe angeboten, auch das ich dir auf den discord per Bildschirmteilen helfen würde. Ich habe selber Bosch Geräte 😉

                    Jeder kann tun und lassen was er will. Natürlich kann man eigene scripte nutzen, kein Problem. Aber wenn man Vorlagen einstellt erwarte ich auch Support bei User Fragen

                    Slowman 1 Reply Last reply Reply Quote 0
                    • Slowman
                      Slowman @Xenon last edited by

                      @xenon

                      Höre ich jetzt das 1. Mal mit dieser Hilfe. Aber egal, ich bin so wie ich es mit meinen exotischen dt. Geräten umgesetzt habe, erst mal zufrieden. Da sind andere Baustellen, die zuerst erledigt werden müssen.
                      Und was ich in deinen Adapter Thema schon geschrieben habe, es ist ein genialer Adapter und bei denen er funktioniert eine schnelle Umsetzung seiner Wünsche und gehört zu den Top5 Scripte hier im Forum.

                      da_Woody 1 Reply Last reply Reply Quote 0
                      • da_Woody
                        da_Woody @Slowman last edited by

                        @slowman keine ahnung welche probleme sich da auftun bei dir. einfach waschmaschine und trockner den verbrauchDP angegeben, ein paar alexas eingetragen, den text für anfang und ende, fertig. zu testzwecken am anfang noch push zusätzlich verwendet...

                        1 Reply Last reply Reply Quote 0
                        • A
                          Ash2k @da_Woody last edited by

                          @da_woody sagte in Trockner / Waschmaschine Blockly:

                          @xenon man munkelt, du hast den adapter so gut versteckt, daß ihn keiner findet... 😄

                          @da_woody

                          Hmm ich höre bzw lese auch gerade das erste Mal von dem Adapter obwohl ich denke das ich schon recht oft hier mitlese aber der Beitrag ist bei mir bislang nie in den Ungelesenen aufgefallen oder ich habe den anhand der Überschrift nicht mit der Funktion in Verbindung gebracht 😉

                          Werd ich mir jedenfalls mal anschauen, auch wenn ich mit meinen Scripten soweit zufrieden bin, bisschen über den eigenen Tellerrand hinausschauen kann ja nie schaden 😄

                          Slowman 1 Reply Last reply Reply Quote 1
                          • Slowman
                            Slowman @Ash2k last edited by

                            @da_Woody

                            Ja, das habe ich gemacht. Der Script ist ja auch sehr verständlich und selbsterklärend aufgebaut. Aber ich muss zu doof sein diesen Script ordentlich einzurichten. Die gefundenen Blocklys und mithilfe der Member hier an meine Bedürfnisse angepasst laufen diese zuverlässig.

                            @Team

                            Vielleicht sollte man im Wiki für Einsteiger (1. Schritte) solche Scripte wie SmartControl, ShutterControl oder auch Device-Reminder erwähnen. Dies macht dein Einstieg in ioBroker einfacher und man hat schnell Erfolge --> Anfänger wollen am Anfang Lampe mit BWM schalten oder ihre Haushaltsgeräe Smart machen. Vielleicht wäre dies mal eine Überlegung.

                            1 Reply Last reply Reply Quote 0
                            • G
                              goliat0815 @Xenon last edited by goliat0815

                              @xenon
                              ... kann und soll doch jeder machen wir er will. Ich wurde auf FB gefragt, ob ich das Blockly zur Verfügung stellen kann und dafür bietet sich dieses Forum ja nun mal an ... oder nicht. Wenn Blocklys nicht erwünscht sind, warum gibt es denn das Forum hier?
                              Den genannten Adapter kannte ich noch nicht und ich schaue mir den gern mal an. Wenn es einfacher geht, dann nutze ich das schon und sehr gern.
                              Auf der anderen Seite habe ich auch Spaß am Blockly, liegt vielleicht daran, das sich aus der IT komme und viele Powershell Scripte schreibe und daran auch Spaß habe. Außerdem kommt man durch solche Blocklys auch damit generell in Berührung und lernt, wie diese funktionieren. ... nur Übung macht den Meister.

                              Ich kann daher deinen Post nicht nachvollziehen, zumindest nicht die Art des Posts.

                              Xenon 1 Reply Last reply Reply Quote 1
                              • G
                                goliat0815 @da_Woody last edited by

                                @da_woody
                                Danke, den kannte ich noch nicht und ich suche ja nicht ständig die ganzen Adapter durch 🙂
                                Ich schaue mir den Adapter nun aber gern mal an. Wenn das einfacher zu lösen geht, dann muss ich auch kein Blockly laufen haben.

                                1 Reply Last reply Reply Quote 0
                                • Xenon
                                  Xenon Forum Testing Developer @goliat0815 last edited by

                                  @goliat0815 dann hast du es nur falsch verstanden. Mir es darum, dass man auch Support für User fragen bietet, wenn man etwas als Vorlage einstellt. Das machen die meisten Leute aber nicht

                                  Mehr hatte ich doch auch nicht geschrieben

                                  G 1 Reply Last reply Reply Quote 0
                                  • G
                                    goliat0815 @Xenon last edited by

                                    @xenon OK, dann hatte ich das tatsächlich falsch verstanden.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    1.0k
                                    Online

                                    31.6k
                                    Users

                                    79.6k
                                    Topics

                                    1.3m
                                    Posts

                                    6
                                    16
                                    1058
                                    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