Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Anfängerfrage: Wie komme ich zum Schwester / Parent Objekt

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Anfängerfrage: Wie komme ich zum Schwester / Parent Objekt

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

      Hallo Zusammen,
      meine Javascriptkenntnisse sind auf einfachsten Grundschullevel, daher bitte ich um eine kurzen Tipp wie man folgende Aufgabe "sinnvoll" lößt:

      Ich habe einen Trigger auf all meine Shelly Objekte

      on({id: /^shelly.0.*.rssi/, change: "ne"}, function(obj) {
      if (obj.state.val < '-60'){
      console.log('WiFi RSSI for Shelly Device [' + obj.id + '] below -60 db.')
      }
      })
      
      

      Das Funktioniert auch alles wunderbar.

      (25987) script.js.common.Notification.Shelly_CheckforBadWifi: WiFi RSSI for Shelly Device [shelly.0.SHSW-25#BCDDC277ABAD#1.rssi] below -60 db.
      

      Nun möchte ich aber, dass wenn der RSSI State < '-60' ist, der Shelly automatisch neu gestartet wird.
      Hierzu gibt es bei jedem Shelly Gerät einen "Reboot" Button.

      shelly.0.SHSW-25#BCDDC277ABAD#1.reboot
      

      Nur wie komme bekomme ich nun zu diesen Wert?
      Ich kann natürlich den Wert "obj.id" am letzten Punkt abschneiden und dann "reboot" dem String hinzufügen. Aber da ja Java(Script) Objektbasiert ist, müsste es doch irgendwas mit "Parent Objekt" oder so geben?

      Hat hier wer jemand einen Tipp für mich?

      Danke

      da_Woody arteck paul53 3 Replies Last reply Reply Quote 0
      • da_Woody
        da_Woody @Raducanu last edited by

        @raducanu said in Anfängerfrage: Wie komme ich zum Schwester / Parent Objekt:
        sorry, kann dir zwar nicht helfen, aber

        wenn der RSSI State < '-60' ist, der Shelly automatisch neu gestartet wird.

        was soll das bringen? glaubst du das der rssi dann besser ist?

        mickym 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @da_Woody last edited by

          @da_woody said in Anfängerfrage: Wie komme ich zum Schwester / Parent Objekt:

          @raducanu said in Anfängerfrage: Wie komme ich zum Schwester / Parent Objekt:
          sorry, kann dir zwar nicht helfen, aber

          wenn der RSSI State < '-60' ist, der Shelly automatisch neu gestartet wird.

          was soll das bringen? glaubst du das der rssi dann besser ist?

          Mit der neuen FW ist das doch quasi schon eingebaut - da braucht man gar nichts mehr tun.

          screen.png

          da_Woody 1 Reply Last reply Reply Quote 0
          • da_Woody
            da_Woody @mickym last edited by da_Woody

            @mickym ja, connection lost, aber nicht abhängig vom rssi.

            R 1 Reply Last reply Reply Quote 0
            • R
              Raducanu @da_Woody last edited by

              @da_woody

              Sorry, aber das war doch gar nicht die Frage. Sondern wie komme ich zum Parent Object.

              Und ja, ich habe ein Fritzbox Mesh WLAN. Manchmal (wieso auch immer) verbinden sich die Shellys mit einem Mesh Repeater deutlich weiter entfernt.
              Nach einem Reboot wird dann i.d.R. der stärkste Repeater genommen.

              Z.b. bei mir im Schlafzimmer: Vor dem Reboot -75db, nach dem Reboot -45db. Nur weil ein anderer Repeater genommen wurde.

              1 Reply Last reply Reply Quote 0
              • arteck
                arteck Developer Most Active @Raducanu last edited by

                @raducanu da du ja schonn das wort Objektbasierend benutzt wirst du auch wissen was setter und getter Methoden sind

                setState
                getState

                1 Reply Last reply Reply Quote 0
                • R
                  Raducanu last edited by Raducanu

                  @arteck

                  Das ist mir klar.
                  Aber für SetState benötige ich das Objekt
                  'shelly.0.SHSW-25#BCDDC277ABAD#1.reboot'

                  Die Frage ist wie komme ich !schlau! von
                  'shelly.0.SHSW-25#BCDDC277ABAD#1.rssi'
                  nach
                  'shelly.0.SHSW-25#BCDDC277ABAD#1.reboot'

                  Methode 1 ("Dummes Replace")
                  $obj = 'shelly.0.SHSW-25#BCDDC277ABAD#1.rssi'.replace('rssi','reboot')
                  SetState ('$obj',true)

                  Metode 2 (mit Object Mitteln)
                  $parent = 'shelly.0.SHSW-25#BCDDC277ABAD#1.rssi'.parent
                  SetState ($parent.reboot,true)

                  Methode 1 kriege ich hin, bei Methode zwei istelle ich mir halt die Frage, wie ich an das Übergeordnete Objekt von 'shelly.0.SHSW-25#BCDDC277ABAD#1.rssi' komme (also shelly.0.SHSW-25#BCDDC277ABAD#1).
                  Weil spätestens wenn ich nicht genau weiß, in welcher Ebene ich mich befinde, funktioniert ein einfaches Replace nicht mehr (oder ich muß für jeden Anwendungsfall ein eigenes Script bauen)

                  Mir geht es hier aktuell um das lernen von Javascript in Bezug auf ioBroker....

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Raducanu last edited by

                    @raducanu said: müsste es doch irgendwas mit "Parent Objekt" oder so geben?

                    Nein, so etwas gibt es nicht. Die Strukturen werden durch Punkte in der Objekt-ID gebildet, wobei es leider keine einheitliche Struktur gibt.

                    R 1 Reply Last reply Reply Quote 1
                    • R
                      Raducanu @paul53 last edited by

                      @paul53
                      Ok, danke für die Info.

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Raducanu last edited by paul53

                        @raducanu
                        Funktion, mit der man die ID des Parent-Objektes ermitteln kann:

                        function idParent(id) { // id = Datenpunkt-ID
                            id = id.substring(0, id.lastIndexOf('.'));
                            if(existsObject(id)) return id;
                            id = id.substring(0, id.lastIndexOf('.'));
                            if(existsObject(id)) return id;
                        }
                        
                        mickym 1 Reply Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @paul53 last edited by mickym

                          @paul53 oder man nutzt einen "regulären Ausdruck". 😉

                          // Beispiel für id
                          // var id = "0_userdata.0.test"; 
                          parent = id.replace(/(.*)\..*$/g,"$1");
                          

                          allerdings zugegeben ohne Überprüfung auf Existenz.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          485
                          Online

                          31.7k
                          Users

                          79.6k
                          Topics

                          1.3m
                          Posts

                          5
                          11
                          534
                          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