FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: josburg am 24 Januar 2016, 17:15:50

Titel: [Gelöst:]RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: josburg am 24 Januar 2016, 17:15:50
Hallo,

ich möchte gerne vom Windmesser Mobile Alerts 10660 die entsprechenden Daten auslesen.
http://www.amazon.de/gp/product/B015WC8OUS/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=B015WC8OUS&linkCode=as2&tag=jensosburaspu-21

Leider erhalte ich bei dem Ergebnis mittels RegEx immer den Wert "1.0"
Anbei mal der aktuell ausgelesene Datensatz:

{ "idx": 24602, "ts": 1453650673, "tx": 7178, "c": 1453650744, "pr": false, "ws": 0.1, "wg": 1.1, "wd": 10 }


Die Definition sieht folgendermaßen aus:

[b]reading01Name[/b]  WINDGESCHWINDIGKEIT
[b]reading01Regex[/b] "ws": (\d?\d.\d)

[b]reading02Name[/b]  BÖE
[b]reading02Regex[/b] "wg": (\d?\d.\d)

[b]reading03Name[/b] WINDRICHTUNG
[b]reading03Regex[/b] "wd": (\d?\d.\d)

[b]stateFormat[/b] {sprintf("%.1f m/s, Böe %.1f m/s, Windrichtung %.1f", ReadingsVal($name,"WINDGESCHWINDIGKEIT",0), ReadingsVal($name,"BÖE",0), ReadingsVal($name,"WINDRICHTUNG",0))}


Im Anhang dann noch das Bild des Ergebnis...

Laut Datensatz müsste jetzt doch bei Windgeschwindigkeit "0.1", bei Böe "1.1" und bei Windrichtung "10" angezeigt werden....?!?
Was mache ich falsch?
Titel: Antw:RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: frank am 24 Januar 2016, 18:14:23
ich spekuliere mal, hier geht es um httpmod.
besser als ein bilde ist immer ein "list <name>", da es mehr infos enthält und einfacher zu lesen ist.

versuche mal die doppelten anführungszeichen zu maskieren => \"
und für leerzeichen einen punkt zu setzen. ich würde folgendes versuchen:

reading01Regex \"ws\":.([\d\.]+)
Titel: Antw:RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: josburg am 24 Januar 2016, 18:59:26
Zitat von: frank am 24 Januar 2016, 18:14:23
ich spekuliere mal, hier geht es um httpmod.
besser als ein bilde ist immer ein "list <name>", da es mehr infos enthält und einfacher zu lesen ist.

versuche mal die doppelten anführungszeichen zu maskieren => \"
und für leerzeichen einen punkt zu setzen. ich würde folgendes versuchen:

reading01Regex \"ws\":.([\d\.]+)

Hallo Frank,

vielen Dank für Deine Unterstützung - leider hat der Code von Dir bisher noch keine Veränderug gebracht.
Ich habe das Ergebnis von list im Anhang bereitgestellt - evtl. fällt Dir noch etwas auf?

Vielen Dank

Jens
Titel: Antw:RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: Markus Bloch am 24 Januar 2016, 19:54:59
Hallo zusammen,

das Ergebnis ist völlig richtig, wenn man sich den output anschaut:

