FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: australien am 13 Januar 2020, 09:34:35

Titel: [gelöst] Durchsuchen von readings
Beitrag von: australien am 13 Januar 2020, 09:34:35
guten tag zusammen,

wie kann ich diese readings, eigentlich nur die xx_number durchsuchen und die xx-nummer bzw. dazugehörende dapature_Delay auslesen?
Die xx gehen bis zu 11.

01_departureDelay 0
01_departureTime 2020-01-13T09:39+0100
01_departureTimeInMinutes 23
01_departureTimestamp 1578904740000
01_number 2622

02_departureDelay 0
02_departureTime 2020-01-13T10:15+0100
02_departureTimeInMinutes 59
02_departureTimestamp 1578906900000
02_number 2623
02_platform 1


Danke!
Titel: Antw:Durchsuchen von readings
Beitrag von: Gisbert am 13 Januar 2020, 09:41:48
Hallo australien,

vielleicht geht das mit dem Modul readingsGroup, schau mal, ob es für deine Bedürfnisse passt.

Ansonsten gibt es noch das Modul monitoring, das Readings auf Aktualität prüfen kann.

Viele​ Grüße​ Gisbert​
Titel: Antw:Durchsuchen von readings
Beitrag von: Otto123 am 13 Januar 2020, 09:42:08
Hi,

mir ist nicht ganz klar was Du machen willst, aber vielleicht hilft Dir der Hinweis
https://forum.fhem.de/index.php/topic,106368.msg1002167.html#msg1002167

Gruß Otto
Titel: Antw:Durchsuchen von readings
Beitrag von: CoolTux am 13 Januar 2020, 09:51:52
Zeige mal bitte ein list von dem Device. Eventuell kann man das ganze etwas abkürzen wenn man die Info hat wie viele dieser 01 02 03 es genau gibt. Also gibt es ein Reading wo diese 11 drin stehen?
Titel: Antw:Durchsuchen von readings
Beitrag von: australien am 13 Januar 2020, 12:59:35
Zitat von: Otto123 am 13 Januar 2020, 09:42:08
Hi,

mir ist nicht ganz klar was Du machen willst, aber vielleicht hilft Dir der Hinweis
https://forum.fhem.de/index.php/topic,106368.msg1002167.html#msg1002167

Gruß Otto

Was will ich machen?
Ich will aus dem httpmod der Fahrplanauskunft (aus dem depature-Modul von sbiermann) einen einzelnen Zug welcher in einem dummy (ZugNr) steht abrufen und die Verpätung auslesen.

anbei noch ein vollstänges List

Internals:
   BUSY       0
   DEF        none 0
   FUUID      5e15b732-f33f-fbda-f529-9aa3a58913384f36
   Interval   0
   JSONEnabled 1
   LASTSEND   1578904815.89851
   MainURL   
   ModuleVersion 3.5.21 - 27.12.2019
   NAME       myDoki_Zug_versp
   NOTIFYDEV  global
   NR         758
   NTFY_ORDER 50-myDoki_Zug_versp
   STATE      gew 2611 echt 2626 - 0
   TRIGGERTIME 0
   TRIGGERTIME_FMT
   TYPE       HTTPMOD
   addr       https://transport.stefan-biermann.de:443
   auth       0
   code       200
   compress   1
   conn       
   data       
   displayurl https://transport.stefan-biermann.de/publictransportapi/rest/departure?from=1210307&provider=Oebb
   header     
   host       transport.stefan-biermann.de
   httpheader HTTP/1.1 200 OK
