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.5k

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

  • 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.
  • F Offline
    F Offline
    Fibricus
    schrieb am zuletzt editiert von
    #4

    @bananajoe said in Datenpunkte im Objekte-Baum verschieben:

    Tipp für die Zukunft: Meine Skripts haben als Anfang immer das erstellen der Datenpunkte, dazu gibt es entsprechende Blöcke in Blockly und Befehle in JavaScript. Ich setze immer eine Variable als Stammpfad und ausgehend von der lasse ich alle anderen Datenpunkte im Skript anlegen und verwende diese.
    So kann ich wenn ich den Pfad ändern will (oder eine 2. Version des Skriptes laufen will) das einmal am Kopf ändern und der Rest passiert von alleine

    Das hört sich toll an, aber ich verstehe das leider nichtwirklich.
    Hättest Du mal ein kleines Beispiel?

    1 Antwort Letzte Antwort
    0
    • 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

                        293

                        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