Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage ] Blockly dynamischer Sonnenauf- und Sonnenuntergang

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage ] Blockly dynamischer Sonnenauf- und Sonnenuntergang

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

      Hallo Zusammen

      Die Grundidee zu diesem Script stammt von Funkleuchtturm aus dem Homaticforum.
      Ich bin von dieser Lösung begeistert, weil sie sehr flexibel eingesetzt werden kann.
      In den seltensten Fällen möchte man etwas genau bei Sonnenuntergang oder bei Sonnenaufgang schalten.
      Meistens immer etwas davor oder danach.

      Die Rollos sollen nicht genau bei Sonnenuntergang runterfahren, weil es da meistens noch zu hell ist und Weihnachten mit der Weihnachtsbeleuchtung sollen die noch länger oben bleiben. Usw. usw…

      Für das Script braucht man 2 Variablen.

      MinutenSA
      MinutenSU

      (Die stehen für MinutenSonnenAufgang und MinutenSonnenUntergang)

      Ich versuche mal das Prinzip zu verdeutlichen.
      Das Script rechnet die 24 Std. eines Tages in Minuten um (24 Std. = 1440 Minuten) und teilt den Tag in zwei Hälfen.
      Je nachdem in welcher Tageshälfte man sich befindet wird mit Astro-Sonnenuntergang oder Astro-Sonnenaufgang gearbeitet.

      Von 0:00 Uhr 12:00 Uhr werden in "MinutenSA" die Tagesminuten relativ zum Sonnenaufgang geschrieben.

      z.B.
      MinutenSA = 30 (noch 30 Minuten bis Sonnenaufgang)
      MinutenSA = 0 (es ist Sonnenaufgang)
      MinutenSA = -30 (es ist 30 Minuten NACH Sonnenaufgang)
      MinutenSA = 999 (Sonnenaufgang hat sich erledigt, wir befinden und in der zweiten Tageshälfte)

      Mit dem Sonnenuntergang (MinutenSA) verhält es ich genauso.

      Hier das Blockly als Bild:
      Forum_DySaSu.png

      Und hier als Import.

      <xml xmlns="http://www.w3.org/1999/xhtml">
        <block type="comment" id="VTv{jE70-^nS:tV~?#Fp" x="-1637" y="-1188">
          <field name="COMMENT">Datenpunkte erzeugen</field>
          <next>
            <block type="create" id="1EujDkh[|^!onF1miQTG">
              <field name="NAME">MinutenSU</field>
              <statement name="STATEMENT">
                <block type="create" id="MaLw5z`H])mQ:o!4VI=R">
                  <field name="NAME">MinutenSA</field>
                </block>
              </statement>
            </block>
          </next>
        </block>
        <block type="schedule" id="vVGiNXb%+2gtBz#!nYj!" x="-1813" y="-1088">
          <field name="SCHEDULE">*/1 * * * *</field>
          <statement name="STATEMENT">
            <block type="variables_set" id="H?K%FS!H1KWN?o~hc:BE">
              <field name="VAR">tmpVar</field>
              <value name="VALUE">
                <block type="math_arithmetic" id="VTY/n[lUUW#(Vj|0Ynf)" inline="false">
                  <field name="OP">ADD</field>
                  <value name="A">
                    <shadow type="math_number" id="~l^aI8a3}!=VAgd:Sop1">
                      <field name="NUM">1</field>
                    </shadow>
                    <block type="time_get" id=",+W%E7*^NcqRU(29_ahJ">
                      <mutation format="false" language="false"></mutation>
                      <field name="OPTION">m</field>
                    </block>
                  </value>
                  <value name="B">
                    <shadow type="math_number" id="M_(XsL,pqedMFtkdBmzf">
                      <field name="NUM">1</field>
                    </shadow>
                    <block type="math_arithmetic" id="WM%b_D:H}:omQapC*@dP">
                      <field name="OP">MULTIPLY</field>
                      <value name="A">
                        <shadow type="math_number" id="O)k}t%PQ@LFIbTz!9kvE">
                          <field name="NUM">60</field>
                        </shadow>
                      </value>
                      <value name="B">
                        <shadow type="math_number" id="K]d96jp+dotc+:*{OnVQ">
                          <field name="NUM">1</field>
                        </shadow>
                        <block type="time_get" id="PyW{g1{c/)c=^uqaS4?F">
                          <mutation format="false" language="false"></mutation>
                          <field name="OPTION">h</field>
                        </block>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <next>
                <block type="controls_if" id="=)@o%prK5~F4vWKU~y{6">
                  <mutation else="1"></mutation>
                  <value name="IF0">
                    <block type="logic_compare" id="92R0Eg|iiU_Y;0kR4ltq">
                      <field name="OP">GT</field>
                      <value name="A">
                        <block type="variables_get" id="CNA)3)^qESy7(S~V[C{;">
                          <field name="VAR">tmpVar</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="math_number" id="TdkQ43kNKi~(/VatNz%m">
                          <field name="NUM">720</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="comment" id="vI=#hS-u2IRkF^zU[+6@">
                      <field name="COMMENT">Es geht Richtung Sonnenuntergang</field>
                      <next>
                        <block type="controls_if" id="Kv9Vz_es2+CO;84;n1?g">
                          <value name="IF0">
                            <block type="logic_compare" id="`Vj03xcM9QXdD,3G^OR^">
                              <field name="OP">NEQ</field>
                              <value name="A">
                                <block type="get_value" id="peIY;XzJz(d|e#Jj)eO*">
                                  <field name="ATTR">val</field>
                                  <field name="OID">javascript.0.MinutenSA</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="math_number" id="{Dx^.4n8Y*xv*fO{uRww">
                                  <field name="NUM">999</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <statement name="DO0">
                            <block type="control" id="Ref/|.A#+S[4FOpy!@V+">
                              <mutation delay_input="false"></mutation>
                              <field name="OID">javascript.0.MinutenSA</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="math_number" id="uMoOUwf)MArjx{bh[UA{">
                                  <field name="NUM">999</field>
                                </block>
                              </value>
                            </block>
                          </statement>
                          <next>
                            <block type="variables_set" id="73%n,jcZT#5v4UhyMokT">
                              <field name="VAR">tmpVar</field>
                              <value name="VALUE">
                                <block type="math_arithmetic" id="iw{^B8#6Te[P+8hlz%H!" inline="false">
                                  <field name="OP">ADD</field>
                                  <value name="A">
                                    <shadow type="math_number" id="~l^aI8a3}!=VAgd:Sop1">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="convert_from_date" id="8cA=fum%HkUbz,d,HW2i">
                                      <mutation format="false" language="false"></mutation>
                                      <field name="OPTION">m</field>
                                      <value name="VALUE">
                                        <block type="time_astro" id="pyHR=)S0b4-N}}j:|znf">
                                          <field name="TYPE">sunset</field>
                                          <field name="OFFSET">0</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <shadow type="math_number" id="M_(XsL,pqedMFtkdBmzf">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="math_arithmetic" id="d(`jk,nMUkIvoDnNbA)A">
                                      <field name="OP">MULTIPLY</field>
                                      <value name="A">
                                        <shadow type="math_number" id="Le{m.eM1MnJmG9U=_mP-">
                                          <field name="NUM">60</field>
                                        </shadow>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="K]d96jp+dotc+:*{OnVQ">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="convert_from_date" id="dU8`E#!{4:UE#UMYwQX`">
                                          <mutation format="false" language="false"></mutation>
                                          <field name="OPTION">h</field>
                                          <value name="VALUE">
                                            <block type="time_astro" id="P5CuN,Lp;9|kAnjH]#9r">
                                              <field name="TYPE">sunset</field>
                                              <field name="OFFSET">0</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id="j6YPcIQeQh@U*ci,A~Vo">
                                  <field name="VAR">tmpVar</field>
                                  <value name="VALUE">
                                    <block type="math_arithmetic" id="p{)7LYAaH3!|]@uK!f;+" inline="false">
                                      <field name="OP">MINUS</field>
                                      <value name="A">
                                        <shadow type="math_number" id="rMo/U|,([_+]z-~s,MGy">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="variables_get" id="GQ1[nGycK0,8b2XvO8AS">
                                          <field name="VAR">tmpVar</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="My!mMfHGw..Fd%(I[%A1">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="math_arithmetic" id="8X}}xjrJKyit2iAnC_h`">
                                          <field name="OP">ADD</field>
                                          <value name="A">
                                            <shadow type="math_number" id="L]]T.y?4xyb|Kw*BT0G7">
                                              <field name="NUM">1</field>
                                            </shadow>
                                            <block type="time_get" id="}n#KTx5=s`@X^S.k6kBR">
                                              <mutation format="false" language="false"></mutation>
                                              <field name="OPTION">m</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <shadow type="math_number" id="`Gii1#:=nuCc_%/LwG!m">
                                              <field name="NUM">1</field>
                                            </shadow>
                                            <block type="math_arithmetic" id="83w/4UoLSiURmG1G2N!S">
                                              <field name="OP">MULTIPLY</field>
                                              <value name="A">
                                                <shadow type="math_number" id="/tkCg?]P4I]r2}m]0)H}">
                                                  <field name="NUM">60</field>
                                                </shadow>
                                              </value>
                                              <value name="B">
                                                <shadow type="math_number" id="%dev1yG{WJ{m(0[yTx?z">
                                                  <field name="NUM">1</field>
                                                </shadow>
                                                <block type="time_get" id="NaEM`|RE6f:X~?U%?*{f">
                                                  <mutation format="false" language="false"></mutation>
                                                  <field name="OPTION">h</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="control" id=",]HLi9UL4?{PDxqY5#+,">
                                      <mutation delay_input="false"></mutation>
                                      <field name="OID">javascript.0.MinutenSU</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="variables_get" id="|2H*w|X+^cZ^y]]05E3#">
                                          <field name="VAR">tmpVar</field>
                                        </block>
                                      </value>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                  <statement name="ELSE">
                    <block type="comment" id="2;aVyVfs/@Rm`vz7(3lW">
                      <field name="COMMENT">Es geht Richtung Sonnenaufgang</field>
                      <next>
                        <block type="controls_if" id="N^;]Z=S2,tiR#A-GsPsQ">
                          <value name="IF0">
                            <block type="logic_compare" id="0:yF^_8V+hV~~),`(k96">
                              <field name="OP">NEQ</field>
                              <value name="A">
                                <block type="get_value" id="rnw{5e)9q+rqIxRJ[jCt">
                                  <field name="ATTR">val</field>
                                  <field name="OID">javascript.0.MinutenSU</field>
                                </block>
                              </value>
                              <value name="B">
                                <block type="math_number" id="1AaL1SJ(by.q~0GF~T8y">
                                  <field name="NUM">999</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <statement name="DO0">
                            <block type="control" id="|U+jeT{^16)(S5/x-IZX">
                              <mutation delay_input="false"></mutation>
                              <field name="OID">javascript.0.MinutenSU</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE">
                                <block type="math_number" id="?s_-ddzS,(Zx}=^v,rz=">
                                  <field name="NUM">999</field>
                                </block>
                              </value>
                            </block>
                          </statement>
                          <next>
                            <block type="variables_set" id="+Bt:J8ktjNo^pdEc%[7G">
                              <field name="VAR">tmpVar</field>
                              <value name="VALUE">
                                <block type="math_arithmetic" id="M8(gKAhXzx,j}Bs!inxU" inline="false">
                                  <field name="OP">ADD</field>
                                  <value name="A">
                                    <shadow type="math_number" id="~l^aI8a3}!=VAgd:Sop1">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="convert_from_date" id="![*8.7d^6ee,z,|%9k8Z">
                                      <mutation format="false" language="false"></mutation>
                                      <field name="OPTION">m</field>
                                      <value name="VALUE">
                                        <block type="time_astro" id="!bNua++5@e)Lt=M)7U`9">
                                          <field name="TYPE">sunrise</field>
                                          <field name="OFFSET">0</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <shadow type="math_number" id="M_(XsL,pqedMFtkdBmzf">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="math_arithmetic" id="oGtre7X~N[zOCGz28evg" inline="false">
                                      <field name="OP">MULTIPLY</field>
                                      <value name="A">
                                        <shadow type="math_number" id="{5jN@VsX#]zkJ,O4jlDJ">
                                          <field name="NUM">60</field>
                                        </shadow>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="K]d96jp+dotc+:*{OnVQ">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="convert_from_date" id="z#VJzaape6]#JqC+VCzH">
                                          <mutation format="false" language="false"></mutation>
                                          <field name="OPTION">h</field>
                                          <value name="VALUE">
                                            <block type="time_astro" id="myW^hNV-B%jT}ZP!LefT">
                                              <field name="TYPE">sunrise</field>
                                              <field name="OFFSET">0</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id="N#n9QcDlh;D;nL#i1s[0">
                                  <field name="VAR">tmpVar</field>
                                  <value name="VALUE">
                                    <block type="math_arithmetic" id="0K`.;3ARV[V{1F)IZPHH" inline="false">
                                      <field name="OP">MINUS</field>
                                      <value name="A">
                                        <shadow type="math_number" id="rMo/U|,([_+]z-~s,MGy">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="variables_get" id="8,-HZjVcS_FAG`b5M?BR">
                                          <field name="VAR">tmpVar</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="My!mMfHGw..Fd%(I[%A1">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="math_arithmetic" id="(G@z=!!JnAJL0UL6F/*`">
                                          <field name="OP">ADD</field>
                                          <value name="A">
                                            <shadow type="math_number" id="L]]T.y?4xyb|Kw*BT0G7">
                                              <field name="NUM">1</field>
                                            </shadow>
                                            <block type="time_get" id="pUt?i=.X~7J3wKd0F)3f">
                                              <mutation format="false" language="false"></mutation>
                                              <field name="OPTION">m</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <shadow type="math_number" id="`Gii1#:=nuCc_%/LwG!m">
                                              <field name="NUM">1</field>
                                            </shadow>
                                            <block type="math_arithmetic" id="uQtVMZ]]e4pn3W.i#|{6">
                                              <field name="OP">MULTIPLY</field>
                                              <value name="A">
                                                <shadow type="math_number" id="~ROv;)8R`+7oCPO2II{V">
                                                  <field name="NUM">60</field>
                                                </shadow>
                                              </value>
                                              <value name="B">
                                                <shadow type="math_number" id="%dev1yG{WJ{m(0[yTx?z">
                                                  <field name="NUM">1</field>
                                                </shadow>
                                                <block type="time_get" id="DKf;eubDY{F0[(|9s`l|">
                                                  <mutation format="false" language="false"></mutation>
                                                  <field name="OPTION">h</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="control" id="eDM:0@yO~X07NkL_WJ54">
                                      <mutation delay_input="false"></mutation>
                                      <field name="OID">javascript.0.MinutenSA</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE">
                                        <block type="variables_get" id="}W1zELgv,/1EGvhgJ0{V">
                                          <field name="VAR">tmpVar</field>
                                        </block>
                                      </value>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
              </next>
            </block>
          </statement>
        </block>
      </xml>
      

      Grüße

      1 Reply Last reply Reply Quote 0
      • N
        nibblerrick last edited by

        Nachdem mein erster Ansatz so nicht zum Erfolg gefuehrt hat http://forum.iobroker.net/viewtopic.php?p=90783 und ich auf diese nette dynamische Funktion hingewiesen wurde nun die Frage, ob sich folgender Wunsch umsetzen laesst:

        Ich habe zwei Lampengruppen, die

        Erste soll 30 Minuten nach Sonnenuntergang eingeschaltet werden, die

        Zweite nach der Haelfte der Zeit zwischen Einschaltzeitpunkt erste Gruppe und Mitternacht, dann soll die

        Erste 10 Minuten nach Einschaltzeitpunkt zweite Gruppe ausgeschaltet werden.

        Am ende sollen noch beide Gruppen um Mitternacht ausgeschaltet werden, aber das stellt jetzt keine Huerde dar.

        1 Reply Last reply Reply Quote 0
        • C
          CyberMicha last edited by

          Hi, das sieht fein aus, aber wie kann ich darüber nun etwas steuern? Also z.B. Licht einer Gruppe anschalten? Im Prinzip so etwas wie nibblerrick.

          Und wie erstelle ich mir MinutenSA ? Unter Objekte im Admin?

          LG Micha

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

            @CyberMicha:

            Und wie erstelle ich mir MinutenSA ? Unter Objekte im Admin? `

            Einfach ein Blockly anlegen mit:
            [EDIT]
            Bild entfernt: Falscher Import aus altem Forum.
            In der Vorlage werden die Datenpunkte nun angelegt.
            [/EDIT]

            1x starten und wieder beenden.

            Variablen sind dann unter javascript.0 zu finden

            Grüße

            1 Reply Last reply Reply Quote 0
            • N
              nibblerrick last edited by

              Hey, auf meine Frage bist du mir die Antwort jetzt schuldig geblieben 😉

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

                @nibblerrick:

                Hey, auf meine Frage bist du mir die Antwort jetzt schuldig geblieben 😉 `
                Oh, sorry :oops: 😉

                Bei dem Beispiel werden die Zustände von MinutenSU bzw. MinutenSA geändert.

                Also müssen diese Variablen getriggert werden.

                Damit das auch dynamisch bleibt und die Aktionszeiten variabel sind, legt man sich noch 2 globale Variablen an.

                Z.B. RolloMorgensHoch und RolloAbensRunter

                Die kann man dann über VIS befüllen und jederzeit den Bedürfnissen anpassen kann.

                Das kann man sich sehr komfortabel einrichten, so das die Rollos bei Sonn- und Feiertagen und bei Frei später hochgehen.

                Und wer es braucht bei jedem Raum unterschiedlich. Usw. usw.usw.

                In dem kleinen folgenden Beispiel wird eine lokale Variable benutzt.
                147_beispiel.png


                Ich habe noch gesehen, dass in dem 1.Beitrag alle 2 Minuten getriggert wird.

                Sollte aber jede Minute sein. Muss ich mal ändern.


                Grüße

                1 Reply Last reply Reply Quote 0
                • F
                  FredRatz last edited by

                  Ah, ich seh grad… kann es sein dass das script nur mit Homematic CCU funktioniert ???

                  Habe das hier im Log

                  javascript.0 2017-10-19 10:42:00.159 warn at Object. (script.js.eigene.sonnenstand:21:5)

                  javascript.0 2017-10-19 10:42:00.158 warn State "hm-rega.0.14768" not found

                  javascript.0 2017-10-19 10:42:00.157 warn at Object. (script.js.eigene.sonnenstand:17:7)

                  javascript.0 2017-10-19 10:42:00.157 warn State "hm-rega.0.14769" not found

                  javascript.0 2017-10-19 10:42:00.156 warn at Object. (script.js.eigene.sonnenstand:16:9)

                  javascript.0 2017-10-19 10:42:00.155 warn State "hm-rega.0.14769" not found

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

                    Nein funktioniert nicht nur mit der CCU!

                    Damals hatte ich noch einige Variablen auf der CCU.

                    Das "hm-rega….." müsstest Du aber im Blockly sehen.

                    Wahrscheinlich wo im Screenshot MinutenSU und MinutenSA steht.

                    Im Beitrag steht aber auch, dass man sich diese Variablen anlegen muss.

                    Werde wohl den ersten Beitrag nochmal anpassen müssen.

                    (Lange Zeit hat sich niemand für den Beitrag interessiert 😢)

                    Grüße

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

                      @nibblerrick:

                      Ich habe zwei Lampengruppen, die

                      Erste soll 30 Minuten nach Sonnenuntergang eingeschaltet werden, die

                      Zweite nach der Haelfte der Zeit zwischen Einschaltzeitpunkt erste Gruppe und Mitternacht, dann soll die

                      Erste 10 Minuten nach Einschaltzeitpunkt zweite Gruppe ausgeschaltet werden.

                      Am ende sollen noch beide Gruppen um Mitternacht ausgeschaltet werden, aber das stellt jetzt keine Huerde dar. `

                      Hallo nibblerrick

                      Hat etwas gedauert 😉

                      Die Lösung für Dein Problem ist sehr speziell.

                      Der einfache Weg wäre gewesen.

                      Erste Aktion -30 (30 Minuten nach SonnenUntergang (SU))

                      Zweite Aktion -80 (80 Minuten nach SU)

                      Dritte Aktion -90 (90 Minuten nach SU)

                      usw.

                      Aber wer will schon "einfach" 😉

                      Dein "halbe Zeit, von SU bis Mitternacht" ist etwas tricky.

                      Was haben wir?

                      Ganzer Tag = 1440 Minuten

                      Von Mitternacht bis Mittag (12:00) = 720 Minuten

                      Von Mittag bis Mitternacht (24:00) = 720 Minuten

                      Das Blockly berechnet die Minuten relativ zum SonnenAufgang (MinutenSA) bzw. zum SonnenUntergang (MinutenSU)

                      Der jeweilige Astropunkt ist immer "0"

                      Das Script kennt immer nur die Minuten bis zum jeweiligen Astropunkt und die Minuten danach.

                      Beispiel:

                      SA ist 08:00 Uhr = 480 Minuten ab Mitternacht. Also der SA kommt in 480 Min.

                      Um 08:00 Uhr = 0 Minuten bis SA. Also es ist SonnenAufgang.

                      Um 09:00 Uhr = -60 ab SA. Also der Sonnenaufgang WAR vor 60 Minuten

                      Das gleiche Spiel bei SonnenUntergang (SU). Nur halt ab 12:00 bis 24:00.

                      Nun kommt der wichtige Teil für Deine "halbe Zeit".

                      Während "MinutenSA" aktiv ist hat "MinutenSU" den Wert 999.

                      Und umgekehrt.

                      Während MinutenSU aktiv ist hat "MinutenSA" den Wert 999.

                      Diese Umschaltung findet immer Mitternachts und Mittags statt.

                      Diese Umschaltung machen wir uns für Deine "halbe Zeit" zunutze.

                      Wenn Mittags MinutenSU von 999 auf z.B. 420 umspringt (SU wäre dann um 19:00),

                      merken wir uns diese Zahl.

                      Dann muss man nur noch etwas rechnen.

                      720 Minuten - 420 Minuten = 300 Minuten

                      300 Minuten / 2 = 150 Minuten = Bingo!! Deine "halbe Zeit"

                      Das ganze funktioniert aber nur wenn die Aktionen NACH SonnenUntergang ablaufen!!!

                      Für alle die noch nicht abgeschaltet haben, hier das Blockly 😄
                      147_beispiel.png

                      und Export:

                      ! ````
                      <xml xmlns="http://www.w3.org/1999/xhtml"><block type="create" id="S/9)3;v2CYj;Ka9q6WBl" x="-662" y="-287"><field name="NAME">Meine_Erste_Startzeit_In_Minuten_Nach_SU</field>
                      <next><block type="on_ext" id="rWtR~:mO9In}+^c(]]+2"><mutation items="1"></mutation>
                      <field name="CONDITION">ne</field>

                          <value name="OID0"><shadow type="field_oid" id="}i%zKjjPC;A+.=tZklY4"><field name="oid">javascript.0.MinutenSU</field></shadow></value> 
                          <statement name="STATEMENT"><block type="controls_if" id="k3T|tNR;1nx*qo(NJlsV"><mutation elseif="4"></mutation>
                              <value name="IF0"><block type="logic_compare" id="xKqHdpQ.dyoE_Y+*n|/!"><field name="OP">EQ</field>
                                  <value name="A"><block type="variables_get" id="kLIW(?fw%5+j[JbW3o:m"><field name="VAR">oldValue</field></block></value> 
                                  <value name="B"><block type="math_number" id="agD:BmAwJddJ[29VlqA/"><field name="NUM">999</field></block></value></block></value> 
                              <statement name="DO0"><block type="variables_set" id="?h0-t1ni}[lj}?06fup^"><field name="VAR">temp_Min_Bis_SU_gesamt</field>
                                  <value name="VALUE"><block type="get_value" id="@AM-#d^(@xX2hy2!86sg"><field name="ATTR">val</field>
                                      <field name="OID">javascript.0.MinutenSU</field></block></value> 
                                  <next><block type="variables_set" id="-0SeRg!#(^;B;fI!{tHA"><field name="VAR">temp_Min_Von_SU_bis_Mitternacht</field>
                                      <value name="VALUE"><block type="math_arithmetic" id="x)Pg6%5tlfeWU[%n+#pb"><field name="OP">MINUS</field>
                                          <value name="A"><shadow type="math_number" id="HUm~CTC1(tR4Vq6b1|d{"><field name="NUM">720</field></shadow></value> 
                                          <value name="B"><shadow type="math_number" id="wEMk:#?J?98,s|^9e]Up"><field name="NUM">1</field></shadow> 
                                            <block type="variables_get" id="v3dlkX]=KeQhIUt/2x5Y"><field name="VAR">temp_Min_Bis_SU_gesamt</field></block></value></block></value> 
                                      <next><block type="comment" id="o/_,C+8Q_9CqQJpW8_YP"><field name="COMMENT">Halbe Zeit bis Mitternacht</field>
                                          <next><block type="variables_set" id="o~Ti,{o9q5(*3ZIHC#MO"><field name="VAR">Start_2</field>
                                              <value name="VALUE"><block type="math_round" id="ohOLac9.W99l6S[lAvaT"><field name="OP">ROUND</field>
                                                  <value name="NUM"><shadow type="math_number" id="6AW|wMt*Z#U,!iS-R8Bi"><field name="NUM">3.1</field></shadow> 
                                                    <block type="math_arithmetic" id="U/[MDFy.g|v@Otic9Dc,"><field name="OP">DIVIDE</field>
                                                      <value name="A"><shadow type="math_number" id="w/~b:7ejf#v?}F~Q7XNs"><field name="NUM">1</field></shadow> 
                                                        <block type="variables_get" id="AB{bbNSf}CWZGS(^57WM"><field name="VAR">temp_Min_Von_SU_bis_Mitternacht</field></block></value> 
                                                      <value name="B"><shadow type="math_number" id="?A%6MG76WCAzxi5|n1]6"><field name="NUM">2</field></shadow></value></block></value></block></value> 
                                              <next><block type="comment" id="c#[z,h80jKm-Y~pafWA["><field name="COMMENT">Halbe Zeit bis Mitternacht + 10 Minuten</field>
                                                  <next><block type="variables_set" id="(Sj:2{kT+{t5P);C5]Ol"><field name="VAR">Start_3</field>
                                                      <value name="VALUE"><block type="math_arithmetic" id="s9O-31{VrSc0(L7=4cFT"><field name="OP">ADD</field>
                                                          <value name="A"><shadow type="math_number" id="y9|.YwZ(.EMH%tfcEK:P"><field name="NUM">1</field></shadow> 
                                                            <block type="variables_get" id="3dt0^g~RZ3Dwv50!mm(Z"><field name="VAR">Start_2</field></block></value> 
                                                          <value name="B"><shadow type="math_number" id="xgy6kvV*d@|4.{.hx(1C"><field name="NUM">-10</field></shadow></value></block></value></block></next></block></next></block></next></block></next></block></next></block></statement> 
                              <value name="IF1"><block type="logic_compare" id="?zX*L?C!GgsflULhnOt!"><field name="OP">EQ</field>
                                  <value name="A"><block type="get_value" id="algzvnMYXioxobuc3NMu"><field name="ATTR">val</field>
                                      <field name="OID">javascript.0.MinutenSU</field></block></value> 
                                  <value name="B"><block type="get_value" id="39!D3%^c`2P^R`%/[{2G"><field name="ATTR">val</field>
                                      <field name="OID">javascript.0.Meine_Erste_Startzeit_In_Minuten_Nach_SU</field></block></value></block></value> 
                              <statement name="DO1"><block type="comment" id="syVRCDU7sx26ZV9Kv@r+"><field name="COMMENT">1\. Aktion</field></block></statement> 
                              <value name="IF2"><block type="logic_compare" id="87J#|;ru(WWJ4r=;|aOf"><field name="OP">EQ</field>
                                  <value name="A"><block type="get_value" id="gY%6wst2P2tJ*G{J@Zhm"><field name="ATTR">val</field>
                                      <field name="OID">javascript.0.MinutenSU</field></block></value> 
                                  <value name="B"><block type="variables_get" id="+`qf7AWD@d@O3[-3%:%i"><field name="VAR">Start_2</field></block></value></block></value> 
                              <statement name="DO2"><block type="comment" id="AKW@,R#`^rb(Ob{4ITHL"><field name="COMMENT">2\. Aktion</field></block></statement> 
                              <value name="IF3"><block type="logic_compare" id="S@75dd]RYIti_F:/b`vS"><field name="OP">EQ</field>
                                  <value name="A"><block type="get_value" id="Cm1y:tcy(7)wmC@o+OvE"><field name="ATTR">val</field>
                                      <field name="OID">javascript.0.MinutenSU</field></block></value> 
                                  <value name="B"><block type="variables_get" id="do48sx2a6[a/xe,QMjuX"><field name="VAR">Start_3</field></block></value></block></value> 
                              <statement name="DO3"><block type="comment" id="q%X.efEs.M4yBu6LiJ5@"><field name="COMMENT">3\. Aktion</field></block></statement> 
                              <value name="IF4"><block type="logic_compare" id="N.1lrrvIHEFW%!honya`"><field name="OP">EQ</field>
                                  <value name="A"><block type="get_value" id="3[ou{)yFF*{s8,NfjC{#"><field name="ATTR">val</field>
                                      <field name="OID">javascript.0.MinutenSU</field></block></value> 
                                  <value name="B"><block type="math_number" id="Xg3U`-:,]]3f}x}*eSum"><field name="NUM">999</field></block></value></block></value> 
                              <statement name="DO4"><block type="comment" id=")l^M64Jt_.gi,!zdT]wx"><field name="COMMENT">4\. Aktion Es ist Mitternacht</field></block></statement></block></statement></block></next></block></xml> 
                      

                      ! ````

                      Grüße

                      1 Reply Last reply Reply Quote 0
                      • N
                        nibblerrick last edited by

                        Natuerlich tricky, einfach waere ja auch wirklich zu einfach, aber komm, die Lampen zur Haelfte der Zeit zu schalten ist auch echt cool.

                        Der Ansatz ist interessant, da waere ich so nicht drauf gekommen. Ich muss das die naechsten Tage testen (dies Wochenende und kommendes Wochenende ist vollgepackt, daher dauert es ein klein wenig gerade). Danke!

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

                          Danke für die Rückmeldung!

                          Grüße

                          1 Reply Last reply Reply Quote 0
                          • N
                            nibblerrick last edited by

                            Ich melde mich auch nochmal, wenn ich es definitiv ausprobiert habe.

                            1 Reply Last reply Reply Quote 0
                            • N
                              nibblerrick last edited by

                              Tach,

                              also es funktioniert noch nicht. Die 1. Aktien und die 4. funktionieren erwartungsgemaess.

                              2. und 3. jedoch nicht. Gestern zum Beispiel hatte ich die 2. Aktion um 12:58 und die 3. Aktion um 13:08.

                              Was mir beim Script auch noch nicht einleuchtet, ist "oldValue" eine bestimmte Systemvariable die abgefragt werden kann, wird die eigentlich nie gesetzt oder an einer Stelle die ich nicht sehe?

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

                                @nibblerrick:

                                also es funktioniert noch nicht. Die 1. Aktien und die 4. funktionieren erwartungsgemaess.

                                2. und 3. jedoch nicht. Gestern zum Beispiel hatte ich die 2. Aktion um 12:58 und die 3. Aktion um 13:08. `
                                Nun, was soll ich sagen? Habe meine Glaskugel verlegt.

                                Ein Screenshot und/oder Export wäre hilfreich.

                                @nibblerrick:

                                Was mir beim Script auch noch nicht einleuchtet, ist "oldValue" eine bestimmte Systemvariable die abgefragt werden kann, wird die eigentlich nie gesetzt oder an einer Stelle die ich nicht sehe? `
                                Dieser Baustein kommt aus der Trigger Abteilung.

                                Darin stehen Informationen über den ausgelösten Aktor. Klick mal auf das kleine Pfeilchen neben "oldValue".

                                "oldValue" hat den alten Wert VOR dem aktuellen Triggerwert.

                                Die Abfrage ist bei dem Konstrukt schon sehr wichtig!

                                Grüße

                                1 Reply Last reply Reply Quote 0
                                • N
                                  nibblerrick last edited by

                                  Du musst diese neuen E-Glaskugeln kaufen!

                                  Export habe ich nicht gemacht, da es einfach das ist, was du oben gepostet hast, deswegen wollte ich gerade nicht mit duplizierten Informationen rummuellen 🙂

                                  Klicke ich auf das Pfeilchen sehe ich die Variablenliste. D.h. "oldValue" ist immer festdefiniert und hat immer den vorigen Triggerwert und kann ohne speziell angelegt zu werden genutzt werden?

                                  Hier nochmal der Export:

                                  ! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
                                  ! <block type="create" id="S/9)3;v2CYj;Ka9q6WBl" x="-662" y="-287"><field name="NAME">Meine_Erste_Startzeit_In_Minuten_Nach_SU</field>
                                  ! <next><block type="on_ext" id="rWtR~:mO9In}+^c(]]+2"><mutation items="1"></mutation>
                                  ! <field name="CONDITION">ne</field>
                                  ! <value name="OID0"><shadow type="field_oid" id="}i%zKjjPC;A+.=tZklY4"><field name="oid">javascript.0.MinutenSU</field></shadow></value>
                                  ! <statement name="STATEMENT"><block type="controls_if" id="k3T|tNR;1nxqo(NJlsV"><mutation elseif="4"></mutation>
                                  ! <value name="IF0"><block type="logic_compare" id="xKqHdpQ.dyoE_Y+n|/!"><field name="OP">EQ</field>
                                  ! <value name="A"><block type="variables_get" id="kLIW(?fw%5+j[JbW3o:m"><field name="VAR">oldValue</field></block></value>
                                  ! <value name="B"><block type="math_number" id="agD:BmAwJddJ[29VlqA/"><field name="NUM">999</field></block></value></block></value>
                                  ! <statement name="DO0"><block type="variables_set" id="?h0-t1ni}[lj}?06fup^"><field name="VAR">temp_Min_Bis_SU_gesamt</field>
                                  ! <value name="VALUE"><block type="get_value" id="@AM-#d^(@xX2hy2!86sg"><field name="ATTR">val</field>
                                  ! <field name="OID">javascript.0.MinutenSU</field></block></value>
                                  ! <next><block type="variables_set" id="-0SeRg!#(^;B;fI!{tHA"><field name="VAR">temp_Min_Von_SU_bis_Mitternacht</field>
                                  ! <value name="VALUE"><block type="math_arithmetic" id="x)Pg6%5tlfeWU[%n+#pb"><field name="OP">MINUS</field>
                                  ! <value name="A"><shadow type="math_number" id="HUm~CTC1(tR4Vq6b1|d{"><field name="NUM">720</field></shadow></value>
                                  ! <value name="B"><shadow type="math_number" id="wEMk:#?J?98,s|^9e]Up"><field name="NUM">1</field></shadow>
                                  ! <block type="variables_get" id="v3dlkX]=KeQhIUt/2x5Y"><field name="VAR">temp_Min_Bis_SU_gesamt</field></block></value></block></value>
                                  ! <next><block type="comment" id="o/_,C+8Q_9CqQJpW8_YP"><field name="COMMENT">Halbe Zeit bis Mitternacht</field>
                                  ! <next><block type="variables_set" id="o~Ti,{o9q5(3ZIHC#MO"><field name="VAR">Start_2</field>
                                  ! <value name="VALUE"><block type="math_round" id="ohOLac9.W99l6S[lAvaT"><field name="OP">ROUND</field>
                                  ! <value name="NUM"><shadow type="math_number" id="6AW|wMt
                                  Z#U,!iS-R8Bi"><field name="NUM">3.1</field></shadow>
                                  ! <block type="math_arithmetic" id="U/[MDFy.g|v@Otic9Dc,"><field name="OP">DIVIDE</field>
                                  ! <value name="A"><shadow type="math_number" id="w/~b:7ejf#v?}F~Q7XNs"><field name="NUM">1</field></shadow>
                                  ! <block type="variables_get" id="AB{bbNSf}CWZGS(^57WM"><field name="VAR">temp_Min_Von_SU_bis_Mitternacht</field></block></value>
                                  ! <value name="B"><shadow type="math_number" id="?A%6MG76WCAzxi5|n1]6"><field name="NUM">2</field></shadow></value></block></value></block></value>
                                  ! <next><block type="comment" id="c#[z,h80jKm-Y~pafWA["><field name="COMMENT">Halbe Zeit bis Mitternacht + 10 Minuten</field>
                                  ! <next><block type="variables_set" id="(Sj:2{kT+{t5P);C5]Ol"><field name="VAR">Start_3</field>
                                  ! <value name="VALUE"><block type="math_arithmetic" id="s9O-31{VrSc0(L7=4cFT"><field name="OP">ADD</field>
                                  ! <value name="A"><shadow type="math_number" id="y9|.YwZ(.EMH%tfcEK:P"><field name="NUM">1</field></shadow>
                                  ! <block type="variables_get" id="3dt0^g~RZ3Dwv50!mm(Z"><field name="VAR">Start_2</field></block></value>
                                  ! <value name="B"><shadow type="math_number" id="xgy6kvV
                                  d@|4.{.hx(1C"><field name="NUM">-10</field></shadow></value></block></value></block></next></block></next></block></next></block></next></block></next></block></statement>
                                  ! <value name="IF1"><block type="logic_compare" id="?zX
                                  L?C!GgsflULhnOt!"><field name="OP">EQ</field>
                                  ! <value name="A"><block type="get_value" id="algzvnMYXioxobuc3NMu"><field name="ATTR">val</field>
                                  ! <field name="OID">javascript.0.MinutenSU</field></block></value>
                                  ! <value name="B"><block type="get_value" id="39!D3%^c2P^R%/[{2G"><field name="ATTR">val</field>
                                  ! <field name="OID">javascript.0.Meine_Erste_Startzeit_In_Minuten_Nach_SU</field></block></value></block></value>
                                  ! <statement name="DO1"><block type="comment" id="syVRCDU7sx26ZV9Kv@r+"><field name="COMMENT">1. Aktion</field>
                                  ! <next><block type="telegram" id="+#tC%WjZ;0R%o[CVyoV"><value name="MESSAGE"><shadow type="text" id="?g6~rD3Y1FBMjCnx7^p"><field name="TEXT">1. Aktion</field></shadow></value></block></next></block></statement>
                                  ! <value name="IF2"><block type="logic_compare" id="87J#|;ru(WWJ4r=;|aOf"><field name="OP">EQ</field>
                                  ! <value name="A"><block type="get_value" id="gY%6wst2P2tJG{J@Zhm"><field name="ATTR">val</field>
                                  ! <field name="OID">javascript.0.MinutenSU</field></block></value>
                                  ! <value name="B"><block type="variables_get" id="+qf7AWD@d@O3[-3%:%i"><field name="VAR">Start_2</field></block></value></block></value> ! <statement name="DO2"><block type="comment" id="AKW@,R#^rb(Ob{4ITHL"><field name="COMMENT">2. Aktion</field>
                                  ! <next><block type="telegram" id="3aE;Wmf]oAj35mkVU)Gg"><value name="MESSAGE"><shadow type="text" id="Af-.u?qxKpLWum3xNDi4"><field name="TEXT">2. Aktion</field></shadow></value></block></next></block></statement>
                                  ! <value name="IF3"><block type="logic_compare" id="S@75dd]RYIti_F:/bvS"><field name="OP">EQ</field> ! <value name="A"><block type="get_value" id="Cm1y:tcy(7)wmC@o+OvE"><field name="ATTR">val</field> ! <field name="OID">javascript.0.MinutenSU</field></block></value> ! <value name="B"><block type="variables_get" id="do48sx2a6[a/xe,QMjuX"><field name="VAR">Start_3</field></block></value></block></value> ! <statement name="DO3"><block type="comment" id="q%X.efEs.M4yBu6LiJ5@"><field name="COMMENT">3\. Aktion</field> ! <next><block type="telegram" id="};ACfe6c^:F1^=(+ob,M"><value name="MESSAGE"><shadow type="text" id="8*].Q_Kggfh+_zBo?u1k"><field name="TEXT">3\. Aktion</field></shadow></value></block></next></block></statement> ! <value name="IF4"><block type="logic_compare" id="N.1lrrvIHEFW%!honya"><field name="OP">EQ</field>
                                  ! <value name="A"><block type="get_value" id="3[ou{)yFF
                                  {s8,NfjC{#"><field name="ATTR">val</field>
                                  ! <field name="OID">javascript.0.MinutenSU</field></block></value>
                                  ! <value name="B"><block type="math_number" id="Xg3U`-:,]]3f}x}*eSum"><field name="NUM">999</field></block></value></block></value>
                                  ! <statement name="DO4"><block type="comment" id=")l^M64Jt_.gi,!zdT]wx"><field name="COMMENT">4. Aktion Es ist Mitternacht</field>
                                  ! <next><block type="telegram" id="M]:hi{WFw.UK9nhmAPSw"><value name="MESSAGE"><shadow type="text" id="^CrLnF|JVrZAoeD:k9w-"><field name="TEXT">4. Aktion</field></shadow></value></block></next></block></statement></block></statement></block></next></block></xml>
                                  3803_firefox_2017-11-14_20-56-53.png

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

                                    @nibblerrick:

                                    Klicke ich auf das Pfeilchen sehe ich die Variablenliste. D.h. "oldValue" ist immer festdefiniert und hat immer den vorigen Triggerwert und kann ohne speziell angelegt zu werden genutzt werden? `
                                    Ja, gilt aber nur innerhalb eines Triggers.

                                    So sieht die Liste normalerweise aus.
                                    147_beispiel.png

                                    Die Darstellung, die Du hast, habe ich auch. Kann ein Bug in Blockly sein.

                                    Muss ich mal überprüfen.

                                    Grüße

                                    1 Reply Last reply Reply Quote 0
                                    • N
                                      nibblerrick last edited by

                                      Oh, das ja geiler Scheiss!

                                      Gut, wenn du weisst, warum ich das nicht haben koennte machen wir weiter 😄

                                      Irgendeine Einstellung irgendwo ist das aber nicht, oder?

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

                                        Ich habe jetzt nochmal geschaut.

                                        Da muss was schief gelaufen sein!!!

                                        Schmeiss den Baustein mit "oldValue" raus und setzt den "Objekt ID" aus Trigger rein und wähle "vorheriger Wert" aus.

                                        Ich stelle mein System auch mal von deutsch auf englisch um. Da muss was schiefgegangen sein.

                                        Grüße

                                        1 Reply Last reply Reply Quote 0
                                        • N
                                          nibblerrick last edited by

                                          Gut, wenn man en/de zwischendurch tauscht kann das natuerlich mal lustige Sachen hervorbringen.

                                          Ich habe das jetzt gemacht, falls du irgendwo das passend mal mitgeben kannst, auf deutsch steht da vorherigeS Wert, vielleicht kann das irgendwann mal geaendert werden.

                                          Mir scheint, im Code sieht das nun auch sinnvoller aus und ich werde mal den naechsten Sonnenuntergang abwarten, den es wohl gibt, auch wenn man den bei der grauen Wolkendecke heute nicht sehen kann.

                                          Ich gebe nachher Bescheid.

                                          1 Reply Last reply Reply Quote 0
                                          • N
                                            nibblerrick last edited by

                                            Der hat vorhin schon wieder ausgeloest. Ich habe mal versucht, mir das zu Gemuete zu fuehren. Kann es sein, dass wir einmal falschrum rechnen bzw. ein Vorzeichenfehler haben?

                                            Minuten bis SU ist ja OK, dann kommt 720 - Minuten bis SU, was ja auch die Zeit von SU bis Mitternacht ist. Allerdings positiv.

                                            Um die Aktion entsprechend auszuloesen NACH Sonnenuntergang brauche ich aber doch negative Werte, also den gleichen Wert, allerdings mit Minus davor.

                                            Das erklaert doch auch, warum der das jetzt Nachmittags macht, weil der als positiven Wert es jetzt um die Zeit bis zum SU (also vorher) macht.

                                            Oder denke ich falsch? Ausprobiert habe ich es noch nicht jetzt, sag mal deine Meinung dazu.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            713
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly template
                                            10
                                            49
                                            12661
                                            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