Date: Mon, 13 Jan 2020 08:40:16 GMT
Server: Apache/2.4.29 (Ubuntu)
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Type: application/json
Connection: close
   httpversion 1.0
   hu_blocking 0
   hu_filecount 2
   hu_port    443
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /publictransportapi/rest/departure?from=1210307&provider=Oebb
   protocol   https
   redirects  0
   timeout    30
   url        https://transport.stefan-biermann.de/publictransportapi/rest/departure?from=1210307&provider=Oebb
   value      0
   CompiledRegexes:
   QUEUE:
   READINGS:
     2020-01-13 09:40:17   01_departureDelay 0
     2020-01-13 09:40:17   01_departureTime 2020-01-13T10:15+0100
     2020-01-13 09:40:17   01_departureTimeInMinutes 35
     2020-01-13 09:40:17   01_departureTimestamp 1578906900000
     2020-01-13 09:40:17   01_number       2623
     2020-01-13 09:40:17   01_platform     1
     2020-01-13 09:40:17   01_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   01_to           Wulkaprodersdorf Bahnhof
     2020-01-13 09:40:17   01_toId         8100361
     2020-01-13 09:40:17   02_departureDelay 0
     2020-01-13 09:40:17   02_departureTime 2020-01-13T10:39+0100
     2020-01-13 09:40:17   02_departureTimeInMinutes 59
     2020-01-13 09:40:17   02_departureTimestamp 1578908340000
     2020-01-13 09:40:17   02_number       2626
     2020-01-13 09:40:17   02_platform     1
     2020-01-13 09:40:17   02_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   02_to           Hbf
     2020-01-13 09:40:17   02_toId         8103000
     2020-01-13 09:40:17   03_departureDelay 0
     2020-01-13 09:40:17   03_departureTime 2020-01-13T11:15+0100
     2020-01-13 09:40:17   03_departureTimeInMinutes 95
     2020-01-13 09:40:17   03_departureTimestamp 1578910500000
     2020-01-13 09:40:17   03_number       2627
     2020-01-13 09:40:17   03_platform     1
     2020-01-13 09:40:17   03_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   03_to           Wulkaprodersdorf Bahnhof
     2020-01-13 09:40:17   03_toId         8100361
     2020-01-13 09:40:17   04_departureDelay 0
     2020-01-13 09:40:17   04_departureTime 2020-01-13T11:39+0100
     2020-01-13 09:40:17   04_departureTimeInMinutes 119
     2020-01-13 09:40:17   04_departureTimestamp 1578911940000
     2020-01-13 09:40:17   04_number       2630
     2020-01-13 09:40:17   04_platform     1
     2020-01-13 09:40:17   04_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   04_to           Hbf
     2020-01-13 09:40:17   04_toId         8103000
     2020-01-13 09:40:17   05_departureDelay 0
     2020-01-13 09:40:17   05_departureTime 2020-01-13T12:15+0100
     2020-01-13 09:40:17   05_departureTimeInMinutes 155
     2020-01-13 09:40:17   05_departureTimestamp 1578914100000
     2020-01-13 09:40:17   05_number       2631
     2020-01-13 09:40:17   05_platform     1
     2020-01-13 09:40:17   05_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   05_to           Wulkaprodersdorf Bahnhof
     2020-01-13 09:40:17   05_toId         8100361
     2020-01-13 09:40:17   06_departureDelay 0
     2020-01-13 09:40:17   06_departureTime 2020-01-13T12:39+0100
     2020-01-13 09:40:17   06_departureTimeInMinutes 179
     2020-01-13 09:40:17   06_departureTimestamp 1578915540000
     2020-01-13 09:40:17   06_number       2634
     2020-01-13 09:40:17   06_platform     1
     2020-01-13 09:40:17   06_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   06_to           Hbf
     2020-01-13 09:40:17   06_toId         8103000
     2020-01-13 09:40:17   07_departureDelay 0
     2020-01-13 09:40:17   07_departureTime 2020-01-13T13:15+0100
     2020-01-13 09:40:17   07_departureTimeInMinutes 215
     2020-01-13 09:40:17   07_departureTimestamp 1578917700000
     2020-01-13 09:40:17   07_number       2635
     2020-01-13 09:40:17   07_platform     1
     2020-01-13 09:40:17   07_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   07_to           Wulkaprodersdorf Bahnhof
     2020-01-13 09:40:17   07_toId         8100361
     2020-01-13 09:40:17   08_departureDelay 0
     2020-01-13 09:40:17   08_departureTime 2020-01-13T13:39+0100
     2020-01-13 09:40:17   08_departureTimeInMinutes 239
     2020-01-13 09:40:17   08_departureTimestamp 1578919140000
     2020-01-13 09:40:17   08_number       2638
     2020-01-13 09:40:17   08_platform     1
     2020-01-13 09:40:17   08_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   08_to           Hbf
     2020-01-13 09:40:17   08_toId         8103000
     2020-01-13 09:40:17   09_departureDelay 0
     2020-01-13 09:40:17   09_departureTime 2020-01-13T14:04+0100
     2020-01-13 09:40:17   09_departureTimeInMinutes 264
     2020-01-13 09:40:17   09_departureTimestamp 1578920640000
     2020-01-13 09:40:17   09_number       2640
     2020-01-13 09:40:17   09_platform     1
     2020-01-13 09:40:17   09_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   09_to           Bruck/Leitha Bahnhof
     2020-01-13 09:40:17   09_toId         8100198
     2020-01-13 09:40:17   10_departureDelay 0
     2020-01-13 09:40:17   10_departureTime 2020-01-13T14:15+0100
     2020-01-13 09:40:17   10_departureTimeInMinutes 275
     2020-01-13 09:40:17   10_departureTimestamp 1578921300000
     2020-01-13 09:40:17   10_number       2639
     2020-01-13 09:40:17   10_platform     1
     2020-01-13 09:40:17   10_product      REGIONAL_TRAIN
     2020-01-13 09:40:17   10_to           Wulkaprodersdorf Bahnhof
     2020-01-13 09:40:17   10_toId         8100361
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       get02
     url        https://transport.stefan-biermann.de/publictransportapi/rest/departure?from=1210307&provider=Oebb
     value      0
   defptr:
     readingBase:
       01_departureDelay get
       01_departureTime get
       01_departureTimeInMinutes get
       01_departureTimestamp get
       01_number  get
       01_platform get
       01_product get
       01_to      get
       01_toId    get
       02_departureDelay get
       02_departureTime get
       02_departureTimeInMinutes get
       02_departureTimestamp get
       02_number  get
       02_platform get
       02_product get
       02_to      get
       02_toId    get
       03_departureDelay get
       03_departureTime get
       03_departureTimeInMinutes get
       03_departureTimestamp get
       03_number  get
       03_platform get
       03_product get
       03_to      get
       03_toId    get
       04_departureDelay get
       04_departureTime get
       04_departureTimeInMinutes get
       04_departureTimestamp get
       04_number  get
       04_platform get
       04_product get
       04_to      get
       04_toId    get
       05_departureDelay get
       05_departureTime get
       05_departureTimeInMinutes get
       05_departureTimestamp get
       05_number  get
       05_platform get
       05_product get
       05_to      get
       05_toId    get
       06_departureDelay get
       06_departureTime get
       06_departureTimeInMinutes get
       06_departureTimestamp get
       06_number  get
       06_platform get
       06_product get
       06_to      get
       06_toId    get
       07_departureDelay get
       07_departureTime get
       07_departureTimeInMinutes get
       07_departureTimestamp get
       07_number  get
       07_platform get
       07_product get
       07_to      get
       07_toId    get
       08_departureDelay get
       08_departureTime get
       08_departureTimeInMinutes get
       08_departureTimestamp get
       08_number  get
       08_platform get
       08_product get
       08_to      get
       08_toId    get
       09_departureDelay get
       09_departureTime get
       09_departureTimeInMinutes get
       09_departureTimestamp get
       09_number  get
       09_platform get
       09_product get
       09_to      get
       09_toId    get
       10_departureDelay get
       10_departureTime get
       10_departureTimeInMinutes get
       10_departureTimestamp get
       10_number  get
       10_platform get
       10_product get
       10_to      get
       10_toId    get
     readingNum:
       01_departureDelay 02
       01_departureTime 02
       01_departureTimeInMinutes 02
       01_departureTimestamp 02
       01_number  02
       01_platform 02
       01_product 02
       01_to      02
       01_toId    02
       02_departureDelay 02
       02_departureTime 02
       02_departureTimeInMinutes 02
       02_departureTimestamp 02
       02_number  02
       02_platform 02
       02_product 02
       02_to      02
       02_toId    02
       03_departureDelay 02
       03_departureTime 02
       03_departureTimeInMinutes 02
       03_departureTimestamp 02
       03_number  02
       03_platform 02
       03_product 02
       03_to      02
       03_toId    02
       04_departureDelay 02
       04_departureTime 02
       04_departureTimeInMinutes 02
       04_departureTimestamp 02
       04_number  02
       04_platform 02
       04_product 02
       04_to      02
       04_toId    02
       05_departureDelay 02
       05_departureTime 02
       05_departureTimeInMinutes 02
       05_departureTimestamp 02
       05_number  02
       05_platform 02
       05_product 02
       05_to      02
       05_toId    02
       06_departureDelay 02
       06_departureTime 02
       06_departureTimeInMinutes 02
       06_departureTimestamp 02
       06_number  02
       06_platform 02
       06_product 02
       06_to      02
       06_toId    02
       07_departureDelay 02
       07_departureTime 02
       07_departureTimeInMinutes 02
       07_departureTimestamp 02
       07_number  02
       07_platform 02
       07_product 02
       07_to      02
       07_toId    02
       08_departureDelay 02
       08_departureTime 02
       08_departureTimeInMinutes 02
       08_departureTimestamp 02
       08_number  02
       08_platform 02
       08_product 02
       08_to      02
       08_toId    02
       09_departureDelay 02
       09_departureTime 02
       09_departureTimeInMinutes 02
       09_departureTimestamp 02
       09_number  02
       09_platform 02
       09_product 02
       09_to      02
       09_toId    02
       10_departureDelay 02
       10_departureTime 02
       10_departureTimeInMinutes 02
       10_departureTimestamp 02
       10_number  02
       10_platform 02
       10_product 02
       10_to      02
       10_toId    02
     readingOutdated:
     requestReadings:
       get02:
         01_departureDelay get 02
         01_departureTime get 02
         01_departureTimeInMinutes get 02
         01_departureTimestamp get 02
         01_number  get 02
         01_platform get 02
         01_product get 02
         01_to      get 02
         01_toId    get 02
         02_departureDelay get 02
         02_departureTime get 02
         02_departureTimeInMinutes get 02
         02_departureTimestamp get 02
         02_number  get 02
         02_platform get 02
         02_product get 02
         02_to      get 02
         02_toId    get 02
         03_departureDelay get 02
         03_departureTime get 02
         03_departureTimeInMinutes get 02
         03_departureTimestamp get 02
         03_number  get 02
         03_platform get 02
         03_product get 02
         03_to      get 02
         03_toId    get 02
         04_departureDelay get 02
         04_departureTime get 02
         04_departureTimeInMinutes get 02
         04_departureTimestamp get 02
         04_number  get 02
         04_platform get 02
         04_product get 02
         04_to      get 02
         04_toId    get 02
         05_departureDelay get 02
         05_departureTime get 02
         05_departureTimeInMinutes get 02
         05_departureTimestamp get 02
         05_number  get 02
         05_platform get 02
         05_product get 02
         05_to      get 02
         05_toId    get 02
         06_departureDelay get 02
         06_departureTime get 02
         06_departureTimeInMinutes get 02
         06_departureTimestamp get 02
         06_number  get 02
         06_platform get 02
         06_product get 02
         06_to      get 02
         06_toId    get 02
         07_departureDelay get 02
         07_departureTime get 02
         07_departureTimeInMinutes get 02
         07_departureTimestamp get 02
         07_number  get 02
         07_platform get 02
         07_product get 02
         07_to      get 02
         07_toId    get 02
         08_departureDelay get 02
         08_departureTime get 02
         08_departureTimeInMinutes get 02
         08_departureTimestamp get 02
         08_number  get 02
         08_platform get 02
         08_product get 02
         08_to      get 02
         08_toId    get 02
         09_departureDelay get 02
         09_departureTime get 02
         09_departureTimeInMinutes get 02
         09_departureTimestamp get 02
         09_number  get 02
         09_platform get 02
         09_product get 02
         09_to      get 02
         09_toId    get 02
         10_departureDelay get 02
         10_departureTime get 02
         10_departureTimeInMinutes get 02
         10_departureTimestamp get 02
         10_number  get 02
         10_platform get 02
         10_product get 02
         10_to      get 02
         10_toId    get 02
   sslargs:
