Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. String teilen - split-Befehl

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    String teilen - split-Befehl

    This topic has been deleted. Only users with topic management privileges can see it.
    • ub.privat
      ub.privat @dslraser last edited by

      @dslraser

      je mehr ich mich damit beschäftige, hast du recht.
      Die Werte entsprechen einer Werteliste.

      so z.Bsp.

      {
      "BSH.Common.EnumType.OperationState.Ready": "Ready",
      "BSH.Common.EnumType.OperationState.Inactive": "Inactive",
      "BSH.Common.EnumType.OperationState.Run": "Run",
      "BSH.Common.EnumType.OperationState.Finished": "Finished",
      "BSH.Common.EnumType.OperationState.Pause": "Pause",
      "BSH.Common.EnumType.OperationState.ActionRequired": "ActionRequired"
      }

      anderer Datenpunkt, aber identische Struktur:
      {
      "BSH.Common.EnumType.DoorState.Closed": "Closed",
      "BSH.Common.EnumType.DoorState.Open": "Open"
      }

      Verfolge deinen von die verlinkten Beitrag parallel.
      Da gibt es eine Menge Gemeinsamkeiten.
      Nur wenn ich noch nicht einmal den reinen Text extrahiert bekomme, dann ist es mit Sprache sicher noch schwieriger...?

      Ihr bastelt an einer "ähnlichen" Lösung...

      dslraser 1 Reply Last reply Reply Quote 0
      • dslraser
        dslraser Forum Testing Most Active @ub.privat last edited by

        @ub-privat
        die Lösung steht in dem Beitrag drinn, weil der Zustand, den Du auch haben möchtest, ausgegeben wird. Nur das hier das Ergebnis als Sprachausgabe benutzt wird.

        ub.privat 1 Reply Last reply Reply Quote 0
        • ub.privat
          ub.privat @dslraser last edited by

          @dslraser

          ok, dann muss ich noch einmal aufmerksam lesen!

          1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO last edited by

            ok, dann füge in das basic string widget genau wie oben folgendes ein

            {s:Datenpunkt;s.split('.')[s.split('.').length-1]}
            

            Ich habe eine Vermutung, warum die Anzeige des Wertes im iobroker und der Ausgabe in vis
            differiert. Es scheint mit den Enums zu tun zu haben, mit denen ich selbst noch nicht gearbeitet habe.
            Der Datenpunkt enthält nur den Enumtyp. Die Anzeige in iobroker ermittelt dir aber auch gleich den Wert dazu.
            Um es Einfach zu machen ist im obigen Befehl jetzt folgendes drin:
            splitte den Wert mittels dem Punkt und nehme aus dem erzeugten Array immer das letzte Element. der Zustand ist ja immer der Text nach dem letzten Punkt.

            ub.privat dslraser 3 Replies Last reply Reply Quote 1
            • ub.privat
              ub.privat @OliverIO last edited by

              @OliverIO said in String teilen - split-Befehl:

              {s:Datenpunkt;s.split('.')[s.split('.').length-1]}

              Tata: ES FUNKTIONIERT!!!

              3d1612d0-e3e2-499b-bbd7-a3878d8d638f-grafik.png

              Jetzt muss ich mich aber noch intensiv mit dem Split-Befehl auseinander setzen.
              Erst einmal vielen DANK.

              Das chöne daran ist, dass man immer wieder dazu lernt! Mein persönliches ioBroker-Kompendium wächst und wächst.

              1 Reply Last reply Reply Quote 0
              • ub.privat
                ub.privat last edited by

                Lerne gerad hier https://www.w3schools.com/jsreF/jsref_slice_string.asp
                Java für Einsteiger 😊

                OliverIO 1 Reply Last reply Reply Quote 0
                • dslraser
                  dslraser Forum Testing Most Active @OliverIO last edited by

                  @OliverIO sagte in String teilen - split-Befehl:

                  Um es Einfach zu machen ist im obigen Befehl jetzt folgendes drin:
                  splitte den Wert mittels dem Punkt und nehme aus dem erzeugten Array immer das letzte Element. der Zustand ist ja immer der Text nach dem letzten Punkt.

                  so habe ich es in dem von mir verlinkten Beitrag zu Beginn (weiter oben in dem Thread) auch gemacht.
                  Der "echte" Wert von der Werteliste,(der eingedeutschte) habe ich dann später mit der kleinen Funktion in Blockly ermittelt.

                  1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @ub.privat last edited by

                    @ub-privat sehr schön.
                    Allerdings sind Java und JavaScript Zwei unterschiedliche Sprachen. Aber für Iobroker bist du auf der richtigen Seite.

                    ub.privat 2 Replies Last reply Reply Quote 0
                    • ub.privat
                      ub.privat @OliverIO last edited by

                      @OliverIO

                      Das sind in JavaScript unendliche Weiten. Aber das Hirn hat noch ein paar freie Kapazitäten...

                      So schaut es nun aus:
                      1fcbb0e7-e786-4611-9e95-de8c2619f67d-grafik.png

                      Muss jetzt noch abfragen einbauen, die bei inaktiven Gerät "null" ausblendet.
                      Das undefiened bin ich noch am erkunden,,,
                      Es wird und das ist die Hauptsache!

                      1 Reply Last reply Reply Quote 0
                      • ub.privat
                        ub.privat @OliverIO last edited by

                        @OliverIO

                        habe gerade deine Signatur gelesen - Adapter für Squeezebox - klingt gut.
                        Aber ich suche etwas für TEUFEL/Raumfeld Komponenten. Steht bereits in der Adapteranfrage, aber scheinbar ohne Erfolg...

                        OliverIO 1 Reply Last reply Reply Quote 1
                        • OliverIO
                          OliverIO @ub.privat last edited by OliverIO

                          @ub-privat da hat wohl jemand angefangen aber nicht abgeschlossen
                          https://forum.iobroker.net/topic/19003/noch-nicht-testbereit-teufel-raumfeld-adapter

                          1 Reply Last reply Reply Quote 0
                          • dslraser
                            dslraser Forum Testing Most Active @OliverIO last edited by dslraser

                            @OliverIO sagte in String teilen - split-Befehl:

                            splitte den Wert mittels dem Punkt und nehme aus dem erzeugten Array immer das letzte Element. der Zustand ist ja immer der Text nach dem letzten Punkt.

                            @ub-privat

                            Der Wert nach dem letzten Punkt ist zwar fast immer der gleiche, aber nicht immer. Hier mal die Werte des Datenpunktes aus dem anderen Thread.

                                "ConsumerProducts.CoffeeMaker.Program.Beverage.Espresso": "Espresso",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.EspressoMacchiato": "Espresso Macchiato",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.Coffee": "Caffe Crema",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.Cappuccino": "Cappuccino",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.LatteMacchiato": "Latte Macchiato",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.CaffeLatte": "Milchkaffee",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.Ristretto": "Ristretto",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.MilkFroth": "Milchschaum",
                                "ConsumerProducts.CoffeeMaker.Program.Beverage.WarmMilk": "Warme Milch",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.KleinerBrauner": "Kleiner Brauner",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.GrosserBrauner": "Großer Brauner",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Verlaengerter": "Verlängerter",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.VerlaengerterBraun": "Verlängerter braun",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.WienerMelange": "Wiener Melange",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.FlatWhite": "Flat White",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Cortado": "Cortado",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.CafeCortado": "Café cortado",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.CafeConLeche": "Café con leche",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.CafeAuLait": "Café au lait",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Doppio": "Doppio",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Kaapi": "Kaapi",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.KoffieVerkeerd": "Koffie verkeerd",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Galao": "Galão",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Garoto": "Garoto",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.Americano": "Americano",
                                "ConsumerProducts.CoffeeMaker.Program.CoffeeWorld.RedEye": "Red Eye"
                            
                            

                            Ich vermute mal, das es in Deinem Datenpunkt im RAW Bereich ähnlich aussieht ?
                            Vergleiche mal z.B. Milchschaum. Nach der Splitt Methode bekommst Du nicht Milchschaum angezeigt, sondern MilkFroth. Die gezeigte Funktion im anderen Thread ermittelt den "echten Wert"
                            Ich bin unterwegs und nur am Handy, von daher kann ich es nicht besser zeigen.

                            1 Reply Last reply Reply Quote 0
                            • dslraser
                              dslraser Forum Testing Most Active last edited by

                              @ub-privat
                              hier noch mal das was ich meine.....(danach halte ich mich raus)

                              Testblockly mit Debug-Bausteinen. Hier wird vielleicht klar was ich meine. Oben die Funktion und unten die Splittmethode.

                              Bildschirmfoto 2020-01-03 um 17.43.31.png

                              Ergebnis:

                              Bildschirmfoto 2020-01-03 um 17.43.22.png

                              Hier die genutzte Funktion

                              Bildschirmfoto 2020-01-03 um 17.36.30.png

                              if(getObject(id).common.states) return getObject(id).common.states[val];
                              return id + ' Dieser Datenpunkt hat keinen Zustand !';
                              

                              <xml xmlns="http://www.w3.org/1999/xhtml">
                               <variables>
                                 <variable type="" id="y}n5NpIEF{U9uP/AG}OB">id</variable>
                                 <variable type="" id="u7#6,S]3U-LR0^kP5l]P">val</variable>
                               </variables>
                               <block type="procedures_defcustomreturn" id="7R:L*9?)7Wl^RqVg+G`q" x="13" y="13">
                                 <mutation statements="false">
                                   <arg name="id" varid="y}n5NpIEF{U9uP/AG}OB"></arg>
                                   <arg name="val" varid="u7#6,S]3U-LR0^kP5l]P"></arg>
                                 </mutation>
                                 <field name="NAME">Kaffeesorte</field>
                                 <field name="SCRIPT">aWYoZ2V0T2JqZWN0KGlkKS5jb21tb24uc3RhdGVzKSByZXR1cm4gZ2V0T2JqZWN0KGlkKS5jb21tb24uc3RhdGVzW3ZhbF07CnJldHVybiBpZCArICcgRGllc2VyIERhdGVucHVua3QgaGF0IGtlaW5lbiBadXN0YW5kICEnOw==</field>
                                 <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                               </block>
                               <block type="debug" id="s7Q~Dg^CTndwVGwE,*a7" x="12" y="88">
                                 <field name="Severity">log</field>
                                 <value name="TEXT">
                                   <shadow type="text" id="fQ4x5I0_yE)XMLP)wC~a">
                                     <field name="TEXT">test</field>
                                   </shadow>
                                   <block type="text_join" id="Kv@T0V3-5W4:|GmX@Cd(">
                                     <mutation items="2"></mutation>
                                     <value name="ADD0">
                                       <block type="text" id="9rUT6o2O96Lk9p/t;P!F">
                                         <field name="TEXT">Funktion-Werteliste: </field>
                                       </block>
                                     </value>
                                     <value name="ADD1">
                                       <block type="procedures_callcustomreturn" id="HpQS1cqWv}c}%Zepn}ax">
                                         <mutation name="Kaffeesorte">
                                           <arg name="id"></arg>
                                           <arg name="val"></arg>
                                         </mutation>
                                         <value name="ARG0">
                                           <block type="field_oid" id="j@NlUln%G`DESX4Ra8CJ">
                                             <field name="oid">homeconnect.0.BOSCH-CTL636ES6-68A40E26C6C6.programs.selected.BSH_Common_Root_SelectedProgram</field>
                                           </block>
                                         </value>
                                         <value name="ARG1">
                                           <block type="get_value" id="cDp+]Va_smIe?b)Fp`ks">
                                             <field name="ATTR">val</field>
                                             <field name="OID">homeconnect.0.BOSCH-CTL636ES6-68A40E26C6C6.programs.selected.BSH_Common_Root_SelectedProgram</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                                 <next>
                                   <block type="debug" id="K$o+3aO=Sadm^HBM$2$R">
                                     <field name="Severity">log</field>
                                     <value name="TEXT">
                                       <shadow type="text" id="fQ4x5I0_yE)XMLP)wC~a">
                                         <field name="TEXT">test</field>
                                       </shadow>
                                       <block type="text_join" id="wq(3B2wVQRPRNA!cQDle">
                                         <mutation items="2"></mutation>
                                         <value name="ADD0">
                                           <block type="text" id="_m%swPGrjWBn4:uQZ3CN">
                                             <field name="TEXT">Split-Methode: </field>
                                           </block>
                                         </value>
                                         <value name="ADD1">
                                           <block type="text_getSubstring" id=";V75FO4VtMZ3nP[Seh:A" inline="false">
                                             <mutation at1="true" at2="false"></mutation>
                                             <field name="WHERE1">FROM_START</field>
                                             <field name="WHERE2">LAST</field>
                                             <value name="STRING">
                                               <block type="get_value" id="t$6J}yw=#$*H%Oy@L$lh">
                                                 <field name="ATTR">val</field>
                                                 <field name="OID">homeconnect.0.BOSCH-CTL636ES6-68A40E26C6C6.programs.selected.BSH_Common_Root_SelectedProgram</field>
                                               </block>
                                             </value>
                                             <value name="AT1">
                                               <block type="math_arithmetic" id="h7_S)hH`5@RA?#U)5g=1" inline="false">
                                                 <field name="OP">ADD</field>
                                                 <value name="A">
                                                   <shadow type="math_number" id="A`TLz5Lbfgw;=mJOp}(^">
                                                     <field name="NUM">1</field>
                                                   </shadow>
                                                   <block type="text_indexOf" id="0e*(2Dhq5d1#U;xsFNn%" inline="false">
                                                     <field name="END">LAST</field>
                                                     <value name="VALUE">
                                                       <block type="get_value" id="isq[qfzLYyRaRLY;L45w">
                                                         <field name="ATTR">val</field>
                                                         <field name="OID">homeconnect.0.BOSCH-CTL636ES6-68A40E26C6C6.programs.selected.BSH_Common_Root_SelectedProgram</field>
                                                       </block>
                                                     </value>
                                                     <value name="FIND">
                                                       <shadow type="text" id="P5s;aJDPT*F;y(,VtRBs">
                                                         <field name="TEXT">abc</field>
                                                       </shadow>
                                                       <block type="text" id="c,}EJ]POpPpb|nI#.!zb">
                                                         <field name="TEXT">.</field>
                                                       </block>
                                                     </value>
                                                   </block>
                                                 </value>
                                                 <value name="B">
                                                   <shadow type="math_number" id="-9+`M14/p._`PvUM3`yk">
                                                     <field name="NUM">1</field>
                                                   </shadow>
                                                   <block type="math_number" id="(Kg1M+/J_!`LmKq-sU!S">
                                                     <field name="NUM">1</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                   </block>
                                 </next>
                               </block>
                              </xml>
                              

                              I 1 Reply Last reply Reply Quote 0
                              • I
                                ichwersonst @dslraser last edited by

                                Hallo,
                                ich habe einen Datenpunkt als Zeichenkette in den ich an 16 verschiedene Stellen Uhrzeiten schreibe. So das der Inhalt der Zeichenkette so aussieht :

                                16:11:25,17:15:30,20:03:54,usw.

                                Wie bekomme ich es jetzt in vis hin, dass ich die Uhrzeiten einzeln an verschiedenen Stellen (Textfelder) angezeigt bekomme?

                                Grüße...

                                G 1 Reply Last reply Reply Quote 0
                                • G
                                  gfrene @ichwersonst last edited by

                                  Moin zusammen, ich versuche gerade noch die letzte Baustelle im VIS einzubauen. Leider komme ich mit dem TEXT ausschneiden nicht weiter.
                                  Folgendes habe ich versucht:

                                  ich möchte gerne den rot markierten wert in VIS anzeigen lassen
                                  97ed2600-9ae1-48ec-845a-6112e2b6e88d-grafik.png

                                  Aber bei mir kommt nur das bei raus !!!!
                                  79a96fe5-289f-4ab2-add4-57c0eca45efb-grafik.png

                                  Hier den Code den genutzt habe
                                  {s:Datenpunkt;s.split('.')[s.split('.').length-1]}

                                  Aber wie man sehen kann mache hier irgendwas falsch .. wie müsste der Aufbau genau aussehen ?

                                  Gruß und danke für eure Hilfe
                                  Rene

                                  liv-in-sky 1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @gfrene last edited by liv-in-sky

                                    @gfrene sagte in String teilen - split-Befehl:

                                    {s:Datenpunkt;s.split('.')[s.split('.').length-1]}

                                    
                                    {s:controll-own.0.AAATEST.TestString3;s.split('.')[0]}
                                    

                                    du musst den datenpunkt (bei mir "controll-own.0.AAATEST.TestString3") auch eingeben und nicht den state reinschreiben - und du willst die erste stelle - also [0]

                                    dein datenpunkt:

                                    Image 1.png

                                    G 1 Reply Last reply Reply Quote 1
                                    • G
                                      gfrene @liv-in-sky last edited by

                                      @liv-in-sky Danke dir für deine Hilfe man kommt langsam ans ziel 🙂 aber so sieht es jetzt aus

                                      {s:homeconnect.0.010060519425000485.status.BSH_Common_Status_DoorState;s.split('.')[0]}

                                      7801e1e0-b7fb-41f7-bd7c-3bb8a9b41324-grafik.png

                                      liv-in-sky 2 Replies Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @gfrene last edited by

                                        @gfrene im bild oben sieht es aus als ob es an erster stelle steht - sorry - dann doch

                                        [s.split('.').length-1]
                                        

                                        anstatt der "0"

                                        G 1 Reply Last reply Reply Quote 1
                                        • liv-in-sky
                                          liv-in-sky @gfrene last edited by

                                          @gfrene oder kann es sein, dass dies eine werteliste ist - also mehrere werte zur auswahl - dann brauchst du den split nicht

                                          wenn du auf den wert klickst - kommen dann mehrere zur auswahl ? wenn mehrere zur auswahl - dann musst du anders vorgehen

                                          G 1 Reply Last reply Reply Quote 1
                                          • G
                                            gfrene @liv-in-sky last edited by

                                            @liv-in-sky said in String teilen - split-Befehl:

                                            @gfrene im bild oben sieht es aus als ob es an erster stelle steht - sorry - dann doch

                                            [s.split('.').length-1]
                                            

                                            anstatt der "0"

                                            Das wars ... zur Auswahl komme ich noch .. bisher arbeite ich Werte nur aus .. Ggf. würde ich mir dann hier wieder melden .... DICKES DANKE für deine Hilfe 🙂

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            849
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            7
                                            46
                                            3934
                                            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