FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: australien am 07 März 2018, 09:09:05

Titel: [gelöst] doif mit Teil aus reading
Beitrag von: australien am 07 März 2018, 09:09:05
Hallo zusammen,

wie kann ich aus einem reading

[["R1214","Richtung Hbf","21"],["REX2315","Richtung 2","54"],["REX1215","Richtung Hbf","79"],["REX2319","Richtung 2","114"],["REX2622","Hbf","139"],["REX2323","Richtung 2","174"],["REX1216","Richtung Hbf","199"]]

eine doif bei einer bestimmten Zeichenfolge (Zugnummer) ausführen?
auslesen der Zugnummer, Richtung und der verbleibenden Zeit

danke für Eure Hilfe

Robert
Titel: Antw:doif mit Teil aus reading
Beitrag von: Ellert am 07 März 2018, 10:12:52
([<Gerätename>:<Readingname>] =~ "<Suchzeichenkette>")

Mehr dazu steht gleich am Anfang der deutschsprachigen Befehlsreferenz zum DOIF, Stichwort Teilausdrücke abfragen.
Titel: Antw:doif mit Teil aus reading
Beitrag von: australien am 07 März 2018, 10:44:19
ups, danke.

dürfte ich übersehen haben.. :(
Titel: Antw:doif mit Teil aus reading
Beitrag von: australien am 08 März 2018, 00:08:11
 ich bekomme es aber trotzdem irgendwie nicht hin.

mein reading ist "Bahnhof"

[["REX5800","Hbf","273"],["R5802","Steindorf b.Straßwalchen Bahnhof","308"],["870","Braunau/Inn Stadtplatz","356"],["870","Braunau/Inn Stadtplatz","357"],["REX5854","Freilassing","358"],["R5801","Braunau/Inn Bahnhof","376"],["REX5856","Freilassing","389"],["REX5803","Braunau/Inn Bahnhof","421"],["R5834","Steindorf b.Straßwalchen Bahnhof","431"]]


nun soll bei zb um 06:15-06:19 der Wert von Linie R5801 ausgelesen werden, hier 376. wenn dieser <2 ist die Linie pünktlich -> alles gut, wenn nicht -> message an telegrambot
planabfahrt von R5801 ist um 06:17

gibt es dazu einen Lösungsansatz?
Danke
Titel: Antw:doif mit Teil aus reading
Beitrag von: Ellert am 08 März 2018, 08:10:52
Zitatich bekomme es aber trotzdem irgendwie nicht hin.

Was ist Dein bester Ansatz?

<Suchzeichenkette> darf auch ein regulärer Ausdruck sein.
Titel: Antw:doif mit Teil aus reading
Beitrag von: australien am 08 März 2018, 09:30:24
mein Ansatz wäre


DOIF

([07:14-07:18] and [myDoki_Zug:Bahnhof] =~ "R5801" )


reading Bahnhof
[["REX5800","Hbf","273"],["R5802","Steindorf b.Straßwalchen Bahnhof","308"],["870","Braunau/Inn Stadtplatz","356"],["870","Braunau/Inn Stadtplatz","357"],["REX5854","Freilassing","358"],["R5801","Braunau/Inn Bahnhof","376"],["REX5856","Freilassing","389"],["REX5803","Braunau/Inn Bahnhof","421"],["R5834","Steindorf b.Straßwalchen Bahnhof","431"]]

aber wie bekomme ich aus dem reading "myDoki_Zug:Bahnhof" vom String ["ZugNr","Ziel","CountZeit"] den Wert "CountZeit" für den bestimmten Wert "ZugNr"?  Dieser String ist ja im reading immer an einer anderen Stelle.

Verstehst du was ich meine?

Diese Abfrage soll eine Verspätung des Zuges auf mein Handy bringen.

Entweder sehe ich den Wald vor lauter Bäumen nicht oder ich bin am Holzweg?!?!?!?
Titel: Antw:doif mit Teil aus reading
Beitrag von: Ellert am 08 März 2018, 12:35:53
Dann könntest Du die gefilterte Ausgabeformatierung nutzen. https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen

[myDoki_Zug:Bahnhof:"R5802\",\".*?\",\"(.*?)\"":$1]
Titel: Antw:doif mit Teil aus reading
Beitrag von: australien am 09 März 2018, 10:37:56
das kannte ich nicht, und brauchte etwas zeit um das auch zu verstehen.

nun habe ich folgendes gemacht

([myDoki_Zug:Bahnhof] =~ "R7805" ) (set mydummy [myDoki_Zug:Bahnhof:"R7805\",\".*?\",\"(.*?)\"":$1])

leider kann ich die doif nicht abschließen, fehler
DOIF: no round brackets in regular expression: R7805\

hab schon mit [] und () gespielt, leider bekomme ich es nicht hin.


Titel: Antw:doif mit Teil aus reading
Beitrag von: Ellert am 09 März 2018, 15:02:32
Bist Du Dir sicher, dass die Ausgabeformatierung auch im Ausführungsteil des DOIF funktioniert?

Mein Vorschlag bezog sich auf den Bedingungsteil, also etwa so

([myDoki_Zug:Bahnhof:"R7805\",\".*?\",\"(.*?)\"":$1] < 2) (<Befehl>)

Die Regexp könntest Du in der FHEM Befehlszeile testen mit
{ReadingsVal("myDoki_Zug","Bahnhof","nix") =~ "R7805\",\".*?\",\"(.*?)\"";;$1}

Auf diese Weise könntest Du es auch im Befehlsteil nutzen --> Commandref: set; DOIF, Angaben Ausführungsteil

Edit: Die Ausgabeformatierung funktioniert grundsätzlich auch im Befehlsteil. Hast Du eine aktuelle DOIF-Version?
Titel: Antw:doif mit Teil aus reading
Beitrag von: australien am 09 März 2018, 16:03:06
das glaub ich ist das Problem.
Das Regexp gibt mir den richtigen Minutenwert aus.
Aber jetzt verstehe ich das ganze schon besser, nur wenn ich das DOIF neu anlege, kommt trotzdem dieser Fehler:

zug DOIF: no round brackets in regular expression: REX2611\

define zug DOIF ([06:58] and [myDoki_Zug:Bahnhof:"REX2611\",\".*?\",\"(.*?)\"":$1] < 22) ((set teleBot message @iphone Zug REX2611 kommt um [{ReadingsVal("myDoki_Zug","Bahnhof","nix") =~ "REX2611\",\".*?\",\"(.*?)\"";;$1}-18] später))

Danke für deine Geduld und Hilfe!
Titel: Antw:doif mit Teil aus reading
Beitrag von: Ellert am 09 März 2018, 17:33:24
Ich weiss auch nicht warum es die Meldung gibt. Du könntest auf unnötige Klammern im Befehl verzichten oder in der Bedingung auch ReadingsVal verwenden, da Du einen Zeittrigger hast.

([06:58] and ReadingsVal("myDoki_Zug","Bahnhof","nix") =~ "REX2611\",\".*?\",\"(.*?)\"" and $1 < 22)

    (set teleBot message @iphone Zug REX2611 kommt um {(ReadingsVal("myDoki_Zug","Bahnhof","nix") =~ "REX2611\",\".*?\",\"(.*?)\"";;$1-18)} später)
Titel: [gelöst] doif mit Teil aus reading
Beitrag von: australien am 12 März 2018, 18:24:09
jetzt hab ich es mit Hilfe von @Ellert geschaft! Danke

letztlich war noch die Klammerproblematik.

funktionierender code:
([14:20] and (ReadingsVal("myDoki_Zug","Bahnhof","nix") =~ "R7852\",\".*?\",\"(.*?)\"" and $1 < 176)) (set |commando>)

wichtig war noch die () vor dem ReadingsVal, ohne ist es eine Zeitabfrage (steht auch sicher wo so, nur hab ich es nicht gewußt)

Hab es aber trotzdem anders gelöst:
Es wird nun mit der Abfrage des ReadingsVal ein userattr beschrieben und dieser Wert mehrfach verwenden.