Attributes:
   enableControlSet 1
   get02ExtractAllJSON 1
   get02Name  Bahnhof
   get02Regex ^[0-9]+ [^;]*(;.*)$
   get02URL   https://transport.stefan-biermann.de/publictransportapi/rest/departure?from=1210307&provider=Oebb
   room       8.9.OeBB_Doki
   stateFormat gew [ZugNr:state] echt [$name:02_number] - [$name:02_departureDelay]
   timeout    30
   userattr   get01ExtractAllJSON:0,1,2 get02ExtractAllJSON:0,1,2 get02Name get02Regex get02URL reading01Name reading01RecombineExpr reading01Regex


womöglich ist die ganze Sache mit den readings nicht so gut und man sollte diese in einen Einzelnen String zusammen fassen? Als userreadings? Aber wie?
Titel: Antw:Durchsuchen von readings
Beitrag von: Otto123 am 13 Januar 2020, 13:08:44
Zitateinen einzelnen Zug welcher in einem dummy (ZugNr)
Also Du hast die Zugnummer? und willst in den readings nach der Zugnummer suchen und aus dem Satz die Verspätung?
Also so? Beispiel:
Es geht um Zug 2626
Suche 2626 in xx_number
finde Reading 02_number -> 02
lies 02_departureDelay