Zitat{
  "success": true,
  "primarydomain": "www.data199.com",
  "phoneid": "032330673013",
  "result": {
    "devices": [
      {
        "deviceid": "0B07EB324C23",
        "devicetypeid": 11,
        "name": "Windsensor Gommels",
        "lang": "de",
        "lastseen": 1453657841,
        "lowbattery": false,
        "alertwasactive": false,
        "settings": {
          "wsalarmactive": false,
          "ws": 1.0,
          "wgalarmactive": false,
          "wg": 1.0,

Daher muss die Regexp folgendermaßen heißen:


reading01Name]  WINDGESCHWINDIGKEIT
reading01Regex (?s)"measurements"[^}]+"ws": (\d+\.\d+)

reading02Name  BÖE
reading02Regex (?s)"measurements"[^}]+"wg": (\d+\.\d+)

reading03Name WINDRICHTUNG
reading03Regex (?s)"measurements"[^}]+"wd": (\d+\.\d+)


Gruß
Markus
Titel: Antw:RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: Markus Bloch am 24 Januar 2016, 19:59:37
Diese matcht dann auf:

Zitat{
  "success": true,
  "primarydomain": "www.data199.com",
  "phoneid": "032330673013",
  "result": {
    "devices": [
      {
        "deviceid": "0B07EB324C23",
        "devicetypeid": 11,
        "name": "Windsensor Gommels",
        "lang": "de",
        "lastseen": 1453657841,
        "lowbattery": false,
        "alertwasactive": false,
        "settings": {
          "wsalarmactive": false,
          "ws": 1.0,
          "wgalarmactive": false,
          "wg": 1.0,
          "wats": 360,
          "wdnalarmactive": true,
          "wdnnealarmactive": true,
          "wdnealarmactive": true,
          "wdenealarmactive": true,
          "wdealarmactive": true,
          "wdesealarmactive": true,
          "wdsealarmactive": true,
          "wdssealarmactive": true,
          "wdsalarmactive": true,
          "wdsswalarmactive": true,
          "wdswalarmactive": true,
          "wdwswalarmactive": true,
          "wdwalarmactive": true,
          "wdwnwalarmactive": true,
          "wdnwalarmactive": true,
          "wdnnwalarmactive": true
        },
        "measurements": [
          {
            "idx": 24653,
            "ts": 1453657841,
            "tx": 7195,
            "c": 1453658001,
            "pr": false,
            "ws": 0.1,
                "wg": 0.8,
                "wd": 11

           },

Gruß
Markus
Titel: Antw:RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: josburg am 24 Januar 2016, 20:52:09
Hallo Markus,

vielen Dank für Deine Hilfe - manchmal sieht man den Wald vor lauter Bäumen nicht.

Vielleicht kannst Du mir nochmal weiterhelfen, als Anfänger tut man sich doch öfters schwer....
Für "Böe" und "Windgeschwindigkeit" funktioniert es dank Deiner Hilfe jetzt, aber Windrichtung wird immer noch mit "0.0" angezeigt.

Jetzt habe ich mir die Readings nochmal angeschaut und bemerkt, dass "Windrichtung" gar nicht angelegt ist, obwohl ich es als attr definiert habe (siehe Auszug aus list):

   Readings:
     2016-01-24 20:25:35   BÖE            2.7
     2016-01-24 20:25:35   WINDGESCHWINDIGKEIT 1.5
   Request:
     data       devicetoken=c469a2c5-2f82464f-a73969cc-e1e3bf15-2eb7db2b-2b2cc4fb-a87fd82a-f596ab77&vendorid=3D3BCADD-79C6-4AEE-9F8B-73C83C047122&phoneid=032330673013&version=1.21&build=248&executable=Mobile Alerts&bundle=de.synertronixx.remotemonitor&lang=de&timezoneoffset=60&timeampm=false&usecelsius=true&usemm=true&speedunit=1&timestamp=1453237425&requesttoken=07436acf2dce9a096aef931736865952&deviceids=0B07EB324C23,&measurementfroms=,0,0,0,0,0,&measurementcounts=,50,50,50,50,50,
     header     Content-Type: application/x-www-form-urlencoded
     ignoreredirects 0
     retryCount 0
     type       Update
     url        http://23.97.212.128:8080/api/v1/dashboard
Attributes:
   reading01Name WINDGESCHWINDIGKEIT
   reading01Regex (?s)"measurements".+?"ws": (\d+\.\d+)
   reading02Name BÖE
   reading02Regex (?s)"measurements".+?"wg": (\d+\.\d+)
   reading03Name WINDRICHTUNG
   reading03Regex (?s)"measurements".+?"wd": (\d+\.\d+)

Titel: Antw:RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: Markus Bloch am 24 Januar 2016, 20:55:27
Weil "wd" keinen Punkt im Value hat:

"wd": 11

Die Regexp also lauten muss:

   reading03Regex (?s)"measurements".+?"wd": (\d+)

Habe ich aber auch nicht drauf geachtet muss ich gestehen.

Gruß
Markus
Titel: Antw:[Gelöst:]RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: josburg am 24 Januar 2016, 21:48:26
Hallo Markus,

super, vielen Dank. Den Thread habe ich auf "gelöst"  gesetzt.
Da ich den Eindruck habe, dass Du mir spontan die nächste Antwort geben kannst, hier noch ein Versuch - ansonsten lese ich erstmal wieder eine Weile weiter...

Zur Anzeige verwende ich FHEM TabletUI (FTUI) und möchte das "wind_direction" - Widget verwenden.
Der Mobile Alerts Sensor
http://www.amazon.de/gp/product/B015WC8OUS/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=B015WC8OUS&linkCode=as2&tag=jensosburaspu-21 (http://www.amazon.de/gp/product/B015WC8OUS/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=B015WC8OUS&linkCode=as2&tag=jensosburaspu-21)
gibt die Windrichtung ja numerisch aus, also:
wd = Windrichtung (0 = N, 1 = NNO, 2 = NO, 3 = ONO, 4 = O, ...., 12 = W, 13 = WNW, 14 = NW, 15 = NNW)


Das "wind_direction" - Widget nimmt, so wie ich die Anleitung hier verstehe https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/wind_direction (https://github.com/nesges/Widgets-for-fhem-tablet-ui/wiki/wind_direction), die Daten z.B. in Grad entgegen:

Attribute
direction

Reading mit der Windrichtung. Kann numerisch (0-360) oder in Textform ("NO") angegeben sein. Default: wind_direction


Wie setze ich jetzt die numerischen Werte der Windrichtung "0", "1", "2".....,"14", "15" um in die entsprechenden Grad-Zahlen?

Evtl. hast Du ja nochmal kurz Lust, mir zu helfen.

Viele Grüße
Jens
Titel: Antw:[Gelöst:]RegEx liefert immer 1.0 anstelle des korrekten Wertes
Beitrag von: Markus Bloch am 24 Januar 2016, 22:10:28
Ganz einfach. Am schnellsten und simpelsten würde ich den Wert "wd" nehmen und durch 15 teilen und dann mit 360 multiplizieren:

attr SENSOR_WINDGESCHWINDIGKEIT userReadings wind_direction_corrected:wind_direction { int(ReadingsVal("SENSOR_WINDGESCHWINDIGKEIT","wind_direction",0))/15*360 }

dadurch wird der Wert aus wind_direction genommen und folgendermaßen umgewandelt:

0 => 0°
1 => 24°
2 => 48°
3 => 72°

Dann in FTUI das neue Reading wind_direction_corrected nehmen.

Gruß
Markus