Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Gelöst: Blockly Oder-Verknüpfung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    163

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    12
    1
    568

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.8k

Gelöst: Blockly Oder-Verknüpfung

Geplant Angeheftet Gesperrt Verschoben Blockly
blockly
23 Beiträge 6 Kommentatoren 1.5k Aufrufe 3 Watching
  • Ä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.
  • MartinPM MartinP

    z.B. was die Gasheizung mit deinen Fenstern zu tun hat

    @homoran Ist das eine neue Forumsregel, dass man in seinem Beispiel keine Datenpunkte nehmen darf, die man eh auf seinem System hat, sondern zuerst sehen muss, dass man eine Testumgebung mit dem kompletten Datenbaum des ioBroker des Fragestellers einrichten muss?

    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #14

    @martinp Aber dann bitte ein wenig Text zur Erklärung dazu!
    Einfach einen Screenshot ohne erkennbaren Zusammenhang zu posten, hilft dem Fragenden herzlich wenig

    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    1 Antwort Letzte Antwort
    1
    • AsgothianA Asgothian

      @martinp sagte in Blockly Oder-Verknüpfung:

      Man könnte natürlich mit zwei Triggern arbeiten. Der eine kümmert sich um das Einschalten des Alarms, der andere um das Ausschalten....

      genau das würde ich tun. Und dann auf eine Art und Weise bei der ich nicht im Trigger den Wert des DP noch einmal holen muss.

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

      @asgothian

      Mit Variablen könnte man den Zugriff auf den Objekt-Baum vermeiden:

      ddd35d03-40b3-40a1-8a05-dcb2fe9edfa2-grafik.png

      Eigentlich finde ich die Blocklys selbsterklärend

      Der Trick bei den beiden Triggern ist, dass man beim Abschalten des Alarms vorher den anderen Zustand prüfen muss

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

      AsgothianA 1 Antwort Letzte Antwort
      1
      • MartinPM MartinP

        @asgothian

        Mit Variablen könnte man den Zugriff auf den Objekt-Baum vermeiden:

        ddd35d03-40b3-40a1-8a05-dcb2fe9edfa2-grafik.png

        Eigentlich finde ich die Blocklys selbsterklärend

        Der Trick bei den beiden Triggern ist, dass man beim Abschalten des Alarms vorher den anderen Zustand prüfen muss

        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        schrieb am zuletzt editiert von
        #16

        @martinp sagte in Blockly Oder-Verknüpfung:

        Mit Variablen könnte man den Zugriff auf den Objekt-Baum vermeiden:

        Eine schöne Lösung für 2 DP. Dann kommt der mit 3, 4, 5 oder auch 20 Fenstern und fragt sich ob es nicht was besseres gibt :)

        Aber wie oben geschrieben - das würde den Thread kapern und die Frage des OP nicht wirklich beantworten

        A.

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        MartinPM 1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @martinp sagte in Blockly Oder-Verknüpfung:

          Mit Variablen könnte man den Zugriff auf den Objekt-Baum vermeiden:

          Eine schöne Lösung für 2 DP. Dann kommt der mit 3, 4, 5 oder auch 20 Fenstern und fragt sich ob es nicht was besseres gibt :)

          Aber wie oben geschrieben - das würde den Thread kapern und die Frage des OP nicht wirklich beantworten

          A.

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

          @asgothian sagte in Blockly Oder-Verknüpfung:

          das würde den Thread kapern und die Frage des OP nicht wirklich beantworten

          Nunja, wenn die Hinweise zu einem leichter erweiterbaren Blockly führen, wäre dem Threadersteller vielleicht noch besser geholfen. Aber die Strukturen werden dadurch natürlich unübersichtlicher, Keep ist simple and stupid ;-)

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

          AsgothianA 1 Antwort Letzte Antwort
          1
          • MartinPM MartinP

            @asgothian sagte in Blockly Oder-Verknüpfung:

            das würde den Thread kapern und die Frage des OP nicht wirklich beantworten

            Nunja, wenn die Hinweise zu einem leichter erweiterbaren Blockly führen, wäre dem Threadersteller vielleicht noch besser geholfen. Aber die Strukturen werden dadurch natürlich unübersichtlicher, Keep ist simple and stupid ;-)

            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            schrieb am zuletzt editiert von Asgothian
            #18

            @martinp

            Hinterm Spoiler mein Universeller Ansatz für n zu prüfende Elemente.

            Was je nach Anwendung angepasst werden muss ist die Liste der zu prüfenden Elemente (gerne auch per Selektor), die Bedingung beim Einlesen der Ist-Werte am Anfang. sowie die Bedingung für das "Alarm Setzen" und "löschen". So wie es ist würde es für den OP gehen, und den Alarm setzen wenn mindestens 1 Sensor offen meldet, und löschen wenn keiner mehr offen ist.

            Das ganze lohnt aber erst ab 3-5 Sensoren, vorher sind andere Methoden effektiver.

            A.


            Screenshot 2024-11-22 at 14.16.23.png

            <xml xmlns="https://developers.google.com/blockly/xml">
              <variables>
                <variable id="z7dGtGTdWd=yX#`R{{B@">TriggerStates</variable>
                <variable id="lkD1J,;IzM=DQLcG.5|S">OpenContacts</variable>
                <variable id="amoGLBTN2N+h(t9?$1a^">TargetObject</variable>
                <variable id="7(F.{kV~9TmDm7$:bcGE">Index</variable>
              </variables>
              <block type="variables_set" id="geabdFGp+}T2TWVPH4UE" x="37" y="138">
                <field name="VAR" id="z7dGtGTdWd=yX#`R{{B@">TriggerStates</field>
                <value name="VALUE">
                  <block type="lists_create_with" id="7oc/!KR!}TWk@PnPmc#l">
                    <mutation items="3"></mutation>
                    <value name="ADD0">
                      <block type="field_oid" id="C9Y.RW^k@fn!8B6{QZ8~">
                        <field name="oid">zigbee.0.00158d00025ee1b2.opened</field>
                      </block>
                    </value>
                    <value name="ADD1">
                      <block type="field_oid" id="ntd:._~)BN^v5q:7*jv8">
                        <field name="oid">zigbee.0.00158d00031305b7.opened</field>
                      </block>
                    </value>
                    <value name="ADD2">
                      <block type="field_oid" id="JqA*V)gb5T)(7Lra3,ED">
                        <field name="oid">zigbee.0.00158d0001dcfc5e.opened</field>
                      </block>
                    </value>
                  </block>
                </value>
                <next>
                  <block type="variables_set" id="SovLZ{^e*9-j1Y/76,B]">
                    <field name="VAR" id="lkD1J,;IzM=DQLcG.5|S">OpenContacts</field>
                    <value name="VALUE">
                      <block type="lists_create_with" id="P@_aH9^P!sT^rvYjcqLQ">
                        <mutation items="0"></mutation>
                      </block>
                    </value>
                    <next>
                      <block type="controls_forEach" id="Vou`^xt}+/cSs2`lWRp=">
                        <field name="VAR" id="amoGLBTN2N+h(t9?$1a^">TargetObject</field>
                        <value name="LIST">
                          <block type="variables_get" id="JKbQacAF:SE@CGtE+Gq(">
                            <field name="VAR" id="z7dGtGTdWd=yX#`R{{B@">TriggerStates</field>
                          </block>
                        </value>
                        <statement name="DO">
                          <block type="controls_if" id="C!Tkr[Hh4EH!t2Sr_fh]">
                            <value name="IF0">
                              <block type="logic_compare" id="@Wv8ocx5xriOXaqZpvN[">
                                <field name="OP">GT</field>
                                <value name="A">
                                  <block type="get_value" id="9$l?Ut^SJMt}1+`#|Qxk">
                                    <field name="ATTR">val</field>
                                    <field name="OID">ID auswählen</field>
                                  </block>
                                </value>
                                <value name="B">
                                  <block type="math_number" id="d0IxSPdDwtNeWY?-S+En">
                                    <field name="NUM">0</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <statement name="DO0">
                              <block type="lists_setIndex" id="ei2ri:vw31GJiJBTqH};">
                                <mutation at="false"></mutation>
                                <field name="MODE">INSERT</field>
                                <field name="WHERE">LAST</field>
                                <value name="LIST">
                                  <block type="variables_get" id="3#Hzvq8V(;weFbmbNOTM">
                                    <field name="VAR" id="lkD1J,;IzM=DQLcG.5|S">OpenContacts</field>
                                  </block>
                                </value>
                                <value name="TO">
                                  <block type="variables_get" id="hj_M`+v7|n}BNzFA:0^X">
                                    <field name="VAR" id="amoGLBTN2N+h(t9?$1a^">TargetObject</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                          </block>
                        </statement>
                        <next>
                          <block type="on_ext" id="4WzNM7Og_wOS2/Uul1hz">
                            <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                            <field name="CONDITION">ne</field>
                            <field name="ACK_CONDITION"></field>
                            <value name="OID0">
                              <shadow type="field_oid" id="}mU7xnk},xxWzi%A$!w[">
                                <field name="oid">ID auswählen</field>
                              </shadow>
                              <block type="variables_get" id="5SH[{Bq@/LCw7PI#Da4`">
                                <field name="VAR" id="z7dGtGTdWd=yX#`R{{B@">TriggerStates</field>
                              </block>
                            </value>
                            <statement name="STATEMENT">
                              <block type="variables_set" id="d5Ll8Nh4_VJ/nj[GwdV,">
                                <field name="VAR" id="7(F.{kV~9TmDm7$:bcGE">Index</field>
                                <value name="VALUE">
                                  <block type="lists_indexOf" id="6rQ)ZurAxPYNS9Pbl+qF">
                                    <field name="END">FIRST</field>
                                    <value name="VALUE">
                                      <block type="variables_get" id="aY0%)OT?|T~xGQe48FiW">
                                        <field name="VAR" id="lkD1J,;IzM=DQLcG.5|S">OpenContacts</field>
                                      </block>
                                    </value>
                                    <value name="FIND">
                                      <block type="on_source" id="Z*Lh~V)CvJ*GXcwF9R#o">
                                        <field name="ATTR">id</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <next>
                                  <block type="controls_if" id="|!vroN*CLlQO|%72fq?0">
                                    <mutation else="1"></mutation>
                                    <value name="IF0">
                                      <block type="logic_compare" id="~(R$rBc!kEP]-5(b(U8i">
                                        <field name="OP">GT</field>
                                        <value name="A">
                                          <block type="on_source" id="V()q|sb_mlu^7{9ku8)j">
                                            <field name="ATTR">state.val</field>
                                          </block>
                                        </value>
                                        <value name="B">
                                          <block type="on_source" id="dk)hp$d:W9IDdo._c!L-">
                                            <field name="ATTR">oldState.val</field>
                                          </block>
                                        </value>
                                      </block>
                                    </value>
                                    <statement name="DO0">
                                      <block type="comment" id="Jj@6dS4(2Yw($NqQz?ek">
                                        <field name="COMMENT">IsOpen</field>
                                        <next>
                                          <block type="controls_if" id="{INLF:]]PZsm;-ronR/-">
                                            <value name="IF0">
                                              <block type="logic_compare" id="|~|Ra6F#B7U#Tsxo/W[s">
                                                <field name="OP">LTE</field>
                                                <value name="A">
                                                  <block type="variables_get" id="w.v7~{J~DDhecDt8``;$">
                                                    <field name="VAR" id="7(F.{kV~9TmDm7$:bcGE">Index</field>
                                                  </block>
                                                </value>
                                                <value name="B">
                                                  <block type="math_number" id="=r%/qvZA~jyhvmGd`X4R">
                                                    <field name="NUM">0</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <statement name="DO0">
                                              <block type="lists_setIndex" id="B.s}5w8o[rJSD?1q4;Fg">
                                                <mutation at="false"></mutation>
                                                <field name="MODE">INSERT</field>
                                                <field name="WHERE">LAST</field>
                                                <value name="LIST">
                                                  <block type="variables_get" id="E{D@,b8#aH.649o)FZ{U">
                                                    <field name="VAR" id="lkD1J,;IzM=DQLcG.5|S">OpenContacts</field>
                                                  </block>
                                                </value>
                                                <value name="TO">
                                                  <block type="on_source" id="vHgXA)u;ME5.XYqPWQo^">
                                                    <field name="ATTR">id</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </statement>
                                          </block>
                                        </next>
                                      </block>
                                    </statement>
                                    <statement name="ELSE">
                                      <block type="comment" id="XMV+!?[QG~aBV/,0[1,1">
                                        <field name="COMMENT">IsClosed</field>
                                        <next>
                                          <block type="controls_if" id="su,@jVGp9ZAwJYU[s@TA">
                                            <value name="IF0">
                                              <block type="logic_compare" id="[]b6(9sL@BJvF}A%`lqz">
                                                <field name="OP">GTE</field>
                                                <value name="A">
                                                  <block type="variables_get" id="S,na9Z=(zF6wRGqnAB9A">
                                                    <field name="VAR" id="7(F.{kV~9TmDm7$:bcGE">Index</field>
                                                  </block>
                                                </value>
                                                <value name="B">
                                                  <block type="math_number" id="ttHu,;s*aZPGASplEtK+">
                                                    <field name="NUM">0</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <statement name="DO0">
                                              <block type="lists_getIndex" id="faFVPoYx@i+Zgq^jNT_8">
                                                <mutation statement="true" at="true"></mutation>
                                                <field name="MODE">REMOVE</field>
                                                <field name="WHERE">FROM_START</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id="?Wa_(g*jPE*htOSiIH[r">
                                                    <field name="VAR" id="lkD1J,;IzM=DQLcG.5|S">OpenContacts</field>
                                                  </block>
                                                </value>
                                                <value name="AT">
                                                  <block type="variables_get" id="FWU#eirV-_h~=v.m^z@d">
                                                    <field name="VAR" id="7(F.{kV~9TmDm7$:bcGE">Index</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </statement>
                                          </block>
                                        </next>
                                      </block>
                                    </statement>
                                    <next>
                                      <block type="controls_if" id="geL~N#TBp,dL:YNu?w|:">
                                        <mutation else="1"></mutation>
                                        <value name="IF0">
                                          <block type="logic_compare" id="(G4Valke_]i8=p0)++jx">
                                            <field name="OP">GT</field>
                                            <value name="A">
                                              <block type="lists_length" id="j%aG3yIdA2MzS*~XS8N1">
                                                <value name="VALUE">
                                                  <block type="variables_get" id="JpYUIU;Dxr*[gqnxNMW:">
                                                    <field name="VAR" id="lkD1J,;IzM=DQLcG.5|S">OpenContacts</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <value name="B">
                                              <block type="math_number" id="IlmJN5dz|39])5$gaR40">
                                                <field name="NUM">0</field>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                        <statement name="DO0">
                                          <block type="comment" id="@UVj5+cknE;47(V^U[SH">
                                            <field name="COMMENT">Alarm Setzen</field>
                                          </block>
                                        </statement>
                                        <statement name="ELSE">
                                          <block type="comment" id="d9f=J:wqYy|(Ukl-d]._">
                                            <field name="COMMENT">Alarm löschen</field>
                                          </block>
                                        </statement>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </statement>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </xml>
            

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            1 Antwort Letzte Antwort
            0
            • C Offline
              C Offline
              cookiemonster1706
              schrieb am zuletzt editiert von
              #19

              Vielen Dank für eure Unterstützung. Es funktioniert.
              Ich werde es mir nochmal im Detail anschauen, um es zu opitmieren.

              MartinPM 1 Antwort Letzte Antwort
              0
              • C cookiemonster1706

                Vielen Dank für eure Unterstützung. Es funktioniert.
                Ich werde es mir nochmal im Detail anschauen, um es zu opitmieren.

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

                @cookiemonster1706 sagte in Blockly Oder-Verknüpfung:

                Vielen Dank für eure Unterstützung. Es funktioniert.

                Dann ändere bitte noch den Threadtitel, indem du "Gelöst:" davorsetzt

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

                1 Antwort Letzte Antwort
                0
                • MartinPM Online
                  MartinPM Online
                  MartinP
                  schrieb am zuletzt editiert von MartinP
                  #21

                  @asgothian sagte in Blockly Oder-Verknüpfung:

                  Hinterm Spoiler mein Universeller Ansatz für n zu prüfende Elemente.

                  Eine Frage zur Effizienz der Implementierung: Die Liste der gesetzten Datenpunkte ändert ja dynamisch ihre Größe - was für Penalties gibt es durch die dadurch verursachte Speicherverwaltung...

                  Wäre ggfs eine statische Liste, in der man die Zustände ablegt und nachher auf true abfragt effizienter?
                  Wenn man sich darauf verlassen könnte, dass immer abwechselnd von jedem Datenpunkt True oder False kommt, könnte man ggfs. auch einen einfachen Zähler nutzen...

                  Hereinkommende "Trues" inkrementieren, Hereinkommende "False" dekrementieren...

                  2fd1ed46-3f6e-4a78-9e0c-c570367dd2a1-grafik.png

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

                  AsgothianA 1 Antwort Letzte Antwort
                  0
                  • MartinPM MartinP

                    @asgothian sagte in Blockly Oder-Verknüpfung:

                    Hinterm Spoiler mein Universeller Ansatz für n zu prüfende Elemente.

                    Eine Frage zur Effizienz der Implementierung: Die Liste der gesetzten Datenpunkte ändert ja dynamisch ihre Größe - was für Penalties gibt es durch die dadurch verursachte Speicherverwaltung...

                    Wäre ggfs eine statische Liste, in der man die Zustände ablegt und nachher auf true abfragt effizienter?
                    Wenn man sich darauf verlassen könnte, dass immer abwechselnd von jedem Datenpunkt True oder False kommt, könnte man ggfs. auch einen einfachen Zähler nutzen...

                    Hereinkommende "Trues" inkrementieren, Hereinkommende "False" dekrementieren...

                    2fd1ed46-3f6e-4a78-9e0c-c570367dd2a1-grafik.png

                    AsgothianA Offline
                    AsgothianA Offline
                    Asgothian
                    Developer
                    schrieb am zuletzt editiert von
                    #22

                    @martinp sagte in Gelöst: Blockly Oder-Verknüpfung:

                    Wäre ggfs eine statische Liste, in der man die Zustände ablegt und nachher auf true abfragt effizienter?
                    Wenn man sich darauf verlassen könnte, dass immer abwechselnd von jedem Datenpunkt True oder False kommt, könnte man ggfs. auch einen einfachen Zähler nutzen...
                    Hereinkommende "Trues" inkrementieren, Hereinkommende "False" dekrementieren...

                    Das mit dem einfachen Zähler setzt voraus das da nichts schief geht. So hatte ich das am Anfang, aber meine Erfahrung damit war eher durchwachsen - der hat sich eigentlich ständig verzählt, so das oft die Meldung nicht zum Zustand gepasst hat. Unglücklicherweise wird das Verzählen eigentlich immer nur in eine Richtung erkannt - Jede Anwendung hat da ihre "Vorzugsrichtung". Im aktuellen Beispiel ist der Fall "es ist alles offen" eher selten, so das ein Verzählen nach oben kaum erkannt wird, aber dazu führt das der Alarm nie zurück gesetzt wird.

                    Das mit der statischen Liste ist auch so eine Sache - dann hat man statisch mehr Speicher belegt nur um nicht dynamisch zu arbeiten. Man braucht entweder eine Liste von Objekten mit properties oder zwei Listen die Synchron gehalten werden müssen - incl. dem durchgehen durch die Liste um zu ermitteln wieviele denn nun "wahr" und "falsch" zeigen. Wie genau der JS Garbage-Collector arbeitet weiss ich nicht - allerdings gehe ich davon aus das der Speicherplatz beim Austragen eines Elementes nicht sofort sondern mit Verzögerung freigegeben wird. Ich denke der Ansatz bildet da einen brauchbaren Kompromiss.

                    Natürlich kann man da je nach Situation alles mögliche optimieren - das war aber nie mein Ziel.
                    Was ich mir geschaffen hab war ein Skript welches ich einfach duplizieren kann, und welches auch dann funktioniert wenn der JS Adapter nicht beim Start alle States abonniert.

                    A.

                    ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                    "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                    MartinPM 1 Antwort Letzte Antwort
                    0
                    • AsgothianA Asgothian

                      @martinp sagte in Gelöst: Blockly Oder-Verknüpfung:

                      Wäre ggfs eine statische Liste, in der man die Zustände ablegt und nachher auf true abfragt effizienter?
                      Wenn man sich darauf verlassen könnte, dass immer abwechselnd von jedem Datenpunkt True oder False kommt, könnte man ggfs. auch einen einfachen Zähler nutzen...
                      Hereinkommende "Trues" inkrementieren, Hereinkommende "False" dekrementieren...

                      Das mit dem einfachen Zähler setzt voraus das da nichts schief geht. So hatte ich das am Anfang, aber meine Erfahrung damit war eher durchwachsen - der hat sich eigentlich ständig verzählt, so das oft die Meldung nicht zum Zustand gepasst hat. Unglücklicherweise wird das Verzählen eigentlich immer nur in eine Richtung erkannt - Jede Anwendung hat da ihre "Vorzugsrichtung". Im aktuellen Beispiel ist der Fall "es ist alles offen" eher selten, so das ein Verzählen nach oben kaum erkannt wird, aber dazu führt das der Alarm nie zurück gesetzt wird.

                      Das mit der statischen Liste ist auch so eine Sache - dann hat man statisch mehr Speicher belegt nur um nicht dynamisch zu arbeiten. Man braucht entweder eine Liste von Objekten mit properties oder zwei Listen die Synchron gehalten werden müssen - incl. dem durchgehen durch die Liste um zu ermitteln wieviele denn nun "wahr" und "falsch" zeigen. Wie genau der JS Garbage-Collector arbeitet weiss ich nicht - allerdings gehe ich davon aus das der Speicherplatz beim Austragen eines Elementes nicht sofort sondern mit Verzögerung freigegeben wird. Ich denke der Ansatz bildet da einen brauchbaren Kompromiss.

                      Natürlich kann man da je nach Situation alles mögliche optimieren - das war aber nie mein Ziel.
                      Was ich mir geschaffen hab war ein Skript welches ich einfach duplizieren kann, und welches auch dann funktioniert wenn der JS Adapter nicht beim Start alle States abonniert.

                      A.

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

                      Vielleicht ist das auch ein "fauler" Garbage Collector, der erstmal "abwartet" bis es eng wird, bevor er aufräumt - da könnte es sein, dass so lange auf dem Peak-Stand der Listengröße für offene Fenster verharrt wird, wie der Garbage Collector Ruhig bleibt, und der Speicherplatz auch bei anwachsender Listenlänge noch passt ...

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

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      425

                      Online

                      32.5k

                      Benutzer

                      81.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