<gelöst> DOIF mit Verkehrsmeldung (GoogleMaps) und TelegramBot

Begonnen von Albi, 20 Februar 2019, 19:18:32

Vorheriges Thema - Nächstes Thema

Albi

Also grundsätzlich funktioniert es so fehlerfrei.

([Fahrzeit_GZ:Verkehr:"^(?:(.*) Stunde,.)?(.*) Minuten":$1*60+$2] < 65) (set Nach_GZ ON)
DOELSE ([Fahrzeit_GZ:Verkehr:"^(?:(.*) Stunde,.)?(.*) Minuten":$1*60+$2] > 70) (set Nach_GZ OFF)


einzig bekommt man eine Warnung im LOG wenn die Fahrtzeit im Reading nur mit Minunten ausgegeben wird und der Stundenwert also "0" ist und dann eben in der Formel 0*60+55 berechnet wird. Allerdings ergibt das am Ende ja trotzdem 55 ;-)

Aber eben der LOG eintrag ist vorhanden und sieht wie folgt aus

2019.02.28 08:17:31 1: PERL WARNING: Use of uninitialized value $1 in multiplication (*) at (eval 33211) line 1.
2019.02.28 08:17:31 3: eval: Fahrzeit_O_DOIF_1: warning in condition c01


Wenn das noch weg wäre, dann wäre es Perfekt.


Aber wie gesagt, es funktioniert sein gut einer Woche ;-)


Gruß Albi
Fhem Raspberry3+

TabletUI mit Abfallkalender, der auch per Telegramm sendet - Verkehrsmeldung über Google, das per DOIF an Telegramm bei Störung meldet - Sonnoff mit Tasmota (mqtt) und Shelly (mqtt und mqtt2) - Alexa Verknüpfung - Benzinpreis auf Tablet UI über HTTPMOD - Wetter + Pollen

Damian

Dafür braucht man nur $1 als Variable vorzubelegen:

Fahrzeit_GZ:Verkehr:"^(?:(.*) Stunde,.)?(.*) Minuten":$1=0;$1*60+$2]

Noch eleganter wäre es, diesen Ausdruck unter DOIF_Reading zu defnieren. Das hat diverse Vorteile:

-Man sieht die berechnete Minutenanzahl

-Es wird nur einmal statt zweimal gerechnet

-Die Bedingung ist wesentlich kürzer, indem man das eigene Reading beide Male angibt



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Albi

Das mit dem DOIF_Reading hört sich gut an. Werde mich damit mal beschäftigen.

Die empfohlene Änderung bzw Variable

Fahrzeit_GZ:Verkehr:"^(?:(.*) Stunde,.)?(.*) Minuten":$1=0;$1*60+$2]

hilft zwar, aber nun erhalte ich folgendes Warning

2019.02.28 12:15:04 1: PERL WARNING: Use of uninitialized value in numeric lt (<) at (eval 37384) line 1.
2019.02.28 12:15:04 3: eval: Fahrzeit_GZ_DOIF_1: warning in condition c01



hier nochmal das komplette DOIF



([Fahrzeit_GZ:Verkehr:"^(?:(.*) Stunde,.)?(.*) Minuten":$1=0;$1*60+$2] < 65) (set Nach_GZ ON)
DOELSE ([Fahrzeit_GZ:Verkehr:"^(?:(.*) Stunde,.)?(.*) Minuten":$1=0;$1*60+$2] > 70) (set Nach_GZ OFF)


verstehe ich jetzt nicht, warum das Warning kommt und eben die Operatoren "<" oder ">" bemängelt. Das habe ich schon x mal in DOIFs gemacht und dieses Warning hatte ich noch nie...

hmmm???
Fhem Raspberry3+

TabletUI mit Abfallkalender, der auch per Telegramm sendet - Verkehrsmeldung über Google, das per DOIF an Telegramm bei Störung meldet - Sonnoff mit Tasmota (mqtt) und Shelly (mqtt und mqtt2) - Alexa Verknüpfung - Benzinpreis auf Tablet UI über HTTPMOD - Wetter + Pollen

Damian

Ich stelle gerade fest, dass es wohl keine gute Idee war $1 auf Null zu setzen, denn das ist an dieser Stelle schon zu spät, damit wird $1 immer auf Null gesetzt, auch wenn Stunden da gewesen wären.

Was man stattdessen machen könnte ist: Fahrzeit_GZ:Verkehr:"^(?:(.*) Stunde,.)?(.*) Minuten":$1=0 if (!define $1);$1*60+$2]

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF