Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. [GELÖST] Homepilot Umweltsensor mit Javascript auslesen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    324

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.5k

[GELÖST] Homepilot Umweltsensor mit Javascript auslesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
51 Beiträge 4 Kommentatoren 3.0k Aufrufe 1 Watching
  • Ä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.
  • M Offline
    M Offline
    meicker
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich habe ein regex Problem :-) Vielleicht kann nir ja jemand helfen …

    { "response" : "get_meter_data", "status" : "ok", "data":[{"Lichtwert":"41000 lx"},{"Windgeschw.":"0 m/s"},{"Temperatur":"18.7 °C"},{"Regen":"Nicht erkannt"},{"Sonnenhöhe":"21°"},{"Sonnenrichtung":"Osten (93°)"},{"Aktualisiert":"15.08.18 - 08:55"}] }
    

    Aus obiger Ausgabe benötige ich die Sonnenrichtung, aber nur die Gradzahl ohne das Gradzeichen° - Der Regex Sonnenrichtung":"(.*°.) holt den kompletten teil zusammen mit der Himmelsrichtung heraus, ich kann von da aber irgendwie nichts ableiten wie ich nur an die Zahl komme :-( Ich hatte eine Lösung mit Punkten, das funktioniert aber nicht zu 100% weil:

    • Es gibt Norden, Süden, Westen, Osten und alle dazugehörigen zwischenrichtungen wie Nord-Osten usw… d.H die Länge ändert sich ständig

    • Die Gradzahl ist 1° 10° 100° und nicht mit NULLEN aufgefüllt. Auch hier gibt es dann 3 verschiedene Längen an Zahl ...

    Kann mir da jemand behilflich sein ?

    UPDATE:

    Hier ist das Script das in Zusammenarbiet (naja ... er hat es gemacht ... :D ) mit Paul53 herausgekommen ist. Vielen dank dafür !

    const request = require('request');
    const link = 'http://192.168.1.180/deviceajax.do?meter=1010005'; //homepilot ID & IP eintragen
    
    // Datenpunkte erzeugen
    createState('Homepilot.Sonnenrichtung', 0, {type: 'number', unit: '°'});
    createState('Homepilot.Sonnenhöhe', 0, {type: 'number', unit: '°'});
    createState('Homepilot.Lichtwert', 0, {type: 'number', unit: 'lux'});
    createState('Homepilot.Windgeschwindigkeit', 0, {type: 'number', unit: 'm/s'});
    createState('Homepilot.Temperatur', 0, {type: 'number', unit: '°C'});
    createState('Homepilot.Regen', 0, {type: 'boolean', unit: ''});
    createState('Homepilot.Aktualisiert', 0, {type: 'string', unit: ''});
    
    function sensordaten() {
        request(link, function(error,response, body) {
            if(error) log('Fehler request: ' + error, 'error');
            else {
                var data = JSON.parse(body).data;
                var dir = data[5].Sonnenrichtung;
                dir = parseFloat(dir.substr(dir.indexOf('(') + 1));
                setState('Homepilot.Sonnenrichtung', dir, true); 
                var ele = parseFloat(data[4].Sonnenhöhe);
                setState('Homepilot.Sonnenhöhe', ele, true); 
                var lux = parseFloat(data[0].Lichtwert);
                setState('Homepilot.Lichtwert', lux, true);
                var wind = parseFloat(data[1]['Windgeschw.']);
                setState('Homepilot.Windgeschwindigkeit', wind, true);
                var temp = parseFloat(data[2].Temperatur);
                setState('Homepilot.Temperatur', temp, true);
                var regen = data[3].Regen; // Das ist ein String !
    if(regen == 'Nicht erkannt') setState('Homepilot.Regen', false, true);
    else setState('Homepilot.Regen', true, true);
                var aktualisiert = data[6].Aktualisiert; // Das ist ein String !
                setState('Homepilot.Aktualisiert', aktualisiert, true);
            }    
        });
    }
    schedule('*/30 * * * * *', sensordaten); // alle 30 Sekunden
    

    Viele grüße,

    Marc

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @meicker:

      Ich hatte eine Lösung mit Punkten, das funktioniert aber nicht zu 100% weil:

      • Es gibt Norden, Süden, Westen, Osten und alle dazugehörigen zwischenrichtungen wie Nord-Osten usw… d.H die Länge ändert sich ständig `
        Vorschlag:
      var dir = obj.data[5].Sonnenrichtung;
      dir = parseFloat(dir.substr(dir.indexOf('(') + 1));
      
      

      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

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        meicker
        schrieb am zuletzt editiert von
        #3

        @Paul53

        Dankeschön :-) - Hätte ich erwähnen sollen das ich das im Parser eintragen möchte ? Ich wüsste jetzt nicht wie ich deinen Vorschlag umsetzen kann … :roll:

        Viele grüße,

        Marc

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @meicker:

          Ich wüsste jetzt nicht wie ich deinen Vorschlag umsetzen kann … `
          Mit dem Javascript-Adapter.

          Die Webseite, die den JSON-String liefert, kann man mit request einlesen. Hier im Forum gibt es viele Beispiele. Suche: require('request')

          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

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            meicker
            schrieb am zuletzt editiert von
            #5

            ist das auch mit blocky möglich ? Den request kann ich oben anstellen, das Ergebnis könnte ich in eine variable packen - aber wie baue ich mit blocky die Abfrage ein ? Den Link einzusetzen zur jason ist ja kein problem … aber der rest ... :shock:

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              Mit Blockly ist es sehr umständlich. Besser direkt mit Javascript.

              const request = require('request');
              const link = 'http://...';
              
              function wetter() {
                  request(link, function(error,response, body) {
                      if(error) log('Fehler request: ' + error, 'error');
                      else {
                          var data = JSON.parse(body).data;
                          var dir = data[5].Sonnenrichtung;
                          dir = parseFloat(dir.substr(dir.indexOf('(') + 1));
                          // Verwendung von dir (setState())
                          var ele = parseFloat(data[4].Sonnenhöhe);
                          // Verwendung von ele
                      }    
                  });
              }
              
              wetter(); // Skriptstart
              
              

              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

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                meicker
                schrieb am zuletzt editiert von
                #7

                Vielen Dank auch dafür :-)

                Habe ich jetzt am laufen - kann es aber nirgenswo sehen … Wo steht das Ergebnis ? Und wenn ich den Code richtig deute kommen ja auch 2 Variablen dabei raus - Sonnenstand -und höhe

                Für Blocky habe ich mir eine Abfrage gemacht und den Sonnenstand mit Start und Ende als Variable gesetzt. Jetzt muss ich das Ergebnis aus dem Script damit abgleichen, also das Wergebnis als Wert aufrufen ...

                Ich hätte vielleicht auch noch erwähnen sollen das ich ein lernwilliger blutiger Anfänger bin :lol:

                12:45:42.864 [info] javascript.0 Start javascript script.js.sonnenhoehe

                12:45:42.864 [error] javascript.0 script.js.sonnenhoehe compile failed: at script.js.sonnenhoehe:1

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  @meicker:

                  Wo steht das Ergebnis ? Und wenn ich den Code richtig deute kommen ja auch 2 Variablen dabei raus - Sonnenstand -und höhe `
                  Um die Werte weiter zu verwenden / anzuzeigen müssen sie in Datenpunkte vom Typ "Zahl" (number) geschrieben werden.

                  const request = require('request');
                  const link = 'http://...';
                  
                  // Datenpunkte erzeugen
                  createState('Sonnenstand.Richtung', 0, {type: 'number', unit: '°'});
                  createState('Sonnenstand.Höhe', 0, {type: 'number', unit: '°'});
                  
                  function wetter() {
                      request(link, function(error,response, body) {
                          if(error) log('Fehler request: ' + error, 'error');
                          else {
                              var data = JSON.parse(body).data;
                              var dir = data[5].Sonnenrichtung;
                              dir = parseFloat(dir.substr(dir.indexOf('(') + 1));
                              setState('Sonnenstand.Richtung', dir, true); 
                              var ele = parseFloat(data[4]['Sonnenhöhe']);
                              setState('Sonnenstand.Höhe', ele, true); 
                          }    
                      });
                  }
                  
                  schedule('* * * * *', wetter); // jede Minute
                  

                  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

                  1 Antwort Letzte Antwort
                  0
                  • M Offline
                    M Offline
                    meicker
                    schrieb am zuletzt editiert von
                    #9

                    OK :-)

                    Und was ist an der ersten Zeile falsch ?

                    13:09:44.167 [error] javascript.0 script.js.sonnenhoehe compile failed: at script.js.sonnenhoehe:1

                    Erste zeile: const request = require('request');

                    Ich kann keinen Fehler sehen …

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #10

                      @meicker:

                      Ich kann keinen Fehler sehen … `
                      Ich auch nicht :o

                      Du hast hoffentlich das Skript nicht unter der Gruppe global erstellt ?

                      EDIT: Habe .Sonnenhöhe wegen des Umlautes gegen ['Sonnenhöhe'] getauscht, da Javascript es zwar mit der Punktnotation richtig ausführt, aber der Editor meckert.

                      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

                      1 Antwort Letzte Antwort
                      0
                      • M Offline
                        M Offline
                        meicker
                        schrieb am zuletzt editiert von
                        #11

                        OK, der Fehler war mein Fehler ! Ursprünglich in global erstellt, dann aber geändert. Schien aber trotzdem irgendwie noch gehangen zu haben. ich habe es gelöscht und frisch einfefügt, kein fehler mehr …

                        Aber wo kann ich denn jetzt die states sehen ? Ich finde die einfach nicht ... :roll:

                        1 Antwort Letzte Antwort
                        0
                        • paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von
                          #12

                          @meicker:

                          Aber wo kann ich denn jetzt die states sehen ? Ich finde die einfach nicht … `
                          Im Reiter "Objekte" unter javascript.0.Sonnenstand (wenn das Skript in der Instanz 0 läuft).

                          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

                          1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            meicker
                            schrieb am zuletzt editiert von
                            #13

                            Also - der fehler in zeile 1 ist doch noch da - kam eben nicht weil script nicht gestartet war …

                            In Objekte - schlag mich - steht nix von dem Script, es wird nichts erstellt - nur das was ich schon drin habe, mehr nicht ... Ich vermute wegen dem Fehler läuft das script überhaupt nicht erst an und erstell auch nix ... Aber wenn Du keinen Fehler findest in der ersten Zeile dann sieht es wohl schlecht aus ...

                            Regex ist keine Option ? Absolut unmöglich ?

                            1 Antwort Letzte Antwort
                            0
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #14

                              @meicker:

                              Ich vermute wegen dem Fehler läuft das script überhaupt nicht erst an und erstell auch nix … Aber wenn Du keinen Fehler findest in der ersten Zeile dann sieht es wohl schlecht aus ... `
                              Ja, wenn ein Fehler-Log kommt, läuft das Skript nicht und erstellt folglich auch keine Datenpunkte. Schau mal in den Reiter "Log". Dort werden meist noch weitere Informationen zu dem Fehler ausgegeben (in rot).

                              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

                              1 Antwort Letzte Antwort
                              0
                              • M Offline
                                M Offline
                                meicker
                                schrieb am zuletzt editiert von
                                #15

                                jupp :-)

                                javascript.0 2018-08-15 14:07:11.001 error at Object.createScript (vm.js:80:10)

                                javascript.0 2018-08-15 14:07:11.001 error SyntaxError: Identifier 'request' has already been declared

                                javascript.0 2018-08-15 14:07:11.001 error ^

                                javascript.0 2018-08-15 14:07:11.000 error const request = require('request');

                                javascript.0 2018-08-15 14:07:10.999 error at script.js.Homepilot.grad:1

                                javascript.0 2018-08-15 14:07:10.999 error script.js.Homepilot.grad compile failed:

                                verstehe aber nicht warum - ich hatte das erste script doch gelöscht :-(

                                1 Antwort Letzte Antwort
                                0
                                • M Offline
                                  M Offline
                                  meicker
                                  schrieb am zuletzt editiert von
                                  #16

                                  soooooooo !!!!! :-) Klappt :-) Javascript Adapter neu gestartet … VIELEN DANK SOWEIT !!!

                                  Ich müsste doch dann theoretisch auch die anderen Teile aus dem Link eingepflegt bekommen, oder ?

                                  { "response" : "get_meter_data", "status" : "ok", "data":[{"Lichtwert":"30000 lx"},{"Windgeschw.":"0 m/s"},{"Temperatur":"22.1 °C"},{"Regen":"Nicht erkannt"},{"Sonnenhöhe":"53°"},{"Sonnenrichtung":"Süd-Osten (165°)"},{"Aktualisiert":"15.08.18 - 13:17"}] }

                                  Das ° Zeichen bekomme ich weg indem ich unit mit '' schreibe ?

                                  1 Antwort Letzte Antwort
                                  0
                                  • paul53P Offline
                                    paul53P Offline
                                    paul53
                                    schrieb am zuletzt editiert von
                                    #17

                                    @meicker:

                                    ich hatte das erste script doch gelöscht `
                                    Ist nicht noch etwas unter der Gruppe global ?

                                    Starte mal die Javascript-Instanz neu. Manchmal genügt das Löschen eines Skriptes nicht.

                                    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

                                    1 Antwort Letzte Antwort
                                    0
                                    • M Offline
                                      M Offline
                                      meicker
                                      schrieb am zuletzt editiert von
                                      #18

                                      lies mal einen über Deinem letzten - haben uns überschnitten

                                      1 Antwort Letzte Antwort
                                      0
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von
                                        #19

                                        @meicker:

                                        Klappt :-) Javascript Adapter neu gestartet `
                                        Schön, dass Du es selbst gelöst hast :D
                                        @meicker:

                                        Ich müsste doch dann theoretisch auch die anderen Teile aus dem Link eingepflegt bekommen, oder ? `
                                        Ja, wie es geht, weißt Du jetzt.
                                        @meicker:

                                        {"Windgeschw.":"0 m/s"} `
                                        Da der Bezeichner ""Windgeschw." ein unzulässiges Zeichen (Punkt) enthält, muss der Zugriff so erfolgen:

                                                    var wind = parseFloat(data[1]['Windgeschw.']);
                                        
                                        

                                        @meicker:

                                        Das ° Zeichen bekomme ich weg indem ich unit mit '' schreibe ? `
                                        Nein, mit parseFloat() wird aus dem String "165°)" eine Zahl gemacht und dabei abgebrochen, wenn keine Ziffer mehr folgt.

                                        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

                                        1 Antwort Letzte Antwort
                                        0
                                        • M Offline
                                          M Offline
                                          meicker
                                          schrieb am zuletzt editiert von
                                          #20

                                          Wissen kann man noch nicht behaupten, aber ich reime mir das gerade mal zusammen :-) Will ja was lernen … :D

                                          Ist data 1 nicht eigentlich LICHTWERT ? Und Wingeschwindigkeit 2 ??

                                          Anders gefragt zum ° - wie bekomme ich das weg ? Oder stört das nicht in einer Blocky Abfrage ?

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          644

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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