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. Einsteigerfragen
  4. Datenpunkte im Objekte-Baum verschieben

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Datenpunkte im Objekte-Baum verschieben

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
14 Beiträge 5 Kommentatoren 1.4k Aufrufe 4 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.
  • W Wildbill

    @fibricus Da bleibt Dir nichts Anderes, als die Datenpunkte neu zu erstellen und dann die alten zu löschen. U(nd dran denken, dass Du auch jedes Script, welches auf die (alten) Datenpunkte zugreift, sowie sämtliche Views in VIS(2) auf die neuen Datenpunkte anpassen musst.
    Einen Teil Deiner Datenpunkte könntest Du möglicherweise auch unter alias.0 erzeugen, dann kannst Du sie ohne Script direkt mit dem jeweiligen originalen Datenpunkt „verknüpfen“, was den möglicherweise mal nötigen Austausch von Geräten erleichtert, da dann nur der ALIAS neu verknüpft werden muss, während Scripte und Views, die auf den ALIAS zeigen unverändert bleiben können.

    Gruss, Jürgen

    pajdaP Offline
    pajdaP Offline
    pajda
    schrieb am zuletzt editiert von
    #5

    @wildbill Bildschirmfoto 2024-03-29 um 12.54.28.png Bildschirmfoto 2024-03-29 um 12.54.57.png Bildschirmfoto 2024-03-29 um 12.55.51.png Bildschirmfoto 2024-03-29 um 12.56.22.png

    Es geht auch mit Kopieren
    Auf bearbeiten klicken (Stift) dann unten links auf kopieren
    namen enden und auf klonen klicken

    W 1 Antwort Letzte Antwort
    2
    • W Wildbill

      @fibricus Da bleibt Dir nichts Anderes, als die Datenpunkte neu zu erstellen und dann die alten zu löschen. U(nd dran denken, dass Du auch jedes Script, welches auf die (alten) Datenpunkte zugreift, sowie sämtliche Views in VIS(2) auf die neuen Datenpunkte anpassen musst.
      Einen Teil Deiner Datenpunkte könntest Du möglicherweise auch unter alias.0 erzeugen, dann kannst Du sie ohne Script direkt mit dem jeweiligen originalen Datenpunkt „verknüpfen“, was den möglicherweise mal nötigen Austausch von Geräten erleichtert, da dann nur der ALIAS neu verknüpft werden muss, während Scripte und Views, die auf den ALIAS zeigen unverändert bleiben können.

      Gruss, Jürgen

      F Offline
      F Offline
      Fibricus
      schrieb am zuletzt editiert von
      #6

      @wildbill said in Datenpunkte im Objekte-Baum verschieben:

      @fibricus Da bleibt Dir nichts Anderes, als die Datenpunkte neu zu erstellen und dann die alten zu löschen. U(nd dran denken, dass Du auch jedes Script, welches auf die (alten) Datenpunkte zugreift, sowie sämtliche Views in VIS(2) auf die neuen Datenpunkte anpassen musst.
      Einen Teil Deiner Datenpunkte könntest Du möglicherweise auch unter alias.0 erzeugen, dann kannst Du sie ohne Script direkt mit dem jeweiligen originalen Datenpunkt „verknüpfen“, was den möglicherweise mal nötigen Austausch von Geräten erleichtert, da dann nur der ALIAS neu verknüpft werden muss, während Scripte und Views, die auf den ALIAS zeigen unverändert bleiben können.

      Gruss, Jürgen

      Leider habe ich das mit den Aliassen zu spät verstanden.
      Ich muss mich mal daran machen und alle Scripte umzuschreiben.
      Leider habe ich noch keine gute Idee für die Sortierung und daher drücke ich mich im Moment noch vor der Arbeit.
      Und ich fürchte es gibt auch keine Patentlösung für die Sortierung, oder.

      BananaJoeB 1 Antwort Letzte Antwort
      0
      • F Fibricus

        @wildbill said in Datenpunkte im Objekte-Baum verschieben:

        @fibricus Da bleibt Dir nichts Anderes, als die Datenpunkte neu zu erstellen und dann die alten zu löschen. U(nd dran denken, dass Du auch jedes Script, welches auf die (alten) Datenpunkte zugreift, sowie sämtliche Views in VIS(2) auf die neuen Datenpunkte anpassen musst.
        Einen Teil Deiner Datenpunkte könntest Du möglicherweise auch unter alias.0 erzeugen, dann kannst Du sie ohne Script direkt mit dem jeweiligen originalen Datenpunkt „verknüpfen“, was den möglicherweise mal nötigen Austausch von Geräten erleichtert, da dann nur der ALIAS neu verknüpft werden muss, während Scripte und Views, die auf den ALIAS zeigen unverändert bleiben können.

        Gruss, Jürgen

        Leider habe ich das mit den Aliassen zu spät verstanden.
        Ich muss mich mal daran machen und alle Scripte umzuschreiben.
        Leider habe ich noch keine gute Idee für die Sortierung und daher drücke ich mich im Moment noch vor der Arbeit.
        Und ich fürchte es gibt auch keine Patentlösung für die Sortierung, oder.

        BananaJoeB Offline
        BananaJoeB Offline
        BananaJoe
        Most Active
        schrieb am zuletzt editiert von
        #7

        @fibricus

        Hättest Du mal ein kleines Beispiel?

        JavaScript oder Blockly?

        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

        1 Antwort Letzte Antwort
        0
        • BananaJoeB Offline
          BananaJoeB Offline
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von BananaJoe
          #8

          Hier schon mal Blockly:

          In der aktuellen Version (Beta Channel) gibt es 2 Blöcke dafür:
          b72c5d25-e93f-403c-9a7b-d6d3773a48ff-image.png

          Der erste Block ist flexibler, aber umständlicher.
          Beispiel für eine Prozent-Zahl:
          7e4ea32f-ee6c-4739-b882-fa1d7a6ab54e-image.png
          Im grünen Textfeld steht folgendes:

          { "type": "number", "name": "MeinWert", "read": true, "write": true , "unit" : "%" }
          

          und so sieht der Datenpunkt dazu aus der erzeugt wird:
          5cd40f6f-f342-45b1-85cb-a1626c5f23ec-image.png

          Etwas umständlich, aber über das Common Feld kann man halt alle Aspekte einstellen.
          Einfacher ist da der andere Block:
          38e6cfa4-3c5d-473e-a1b9-5d5d08780dea-image.png

          Den Zustandstyp wählt man einfach aus, setzt die Haken und den Init-Wert:
          1ff4edcb-7a41-4014-8abd-c595ffb264d3-image.png

          Nachteil beim 2. ist das du keine Einheit setzen kannst (wobei das ja nur für die Optik ist, ich finde das aber schön wenn da gleich W, kWh oder % dran steht)

          Beide Blöcke haben das Problem das man beim Namen des Datenpunktes nicht mit Variablen arbeiten kann.
          Ich arbeite gerne mit Blockly und habe mir deshalb einen passenden Skript-Baustein dafür erstellt:

          96d054a2-abb7-423b-8bc0-49b8064c1b1e-image.png
          Importdaten kommen unten

          Beispielaufrufe:
          1f318675-75df-44ba-a7e0-dae1148a9d3f-image.png
          Damit kann ich mir meine Datenpunkte bauen. Wenn man kann Unit will / sinnvoll ist einfach nur ein leeres Textfeld draufziehen.

          Hier alle Beispiele zum Importieren inklusive meiner Funktion:

          <xml xmlns="https://developers.google.com/blockly/xml">
            <variables>
              <variable id=",%o6YJ)eJJ0Ug#A.g^(q">RootPath</variable>
              <variable id="4,_+,~ymq5aD:jd.9$=-">ValueName</variable>
              <variable id="!-(EoW{]I%^4o]}Wf0IU">TargetType</variable>
              <variable id="2NeMF,lRvUfhS/0US`~(">TargetIsWriteable</variable>
              <variable id="pEXy5(i!?xF*I2u|UIbk">TargetUnit</variable>
              <variable id="oS^boSLi7Wy4dN^qi{ek">TargetDefaultValue</variable>
              <variable id="6#H4rASkoUt5zIIwARJ;">Stammpfad</variable>
            </variables>
            <block type="procedures_defcustomnoreturn" id="l(.(|wVZ(GS{-P%@qK=|" x="113" y="-87">
              <mutation statements="false">
                <arg name="RootPath" varid=",%o6YJ)eJJ0Ug#A.g^(q"></arg>
                <arg name="ValueName" varid="4,_+,~ymq5aD:jd.9$=-"></arg>
                <arg name="TargetType" varid="!-(EoW{]I%^4o]}Wf0IU"></arg>
                <arg name="TargetIsWriteable" varid="2NeMF,lRvUfhS/0US`~("></arg>
                <arg name="TargetUnit" varid="pEXy5(i!?xF*I2u|UIbk"></arg>
                <arg name="TargetDefaultValue" varid="oS^boSLi7Wy4dN^qi{ek"></arg>
              </mutation>
              <field name="NAME">CreatyMyStateV3</field>
              <field name="SCRIPT">aWYgKFRhcmdldFVuaXQubGVuZ3RoID09PSAwKSB7DQogICAgYXdhaXQgY3JlYXRlU3RhdGVBc3luYyhSb290UGF0aCArIFZhbHVlTmFtZSwgVGFyZ2V0RGVmYXVsdFZhbHVlLCB7IHR5cGU6IFRhcmdldFR5cGUsIG5hbWU6IFZhbHVlTmFtZSwgcmVhZDogdHJ1ZSwgd3JpdGU6IFRhcmdldElzV3JpdGVhYmxlIH0pOw0KfSBlbHNlIHsNCiAgICBhd2FpdCBjcmVhdGVTdGF0ZUFzeW5jKFJvb3RQYXRoICsgVmFsdWVOYW1lLCBUYXJnZXREZWZhdWx0VmFsdWUsIHsgdHlwZTogVGFyZ2V0VHlwZSwgbmFtZTogVmFsdWVOYW1lLCByZWFkOiB0cnVlLCB3cml0ZTogVGFyZ2V0SXNXcml0ZWFibGUgLCB1bml0OiBUYXJnZXRVbml0IH0pOw0KfQ==</field>
              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
            </block>
            <block type="comment" id="}(ktD4g-)QZZ@xfCwW7h" x="112" y="-37">
              <field name="COMMENT">Stammpfad mit . am Ende</field>
              <next>
                <block type="variables_set" id="l}h_T.]F;0S)D1{H|KSg">
                  <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                  <value name="VALUE">
                    <block type="text" id="o`+2zY{=f_]hiviefh`g">
                      <field name="TEXT">0_userdata.0.000-Testen.</field>
                    </block>
                  </value>
                  <next>
                    <block type="comment" id="d#Ob/)kWuaO?W6ub$MU]">
                      <field name="COMMENT">Boolean</field>
                      <next>
                        <block type="procedures_callcustomnoreturn" id="$ilXQQ6kXQ7Fk)B9HoI+">
                          <mutation name="CreatyMyStateV3">
                            <arg name="RootPath"></arg>
                            <arg name="ValueName"></arg>
                            <arg name="TargetType"></arg>
                            <arg name="TargetIsWriteable"></arg>
                            <arg name="TargetUnit"></arg>
                            <arg name="TargetDefaultValue"></arg>
                          </mutation>
                          <value name="ARG0">
                            <block type="variables_get" id="@tbS0:e$Br]KyQ,LDLQ)">
                              <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                            </block>
                          </value>
                          <value name="ARG1">
                            <block type="text" id="Nnx1nIC6!|i=ogk/5l#V">
                              <field name="TEXT">Mein_Test_Boolean</field>
                            </block>
                          </value>
                          <value name="ARG2">
                            <block type="text" id="L5ulp_swl_c@^WXuRt$]">
                              <field name="TEXT">boolean</field>
                            </block>
                          </value>
                          <value name="ARG3">
                            <block type="logic_boolean" id="wkUbqDv{k1SA(__`([cc">
                              <field name="BOOL">TRUE</field>
                            </block>
                          </value>
                          <value name="ARG4">
                            <block type="text" id="}JGSQW)pe7%!];~aDG-W">
                              <field name="TEXT"></field>
                            </block>
                          </value>
                          <value name="ARG5">
                            <block type="logic_boolean" id="%:^.D{FIyHk4cMis|Q4b">
                              <field name="BOOL">FALSE</field>
                            </block>
                          </value>
                          <next>
                            <block type="comment" id="xS03/Vf|O#tR*siuUQ{5">
                              <field name="COMMENT">kWh</field>
                              <next>
                                <block type="procedures_callcustomnoreturn" id="c[Sy+wM8GeeL2=vrt:hy">
                                  <mutation name="CreatyMyStateV3">
                                    <arg name="RootPath"></arg>
                                    <arg name="ValueName"></arg>
                                    <arg name="TargetType"></arg>
                                    <arg name="TargetIsWriteable"></arg>
                                    <arg name="TargetUnit"></arg>
                                    <arg name="TargetDefaultValue"></arg>
                                  </mutation>
                                  <value name="ARG0">
                                    <block type="variables_get" id="@QkZl7LqofYBl`EMr,Dx">
                                      <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                                    </block>
                                  </value>
                                  <value name="ARG1">
                                    <block type="text" id="VAJ;l;/[j~zPvYm/QqId">
                                      <field name="TEXT">Mein_Test_kWh</field>
                                    </block>
                                  </value>
                                  <value name="ARG2">
                                    <block type="text" id="EEsLej~G+k:#U~n5xxY6">
                                      <field name="TEXT">number</field>
                                    </block>
                                  </value>
                                  <value name="ARG3">
                                    <block type="logic_boolean" id="IUTW[TQ1=czdK/zsGybc">
                                      <field name="BOOL">TRUE</field>
                                    </block>
                                  </value>
                                  <value name="ARG4">
                                    <block type="text" id="u%*q8d$3n[zEMWfQ%w(0">
                                      <field name="TEXT">kWh</field>
                                    </block>
                                  </value>
                                  <value name="ARG5">
                                    <block type="math_number" id="~D.kzZ/Ty)TFH7C^|3CE">
                                      <field name="NUM">72</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="comment" id="DJ;J_wTj#zl}dM,3_|ns">
                                      <field name="COMMENT">% Zahl</field>
                                      <next>
                                        <block type="procedures_callcustomnoreturn" id="IroeW5.+4(SnlFjhg@@*">
                                          <mutation name="CreatyMyStateV3">
                                            <arg name="RootPath"></arg>
                                            <arg name="ValueName"></arg>
                                            <arg name="TargetType"></arg>
                                            <arg name="TargetIsWriteable"></arg>
                                            <arg name="TargetUnit"></arg>
                                            <arg name="TargetDefaultValue"></arg>
                                          </mutation>
                                          <value name="ARG0">
                                            <block type="variables_get" id="MA$JYk3c8]a5*Hu*)u8B">
                                              <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                                            </block>
                                          </value>
                                          <value name="ARG1">
                                            <block type="text" id="g:k+~9!bew$*)3IPU59`">
                                              <field name="TEXT">Mein_Test_Prozent</field>
                                            </block>
                                          </value>
                                          <value name="ARG2">
                                            <block type="text" id="YD!!HrbK`%i}U/]{21-#">
                                              <field name="TEXT">number</field>
                                            </block>
                                          </value>
                                          <value name="ARG3">
                                            <block type="logic_boolean" id="94ekT=!c%}2yK{lZ02{T">
                                              <field name="BOOL">TRUE</field>
                                            </block>
                                          </value>
                                          <value name="ARG4">
                                            <block type="text" id="*=LQ{FyLM}I/s|xLO^_I">
                                              <field name="TEXT">%</field>
                                            </block>
                                          </value>
                                          <value name="ARG5">
                                            <block type="math_number" id="bcN2aoW4bI1:Y~`uzSM0">
                                              <field name="NUM">72</field>
                                            </block>
                                          </value>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </next>
            </block>
            <block type="create" id="IQ;+nwEO/Ugu#pu0-4%g" x="113" y="688">
              <field name="NAME">0_userdata.0.000-Testen.MeinWert_Prozent</field>
              <value name="VALUE">
                <block type="math_number" id="aig):o)b^kV85oVK(/yL">
                  <field name="NUM">0</field>
                </block>
              </value>
              <value name="COMMON">
                <block type="text" id="G~lppP6eh58MqL5/@EMZ">
                  <field name="TEXT">{ "type": "number", "name": "MeinWert", "read": true, "write": true , "unit" : "%" }</field>
                </block>
              </value>
              <next>
                <block type="create_ex" id="~Qn#,B?tGP62!{Q~CaMp">
                  <field name="NAME">0_userdata.0.000-Testen.MeinWert_Boolean</field>
                  <field name="TYPE">boolean</field>
                  <field name="READABLE">TRUE</field>
                  <field name="WRITEABLE">TRUE</field>
                  <value name="VALUE">
                    <block type="logic_boolean" id="%a^I]Fd;o,H2sQnL=%ee">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                </block>
              </next>
            </block>
          </xml>
          

          In allen Fällen werden die Datenpunkte so erzeugt das man diese danach sofort verwenden kann.
          Später / weiter unten im Skript nutze ich die Datenpunkte immer per Textfelder:
          846342ac-e13a-47a7-9f6f-2fb61bd98666-image.png
          15d8bad9-2cee-4719-ae11-6f3739cb674e-image.png
          903d4848-bde3-4a4a-9c2c-2e723a5648cd-image.png

          Will ich die Pfade ändern bzw. eine weitere version meines Skriptes laufen lassen aber mit anderen Datenpunkten muss ich nur oben die Variable Stammpfad ändern und die anderen Datenpunkte landen an eben diesen neuen Pfad.
          Das mach ich mit allen Objekten, also auch mit Zigbee-Sensoren. da speichere ich mir den Pfad zum Objekt auch in einer Variablen und nutze unten nach dem gleichen Schema diese Variable statt des Datenpunktes. Wie du siehst kann man überall auch Textfelder draufziehen wo er eigentlich ein Dialogfeld für die Auswahl anbietet.
          Durch das zusammenbauen kann ich den Pfad zum ZigBee-Sensor angeben:
          zigbee.0.00158d00044c0e6b
          und hänge dann an was genau ich haben will per erstelle Text aus, also zum Beispiel .temperature oder .humidity
          Zum einen finde ich das lesbarer, zum anderen kann das so auch in eigene Funktionen packen die ich dann mit dem Pfad des jeweiligen Sensors aufrufe - du kanns ka auch aus Blockly-Bausteinen Funktionen bauen.

          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

          F 1 Antwort Letzte Antwort
          3
          • pajdaP pajda

            @wildbill Bildschirmfoto 2024-03-29 um 12.54.28.png Bildschirmfoto 2024-03-29 um 12.54.57.png Bildschirmfoto 2024-03-29 um 12.55.51.png Bildschirmfoto 2024-03-29 um 12.56.22.png

            Es geht auch mit Kopieren
            Auf bearbeiten klicken (Stift) dann unten links auf kopieren
            namen enden und auf klonen klicken

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

            @pajda War mir gar nicht bekannt. Ändert aber auch nicht viel an der Handarbeit und dem nachträglichen manuellen Anpassen von Scripten und VIS. Aber Danke.

            Gruss, Jürgen

            1 Antwort Letzte Antwort
            0
            • BananaJoeB BananaJoe

              Hier schon mal Blockly:

              In der aktuellen Version (Beta Channel) gibt es 2 Blöcke dafür:
              b72c5d25-e93f-403c-9a7b-d6d3773a48ff-image.png

              Der erste Block ist flexibler, aber umständlicher.
              Beispiel für eine Prozent-Zahl:
              7e4ea32f-ee6c-4739-b882-fa1d7a6ab54e-image.png
              Im grünen Textfeld steht folgendes:

              { "type": "number", "name": "MeinWert", "read": true, "write": true , "unit" : "%" }
              

              und so sieht der Datenpunkt dazu aus der erzeugt wird:
              5cd40f6f-f342-45b1-85cb-a1626c5f23ec-image.png

              Etwas umständlich, aber über das Common Feld kann man halt alle Aspekte einstellen.
              Einfacher ist da der andere Block:
              38e6cfa4-3c5d-473e-a1b9-5d5d08780dea-image.png

              Den Zustandstyp wählt man einfach aus, setzt die Haken und den Init-Wert:
              1ff4edcb-7a41-4014-8abd-c595ffb264d3-image.png

              Nachteil beim 2. ist das du keine Einheit setzen kannst (wobei das ja nur für die Optik ist, ich finde das aber schön wenn da gleich W, kWh oder % dran steht)

              Beide Blöcke haben das Problem das man beim Namen des Datenpunktes nicht mit Variablen arbeiten kann.
              Ich arbeite gerne mit Blockly und habe mir deshalb einen passenden Skript-Baustein dafür erstellt:

              96d054a2-abb7-423b-8bc0-49b8064c1b1e-image.png
              Importdaten kommen unten

              Beispielaufrufe:
              1f318675-75df-44ba-a7e0-dae1148a9d3f-image.png
              Damit kann ich mir meine Datenpunkte bauen. Wenn man kann Unit will / sinnvoll ist einfach nur ein leeres Textfeld draufziehen.

              Hier alle Beispiele zum Importieren inklusive meiner Funktion:

              <xml xmlns="https://developers.google.com/blockly/xml">
                <variables>
                  <variable id=",%o6YJ)eJJ0Ug#A.g^(q">RootPath</variable>
                  <variable id="4,_+,~ymq5aD:jd.9$=-">ValueName</variable>
                  <variable id="!-(EoW{]I%^4o]}Wf0IU">TargetType</variable>
                  <variable id="2NeMF,lRvUfhS/0US`~(">TargetIsWriteable</variable>
                  <variable id="pEXy5(i!?xF*I2u|UIbk">TargetUnit</variable>
                  <variable id="oS^boSLi7Wy4dN^qi{ek">TargetDefaultValue</variable>
                  <variable id="6#H4rASkoUt5zIIwARJ;">Stammpfad</variable>
                </variables>
                <block type="procedures_defcustomnoreturn" id="l(.(|wVZ(GS{-P%@qK=|" x="113" y="-87">
                  <mutation statements="false">
                    <arg name="RootPath" varid=",%o6YJ)eJJ0Ug#A.g^(q"></arg>
                    <arg name="ValueName" varid="4,_+,~ymq5aD:jd.9$=-"></arg>
                    <arg name="TargetType" varid="!-(EoW{]I%^4o]}Wf0IU"></arg>
                    <arg name="TargetIsWriteable" varid="2NeMF,lRvUfhS/0US`~("></arg>
                    <arg name="TargetUnit" varid="pEXy5(i!?xF*I2u|UIbk"></arg>
                    <arg name="TargetDefaultValue" varid="oS^boSLi7Wy4dN^qi{ek"></arg>
                  </mutation>
                  <field name="NAME">CreatyMyStateV3</field>
                  <field name="SCRIPT">aWYgKFRhcmdldFVuaXQubGVuZ3RoID09PSAwKSB7DQogICAgYXdhaXQgY3JlYXRlU3RhdGVBc3luYyhSb290UGF0aCArIFZhbHVlTmFtZSwgVGFyZ2V0RGVmYXVsdFZhbHVlLCB7IHR5cGU6IFRhcmdldFR5cGUsIG5hbWU6IFZhbHVlTmFtZSwgcmVhZDogdHJ1ZSwgd3JpdGU6IFRhcmdldElzV3JpdGVhYmxlIH0pOw0KfSBlbHNlIHsNCiAgICBhd2FpdCBjcmVhdGVTdGF0ZUFzeW5jKFJvb3RQYXRoICsgVmFsdWVOYW1lLCBUYXJnZXREZWZhdWx0VmFsdWUsIHsgdHlwZTogVGFyZ2V0VHlwZSwgbmFtZTogVmFsdWVOYW1lLCByZWFkOiB0cnVlLCB3cml0ZTogVGFyZ2V0SXNXcml0ZWFibGUgLCB1bml0OiBUYXJnZXRVbml0IH0pOw0KfQ==</field>
                  <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                </block>
                <block type="comment" id="}(ktD4g-)QZZ@xfCwW7h" x="112" y="-37">
                  <field name="COMMENT">Stammpfad mit . am Ende</field>
                  <next>
                    <block type="variables_set" id="l}h_T.]F;0S)D1{H|KSg">
                      <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                      <value name="VALUE">
                        <block type="text" id="o`+2zY{=f_]hiviefh`g">
                          <field name="TEXT">0_userdata.0.000-Testen.</field>
                        </block>
                      </value>
                      <next>
                        <block type="comment" id="d#Ob/)kWuaO?W6ub$MU]">
                          <field name="COMMENT">Boolean</field>
                          <next>
                            <block type="procedures_callcustomnoreturn" id="$ilXQQ6kXQ7Fk)B9HoI+">
                              <mutation name="CreatyMyStateV3">
                                <arg name="RootPath"></arg>
                                <arg name="ValueName"></arg>
                                <arg name="TargetType"></arg>
                                <arg name="TargetIsWriteable"></arg>
                                <arg name="TargetUnit"></arg>
                                <arg name="TargetDefaultValue"></arg>
                              </mutation>
                              <value name="ARG0">
                                <block type="variables_get" id="@tbS0:e$Br]KyQ,LDLQ)">
                                  <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                                </block>
                              </value>
                              <value name="ARG1">
                                <block type="text" id="Nnx1nIC6!|i=ogk/5l#V">
                                  <field name="TEXT">Mein_Test_Boolean</field>
                                </block>
                              </value>
                              <value name="ARG2">
                                <block type="text" id="L5ulp_swl_c@^WXuRt$]">
                                  <field name="TEXT">boolean</field>
                                </block>
                              </value>
                              <value name="ARG3">
                                <block type="logic_boolean" id="wkUbqDv{k1SA(__`([cc">
                                  <field name="BOOL">TRUE</field>
                                </block>
                              </value>
                              <value name="ARG4">
                                <block type="text" id="}JGSQW)pe7%!];~aDG-W">
                                  <field name="TEXT"></field>
                                </block>
                              </value>
                              <value name="ARG5">
                                <block type="logic_boolean" id="%:^.D{FIyHk4cMis|Q4b">
                                  <field name="BOOL">FALSE</field>
                                </block>
                              </value>
                              <next>
                                <block type="comment" id="xS03/Vf|O#tR*siuUQ{5">
                                  <field name="COMMENT">kWh</field>
                                  <next>
                                    <block type="procedures_callcustomnoreturn" id="c[Sy+wM8GeeL2=vrt:hy">
                                      <mutation name="CreatyMyStateV3">
                                        <arg name="RootPath"></arg>
                                        <arg name="ValueName"></arg>
                                        <arg name="TargetType"></arg>
                                        <arg name="TargetIsWriteable"></arg>
                                        <arg name="TargetUnit"></arg>
                                        <arg name="TargetDefaultValue"></arg>
                                      </mutation>
                                      <value name="ARG0">
                                        <block type="variables_get" id="@QkZl7LqofYBl`EMr,Dx">
                                          <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                                        </block>
                                      </value>
                                      <value name="ARG1">
                                        <block type="text" id="VAJ;l;/[j~zPvYm/QqId">
                                          <field name="TEXT">Mein_Test_kWh</field>
                                        </block>
                                      </value>
                                      <value name="ARG2">
                                        <block type="text" id="EEsLej~G+k:#U~n5xxY6">
                                          <field name="TEXT">number</field>
                                        </block>
                                      </value>
                                      <value name="ARG3">
                                        <block type="logic_boolean" id="IUTW[TQ1=czdK/zsGybc">
                                          <field name="BOOL">TRUE</field>
                                        </block>
                                      </value>
                                      <value name="ARG4">
                                        <block type="text" id="u%*q8d$3n[zEMWfQ%w(0">
                                          <field name="TEXT">kWh</field>
                                        </block>
                                      </value>
                                      <value name="ARG5">
                                        <block type="math_number" id="~D.kzZ/Ty)TFH7C^|3CE">
                                          <field name="NUM">72</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="comment" id="DJ;J_wTj#zl}dM,3_|ns">
                                          <field name="COMMENT">% Zahl</field>
                                          <next>
                                            <block type="procedures_callcustomnoreturn" id="IroeW5.+4(SnlFjhg@@*">
                                              <mutation name="CreatyMyStateV3">
                                                <arg name="RootPath"></arg>
                                                <arg name="ValueName"></arg>
                                                <arg name="TargetType"></arg>
                                                <arg name="TargetIsWriteable"></arg>
                                                <arg name="TargetUnit"></arg>
                                                <arg name="TargetDefaultValue"></arg>
                                              </mutation>
                                              <value name="ARG0">
                                                <block type="variables_get" id="MA$JYk3c8]a5*Hu*)u8B">
                                                  <field name="VAR" id="6#H4rASkoUt5zIIwARJ;">Stammpfad</field>
                                                </block>
                                              </value>
                                              <value name="ARG1">
                                                <block type="text" id="g:k+~9!bew$*)3IPU59`">
                                                  <field name="TEXT">Mein_Test_Prozent</field>
                                                </block>
                                              </value>
                                              <value name="ARG2">
                                                <block type="text" id="YD!!HrbK`%i}U/]{21-#">
                                                  <field name="TEXT">number</field>
                                                </block>
                                              </value>
                                              <value name="ARG3">
                                                <block type="logic_boolean" id="94ekT=!c%}2yK{lZ02{T">
                                                  <field name="BOOL">TRUE</field>
                                                </block>
                                              </value>
                                              <value name="ARG4">
                                                <block type="text" id="*=LQ{FyLM}I/s|xLO^_I">
                                                  <field name="TEXT">%</field>
                                                </block>
                                              </value>
                                              <value name="ARG5">
                                                <block type="math_number" id="bcN2aoW4bI1:Y~`uzSM0">
                                                  <field name="NUM">72</field>
                                                </block>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
                <block type="create" id="IQ;+nwEO/Ugu#pu0-4%g" x="113" y="688">
                  <field name="NAME">0_userdata.0.000-Testen.MeinWert_Prozent</field>
                  <value name="VALUE">
                    <block type="math_number" id="aig):o)b^kV85oVK(/yL">
                      <field name="NUM">0</field>
                    </block>
                  </value>
                  <value name="COMMON">
                    <block type="text" id="G~lppP6eh58MqL5/@EMZ">
                      <field name="TEXT">{ "type": "number", "name": "MeinWert", "read": true, "write": true , "unit" : "%" }</field>
                    </block>
                  </value>
                  <next>
                    <block type="create_ex" id="~Qn#,B?tGP62!{Q~CaMp">
                      <field name="NAME">0_userdata.0.000-Testen.MeinWert_Boolean</field>
                      <field name="TYPE">boolean</field>
                      <field name="READABLE">TRUE</field>
                      <field name="WRITEABLE">TRUE</field>
                      <value name="VALUE">
                        <block type="logic_boolean" id="%a^I]Fd;o,H2sQnL=%ee">
                          <field name="BOOL">TRUE</field>
                        </block>
                      </value>
                    </block>
                  </next>
                </block>
              </xml>
              

              In allen Fällen werden die Datenpunkte so erzeugt das man diese danach sofort verwenden kann.
              Später / weiter unten im Skript nutze ich die Datenpunkte immer per Textfelder:
              846342ac-e13a-47a7-9f6f-2fb61bd98666-image.png
              15d8bad9-2cee-4719-ae11-6f3739cb674e-image.png
              903d4848-bde3-4a4a-9c2c-2e723a5648cd-image.png

              Will ich die Pfade ändern bzw. eine weitere version meines Skriptes laufen lassen aber mit anderen Datenpunkten muss ich nur oben die Variable Stammpfad ändern und die anderen Datenpunkte landen an eben diesen neuen Pfad.
              Das mach ich mit allen Objekten, also auch mit Zigbee-Sensoren. da speichere ich mir den Pfad zum Objekt auch in einer Variablen und nutze unten nach dem gleichen Schema diese Variable statt des Datenpunktes. Wie du siehst kann man überall auch Textfelder draufziehen wo er eigentlich ein Dialogfeld für die Auswahl anbietet.
              Durch das zusammenbauen kann ich den Pfad zum ZigBee-Sensor angeben:
              zigbee.0.00158d00044c0e6b
              und hänge dann an was genau ich haben will per erstelle Text aus, also zum Beispiel .temperature oder .humidity
              Zum einen finde ich das lesbarer, zum anderen kann das so auch in eigene Funktionen packen die ich dann mit dem Pfad des jeweiligen Sensors aufrufe - du kanns ka auch aus Blockly-Bausteinen Funktionen bauen.

              F Offline
              F Offline
              Fibricus
              schrieb am zuletzt editiert von
              #10

              @bananajoe WOW - das werde ich wohl ein paar mal lesen und mit spielen müssen, bis ich (als Anfänger) das verstehe.
              Vielen Dank für dieses ausführliche Posting!
              Genau dafür liebe ich solche Foren...

              BananaJoeB 1 Antwort Letzte Antwort
              0
              • F Fibricus

                @bananajoe WOW - das werde ich wohl ein paar mal lesen und mit spielen müssen, bis ich (als Anfänger) das verstehe.
                Vielen Dank für dieses ausführliche Posting!
                Genau dafür liebe ich solche Foren...

                BananaJoeB Offline
                BananaJoeB Offline
                BananaJoe
                Most Active
                schrieb am zuletzt editiert von
                #11

                @fibricus ich hätte auch noch - bei Bedarf - eine pure JavaScript Variante. Eigentlich ist das nur ein Befehl, ich habe mir (mit Hilfe dieses Forums) aber ebenfalls das als Funktion gebaut damit man die Datenpunkte unmittelbar nach dem erstellen Verwenden kann. Der bedarf besteht zwar in der Regel nur beim allerersten Start, aber auch dann soll ja gleich alles ordentlich laufen.

                Das müsste ich dann aber noch mal vorher "schön" machen

                ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                JoJo58J 1 Antwort Letzte Antwort
                0
                • BananaJoeB BananaJoe

                  @fibricus ich hätte auch noch - bei Bedarf - eine pure JavaScript Variante. Eigentlich ist das nur ein Befehl, ich habe mir (mit Hilfe dieses Forums) aber ebenfalls das als Funktion gebaut damit man die Datenpunkte unmittelbar nach dem erstellen Verwenden kann. Der bedarf besteht zwar in der Regel nur beim allerersten Start, aber auch dann soll ja gleich alles ordentlich laufen.

                  Das müsste ich dann aber noch mal vorher "schön" machen

                  JoJo58J Offline
                  JoJo58J Offline
                  JoJo58
                  schrieb am zuletzt editiert von
                  #12

                  @bananajoe

                  Moin, mich würde das definitiv interessieren.

                  Meinst du sowas in der Art:

                  
                  Name = dp_value;
                  Path = path;
                  
                  const obj = {
                      type: 'state',
                      name: Name,
                      native: {},
                      
                      "common": {
                      "name": Name,
                      "desc": "Von Blockly erzeugt",
                      "role": "value",
                      "type": "number",
                      "read": true,
                      "write": true,
                      "def": 0,
                        }
                  }
                  
                  if(!existsObject(Path + "." + Name)) { 
                      setObject(Path + "." + Name, obj); 
                      return 1;
                  }else{
                      return 0;
                  }
                  
                  

                  Das ist ja nur die Funktion mit Pfad und Name. Wenn du da etwas schöneres hast, dann immer her damit.

                  Gruß, Johannes

                  Intel NUC i7 64GB 1TB SSD - Proxmox - Raspi 4 8GB 500 GB SSD - Raspi 4 4GB 500GB SSD - Qnap 16TB - CCU3 - Fritz 6591 Cable - Green Cell USV 1500VA
                  Sonoff CC2652P - HUE Bridge - Broadlink RM4 pro u. RM3 mini - 5 x Echo - 1 x Samsung STab 8 - 54 x HM und HMIP - 32 x Zigbee - 2 x Shelly 3EM.
                  Einfach ein tolles Hobby :-)

                  1 Antwort Letzte Antwort
                  0
                  • BananaJoeB Offline
                    BananaJoeB Offline
                    BananaJoe
                    Most Active
                    schrieb am zuletzt editiert von BananaJoe
                    #13

                    @jojo58 Der Trick ist das die Erstellung in eine Async-Funktion gesteckt werden muss.
                    Ich habe mal aus einem meiner vorhandenen Skripte das ordentlich zusammengekürzt:

                    // Setup
                    var s_DeviceName = "HC-SR04-01";
                    // Suffix wird an den Devicenamen für die Zieldatenpunkte angehängt, z.B. "-Waschmaschine" (KEINE Punkte!!!)
                    var s_Suffix = "-Regenwassergrube";
                    // Festlegen der Skriptversion (für Auswertungen)
                    var s_VersionJSScript = "1.20"
                    
                    
                    // Datenpunktstammpfad
                    var s_state_rootpath = "0_userdata.0.000-Testen.tasmota.";
                    var s_state_FullPath = s_state_rootpath + s_DeviceName + s_Suffix;
                    
                    
                    // Benötigte Datenpunkte erstellen
                    async function CreateMyStatesAndStartup() {
                        try {
                            // #######################################################################################################
                            // POWER
                            await createStateAsync(s_state_FullPath + ".POWER", false, {
                                type: 'boolean',
                                read: true,
                                write: true,
                                role: "switch",
                                name: s_DeviceName + s_Suffix + '.POWER'
                            });
                            // #######################################################################################################
                            // Version-JS-Script
                            await createStateAsync(s_state_FullPath + ".Version-JS-Script", s_VersionJSScript, {
                                type: 'string',
                                read: true,
                                write: false,
                                name: 'Version-JS-Script'
                            });
                            // #######################################################################################################
                            // Version-JS-Script-Path
                            await createStateAsync(s_state_FullPath + ".Version-JS-Script-Path", scriptName, {
                                type: 'string',
                                read: true,
                                write: false,
                                name: 'Name und Pfad des Skriptes'
                            });
                        }
                        catch (error) {
                            console.warn(error);
                            log(error);
                        }
                    }
                    
                    
                    // Zielpunkte anlegen falls noch nicht vorhanden
                    // Das erstellen machen wir in einer async Funktion
                    CreateMyStatesAndStartup();
                    
                    // Hier der Rest deines Skriptes, alle obigen Datenpunkte sind nun nutzbar
                    

                    Die ersten Zeilen legen den Gerätenamen fest (Setup). Grund ist das ich bei Updates des Skriptes den ganzen Rest darunter einfach überschreibe (das stammt aus einem Skript was für jedes einzelne Tasmota-Gerät bei mir einmal läuft)

                    Es folgt der Abschnitt Variablen in welchen ich den Stammpfad festlege.

                    Dann die Funktion CreateMyStatesAndStartup welche die Datenpunkte bei Aufruf anlegt. ...AndStartup weil ich darin noch ein paar andere Dinge tue. Schon innerhalb der Funktion kann man die Datenpunkte dann sofort nutzen. Ich erstelle die alle und hole mir dann schon ein paar Grundwerte und trage die ein.

                    Den Abschnitt Datenpunkte - der ist noch historisch. Da stand mal alles drin was nun in der Funktion ist. Diese wird dort einfach nur aufgerufen

                    Dann kommen die Subscription - also die ganzen Trigger die dann entsprechend reagieren.

                    Das mit den Bannern im Quelltext ist so ein Spleen von mir, das mach schon seit Jahrzehnten so um in Skripten / Programmen dinge schneller wiederzufinden bzw. zu Ordnen (ich habe nicht immer eine richtige Entwicklungsumgebung)

                    Nachtrag: Keine Ahnung wo die ganzen {1} herkommen, beim reinkopieren sind die noch nicht da, ich schau mal ob ich diese weg bekomme

                    Nachtrag 2: er mochte die Banner nicht, die habe ich nun gelöscht

                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                    JoJo58J 1 Antwort Letzte Antwort
                    1
                    • BananaJoeB BananaJoe

                      @jojo58 Der Trick ist das die Erstellung in eine Async-Funktion gesteckt werden muss.
                      Ich habe mal aus einem meiner vorhandenen Skripte das ordentlich zusammengekürzt:

                      // Setup
                      var s_DeviceName = "HC-SR04-01";
                      // Suffix wird an den Devicenamen für die Zieldatenpunkte angehängt, z.B. "-Waschmaschine" (KEINE Punkte!!!)
                      var s_Suffix = "-Regenwassergrube";
                      // Festlegen der Skriptversion (für Auswertungen)
                      var s_VersionJSScript = "1.20"
                      
                      
                      // Datenpunktstammpfad
                      var s_state_rootpath = "0_userdata.0.000-Testen.tasmota.";
                      var s_state_FullPath = s_state_rootpath + s_DeviceName + s_Suffix;
                      
                      
                      // Benötigte Datenpunkte erstellen
                      async function CreateMyStatesAndStartup() {
                          try {
                              // #######################################################################################################
                              // POWER
                              await createStateAsync(s_state_FullPath + ".POWER", false, {
                                  type: 'boolean',
                                  read: true,
                                  write: true,
                                  role: "switch",
                                  name: s_DeviceName + s_Suffix + '.POWER'
                              });
                              // #######################################################################################################
                              // Version-JS-Script
                              await createStateAsync(s_state_FullPath + ".Version-JS-Script", s_VersionJSScript, {
                                  type: 'string',
                                  read: true,
                                  write: false,
                                  name: 'Version-JS-Script'
                              });
                              // #######################################################################################################
                              // Version-JS-Script-Path
                              await createStateAsync(s_state_FullPath + ".Version-JS-Script-Path", scriptName, {
                                  type: 'string',
                                  read: true,
                                  write: false,
                                  name: 'Name und Pfad des Skriptes'
                              });
                          }
                          catch (error) {
                              console.warn(error);
                              log(error);
                          }
                      }
                      
                      
                      // Zielpunkte anlegen falls noch nicht vorhanden
                      // Das erstellen machen wir in einer async Funktion
                      CreateMyStatesAndStartup();
                      
                      // Hier der Rest deines Skriptes, alle obigen Datenpunkte sind nun nutzbar
                      

                      Die ersten Zeilen legen den Gerätenamen fest (Setup). Grund ist das ich bei Updates des Skriptes den ganzen Rest darunter einfach überschreibe (das stammt aus einem Skript was für jedes einzelne Tasmota-Gerät bei mir einmal läuft)

                      Es folgt der Abschnitt Variablen in welchen ich den Stammpfad festlege.

                      Dann die Funktion CreateMyStatesAndStartup welche die Datenpunkte bei Aufruf anlegt. ...AndStartup weil ich darin noch ein paar andere Dinge tue. Schon innerhalb der Funktion kann man die Datenpunkte dann sofort nutzen. Ich erstelle die alle und hole mir dann schon ein paar Grundwerte und trage die ein.

                      Den Abschnitt Datenpunkte - der ist noch historisch. Da stand mal alles drin was nun in der Funktion ist. Diese wird dort einfach nur aufgerufen

                      Dann kommen die Subscription - also die ganzen Trigger die dann entsprechend reagieren.

                      Das mit den Bannern im Quelltext ist so ein Spleen von mir, das mach schon seit Jahrzehnten so um in Skripten / Programmen dinge schneller wiederzufinden bzw. zu Ordnen (ich habe nicht immer eine richtige Entwicklungsumgebung)

                      Nachtrag: Keine Ahnung wo die ganzen {1} herkommen, beim reinkopieren sind die noch nicht da, ich schau mal ob ich diese weg bekomme

                      Nachtrag 2: er mochte die Banner nicht, die habe ich nun gelöscht

                      JoJo58J Offline
                      JoJo58J Offline
                      JoJo58
                      schrieb am zuletzt editiert von
                      #14

                      @bananajoe

                      Danke dir, werde mich mal damit beschäftigen. Übrigens, mit den Bannern, das hatte schon was :smiley: erinnerte mich an früher, als es noch so Info Dateien zu kleinen Programmen hab.

                      Intel NUC i7 64GB 1TB SSD - Proxmox - Raspi 4 8GB 500 GB SSD - Raspi 4 4GB 500GB SSD - Qnap 16TB - CCU3 - Fritz 6591 Cable - Green Cell USV 1500VA
                      Sonoff CC2652P - HUE Bridge - Broadlink RM4 pro u. RM3 mini - 5 x Echo - 1 x Samsung STab 8 - 54 x HM und HMIP - 32 x Zigbee - 2 x Shelly 3EM.
                      Einfach ein tolles Hobby :-)

                      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

                      796

                      Online

                      32.7k

                      Benutzer

                      82.4k

                      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