Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Skripten / Logik
  4. Blockly
  5. Wort in Liste suchen und wenn vorhanden, Eintrag ändern

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    453

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    378

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    970

Wort in Liste suchen und wenn vorhanden, Eintrag ändern

Geplant Angeheftet Gesperrt Verschoben Blockly
15 Beiträge 4 Kommentatoren 1.0k Aufrufe 2 Beobachtet
  • Ä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.
  • CodierknechtC Codierknecht

    @matthias-i
    Deine Informationen sind etwas dürftig.
    Was ist das für eine "Liste". Welches Format und wo kommt die her?

    https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1

    M Offline
    M Offline
    Matthias I
    schrieb am zuletzt editiert von
    #3

    @codierknecht
    Entschuldige bitte, ich versuche es mal etwas genauer zu beschreiben:

    Zunächst ein paar Daten: Ich nutze einen RP4 mit Node.js: v16.19.1 und JS 4.0.24

    Hier jetzt noch etwas Kontext:

    Ich möchte gerne diverse Sprachausgaben (z.B. Wäsche fertig / Post ist da / ...) auf wahlweise einem oder mehreren Smartspeakern ausgeben lassen.

    Hierzu habe in meiner Vis ein inventwo-Checkbox/Radiobutton Widget mit derzeit 4 Auswahlmöglichkeiten integriert.
    Bild_2023-03-02_103351931.png

    Jedem Raum habe ich in den Objekten unter userdaten einen eigenen Datenpunkt vom Typ boolean angelegt, sodass diese über das Widget dann entweder auf "true" oder "false" gesetzt werden. Des Weiteren habe ich diese Datenpunkte einer Funktion zugewiesen.

    Mit Hilfe des idSelktor-Bausteines prüfe ich jetzt den Zustand aller Datenpunkte in der Funktion auf den Wert "true" und lasse mir eine Liste mit den Objekt-ids erstellen und in einer ebenfalls unter userdaten angelegten Variablen als eigenen Datenpunkt (json) speichern.
    Dies funktioniert und sieht dann so aus:

    [
      "0_userdata.0.Sprachansagen.Speaker_Buero",
      "0_userdata.0.Sprachansagen.Speaker_Kueche"
    ]
    

    Um jetzt die Sprachausgaben auch wirklich nur in den ausgewählten Räumen stattfinden zu lassen müsste ich in dem obigen json nach den Namen der Räume wie z.B. "Buero" suchen.
    Wird der Name gefunden, so möchte ich gerne den gesamten ersten Eintrag der Liste

    "0_userdata.0.Sprachansagen.Speaker_Buero"
    

    durch die Objekt-ID des Smartspeakers ersetzen.

    Ziel ist es, dass ich eine Liste erhalte, in der dann ausschließlich die Objekt-IDs der Smartspeaker enthalten sind, die ich in der Vis aktiviert habe.
    Die kann ich dann in einer Schleife so abarbeiten lassen und den Wert jeweils auf den Ausgabetext setzen lassen.

    Ich hoffe du kannst es nun besser nachvollziehen und mir weiterhelfen.

    Vielen Dank!

    CodierknechtC 1 Antwort Letzte Antwort
    0
    • M Matthias I

      @codierknecht
      Entschuldige bitte, ich versuche es mal etwas genauer zu beschreiben:

      Zunächst ein paar Daten: Ich nutze einen RP4 mit Node.js: v16.19.1 und JS 4.0.24

      Hier jetzt noch etwas Kontext:

      Ich möchte gerne diverse Sprachausgaben (z.B. Wäsche fertig / Post ist da / ...) auf wahlweise einem oder mehreren Smartspeakern ausgeben lassen.

      Hierzu habe in meiner Vis ein inventwo-Checkbox/Radiobutton Widget mit derzeit 4 Auswahlmöglichkeiten integriert.
      Bild_2023-03-02_103351931.png

      Jedem Raum habe ich in den Objekten unter userdaten einen eigenen Datenpunkt vom Typ boolean angelegt, sodass diese über das Widget dann entweder auf "true" oder "false" gesetzt werden. Des Weiteren habe ich diese Datenpunkte einer Funktion zugewiesen.

      Mit Hilfe des idSelktor-Bausteines prüfe ich jetzt den Zustand aller Datenpunkte in der Funktion auf den Wert "true" und lasse mir eine Liste mit den Objekt-ids erstellen und in einer ebenfalls unter userdaten angelegten Variablen als eigenen Datenpunkt (json) speichern.
      Dies funktioniert und sieht dann so aus:

      [
        "0_userdata.0.Sprachansagen.Speaker_Buero",
        "0_userdata.0.Sprachansagen.Speaker_Kueche"
      ]
      

      Um jetzt die Sprachausgaben auch wirklich nur in den ausgewählten Räumen stattfinden zu lassen müsste ich in dem obigen json nach den Namen der Räume wie z.B. "Buero" suchen.
      Wird der Name gefunden, so möchte ich gerne den gesamten ersten Eintrag der Liste

      "0_userdata.0.Sprachansagen.Speaker_Buero"
      

      durch die Objekt-ID des Smartspeakers ersetzen.

      Ziel ist es, dass ich eine Liste erhalte, in der dann ausschließlich die Objekt-IDs der Smartspeaker enthalten sind, die ich in der Vis aktiviert habe.
      Die kann ich dann in einer Schleife so abarbeiten lassen und den Wert jeweils auf den Ausgabetext setzen lassen.

      Ich hoffe du kannst es nun besser nachvollziehen und mir weiterhelfen.

      Vielen Dank!

      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von
      #4

      @matthias-i sagte in Wort in Liste suchen und wenn vorhanden, Eintrag ändern:

      0_userdata.0.Sprachansagen.Speaker_

      OK, Du hast also ein Array in einem DP gespeichert. Das kann man ja durcheiern.
      Wie heissen denn die DP für die Speaker? Endet deren Name dann auch immer auf Buero oder Kueche ?

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      M 1 Antwort Letzte Antwort
      0
      • CodierknechtC Codierknecht

        @matthias-i sagte in Wort in Liste suchen und wenn vorhanden, Eintrag ändern:

        0_userdata.0.Sprachansagen.Speaker_

        OK, Du hast also ein Array in einem DP gespeichert. Das kann man ja durcheiern.
        Wie heissen denn die DP für die Speaker? Endet deren Name dann auch immer auf Buero oder Kueche ?

        M Offline
        M Offline
        Matthias I
        schrieb am zuletzt editiert von
        #5

        @codierknecht
        Für die DP der Speaker verwende ich Aliase, die die Namen "Büro" und "Küche" tragen.
        (mir ist schonmal einer kaputt gegangen und das Ändern aller Programme hat mich dazu veranlasst fortan Aliase zu nutzen)
        Ich könnte die Aliase aber auch in "Buero" und "Kueche" umändern.

        CodierknechtC 1 Antwort Letzte Antwort
        0
        • M Matthias I

          @codierknecht
          Für die DP der Speaker verwende ich Aliase, die die Namen "Büro" und "Küche" tragen.
          (mir ist schonmal einer kaputt gegangen und das Ändern aller Programme hat mich dazu veranlasst fortan Aliase zu nutzen)
          Ich könnte die Aliase aber auch in "Buero" und "Kueche" umändern.

          CodierknechtC Offline
          CodierknechtC Offline
          Codierknecht
          Developer Most Active
          schrieb am zuletzt editiert von Codierknecht
          #6

          @matthias-i sagte in Wort in Liste suchen und wenn vorhanden, Eintrag ändern:

          Ich könnte die Aliase aber auch in "Buero" und "Kueche" umändern.

          Das solltest Du auf jeden Fall machen - Umlaute sind böse ;-)

          Im Prinzip sollte das dann so funktionieren:
          21ee7801-9aa0-4c1c-afdb-473a7096b192-image.png

          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
          HmIP|ZigBee|Tasmota|Unifi
          Zabbix Certified Specialist
          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

          M 1 Antwort Letzte Antwort
          0
          • CodierknechtC Codierknecht

            @matthias-i sagte in Wort in Liste suchen und wenn vorhanden, Eintrag ändern:

            Ich könnte die Aliase aber auch in "Buero" und "Kueche" umändern.

            Das solltest Du auf jeden Fall machen - Umlaute sind böse ;-)

            Im Prinzip sollte das dann so funktionieren:
            21ee7801-9aa0-4c1c-afdb-473a7096b192-image.png

            M Offline
            M Offline
            Matthias I
            schrieb am zuletzt editiert von
            #7

            @codierknecht
            Vielen Dank für deine Hilfe!!!
            Werde es nachher testen und mich dann melden ob es geklappt hat 👍

            Dürfte ich dich in dem Zusammenhang auch fragen, wie man es anstellt, dass er mir in der Ursprungsliste statt

            [
              "0_userdata.0.Sprachansagen.Speaker_Buero",
              "0_userdata.0.Sprachansagen.Speaker_Kueche"
            ]
            

            auch nur

            [
              "Buero",
              "Kueche"
            ]
            

            ausgibt? Das wäre eleganter und würde dein Blockly vereinfachen.

            Die ursprüngliche Liste wird mit folgendem Blockly erstellt:
            Bild_2023-03-02_112425434.png

            HomoranH CodierknechtC 2 Antworten Letzte Antwort
            0
            • M Matthias I

              @codierknecht
              Vielen Dank für deine Hilfe!!!
              Werde es nachher testen und mich dann melden ob es geklappt hat 👍

              Dürfte ich dich in dem Zusammenhang auch fragen, wie man es anstellt, dass er mir in der Ursprungsliste statt

              [
                "0_userdata.0.Sprachansagen.Speaker_Buero",
                "0_userdata.0.Sprachansagen.Speaker_Kueche"
              ]
              

              auch nur

              [
                "Buero",
                "Kueche"
              ]
              

              ausgibt? Das wäre eleganter und würde dein Blockly vereinfachen.

              Die ursprüngliche Liste wird mit folgendem Blockly erstellt:
              Bild_2023-03-02_112425434.png

              HomoranH Nicht stören
              HomoranH Nicht stören
              Homoran
              Global Moderator Administrators
              schrieb am zuletzt editiert von Homoran
              #8

              @matthias-i dann musst du das zerlegen (nimm Teil ab....) schon in diesem Schritt bei füge als letzes... machen

              kein Support per PN! - Fragen im Forum stellen -
              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
              Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              1 Antwort Letzte Antwort
              0
              • M Matthias I

                @codierknecht
                Vielen Dank für deine Hilfe!!!
                Werde es nachher testen und mich dann melden ob es geklappt hat 👍

                Dürfte ich dich in dem Zusammenhang auch fragen, wie man es anstellt, dass er mir in der Ursprungsliste statt

                [
                  "0_userdata.0.Sprachansagen.Speaker_Buero",
                  "0_userdata.0.Sprachansagen.Speaker_Kueche"
                ]
                

                auch nur

                [
                  "Buero",
                  "Kueche"
                ]
                

                ausgibt? Das wäre eleganter und würde dein Blockly vereinfachen.

                Die ursprüngliche Liste wird mit folgendem Blockly erstellt:
                Bild_2023-03-02_112425434.png

                CodierknechtC Offline
                CodierknechtC Offline
                Codierknecht
                Developer Most Active
                schrieb am zuletzt editiert von
                #9

                @matthias-i sagte in Wort in Liste suchen und wenn vorhanden, Eintrag ändern:

                Dürfte ich dich in dem Zusammenhang auch fragen, wie man es anstellt, dass er mir in der Ursprungsliste statt

                So wie in meinem Blockly: Nimm eine Hilfsvariable und packe dort mit "im Text x nimm Teil ab" nur den letzten Teil rein. Dann fügst Du den Inhalt dieser Variablen an die Liste an.

                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                HmIP|ZigBee|Tasmota|Unifi
                Zabbix Certified Specialist
                Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                M 1 Antwort Letzte Antwort
                0
                • CodierknechtC Codierknecht

                  @matthias-i sagte in Wort in Liste suchen und wenn vorhanden, Eintrag ändern:

                  Dürfte ich dich in dem Zusammenhang auch fragen, wie man es anstellt, dass er mir in der Ursprungsliste statt

                  So wie in meinem Blockly: Nimm eine Hilfsvariable und packe dort mit "im Text x nimm Teil ab" nur den letzten Teil rein. Dann fügst Du den Inhalt dieser Variablen an die Liste an.

                  M Offline
                  M Offline
                  Matthias I
                  schrieb am zuletzt editiert von
                  #10

                  @codierknecht
                  Den ersten Teil habe ich erfolgreich hinbekommen. Es werden nur die Räume ausgegeben 😊
                  Blockly2.PNG

                  Leider funktioniert das erstellen der IDs in der zweiten Schleife noch nicht richtig, da hier nicht auf ein Element zugegriffen wird, sondern auf alle.
                  Der Datenpunkt "Speaker_aktiviert" ist vom Typ her als json definiert.

                  Blockly3.PNG

                  Könntet ihr mir bitte sagen, was ich falsch mache?

                  HomoranH paul53P 2 Antworten Letzte Antwort
                  0
                  • M Matthias I

                    @codierknecht
                    Den ersten Teil habe ich erfolgreich hinbekommen. Es werden nur die Räume ausgegeben 😊
                    Blockly2.PNG

                    Leider funktioniert das erstellen der IDs in der zweiten Schleife noch nicht richtig, da hier nicht auf ein Element zugegriffen wird, sondern auf alle.
                    Der Datenpunkt "Speaker_aktiviert" ist vom Typ her als json definiert.

                    Blockly3.PNG

                    Könntet ihr mir bitte sagen, was ich falsch mache?

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #11

                    @matthias-i du musst die neue Liste erst splitten nach , und dann entsprechend das i-te Element nehmen

                    kein Support per PN! - Fragen im Forum stellen -
                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    • M Matthias I

                      @codierknecht
                      Den ersten Teil habe ich erfolgreich hinbekommen. Es werden nur die Räume ausgegeben 😊
                      Blockly2.PNG

                      Leider funktioniert das erstellen der IDs in der zweiten Schleife noch nicht richtig, da hier nicht auf ein Element zugegriffen wird, sondern auf alle.
                      Der Datenpunkt "Speaker_aktiviert" ist vom Typ her als json definiert.

                      Blockly3.PNG

                      Könntet ihr mir bitte sagen, was ich falsch mache?

                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #12

                      @matthias-i sagte: was ich falsch mache?

                      Die Schleifen-Variable (Räume) an den Text anhängen - nicht die Liste.

                      Blockly_temp.JPG

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      M 1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        @matthias-i sagte: was ich falsch mache?

                        Die Schleifen-Variable (Räume) an den Text anhängen - nicht die Liste.

                        Blockly_temp.JPG

                        M Offline
                        M Offline
                        Matthias I
                        schrieb am zuletzt editiert von
                        #13

                        @paul53
                        Das hat geklappt, super! Danke!
                        Ich erhalte jetzt die passenden IDs in einer Liste.
                        Nur für mein Verständnis, d.h. die Schleifenvariable entspricht dann während der Iteration dem Listenelement, richtig?

                        Versuche ich jetzt die Ausgabe zu realisieren (Blockly s.u.) indem ich die Variable "Ansagetext" ändere, erhalte ich immer folgenden error und keine Sprachausgabe:
                        Bild_2023-03-02_223454705.png

                        Die Variable alias.0.Sprachausgabe.Alexa_Devices.Buero ist als string definiert.

                        Blockly4.PNG

                        CodierknechtC 1 Antwort Letzte Antwort
                        0
                        • M Matthias I

                          @paul53
                          Das hat geklappt, super! Danke!
                          Ich erhalte jetzt die passenden IDs in einer Liste.
                          Nur für mein Verständnis, d.h. die Schleifenvariable entspricht dann während der Iteration dem Listenelement, richtig?

                          Versuche ich jetzt die Ausgabe zu realisieren (Blockly s.u.) indem ich die Variable "Ansagetext" ändere, erhalte ich immer folgenden error und keine Sprachausgabe:
                          Bild_2023-03-02_223454705.png

                          Die Variable alias.0.Sprachausgabe.Alexa_Devices.Buero ist als string definiert.

                          Blockly4.PNG

                          CodierknechtC Offline
                          CodierknechtC Offline
                          Codierknecht
                          Developer Most Active
                          schrieb am zuletzt editiert von Codierknecht
                          #14

                          @matthias-i
                          Einer Variablen kann man in JS keinen expliziten Typen "zuweisen". JS ist untypisiert - die Typen werden implizit ermittelt.

                          Du hast hier wieder das gleiche Problem produziert.
                          Wenn Du durch die Liste iterierst, enthält i die einzelnen ID's - nicht "Wert vom Objekt x".

                          Vorausgesetzt, die Liste in "Speaker_ID_Liste" enthält eine Liste der zu verwendenden Lautsprecher, wäre es so richtiger:
                          7ab71c3a-d9b8-44ef-b6e2-601402a52331-image.png
                          Allerdings verstehe ich nicht, warum in "Wert" hier gerade eine 29 und kein Text steht, wie es der Name "Ansagetext" vermuten lässt.

                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                          HmIP|ZigBee|Tasmota|Unifi
                          Zabbix Certified Specialist
                          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                          M 1 Antwort Letzte Antwort
                          0
                          • CodierknechtC Codierknecht

                            @matthias-i
                            Einer Variablen kann man in JS keinen expliziten Typen "zuweisen". JS ist untypisiert - die Typen werden implizit ermittelt.

                            Du hast hier wieder das gleiche Problem produziert.
                            Wenn Du durch die Liste iterierst, enthält i die einzelnen ID's - nicht "Wert vom Objekt x".

                            Vorausgesetzt, die Liste in "Speaker_ID_Liste" enthält eine Liste der zu verwendenden Lautsprecher, wäre es so richtiger:
                            7ab71c3a-d9b8-44ef-b6e2-601402a52331-image.png
                            Allerdings verstehe ich nicht, warum in "Wert" hier gerade eine 29 und kein Text steht, wie es der Name "Ansagetext" vermuten lässt.

                            M Offline
                            M Offline
                            Matthias I
                            schrieb am zuletzt editiert von
                            #15

                            @codierknecht
                            Vielen Dank, jetzt hab ichs verstanden und es funktioniert :-)
                            Der Wert Test29 war nur zum internen Test, der wird jetzt natürlich durch sinnvolle Phrasen ersetzt ;-)

                            1 Antwort Letzte Antwort
                            0

                            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                            Registrieren Anmelden
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            615

                            Online

                            32.8k

                            Benutzer

                            82.8k

                            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