Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [Gelöst] "Raum" von einem Datenpunkt mit Blockly zuordnen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst] "Raum" von einem Datenpunkt mit Blockly zuordnen

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

      @kusi
      Man muss sich dazu eine javascript-Funktion basteln.
      getObject(id,true) -> setObject mit neuem Room
      93a88970-072f-4ad5-97c6-b07831dfa291-image.png

      K 1 Reply Last reply Reply Quote 0
      • haus-automatisierung
        haus-automatisierung Developer Most Active @Kusi last edited by haus-automatisierung

        @kusi sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

        die zu reinigende Räume eintragen.

        Wenn Du dort den Raum setzt, dann fügst Du den State nur zu den Aufzählungen hinzu. Ich glaube nicht, dass der Roborock Adapter die Raumliste nutzt?!
        Zumal der Name des Zustandes ja eher vermuten lässt, dass man dort nur eine Option aktiviert (ja/nein). Ist ja boolean.

        Ansonsten kann man z.B. so ein State (Zustand) zu einem Enum (Aufzählung) hinzufügen:

        https://github.com/haus-automation/iobroker-script-examples/blob/main/objects-states/add-objectid-to-enum.md

        K 1 Reply Last reply Reply Quote 1
        • K
          Kusi @haus-automatisierung last edited by

          @haus-automatisierung sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

          Wenn Du dort den Raum setzt, dann fügst Du den State nur zu den Aufzählungen hinzu. Ich glaube nicht, dass der Roborock Adapter die Raumliste nutzt?!

          Doch, ich habe es getestet.
          Fügt man bei "Raum" die zu reinigenden Räume hinzu und setzt dann denn State auf "true", dann beginnt die Reinigung der ausgewählten Räumen.

          1 Reply Last reply Reply Quote 0
          • K
            Kusi @MCU last edited by

            @mcu sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

            getObject(id,true) -> setObject mit neuem Room

            Kannst du das eventuell etwas erläutern?

            1 Reply Last reply Reply Quote 0
            • M
              MCU last edited by MCU

              @kusi Schau auf den Link von @haus-automatisierung , dort wird es gezeigt. Es sollte dort noch abgefragt, ob die ID schon zugeordnet wurde. Nutzt man die Funktion öfter, wird sonst immer wieder der DP angehängt.

              haus-automatisierung K 2 Replies Last reply Reply Quote 1
              • haus-automatisierung
                haus-automatisierung Developer Most Active @MCU last edited by

                @mcu Guter Hinweis - habe ich im Script hinzugefügt

                K 1 Reply Last reply Reply Quote 0
                • K
                  Kusi @MCU last edited by

                  @mcu @haus-automatisierung
                  Vielen Dank für eure Antworten.
                  Ich verstehe das Skript zuwenig, aber ich glaube auch, dass ich es vielleicht nicht ganz deutlich erklärt habe.

                  Ich muss einem fixen Datenpunkt (nennen wir ihn "clean room") die zu reinigenden Räume per "Raum" zuordnen.
                  Will ich z.B. Wohnzimmer und Esszimmer reinigen, dann ordne ich dem Datenpunkt "clean room" die 2 Räume "Wohnzimmer" und "Esszimmer" zu, danach setze ich den State vom Datenpunkt "clean room" auf true.
                  Die Räume ändern sich immer wieder, beziehungsweise sollte nach einer erfolgten Reinigung diese Zuordnung auch wieder aufgeboben werden.

                  Ich muss dabei KEINE Object ID's oder dergleichen schreiben, nur den/die Raumname/-n.
                  Dies kann gerne manuell per Blockly über die Textbausteine geschehen.

                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                  • haus-automatisierung
                    haus-automatisierung Developer Most Active @Kusi last edited by

                    @kusi sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

                    Ich muss dabei KEINE Object ID's oder dergleichen schreiben, nur den/die Raumname/-n.

                    Du weißt schon, dass ALLES im ioBroker ein Objekt ist? 🙂

                    K 1 Reply Last reply Reply Quote 0
                    • K
                      Kusi @haus-automatisierung last edited by

                      @haus-automatisierung sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

                      Du weißt schon, dass ALLES im ioBroker ein Objekt ist?

                      Nein, das wusste ich nicht. Danke

                      1 Reply Last reply Reply Quote 0
                      • K
                        Kusi @haus-automatisierung last edited by Kusi

                        @haus-automatisierung sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

                        @mcu Guter Hinweis - habe ich im Script hinzugefügt

                        Beim zweiten Anlauf hat es geklappt. Hatte die Funktion nicht "gestartet".

                        Die Variablen konnte ich auch einwandfrei einbauen.
                        Nun frage ich mich, wie lässt sich der Raum wieder entfernen, oder noch besser alle Räume auf einmal?

                        1 Reply Last reply Reply Quote 0
                        • M
                          MCU last edited by

                          @kusi z.B.

                          function delAllEnum(objId){
                              if (existsObject(objId)) {  
                                  const idObj = getObject(objId,true);
                                  let enumArr = idObj.enumIds;
                                  if(enumArr.length>0){
                                      for(let i=0;i<enumArr.length;i++){
                                          let enumObj = getObject(enumArr[i]);
                                          const index = enumObj.common.members.indexOf(objId);
                                          if (index > -1) { 
                                              enumObj.common.members.splice(index, 1);
                                              extendObject(enumArr[i], {
                                                      common: {
                                                          members: enumObj.common.members
                                                      }
                                              });
                                              
                                          }
                                      }
                                  }else{
                                      log(`Object with ID ${objId} have no Enum`,'warn');
                                  }
                              } else {
                                  throw new Error(`Object with ID ${objId} does not exist`);
                              }
                          }
                          
                          
                          K 2 Replies Last reply Reply Quote 0
                          • K
                            Kusi @MCU last edited by

                            @mcu Herzlichen Dank, es klappt. So sieht nun der Teil aus für das Eintragen des Raumes und Löschen vom Raum.

                            6c1c9027-014b-4d23-8f56-007f550a7e77-image.png

                            <xml xmlns="https://developers.google.com/blockly/xml">
                              <variables>
                                <variable id="m5[!xu|Wi0|iUPD0]$(n">enumId</variable>
                                <variable id="bew6)lW6-(k7ff;qA4o=">objId</variable>
                                <variable id="~ij?Yx^iTdvm/69t5MMk">Raum</variable>
                              </variables>
                              <block type="comment" id="^vx4q,|Hp?5}y[]{%oI*" x="538" y="-213">
                                <field name="COMMENT">Datenpunkt setzen</field>
                                <next>
                                  <block type="variables_set" id="aGTG1Sk.woJi$Bn)JC?G">
                                    <field name="VAR" id="bew6)lW6-(k7ff;qA4o=">objId</field>
                                    <value name="VALUE">
                                      <block type="field_oid" id="SEniN^*TqD%`9wriO1-G">
                                        <field name="oid">0_userdata.0.test</field>
                                      </block>
                                    </value>
                                  </block>
                                </next>
                              </block>
                              <block type="on" id="IB$_f2$p}D,k`h8bD)+d" x="188" y="-87">
                                <field name="OID">0_userdata.0.Roborock_S7.Reinigung_starten.Räume.Ankleidezimmer</field>
                                <field name="CONDITION">true</field>
                                <field name="ACK_CONDITION"></field>
                                <statement name="STATEMENT">
                                  <block type="procedures_callnoreturn" id="Sp!m7mrW#r*H71cM*:ok">
                                    <mutation name="Raumname">
                                      <arg name="Raum"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="text" id="eKxdbi_aTq[w!k0C3I~w">
                                        <field name="TEXT">Ankleidezimmer</field>
                                      </block>
                                    </value>
                                  </block>
                                </statement>
                              </block>
                              <block type="procedures_defnoreturn" id="8nsaO;9MQ.;T8wDeK=}z" x="188" y="113">
                                <mutation>
                                  <arg name="Raum" varid="~ij?Yx^iTdvm/69t5MMk"></arg>
                                </mutation>
                                <field name="NAME">Raumname</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                <statement name="STACK">
                                  <block type="procedures_callcustomnoreturn" id="j3=]hsERc$+:wG-[n}*X">
                                    <mutation name="Raum eintragen">
                                      <arg name="enumId"></arg>
                                      <arg name="objId"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="text_join" id="40dMHfUzYC2hFANB}0Bq">
                                        <mutation items="2"></mutation>
                                        <value name="ADD0">
                                          <block type="text" id="PX#i`.J.^04x5lZ~.aje">
                                            <field name="TEXT">enum.rooms.</field>
                                          </block>
                                        </value>
                                        <value name="ADD1">
                                          <block type="variables_get" id="3tp[McyNX%VXBk=AaDB=">
                                            <field name="VAR" id="~ij?Yx^iTdvm/69t5MMk">Raum</field>
                                          </block>
                                        </value>
                                      </block>
                                    </value>
                                    <value name="ARG1">
                                      <block type="variables_get" id="4hC{Mhp;GdUXMb=2eMcU">
                                        <field name="VAR" id="bew6)lW6-(k7ff;qA4o=">objId</field>
                                      </block>
                                    </value>
                                  </block>
                                </statement>
                              </block>
                              <block type="on" id="L%ST#I.PnkvpTL#~v;cf" x="812" y="113">
                                <field name="OID">0_userdata.0.Roborock_S7.Reinigung_starten.Raum_löschen</field>
                                <field name="CONDITION">true</field>
                                <field name="ACK_CONDITION"></field>
                                <statement name="STATEMENT">
                                  <block type="procedures_callcustomnoreturn" id="O]i(NdwAZ]EOTm^fG*6J">
                                    <mutation name="Raum löschen">
                                      <arg name="objId"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="variables_get" id="D(W1E=C~n]=1pC-]]1.,">
                                        <field name="VAR" id="bew6)lW6-(k7ff;qA4o=">objId</field>
                                      </block>
                                    </value>
                                  </block>
                                </statement>
                              </block>
                              <block type="procedures_defcustomnoreturn" id="}HM6fh4VbzlJ6Y-~?QB*" x="188" y="313">
                                <mutation statements="false">
                                  <arg name="enumId" varid="m5[!xu|Wi0|iUPD0]$(n"></arg>
                                  <arg name="objId" varid="bew6)lW6-(k7ff;qA4o="></arg>
                                </mutation>
                                <field name="NAME">Raum eintragen</field>
                                <field name="SCRIPT">aWYgKGV4aXN0c09iamVjdChvYmpJZCkpIHsNCiAgICBpZiAoZXhpc3RzT2JqZWN0KGVudW1JZCkpIHsNCiAgICAgICAgY29uc3QgZW51bU9iaiA9IGdldE9iamVjdChlbnVtSWQpOw0KDQogICAgICAgIGlmIChlbnVtT2JqLnR5cGUgPT09ICdlbnVtJykgew0KICAgICAgICAgICAgaWYgKCFlbnVtT2JqLmNvbW1vbi5tZW1iZXJzLmluY2x1ZGVzKG9iaklkKSkgew0KICAgICAgICAgICAgICAgIGVudW1PYmouY29tbW9uLm1lbWJlcnMucHVzaChvYmpJZCk7DQogICAgICAgICAgICAgICAgc2V0T2JqZWN0KGVudW1JZCwgZW51bU9iaik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYXJnZXQgb2JqZWN0IHdpdGggSUQgJHtlbnVtSWR9IGlzIG5vdCBhbiBlbnVtYCk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudW0gd2l0aCBJRCAke2VudW1JZH0gZG9lcyBub3QgZXhpc3RgKTsNCiAgICB9DQp9IGVsc2Ugew0KICAgIHRocm93IG5ldyBFcnJvcihgT2JqZWN0IHdpdGggSUQgJHtvYmpJZH0gZG9lcyBub3QgZXhpc3RgKTsNCn0NCg==</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="procedures_defcustomnoreturn" id="9f.]bC!e2ZsV2r}U3iJn" x="812" y="313">
                                <mutation statements="false">
                                  <arg name="objId" varid="bew6)lW6-(k7ff;qA4o="></arg>
                                </mutation>
                                <field name="NAME">Raum löschen</field>
                                <field name="SCRIPT">aWYgKGV4aXN0c09iamVjdChvYmpJZCkpIHsgIA0KICAgIGNvbnN0IGlkT2JqID0gZ2V0T2JqZWN0KG9iaklkLHRydWUpOw0KICAgIGxldCBlbnVtQXJyID0gaWRPYmouZW51bUlkczsNCiAgICBpZihlbnVtQXJyLmxlbmd0aD4wKXsNCiAgICAgICAgZm9yKGxldCBpPTA7aTxlbnVtQXJyLmxlbmd0aDtpKyspew0KICAgICAgICAgICAgbGV0IGVudW1PYmogPSBnZXRPYmplY3QoZW51bUFycltpXSk7DQogICAgICAgICAgICBjb25zdCBpbmRleCA9IGVudW1PYmouY29tbW9uLm1lbWJlcnMuaW5kZXhPZihvYmpJZCk7DQogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgeyANCiAgICAgICAgICAgICAgICBlbnVtT2JqLmNvbW1vbi5tZW1iZXJzLnNwbGljZShpbmRleCwgMSk7DQogICAgICAgICAgICAgICAgZXh0ZW5kT2JqZWN0KGVudW1BcnJbaV0sIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbjogew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcnM6IGVudW1PYmouY29tbW9uLm1lbWJlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9ZWxzZXsNCiAgICAgICAgbG9nKGBPYmplY3Qgd2l0aCBJRCAke29iaklkfSBoYXZlIG5vIEVudW1gLCd3YXJuJyk7DQogICAgfQ0KfSBlbHNlIHsNCiAgICB0aHJvdyBuZXcgRXJyb3IoYE9iamVjdCB3aXRoIElEICR7b2JqSWR9IGRvZXMgbm90IGV4aXN0YCk7DQp9</field>
                                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                            </xml>
                            
                            1 Reply Last reply Reply Quote 0
                            • K
                              Kusi @MCU last edited by Kusi

                              @mcu Herzlichen Dank nochmals für eure Hilfe.

                              David G. 1 Reply Last reply Reply Quote 1
                              • David G.
                                David G. @Kusi last edited by David G.

                                @kusi

                                Ich hab den Thread jetzt 2 mal gelesen und verstehe noch nicht ganz wo für das ganze.....

                                Warum werden nicht einfach die gewünschten Räume auf true gesetzt und fertig? Los geht die Reinigung.

                                So mache ich es.
                                (Zumindest im Roborock Adapter)

                                K 1 Reply Last reply Reply Quote 0
                                • K
                                  Kusi @David G. last edited by

                                  @david-g sagte in [Gelöst] "Raum" von einem Datenpunkt mit Blockly zuordnen:

                                  Warum werden nicht einfach die gewünschten Räume auf true gesetzt und fertig?

                                  Habe ich zuerst versucht.
                                  Zumindest bei mir ist aber der Staubsauger dann nach jedem Raum zurück auf die Ladestation gefahren und hat den Mopp gereinigt.

                                  Starte ich mit obigem Blockly die Reinigung, dann reinigt der Staubsauger so lange, bis er bis zur vorgegebenen Zeit auf die Ladestation zur Moppreinigung fährt.

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  920
                                  Online

                                  32.0k
                                  Users

                                  80.5k
                                  Topics

                                  1.3m
                                  Posts

                                  4
                                  16
                                  815
                                  Loading More Posts
                                  • Oldest to Newest
                                  • Newest to Oldest
                                  • Most Votes
                                  Reply
                                  • Reply as topic
                                  Log in to reply
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                  The ioBroker Community 2014-2023
                                  logo