Titel: Antw:Durchsuchen von readings
Beitrag von: australien am 13 Januar 2020, 13:41:34
Zitat von: Otto123 am 13 Januar 2020, 13:08:44
Also Du hast die Zugnummer? und willst in den readings nach der Zugnummer suchen und aus dem Satz die Verspätung?
Also so? Beispiel:
Es geht um Zug 2626
Suche 2626 in xx_number
finde Reading 02_number -> 02
lies 02_departureDelay

Genau das will ich.
Titel: Antw:Durchsuchen von readings
Beitrag von: Otto123 am 13 Januar 2020, 14:04:05
Na dann mal eine erste Idee - bloß zum schnelltest. Funktioniert als Einzeiler in der FHEM Kommandozeile!
{my $rr = "nicht gefunden";;my $d="myDoki_Zug_versp";;my $hash = $defs{$d};;my $readings = $hash->{READINGS};;foreach my $a ( keys %{$readings} ) {my $val=ReadingsVal($d,$a,"error");;if ($val == "2626") { $rr = $a}}return $rr}
Dann müsste man jetzt "2626" als Übergabe Parameter bzw. direkt ReadingsVal() aus dem Dummy machen.
Aus $rr vorn die Ziffer abspalten
Daraus 02_departureDelay machen.
Und dann ReadingsNum("myDoki_Zug_versp","02_departureDelay",999)

