Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Regex liefert falschen Wert

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Regex liefert falschen Wert

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @ck_coke last edited by

      @ck_coke sagte in Regex liefert falschen Wert:

      Ich hätte gerne group 1 als "Ergebnis".

      ist das nicht [0]?

      kenne nich mit regex in js nicht aus

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

        @ck_coke

        const regex = /"total_power":(-?\d+(\.\d+)?)/gm;     /* , entfernt */
        ....
        let m;
        m = regex.exec(str)  /* m ist ja "total_power":-43.36 */
        P = m.split(':')[1]
        ....
        
        C 1 Reply Last reply Reply Quote 0
        • C
          ck_coke @MCU last edited by ck_coke

          @mcu

          Error in callback: TypeError: m.split is not a function
          
          M F 2 Replies Last reply Reply Quote 0
          • M
            MCU @ck_coke last edited by

            @ck_coke Dann muss man vorher noch aus m einen String machen.

            m = String(m)
            P= m.split ......
            
            1 Reply Last reply Reply Quote 0
            • F
              fastfoot @ck_coke last edited by

              @ck_coke

              let m;
              if ((m = regex.exec(str)) != null)
                  log('Leistung: ' + m[1])
              
              1 Reply Last reply Reply Quote 0
              • haus-automatisierung
                haus-automatisierung Developer Most Active @ck_coke last edited by

                @ck_coke sagte in Regex liefert falschen Wert:

                ich habe ein paar (Anfänger)-Schwierigkeiten mit einer Regex

                Warum überhaupt JSON-Strings mit einem regex auseinander nehmen?!

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

                  Hier mal ein Beispiel-Script. Ohne exec, curl und regex 🙂

                  const server = 'https://shelly-67-eu.shelly.cloud';
                  const authKey = 'MTk3YjZhdWlkE6CD....';
                  const deviceId = 'b0b21c18d700';
                  
                  httpPost(`${server}/device/status`,
                      {
                          id: deviceId,
                          auth_key: authKey,
                      },
                      (error, response) => {
                          if (!error) {
                              try {
                                  const obj = JSON.parse(response.data);
                  
                                  // Daten extrahieren
                  
                              } catch (e) {
                                  console.error(e);
                              }
                          } else {
                              console.error(error);
                          }
                      }
                  );
                  
                  

                  Du suchst ja scheinbar: obj.data.device_status.total_power.

                  C 1 Reply Last reply Reply Quote 2
                  • C
                    ck_coke @haus-automatisierung last edited by

                    @haus-automatisierung

                    Vielen Dank! So ist es natürlich noch besser gelöst.

                    C 1 Reply Last reply Reply Quote 0
                    • C
                      ck_coke @ck_coke last edited by ck_coke

                      Jetzt habe ich das Problem, dass es bei einem Gerät funktioniert und bei einem anderen

                      {"ack":true}
                      

                      als Wert gesetzt wird.

                      So sieht das Skript aus:

                      schedule("*/10 * * * * *", function () {
                      
                      
                      const server = 'https://shelly-89-eu.shelly.cloud';
                      const authKey = 'XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2';
                      const deviceId = 'a0a3b3e7d67c';
                       
                      httpPost(`${server}/device/status`,
                          {
                              id: deviceId,
                              auth_key: authKey,
                          },
                          (error, response) => {
                              if (!error) {
                                  try {
                                      const obj = JSON.parse(response.data);
                       
                                      // Daten extrahieren
                      
                                      console.log(obj.data);
                                      
                                                 setState('0_userdata.0.Leistung-Entladen', obj.data.device_status.voltage, true);
                      
                      
                       
                                  } catch (e) {
                                      console.error(e);
                                  }
                              } else {
                                  console.error(error);
                              }
                          }
                      );
                       
                      });
                      
                      
                      
                      

                      Folgendes bekomme ich im Log angezeigt:

                      javascript.0
                      	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: setForeignState(id=0_userdata.0.Leistung-Entladen, state={"val":{"ack":true},"ack":true,"ts":1725906880074,"q":0,"from":"system.adapter.javascript.0","lc":1725906880074,"c":"script.js.common.Balkonkraftwerk.Skript_1"})
                      javascript.0
                      	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: { online: true, device_status: { sys: { available_updates: [Object], mac: 'A0A3B3E7D67C', restart_required: false, time: '11:48', unixtime: 1725788939, uptime: 3, ram_size: 246876, ram_free: 134944, fs_size: 458752, fs_free: 122880, cfg_rev: 19, kvs_rev: 0, schedule_rev: 10, webhook_rev: 0, reset_reason: 1 }, ts: 1725906873.77, plugs_ui: {}, id: 'a0a3b3e7d67c', code: 'SNPL-00112EU', ws: { connected: false }, wifi: { sta_ip: '192.168.33.67', status: 'got ip', ssid: 'ShellyPlusPlugS-E465B8B3A57C', rssi: -29, ap_client_count: 0 }, mqtt: { connected: false }, serial: 3566, ffs: { ts: 0 }, 'switch:0': { id: 0, current: 0.021, source: 'SHC', output: true, apower: 0, voltage: 232.9, aenergy: [Object], temperature: [Object] }, cloud: { connected: true }, _updated: '2024-09-09 18:34:34', ble: {} } }
                      javascript.0
                      	2024-09-09 20:34:40.074	info	script.js.common.Balkonkraftwerk.Skript_1: httpPost(url=https://shelly-89-eu.shelly.cloud/device/status, responseTime=66ms)
                      javascript.0
                      	2024-09-09 20:34:40.007	info	script.js.common.Balkonkraftwerk.Skript_1: httpPost(config={"method":"post","url":"https://shelly-89-eu.shelly.cloud/device/status","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"},"data":{"id":"a0a3b3e7d67c","auth_key":"XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2"}}, data=[object Object])
                      ```z
                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                      • haus-automatisierung
                        haus-automatisierung Developer Most Active @ck_coke last edited by

                        @ck_coke In deinem Scripts sind Klammerfehler. Das kann so gar nicht klappen. Da fehlt etwas.

                        voltage, true);

                        1 Reply Last reply Reply Quote 0
                        • C
                          ck_coke last edited by

                          @haus-automatisierung

                          Das ist wohl beim hier ins Forum kopieren passiert.

                          Die Zeile sieht so aus:

                                                     setState('0_userdata.0.Leistung-Entladen', obj.data.device_status.voltage, true);
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • C
                            ck_coke last edited by

                            Kann es daran liegen das der Datenpunkt hinter switch:0, also eine Ebene tiefer liegt?

                            Zumindest habe ich das nach Internetrechersche in anderen Foren so gesehen.

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

                              @ck_coke sagte in Regex liefert falschen Wert:

                              Zumindest habe ich das nach Internetrechersche in anderen Foren so gesehen.

                              Ich hab das Thema JSON vs. Objekt in zig kostenlosen Inhalten super ausführlich erklärt.

                              Du musst schon den kompletten Pfad angeben. Im Falle von switch:0 muss das dann aber in eckige Klammern und kann nicht mit der einfachen Punkt-Notation erreicht werden.

                              obj.data.device_status['switch:0'].voltage

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              1.1k
                              Online

                              31.7k
                              Users

                              79.7k
                              Topics

                              1.3m
                              Posts

                              5
                              14
                              490
                              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