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.
    • K
      Kusi last edited by Kusi

      Ist es möglich mit Blockly den "Raum" eines Datenpunktes zu ändern?
      051d50f0-a100-4c7d-95a5-5fbeb89d707b-image.png
      Für die Zimmerreinigung mit dem Roborock S7 möchte ich so die zu reinigende Räume eintragen.

      haus-automatisierung 1 Reply Last reply Reply Quote 0
      • 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

                                    603
                                    Online

                                    32.0k
                                    Users

                                    80.5k
                                    Topics

                                    1.3m
                                    Posts

                                    4
                                    16
                                    813
                                    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