Natürlich noch mit ein paar Variablen, dass Ganze in die 99_myUtils.pm und dann einfach aufrufen.

Gruß Otto
Titel: Antw:Durchsuchen von readings
Beitrag von: australien am 13 Januar 2020, 14:05:34
Danke, werde das am Abend testen.
Titel: Antw:Durchsuchen von readings
Beitrag von: australien am 13 Januar 2020, 19:12:32
so, werd irgendwie nicht schlau. Hab nun folgendes versucht, leider bekomme ich beim Speichern immer folgende Meldung:

myZug_Verspaetung($$)
# Zugverspaetung wird ausgegeben
# Input: ZugNr, device
# Return: Verspaetung
{
my $rr = "nicht gefunden";
my ($ZugNr,$device) = @_;
my $hash = $defs{$device};
my $readings = $hash->{READINGS};

foreach my $a ( keys %{$readings} )
{
my $val=ReadingsVal($device,$a,"error");
if ($val == $ZugNr) { $rr = $a}
} my $line = split('_', $rr);

return {ReadingsNum($device,$line."departureDelay",999);

}

ERROR:
syntax error at ./FHEM/99_myUtils.pm line 22, near ") # Zugverspaetung wird ausgegeben # Input: ZugNr, device # Return: Verspaetung {" Can't redeclare "my" in "my" at ./FHEM/99_myUtils.pm line 24, near "" syntax error at ./FHEM/99_myUtils.pm line 36, near "}" 


Es soll in der sub myZug_Verspaetung($$) die ZugNr (aus dummy) und das device übergeben werden, Rückgabewert xx_departureDelay als Zahl.
Titel: Antw:Durchsuchen von readings
Beitrag von: amenomade am 13 Januar 2020, 19:46:37
Es fehtl das Wort "sub" vor myZug_Verspaetung($$)
Titel: Antw:Durchsuchen von readings
Beitrag von: Otto123 am 13 Januar 2020, 20:46:55
Und ich hoffe, Du hast die 99_myUtils aus dem Template erstellt.  ;)
Und ich denke durch das Split verschwindet der _ damit sollte der Ausdruck so sein:
$line."_departureDelay"

Gruß Otto
Titel: Antw:Durchsuchen von readings
Beitrag von: australien am 13 Januar 2020, 21:34:01
@Otto123, @amenomade
danke für eure Inputs und Hilfe.

Die Lösung sieht nun folgendermaßen aus

sub myZug_Verspaetung($$)
# Zugverspaetung wird ausgegeben
# Input: ZugNr, device
# Return: Verspaetung
{
my $rr = "nicht gefunden";
my ($ZugNr,$device) = @_;
my $hash = $defs{$device};
my $readings = $hash->{READINGS};

foreach my $a ( keys %{$readings} )
{
my $val=ReadingsVal($device,$a,"error");
if ($val == $ZugNr) { $rr = $a}
} my $line = "0".split('_', $rr)."_departureDelay";

return ReadingsVal($device,$line,999)

}



aufgerufen wird das ganze als userreadings

test {myZug_Verspaetung("ZugNr",$name)}