Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Einfache Heizungsreglung

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    335

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    301

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    930

Einfache Heizungsreglung

Geplant Angeheftet Gesperrt Verschoben Blockly
60 Beiträge 8 Kommentatoren 2.5k Aufrufe 6 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    Mr.Kan1ster
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,
    Ich scheine nichtmal die Grundlagen von blockly zu verstehen, denn ich scheitere schon am einfachsten Vergleich 2er Werte.
    Ich versuche mich mal direkt an die Anfoderungen der anderen Posts zu halten und nicht lange zu schwafeln.

    Was ich versuche:
    Falls sich die IST-Temperatur geändert hat
    Vergleiche IST-Temperatur mit statischem Sollwert
    Falls IST-Temp < Sollwert, mache das Ventil der Fußbodenheizung auf (Pulsweitenmodulation nutzt % also) 100
    Sonst mache das Ventil zu, also 0%

    Ich sehe im ETS Busmonitor, dass jedes Mal wenn sich die IST-Temp ändert direkt eine Reaktion vom Skript folgt.
    Leider ist es IMMER der "Sonst" weg.
    Das ganze Ding aufbohren mit Fensterkontakt und Sommer Winterzeit, versuche ich erst gar nicht. Ich möchte nur, dass er wie ein richtiger Regler den vergleich macht, und den Wert an das Ventil sendet.

    Hier der Screenshot, darunder der Export.
    755b6a9d-d4d3-4ec9-b1c7-01a96c3bbc33-image.png

    <xml xmlns="https://developers.google.com/blockly/xml">
      <variables>
        <variable id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</variable>
      </variables>
      <block type="variables_set" id=":zeA?20y*Tg3gh6l`#XY" x="-563" y="-612">
        <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
        <value name="VALUE">
          <block type="math_number" id="}{p#)E;:IVfY|{NKnc0P">
            <field name="NUM">22</field>
          </block>
        </value>
        <next>
          <block type="on" id="+@5PayeP*}[`W31?Hn9m">
            <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
            <field name="CONDITION">ne</field>
            <field name="ACK_CONDITION"></field>
            <statement name="STATEMENT">
              <block type="controls_if" id="UJBeFU58ERJkbQ]G#7zS">
                <mutation else="1"></mutation>
                <value name="IF0">
                  <block type="logic_compare" id="@_YREWj:WhZ0.UT#cR6d">
                    <field name="OP">LT</field>
                    <value name="A">
                      <block type="get_object" id="p(@zMuDhRpcba}`cKLcO">
                        <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="variables_get" id="t7Gy8=I2]G.0|MAwe-)k">
                        <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                      </block>
                    </value>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="control" id="^zZ%fU{gsn*t?UaV@uGE">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="math_number" id="VScSGUvke6=C4GFD/kzX">
                        <field name="NUM">100</field>
                      </block>
                    </value>
                  </block>
                </statement>
                <statement name="ELSE">
                  <block type="control" id="{[cGXUC!mAzH}G{cNBw]">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="math_number" id="ykWReqRYOeReqcXFl~*9">
                        <field name="NUM">0</field>
                      </block>
                    </value>
                  </block>
                </statement>
              </block>
            </statement>
          </block>
        </next>
      </block>
    </xml>
    
    
    W paul53P R 3 Antworten Letzte Antwort
    0
    • M Mr.Kan1ster

      Hallo zusammen,
      Ich scheine nichtmal die Grundlagen von blockly zu verstehen, denn ich scheitere schon am einfachsten Vergleich 2er Werte.
      Ich versuche mich mal direkt an die Anfoderungen der anderen Posts zu halten und nicht lange zu schwafeln.

      Was ich versuche:
      Falls sich die IST-Temperatur geändert hat
      Vergleiche IST-Temperatur mit statischem Sollwert
      Falls IST-Temp < Sollwert, mache das Ventil der Fußbodenheizung auf (Pulsweitenmodulation nutzt % also) 100
      Sonst mache das Ventil zu, also 0%

      Ich sehe im ETS Busmonitor, dass jedes Mal wenn sich die IST-Temp ändert direkt eine Reaktion vom Skript folgt.
      Leider ist es IMMER der "Sonst" weg.
      Das ganze Ding aufbohren mit Fensterkontakt und Sommer Winterzeit, versuche ich erst gar nicht. Ich möchte nur, dass er wie ein richtiger Regler den vergleich macht, und den Wert an das Ventil sendet.

      Hier der Screenshot, darunder der Export.
      755b6a9d-d4d3-4ec9-b1c7-01a96c3bbc33-image.png

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</variable>
        </variables>
        <block type="variables_set" id=":zeA?20y*Tg3gh6l`#XY" x="-563" y="-612">
          <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
          <value name="VALUE">
            <block type="math_number" id="}{p#)E;:IVfY|{NKnc0P">
              <field name="NUM">22</field>
            </block>
          </value>
          <next>
            <block type="on" id="+@5PayeP*}[`W31?Hn9m">
              <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
              <field name="CONDITION">ne</field>
              <field name="ACK_CONDITION"></field>
              <statement name="STATEMENT">
                <block type="controls_if" id="UJBeFU58ERJkbQ]G#7zS">
                  <mutation else="1"></mutation>
                  <value name="IF0">
                    <block type="logic_compare" id="@_YREWj:WhZ0.UT#cR6d">
                      <field name="OP">LT</field>
                      <value name="A">
                        <block type="get_object" id="p(@zMuDhRpcba}`cKLcO">
                          <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
                        </block>
                      </value>
                      <value name="B">
                        <block type="variables_get" id="t7Gy8=I2]G.0|MAwe-)k">
                          <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <statement name="DO0">
                    <block type="control" id="^zZ%fU{gsn*t?UaV@uGE">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="math_number" id="VScSGUvke6=C4GFD/kzX">
                          <field name="NUM">100</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                  <statement name="ELSE">
                    <block type="control" id="{[cGXUC!mAzH}G{cNBw]">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="math_number" id="ykWReqRYOeReqcXFl~*9">
                          <field name="NUM">0</field>
                        </block>
                      </value>
                    </block>
                  </statement>
                </block>
              </statement>
            </block>
          </next>
        </block>
      </xml>
      
      
      W Online
      W Online
      Wildbill
      schrieb am zuletzt editiert von
      #2

      @mr-kan1ster Ist der Datenpunkt Isttemperatur Kind2 (BTW, Leerzeichen bei Datenpunkten sind immer Käse!) eventuell keine Zahl, sondern kommt als String an? Dann müsstest Du den vorher im Blockly noch in eine Zahl umwandeln.
      Zeig halt mal das Objekt, wie es aussieht.

      Gruss, Jürgen

      M 1 Antwort Letzte Antwort
      0
      • W Wildbill

        @mr-kan1ster Ist der Datenpunkt Isttemperatur Kind2 (BTW, Leerzeichen bei Datenpunkten sind immer Käse!) eventuell keine Zahl, sondern kommt als String an? Dann müsstest Du den vorher im Blockly noch in eine Zahl umwandeln.
        Zeig halt mal das Objekt, wie es aussieht.

        Gruss, Jürgen

        M Offline
        M Offline
        Mr.Kan1ster
        schrieb am zuletzt editiert von
        #3

        @wildbill

        Wie zeige ich dir denn das Objekt?
        6ec5aaf1-af9f-4447-8060-2bb67e1a21d5-image.png

        So?
        Und danke für den Tip mit dem Leerzeichen. Die ganze ETS Installation erschlägt mich noch, aber ich werde das direkt mal anpassen.

        CodierknechtC W 2 Antworten Letzte Antwort
        0
        • M Mr.Kan1ster

          @wildbill

          Wie zeige ich dir denn das Objekt?
          6ec5aaf1-af9f-4447-8060-2bb67e1a21d5-image.png

          So?
          Und danke für den Tip mit dem Leerzeichen. Die ganze ETS Installation erschlägt mich noch, aber ich werde das direkt mal anpassen.

          CodierknechtC Online
          CodierknechtC Online
          Codierknecht
          Developer Most Active
          schrieb am zuletzt editiert von
          #4

          @mr-kan1ster
          Im Expertenmodus siehst Du rechts neben dem Objekt einen Stift.
          Darauf klicken und dann die "Objektdaten" hier posten. In Code-Tags </> !!!

          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
          HmIP|ZigBee|Tasmota|Unifi
          Zabbix Certified Specialist
          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

          1 Antwort Letzte Antwort
          0
          • M Mr.Kan1ster

            @wildbill

            Wie zeige ich dir denn das Objekt?
            6ec5aaf1-af9f-4447-8060-2bb67e1a21d5-image.png

            So?
            Und danke für den Tip mit dem Leerzeichen. Die ganze ETS Installation erschlägt mich noch, aber ich werde das direkt mal anpassen.

            W Online
            W Online
            Wildbill
            schrieb am zuletzt editiert von Wildbill
            #5

            @mr-kan1ster Wenn Du ganz oben links mal auf den Kopf klickst und den Expertenmodus einschaltest, erscheint hinten beim Wert noch so ein Bleistiftsymbol. Da klickst Du mal drauf und zeigst das hier. Dann sieht man, woraus das Objekt besteht.
            Anschließend den Expertenmodus aber SOFORT wieder ausschaten!

            BTW: Je früher Du anfängst, die Leerzeichen aus allem zu verbannen, desto weniger Aufwand hast Du später, das in allen Scripten, VIS usw. geradezuzehen. Also auch am Besten sofort.

            Gruss, Jürgen

            EDIT: Ich sehe, der Datenpunkt hat vorne kein Leerzeichen, sondern einen Unterstrich. Das wäre dann auch OK!

            1 Antwort Letzte Antwort
            0
            • CodierknechtC Online
              CodierknechtC Online
              Codierknecht
              Developer Most Active
              schrieb am zuletzt editiert von Codierknecht
              #6

              @Mr-Kan1ster
              Grundsätzlich gilt: Leer- und Sonderzeichen sind böse (Ausnahme: Unter- und Bindestrich).
              Umlaute sind ganz ganz böse.

              Das gilt für Objekt-ID's und auch für Variablen- und Methodennamen bei der Programmierung (dort ist wieder der Bindestrich böse - also gleich wieder vergessen).

              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
              HmIP|ZigBee|Tasmota|Unifi
              Zabbix Certified Specialist
              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

              1 Antwort Letzte Antwort
              0
              • M Mr.Kan1ster

                Hallo zusammen,
                Ich scheine nichtmal die Grundlagen von blockly zu verstehen, denn ich scheitere schon am einfachsten Vergleich 2er Werte.
                Ich versuche mich mal direkt an die Anfoderungen der anderen Posts zu halten und nicht lange zu schwafeln.

                Was ich versuche:
                Falls sich die IST-Temperatur geändert hat
                Vergleiche IST-Temperatur mit statischem Sollwert
                Falls IST-Temp < Sollwert, mache das Ventil der Fußbodenheizung auf (Pulsweitenmodulation nutzt % also) 100
                Sonst mache das Ventil zu, also 0%

                Ich sehe im ETS Busmonitor, dass jedes Mal wenn sich die IST-Temp ändert direkt eine Reaktion vom Skript folgt.
                Leider ist es IMMER der "Sonst" weg.
                Das ganze Ding aufbohren mit Fensterkontakt und Sommer Winterzeit, versuche ich erst gar nicht. Ich möchte nur, dass er wie ein richtiger Regler den vergleich macht, und den Wert an das Ventil sendet.

                Hier der Screenshot, darunder der Export.
                755b6a9d-d4d3-4ec9-b1c7-01a96c3bbc33-image.png

                <xml xmlns="https://developers.google.com/blockly/xml">
                  <variables>
                    <variable id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</variable>
                  </variables>
                  <block type="variables_set" id=":zeA?20y*Tg3gh6l`#XY" x="-563" y="-612">
                    <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                    <value name="VALUE">
                      <block type="math_number" id="}{p#)E;:IVfY|{NKnc0P">
                        <field name="NUM">22</field>
                      </block>
                    </value>
                    <next>
                      <block type="on" id="+@5PayeP*}[`W31?Hn9m">
                        <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
                        <field name="CONDITION">ne</field>
                        <field name="ACK_CONDITION"></field>
                        <statement name="STATEMENT">
                          <block type="controls_if" id="UJBeFU58ERJkbQ]G#7zS">
                            <mutation else="1"></mutation>
                            <value name="IF0">
                              <block type="logic_compare" id="@_YREWj:WhZ0.UT#cR6d">
                                <field name="OP">LT</field>
                                <value name="A">
                                  <block type="get_object" id="p(@zMuDhRpcba}`cKLcO">
                                    <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
                                  </block>
                                </value>
                                <value name="B">
                                  <block type="variables_get" id="t7Gy8=I2]G.0|MAwe-)k">
                                    <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <statement name="DO0">
                              <block type="control" id="^zZ%fU{gsn*t?UaV@uGE">
                                <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                                <field name="WITH_DELAY">FALSE</field>
                                <value name="VALUE">
                                  <block type="math_number" id="VScSGUvke6=C4GFD/kzX">
                                    <field name="NUM">100</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                            <statement name="ELSE">
                              <block type="control" id="{[cGXUC!mAzH}G{cNBw]">
                                <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                                <field name="WITH_DELAY">FALSE</field>
                                <value name="VALUE">
                                  <block type="math_number" id="ykWReqRYOeReqcXFl~*9">
                                    <field name="NUM">0</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                          </block>
                        </statement>
                      </block>
                    </next>
                  </block>
                </xml>
                
                
                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @mr-kan1ster
                Du vergleichst den Sollwert mit einem Objekt - nicht mit einem Zahlenwert.
                Außerdem sollte ein Zweipunkt-Regler immer eine Hysterese haben, damit im Grenzbereich nicht ständig geschaltet wird.

                Blockly_temp.JPG

                <xml xmlns="https://developers.google.com/blockly/xml">
                 <variables>
                   <variable id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</variable>
                   <variable id="${wtJ;M#@9#.+s)/(.Hx">ventil</variable>
                 </variables>
                 <block type="variables_set" id=":zeA?20y*Tg3gh6l`#XY" x="-563" y="-612">
                   <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                   <value name="VALUE">
                     <block type="math_number" id="}{p#)E;:IVfY|{NKnc0P">
                       <field name="NUM">22</field>
                     </block>
                   </value>
                   <next>
                     <block type="variables_set" id="Ig]Ov_oVEUU#_nZgDIyD">
                       <field name="VAR" id="${wtJ;M#@9#.+s)/(.Hx">ventil</field>
                       <value name="VALUE">
                         <block type="get_value_var" id="T60^gU|A4%nl{o3s%*Pd">
                           <field name="ATTR">val</field>
                           <value name="OID">
                             <shadow type="field_oid" id="D?j8qM[*:~kmXTt9z`,Q">
                               <field name="oid">Object ID</field>
                             </shadow>
                             <block type="text" id="|0ONG0BC|O]~[gsq]!X:">
                               <field name="TEXT">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                             </block>
                           </value>
                         </block>
                       </value>
                       <next>
                         <block type="on" id="+@5PayeP*}[`W31?Hn9m">
                           <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
                           <field name="CONDITION">ne</field>
                           <field name="ACK_CONDITION"></field>
                           <statement name="STATEMENT">
                             <block type="controls_if" id="UJBeFU58ERJkbQ]G#7zS">
                               <mutation elseif="1"></mutation>
                               <value name="IF0">
                                 <block type="logic_compare" id="@_YREWj:WhZ0.UT#cR6d">
                                   <field name="OP">LT</field>
                                   <value name="A">
                                     <block type="on_source" id="Jc5_X=JfO?o:s3-dx6%(">
                                       <field name="ATTR">state.val</field>
                                     </block>
                                   </value>
                                   <value name="B">
                                     <block type="variables_get" id="t7Gy8=I2]G.0|MAwe-)k">
                                       <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                               <statement name="DO0">
                                 <block type="variables_set" id="hG=Flo5WG*wOekv|/npx">
                                   <field name="VAR" id="${wtJ;M#@9#.+s)/(.Hx">ventil</field>
                                   <value name="VALUE">
                                     <block type="math_number" id="VScSGUvke6=C4GFD/kzX">
                                       <field name="NUM">100</field>
                                     </block>
                                   </value>
                                 </block>
                               </statement>
                               <value name="IF1">
                                 <block type="logic_compare" id="z%a^kJ{GZ0j@$k44[p-q">
                                   <field name="OP">GTE</field>
                                   <value name="A">
                                     <block type="on_source" id="9s,}5N8J41sEGO#XdH7;">
                                       <field name="ATTR">state.val</field>
                                     </block>
                                   </value>
                                   <value name="B">
                                     <block type="math_arithmetic" id="h8fIk@.[et~ZH]|}+eg)">
                                       <field name="OP">ADD</field>
                                       <value name="A">
                                         <shadow type="math_number" id="{}alCLNT6Htf{jzb#P(V">
                                           <field name="NUM">1</field>
                                         </shadow>
                                         <block type="variables_get" id="CS(=!J=$V?H^Ht/}-;MI">
                                           <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                                         </block>
                                       </value>
                                       <value name="B">
                                         <shadow type="math_number" id="]ri{sIm3E/1%DR(.[}]q">
                                           <field name="NUM">0.5</field>
                                         </shadow>
                                       </value>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                               <statement name="DO1">
                                 <block type="variables_set" id="4X:gNIjPO+XZdt4xzXFP">
                                   <field name="VAR" id="${wtJ;M#@9#.+s)/(.Hx">ventil</field>
                                   <value name="VALUE">
                                     <block type="math_number" id="ykWReqRYOeReqcXFl~*9">
                                       <field name="NUM">0</field>
                                     </block>
                                   </value>
                                 </block>
                               </statement>
                               <next>
                                 <block type="controls_if" id="qV70I!OxDm2N2Q,nhaq4">
                                   <value name="IF0">
                                     <block type="logic_compare" id="w{k^gDE)CH7|_*$UVL$!">
                                       <field name="OP">NEQ</field>
                                       <value name="A">
                                         <block type="variables_get" id="Y_YAv#,[Cb8WrRiahZ.5">
                                           <field name="VAR" id="${wtJ;M#@9#.+s)/(.Hx">ventil</field>
                                         </block>
                                       </value>
                                       <value name="B">
                                         <block type="get_value_var" id="C9GoY#9QEp(V;_7UCJ*g">
                                           <field name="ATTR">val</field>
                                           <value name="OID">
                                             <shadow type="field_oid" id="D?j8qM[*:~kmXTt9z`,Q">
                                               <field name="oid">Object ID</field>
                                             </shadow>
                                             <block type="text" id="?b!A^SG4=jh]031(0YOa">
                                               <field name="TEXT">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <statement name="DO0">
                                     <block type="control" id="{[cGXUC!mAzH}G{cNBw]">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                       <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                                       <field name="WITH_DELAY">FALSE</field>
                                       <value name="VALUE">
                                         <block type="variables_get" id="PJN`IJrhZH{c;(-E+)/c">
                                           <field name="VAR" id="${wtJ;M#@9#.+s)/(.Hx">ventil</field>
                                         </block>
                                       </value>
                                     </block>
                                   </statement>
                                 </block>
                               </next>
                             </block>
                           </statement>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
                </xml>
                

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                M 1 Antwort Letzte Antwort
                0
                • M Mr.Kan1ster

                  Hallo zusammen,
                  Ich scheine nichtmal die Grundlagen von blockly zu verstehen, denn ich scheitere schon am einfachsten Vergleich 2er Werte.
                  Ich versuche mich mal direkt an die Anfoderungen der anderen Posts zu halten und nicht lange zu schwafeln.

                  Was ich versuche:
                  Falls sich die IST-Temperatur geändert hat
                  Vergleiche IST-Temperatur mit statischem Sollwert
                  Falls IST-Temp < Sollwert, mache das Ventil der Fußbodenheizung auf (Pulsweitenmodulation nutzt % also) 100
                  Sonst mache das Ventil zu, also 0%

                  Ich sehe im ETS Busmonitor, dass jedes Mal wenn sich die IST-Temp ändert direkt eine Reaktion vom Skript folgt.
                  Leider ist es IMMER der "Sonst" weg.
                  Das ganze Ding aufbohren mit Fensterkontakt und Sommer Winterzeit, versuche ich erst gar nicht. Ich möchte nur, dass er wie ein richtiger Regler den vergleich macht, und den Wert an das Ventil sendet.

                  Hier der Screenshot, darunder der Export.
                  755b6a9d-d4d3-4ec9-b1c7-01a96c3bbc33-image.png

                  <xml xmlns="https://developers.google.com/blockly/xml">
                    <variables>
                      <variable id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</variable>
                    </variables>
                    <block type="variables_set" id=":zeA?20y*Tg3gh6l`#XY" x="-563" y="-612">
                      <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                      <value name="VALUE">
                        <block type="math_number" id="}{p#)E;:IVfY|{NKnc0P">
                          <field name="NUM">22</field>
                        </block>
                      </value>
                      <next>
                        <block type="on" id="+@5PayeP*}[`W31?Hn9m">
                          <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
                          <field name="CONDITION">ne</field>
                          <field name="ACK_CONDITION"></field>
                          <statement name="STATEMENT">
                            <block type="controls_if" id="UJBeFU58ERJkbQ]G#7zS">
                              <mutation else="1"></mutation>
                              <value name="IF0">
                                <block type="logic_compare" id="@_YREWj:WhZ0.UT#cR6d">
                                  <field name="OP">LT</field>
                                  <value name="A">
                                    <block type="get_object" id="p(@zMuDhRpcba}`cKLcO">
                                      <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.Isttemperatur_Kind2</field>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <block type="variables_get" id="t7Gy8=I2]G.0|MAwe-)k">
                                      <field name="VAR" id="(@L{1Dm:]ck~khb(y:~y">Solltemp Kind2</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <statement name="DO0">
                                <block type="control" id="^zZ%fU{gsn*t?UaV@uGE">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                  <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="math_number" id="VScSGUvke6=C4GFD/kzX">
                                      <field name="NUM">100</field>
                                    </block>
                                  </value>
                                </block>
                              </statement>
                              <statement name="ELSE">
                                <block type="control" id="{[cGXUC!mAzH}G{cNBw]">
                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                  <field name="OID">openknx.0.Kinderzimmer_2.Heizung_Kind_2.schaltende_Stellgröße_Kind2</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE">
                                    <block type="math_number" id="ykWReqRYOeReqcXFl~*9">
                                      <field name="NUM">0</field>
                                    </block>
                                  </value>
                                </block>
                              </statement>
                            </block>
                          </statement>
                        </block>
                      </next>
                    </block>
                  </xml>
                  
                  
                  R Offline
                  R Offline
                  Rico Sander
                  schrieb am zuletzt editiert von
                  #8

                  @mr-kan1ster
                  Meine einfache Zweipunktregelung sieht so aus:
                  hzg..jpg

                  Wenn die Temperatur unter 3.1°C sinkt, schalte Heizlüfter ein.
                  Steigt sie auf über 3.6°C schalte Heizlüfter ab.

                  Die gewählten Temperaturen gewährleisten im Zusammenhang mit der thermischen Trägheit des Raumes, dass das System nicht anfängt zu schwingen.

                  Wenns nicht geht, wie man will
                  - muss mans tun, wie man kann.
                  CodierknechtC MartinPM 2 Antworten Letzte Antwort
                  0
                  • R Rico Sander

                    @mr-kan1ster
                    Meine einfache Zweipunktregelung sieht so aus:
                    hzg..jpg

                    Wenn die Temperatur unter 3.1°C sinkt, schalte Heizlüfter ein.
                    Steigt sie auf über 3.6°C schalte Heizlüfter ab.

                    Die gewählten Temperaturen gewährleisten im Zusammenhang mit der thermischen Trägheit des Raumes, dass das System nicht anfängt zu schwingen.

                    CodierknechtC Online
                    CodierknechtC Online
                    Codierknecht
                    Developer Most Active
                    schrieb am zuletzt editiert von
                    #9

                    @pi-ter
                    Du solltest dann aber "Wert" nehmen und nicht den Wert noch 2x lesen.

                    885cf3d1-f66f-4db4-be58-443c1b611da3-image.png

                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                    HmIP|ZigBee|Tasmota|Unifi
                    Zabbix Certified Specialist
                    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                    R 1 Antwort Letzte Antwort
                    1
                    • CodierknechtC Codierknecht

                      @pi-ter
                      Du solltest dann aber "Wert" nehmen und nicht den Wert noch 2x lesen.

                      885cf3d1-f66f-4db4-be58-443c1b611da3-image.png

                      R Offline
                      R Offline
                      Rico Sander
                      schrieb am zuletzt editiert von
                      #10

                      @codierknecht
                      ah, ok... danke für den Tipp.

                      Wenns nicht geht, wie man will
                      - muss mans tun, wie man kann.
                      DJMarc75D 1 Antwort Letzte Antwort
                      0
                      • R Rico Sander

                        @mr-kan1ster
                        Meine einfache Zweipunktregelung sieht so aus:
                        hzg..jpg

                        Wenn die Temperatur unter 3.1°C sinkt, schalte Heizlüfter ein.
                        Steigt sie auf über 3.6°C schalte Heizlüfter ab.

                        Die gewählten Temperaturen gewährleisten im Zusammenhang mit der thermischen Trägheit des Raumes, dass das System nicht anfängt zu schwingen.

                        MartinPM Online
                        MartinPM Online
                        MartinP
                        schrieb am zuletzt editiert von MartinP
                        #11

                        @pi-ter Ich arbeite bei meinem Regler mit einer Hysterese von +/- 0,15°C um die Solltemperatur, also 0,3 Grad Schwankungsbreite. Auch das ist mir eigentlich zu viel. Wenn sich die Temperatur im Raum der Einschaltschwelle am unteren Rand der Hysterese nähert, fange ich auch an zu frösteln... Vielleicht bin ich auch eine Frostbeule ...

                        Da der Regler als "Spezial Firmware" eines ESP8266 D1 Mini läuft, habe ich die Solltemperatur und die Hysterese (+/-) als Datenpunkt herausgeführt, weil ich auch Angst vor Schwingungen hatte, und deshalb schnell eingreifen wollte, ohne gleich eine neue Firmware in den ESP hochladen zu müssen ..

                        7263bb70-20c1-456c-ac06-5297c61c75c3-grafik.png

                        "Schwingungen" habe ich nicht beobachtet ... kommt aber wahrscheinlich auch auf den Temperatursensor an. Ich habe einen im Metallröhrchen konfektionieren DS18B20 im Einsatz. (Shelly https://www.pollin.de/p/shelly-temperatursensor-ds18b20-591021)

                        Wenn der Sensor stärker schwankende Temperatur-Messwerte bei eigentlich gleichbleibender Temperatur zeigen würde ("Rauschen") müsste man natürlich die Hysterese weiter, als das Rauschband des Sensors stellen...

                        Schwing-Probleme habe ich nicht...

                        633919a6-ad6e-4891-be50-877c2bc24989-grafik.png

                        Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                        Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
                        Linux pve 6.17.9-1-pve
                        6 GByte RAM für den Container
                        Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
                        Remote-Access über Wireguard der Fritzbox

                        1 Antwort Letzte Antwort
                        0
                        • R Rico Sander

                          @codierknecht
                          ah, ok... danke für den Tipp.

                          DJMarc75D Offline
                          DJMarc75D Offline
                          DJMarc75
                          schrieb am zuletzt editiert von
                          #12

                          @pi-ter kuck mal :)
                          Screenshot 2023-11-23 164707.png

                          Lehrling seit 1975 !!!
                          Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                          https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                          paul53P R 4 Antworten Letzte Antwort
                          1
                          • DJMarc75D DJMarc75

                            @pi-ter kuck mal :)
                            Screenshot 2023-11-23 164707.png

                            paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von
                            #13

                            @djmarc75 sagte: kuck mal

                            Das verhindert zwar unnötiges Senden, verwendet aber zweimal die sehr komplexe Funktion "steuere" für den selben DP.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Antwort Letzte Antwort
                            0
                            • DJMarc75D DJMarc75

                              @pi-ter kuck mal :)
                              Screenshot 2023-11-23 164707.png

                              R Offline
                              R Offline
                              Rico Sander
                              schrieb am zuletzt editiert von
                              #14

                              @djmarc75
                              Das sieht nach einer ziemlich ausgeklügelten Lösung aus, ich verstehe nur nicht, was daran einfacher/besser/effektiver ist als mein (nach @Codierknecht 's Vorschlag geänderter) Wenigzeiler.

                              Dass man die Werte des Sensors nicht mehrfach lesen muss, habe ich verstanden. Das ist einleuchtend.
                              Für mich sieht Dein Beispiel recht aufwändig aus.
                              Kläre / klärt mich auf :-)

                              VG
                              Peter

                              Wenns nicht geht, wie man will
                              - muss mans tun, wie man kann.
                              1 Antwort Letzte Antwort
                              0
                              • MartinPM Online
                                MartinPM Online
                                MartinP
                                schrieb am zuletzt editiert von MartinP
                                #15

                                @paul53 "steuere" sollte man schon verwenden, wenn es darum geht, dass die Änderung auch im Gerät ankommt... Nur wenn es egal ist, ob das Gerät auch den Wert bekommt, reicht auch ein "aktualisiere"... Bei jedem "wurde geändert" Trigger wird ja maximal ein "steuere" Aufruf auch wirklich durchlaufen.

                                Wird doch hier diskutiert https://forum.iobroker.net/topic/5787/blockly-unterschied-zwischen-steuere-und-aktualisiere

                                Der Komplexitäts-Unterschied auf Javascript-Ebene ist jedenfalls nicht besonders groß wenn man sich den erzeugten Code so anschaut ...

                                Hier ein "aktualisiere" Block (Wert auf false, Bestätigt auf true)

                                setState('0_userdata.0.Heizung.Nachtabsenkung' /* Nachtabsenkung */, false, true);
                                

                                Und hier eine "steuere" Block (Wert auf 18.7, Bestätigt durch implizite Parametrierung auf false (darum muss sich das Gerät kümmern)

                                setState('mqtt.0.thermostat.desired.temperature' /* thermostat/desired/temperature */, 18.7);
                                

                                Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                                Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
                                Linux pve 6.17.9-1-pve
                                6 GByte RAM für den Container
                                Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
                                Remote-Access über Wireguard der Fritzbox

                                DJMarc75D HomoranH paul53P 3 Antworten Letzte Antwort
                                0
                                • MartinPM MartinP

                                  @paul53 "steuere" sollte man schon verwenden, wenn es darum geht, dass die Änderung auch im Gerät ankommt... Nur wenn es egal ist, ob das Gerät auch den Wert bekommt, reicht auch ein "aktualisiere"... Bei jedem "wurde geändert" Trigger wird ja maximal ein "steuere" Aufruf auch wirklich durchlaufen.

                                  Wird doch hier diskutiert https://forum.iobroker.net/topic/5787/blockly-unterschied-zwischen-steuere-und-aktualisiere

                                  Der Komplexitäts-Unterschied auf Javascript-Ebene ist jedenfalls nicht besonders groß wenn man sich den erzeugten Code so anschaut ...

                                  Hier ein "aktualisiere" Block (Wert auf false, Bestätigt auf true)

                                  setState('0_userdata.0.Heizung.Nachtabsenkung' /* Nachtabsenkung */, false, true);
                                  

                                  Und hier eine "steuere" Block (Wert auf 18.7, Bestätigt durch implizite Parametrierung auf false (darum muss sich das Gerät kümmern)

                                  setState('mqtt.0.thermostat.desired.temperature' /* thermostat/desired/temperature */, 18.7);
                                  
                                  DJMarc75D Offline
                                  DJMarc75D Offline
                                  DJMarc75
                                  schrieb am zuletzt editiert von DJMarc75
                                  #16

                                  ... hier stand Quatsch :)

                                  Lehrling seit 1975 !!!
                                  Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                                  https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                                  MartinPM 1 Antwort Letzte Antwort
                                  0
                                  • DJMarc75D DJMarc75

                                    ... hier stand Quatsch :)

                                    MartinPM Online
                                    MartinPM Online
                                    MartinP
                                    schrieb am zuletzt editiert von
                                    #17

                                    @djmarc75 Ist die Frage, ob ich @paul53 richtig verstanden habe.
                                    Aber auch wenn der "steuere" Aufruf schon einige Abläufe auslöst ist das "steuere" hier unvermeidlich

                                    Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                                    Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
                                    Linux pve 6.17.9-1-pve
                                    6 GByte RAM für den Container
                                    Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
                                    Remote-Access über Wireguard der Fritzbox

                                    1 Antwort Letzte Antwort
                                    0
                                    • MartinPM MartinP

                                      @paul53 "steuere" sollte man schon verwenden, wenn es darum geht, dass die Änderung auch im Gerät ankommt... Nur wenn es egal ist, ob das Gerät auch den Wert bekommt, reicht auch ein "aktualisiere"... Bei jedem "wurde geändert" Trigger wird ja maximal ein "steuere" Aufruf auch wirklich durchlaufen.

                                      Wird doch hier diskutiert https://forum.iobroker.net/topic/5787/blockly-unterschied-zwischen-steuere-und-aktualisiere

                                      Der Komplexitäts-Unterschied auf Javascript-Ebene ist jedenfalls nicht besonders groß wenn man sich den erzeugten Code so anschaut ...

                                      Hier ein "aktualisiere" Block (Wert auf false, Bestätigt auf true)

                                      setState('0_userdata.0.Heizung.Nachtabsenkung' /* Nachtabsenkung */, false, true);
                                      

                                      Und hier eine "steuere" Block (Wert auf 18.7, Bestätigt durch implizite Parametrierung auf false (darum muss sich das Gerät kümmern)

                                      setState('mqtt.0.thermostat.desired.temperature' /* thermostat/desired/temperature */, 18.7);
                                      
                                      HomoranH Nicht stören
                                      HomoranH Nicht stören
                                      Homoran
                                      Global Moderator Administrators
                                      schrieb am zuletzt editiert von
                                      #18

                                      @martinp sagte in Einfache Heizungsreglung:

                                      "steuere" sollte man schon verwenden

                                      ds wurde ja auch nicht angezweifelt. Nur die unnötige zweifache Verwendung!

                                      kein Support per PN! - Fragen im Forum stellen -
                                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                                      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                      1 Antwort Letzte Antwort
                                      0
                                      • MartinPM MartinP

                                        @paul53 "steuere" sollte man schon verwenden, wenn es darum geht, dass die Änderung auch im Gerät ankommt... Nur wenn es egal ist, ob das Gerät auch den Wert bekommt, reicht auch ein "aktualisiere"... Bei jedem "wurde geändert" Trigger wird ja maximal ein "steuere" Aufruf auch wirklich durchlaufen.

                                        Wird doch hier diskutiert https://forum.iobroker.net/topic/5787/blockly-unterschied-zwischen-steuere-und-aktualisiere

                                        Der Komplexitäts-Unterschied auf Javascript-Ebene ist jedenfalls nicht besonders groß wenn man sich den erzeugten Code so anschaut ...

                                        Hier ein "aktualisiere" Block (Wert auf false, Bestätigt auf true)

                                        setState('0_userdata.0.Heizung.Nachtabsenkung' /* Nachtabsenkung */, false, true);
                                        

                                        Und hier eine "steuere" Block (Wert auf 18.7, Bestätigt durch implizite Parametrierung auf false (darum muss sich das Gerät kümmern)

                                        setState('mqtt.0.thermostat.desired.temperature' /* thermostat/desired/temperature */, 18.7);
                                        
                                        paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von paul53
                                        #19

                                        @martinp sagte: "steuere" sollte man schon verwenden

                                        Richtig, aber möglichst nur einmal pro DP innerhalb einer Callback-Funktion.

                                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                        MartinPM 1 Antwort Letzte Antwort
                                        0
                                        • paul53P paul53

                                          @martinp sagte: "steuere" sollte man schon verwenden

                                          Richtig, aber möglichst nur einmal pro DP innerhalb einer Callback-Funktion.

                                          MartinPM Online
                                          MartinPM Online
                                          MartinP
                                          schrieb am zuletzt editiert von
                                          #20

                                          @paul53 Das ist doch so... bei jedem Durchlauf des Skriptes wird ja nur maximal einer der beiden Zweige "falls" oder "sonst falls" durchlaufen... maximal wird das "steuere" im "falls" Zweig durchlaufen, oder das im "sonst falls" Zweig.
                                          NIE in einem Durchlauf beide!

                                          Die meiste Zeit wird wahrscheinlich bei einem Durchlauf durch die zusätzliche Abfrage der Hilfsvariable sogar gar kein "steuere" Aufruf erfolgen ...

                                          Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                                          Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
                                          Linux pve 6.17.9-1-pve
                                          6 GByte RAM für den Container
                                          Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
                                          Remote-Access über Wireguard der Fritzbox

                                          paul53P 1 Antwort Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          589

                                          Online

                                          32.8k

                                          Benutzer

                                          82.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe