98_DBPlan.pm: Fahrplaninformation der DB

Begonnen von JoWiemann, 08 April 2015, 18:57:14

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Hallo Jörg,

magst Du eigentlich alle Meldungen und Fragen zu diesem Modul in ein- und demselben Thread?

Ich habe nämlich noch zwei weitere Auffälligkeiten, die ich normalerweise in zwei separaten Threads gemeldet hätte.

1) Wenn ich ein UserReading definiere:

attr DBPlan userReadings foo { ReadingsVal("DBPlan","travel_vehicle_nr_3","")."!!!!!" }

führt das im Log zur Meldung:

2017.01.11 20:51:35 1: readingsUpdate(DBPlan,foo,!!!!!) missed to call readingsBeginUpdate first.


2) Ich bekomme folgende Meldung über nicht initialisierte Variable (Schönheitsfehler):

2017.01.11 20:52:35 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at /opt/fhem/FHEM/98_DBPlan.pm line 564.
2017.01.11 20:52:35 1: stacktrace:
2017.01.11 20:52:35 1:     main::__ANON__                      called by /opt/fhem/FHEM/98_DBPlan.pm (562)
2017.01.11 20:52:35 1:     main::DBPlan_make_url               called by /opt/fhem/FHEM/98_DBPlan.pm (669)
2017.01.11 20:52:35 1:     main::DBPlan_Get_DB_Info            called by fhem.pl (2897)
2017.01.11 20:52:35 1:     main::HandleTimeout                 called by fhem.pl (605)


Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

JoWiemann

Hallo Boris,

wir können das zunächst mal in einem Thread belassen.

Deine beiden Fehler kann ich leider nicht nachstellen. Sowohl das userReading als auch das uninitialized value in numeric tritt bei mir nicht auf.

Grüße Jörg

PS: Dein userReading funktioniert jedenfalls bei mir.
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Thoffi1978

#347
Zitat von: JoWiemann am 11 Januar 2017, 18:32:16
Hallo,

gibt es Log-Einträge von dbPlan. Mit den geposteten Einträgen kann ich so nichts anfangen. Sorry

Grüße Jörg

Hallo Jörg,
anbei einmal der Log vom DBPLAN auf verbose 5.
Ich hoffe das hilft weiter.

Ich bekomme den LOG hier nicht eingefügt,
deshalb im Anhang.
Vielleicht das gleiche wie bei Boris?

Lieben Gruß
Thoffi

en-trust

Hallo Zusammen,

seit gut 3 Wochen bekomme ich keine Pushnachrichten mehr bzgl. Verspätungen. Es gibt zu jener Zeit aber, wenn die Abfrage läuft.

# Bahnverbindungsabfrage
define HBF_Oberhausen_Duesseldorf DBPlan 300
attr HBF_Oberhausen_Duesseldorf alias Oberhausen (HBF) nach Düsseldorf (HBF)
attr HBF_Oberhausen_Duesseldorf dbplan_departure Hauptbahnhof, Oberhausen (Rheinland)
attr HBF_Oberhausen_Duesseldorf dbplan_destination Düsseldorf Hbf
attr HBF_Oberhausen_Duesseldorf room Auskunft

define Abfahrtsmonitor readingsGroup < >,<Abfahrt>,<Ankunft>,<Dauer>,<Verspätung (Abfahrt)>,<Verbindung> HBF_Oberhausen_Duesseldorf:plan_departure_1,plan_arrival_1,plan_travel_duration_1,plan_departure_delay_1,plan_connection_1 HBF_Oberhausen_Duesseldorf:plan_departure_2,plan_arrival_2,plan_travel_duration_2,plan_departure_delay_2,plan_connection_2 HBF_Oberhausen_Duesseldorf:plan_departure_3,plan_arrival_3,plan_travel_duration_3,plan_departure_delay_3,plan_connection_3
attr Abfahrtsmonitor mapping {'HBF_Oberhausen' => 'Oberhausen (HBF) - Düsseldorf (HBF)'}
attr Abfahrtsmonitor room Auskunft
attr Abfahrtsmonitor valueStyle { if($DEVICE =~ "HBF_*" && $READING =~ "departure_delay_?" && $VALUE == "+0" ) { 'style="color:green"' }elsif ( $DEVICE =~ "HBF_*" && $READING =~ "departure_delay_?" && $VALUE != "+0") { 'style="color:red"'} }

define notifyVerspaetung notify HBF_Oberhausen_Duesseldorf {fhem("define DELAY at +00:00:10 set Verspaetung on")}
define Verspaetung dummy
define HBF_Oberhausen_Duesseldorf_ToLate_W notify Verspaetung {fhem("set Verspaetung off");; my $Zug1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_1",0));; my $Zug2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_2",0));; my $Zug3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_3",0));; my $Abfahrt1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_1",0));; my $Abfahrt2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_2",0));; my $Abfahrt3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_3",0));; my $Verspaetung1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_1",0));;my $Verspaetung2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_2",0));;my $Verspaetung3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_3",0));;if(($Verspaetung1 ne "none") && ($Verspaetung1 ne "+0")){fhem("set PushMessenger msg 'Zugverspätung (Oberhausen HBF) vom $Zug1 um $Abfahrt1' 'Die Bahn kommt $Verspaetung1 Minuten zu spät.';; define NotifyAUS_4 at +00:01:00 attr HBF_Oberhausen_Duesseldorf_ToLate_W notify disable 0;; attr HBF_Oberhausen_Duesseldorf_ToLate_W notify disable 1");;}if(($Verspaetung2 ne "none") && ($Verspaetung2 ne "+0")){fhem("set PushMessenger msg 'Zugverspätung (Oberhausen HBF) vom $Zug2 um $Abfahrt2' 'Die Bahn kommt $Verspaetung2 Minuten zu spät.';; define NotifyAUS_5 at +00:01:00 attr HBF_Oberhausen_Duesseldorf_ToLate_W notify disable 0;; attr HBF_Oberhausen_Duesseldorf_ToLate_W notify disable 1");;}if(($Verspaetung3 ne "none") && ($Verspaetung3 ne "+0")){fhem("set PushMessenger msg 'Zugverspätung (Oberhausen HBF) vom $Zug3 um $Abfahrt3' 'Die Bahn kommt $Verspaetung3 Minuten zu spät.';; define NotifyAUS_6 at +00:01:00 attr HBF_Oberhausen_Duesseldorf_ToLate_W notify disable 0;; attr HBF_Oberhausen_Duesseldorf_ToLate_W notify disable 1");;}}
attr HBF_Oberhausen_Duesseldorf_ToLate_W disable 1
attr HBF_Oberhausen_Duesseldorf_ToLate_W room Auskunft


Jemand eine Idee ?

Dr. Boris Neubert

Zitat von: JoWiemann am 11 Januar 2017, 22:19:06
Deine beiden Fehler kann ich leider nicht nachstellen. Sowohl das userReading als auch das uninitialized value in numeric tritt bei mir nicht auf.

Mit einem voll aus dem SVN soeben aktualisierten FHEM und dem 98_DBPlan.pm

$Id: 98_DBPlan.pm 70554 2017-01-11 18:56:00Z jowiemann $

bekomme ich bei der Definition

define DBPlan DBPlan 11
attr DBPlan dbplan_station Köln-Weiden West
attr DBPlan dbplan_destination Berlin HBF
attr DBPlan dbplan-remote-noshutdown 1
attr DBPlan verbose 3
attr DBPlan userReadings row1 { ReadingsVal("DBPlan","plan_arrival_delay_1","none") }


die folgenden Meldungen:

2017.01.13 19:40:25 5: Cmd: >deletereading DBPlan dbg.*<
2017.01.13 19:40:25 5: Cmd: >deletereading DBPlan plan.*<
2017.01.13 19:40:25 5: Cmd: >deletereading DBPlan travel.*<
2017.01.13 19:40:25 1: readingsUpdate(DBPlan,row1,none) missed to call readingsBeginUpdate first.
2017.01.13 19:40:25 5: Triggering DBPlan (22 changes)
2017.01.13 19:40:25 5: Starting notify loop for DBPlan, 22 event(s), first is plan_departure_1: 22:26
2017.01.13 19:40:27 5: Triggering DBPlan (7 changes)
2017.01.13 19:40:27 5: Starting notify loop for DBPlan, 7 event(s), first is travel_departure_3: Köln-Weiden West - Gl. 1
2017.01.13 19:40:29 5: Triggering DBPlan (7 changes)
2017.01.13 19:40:29 5: Starting notify loop for DBPlan, 7 event(s), first is travel_departure_2: Köln-Weiden West - Gl. 1
2017.01.13 19:40:30 5: Triggering DBPlan (7 changes)


inklusive der Meldung über das fehlende readingsBeginUpdate.

Die Meldung zum undefinierten Wert in Zeile 564 tritt nach Sichtung des Codes auf, wenn $travel_time leer ist (war bei mir wohl der Fall, siehe gelieferter HTML-Buffer) und $hash->{Time_Offset} nicht gesetzt ist. Das kann aber m.E. nach gar nicht vorkommen, weil der Wert im define ja gesetzt wird. Ich melde mich wieder, wenn ich es reproduzieren kann.


Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

JoWiemann

Hallo Boris,

ich habe jetzt beide Fehler nachstellen können. Habe aber gerade bei: readingsUpdate(DBPlan,row1,none) missed to call readingsBeginUpdate first noch keinen Schimmer woher das kommt.

Und, ich kann mich leider erst nächstes Wochenende wieder intensiv um das Modul kümmern.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Thoffi1978

Hallo Jörg,
wieso bekomme ich eigentlich, beim Update mittels fhem, die DBPlan vom 8.1 angezeit obwohl ich die vom 10.1 habe?
dbplan
List of new / modified files since last update:
UPD FHEM/98_DBPlan.pm

New entries in the CHANGED file:
08.01.2017
- Hinweismeldungen für Verbindungen wieder verfügbar.
- Sonderzeichen in der Bahnhofsanzeige korrigiert.
- Neuer zweiter optionaler Parameter im Define: time offset in Minuten. Wenn gesetzt wird die Abfrage Anzahl Minuten in die Zukunft vorverlegt.
- Neues set timeOffset. Hiermit kann das definierte time offset überschrieben werden.
- Parameterstandardwert für noshutdown für nonblocking, siehe Doku HTTPMOD, von 0 auf 1 geändert.
- Neues Reading travel_vehicle_nr_(1..3): Anzeige der Zug, Bus,... Bezeichnung / Nummer
- Kleinere Fehlerkorrekturen


Diese habe ich installiert:
98_DBPlan.pm 70472 2017-01-10 21:54:00Z jowiemann $

Hoffi

JoWiemann

Hallo,

ich habe die Versionen nach dem 08.01 noch auf das Git hochgeladen. Eigentlich sollen sich dort nur die "stabilen" Versionen befinden.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

hartenthaler

#353
Ich habe mich nach einiger Zeit mal wieder mit meinen beiden DBPlan-Instanzen beschäftigt, da sie nicht mehr funktioniert haben.

Mir ist aufgefallen

  • es gibt anscheinend keinen Default-Wert für das Attribut "dbplan_station-file"; würde sich nicht "FHEM/deutschland_bhf.csv" dafür anbieten?
  • beim Attribut "dbplan_default-char" fände ich eine Drop-Down-Auswahlliste sehr schön
  • sehr schön ist die Darstellung bei "get ... PlainText", allerdings funktionieren die beiden Buttons "frühere/spätere Verbindungen" bei mir nicht
  • der Aufruf von "get ... showStations Frohnau" liefert anscheinend alle Stations; erwartet hätte ich nur eine Liste der Stations, die Frohnau in ihrem Namen tragen (was ist der Unterschied zu searchStations ?)
  • das Aktivierungsintervall steht auf 300 s, aber es erfolgt generell keine Aktualisierung; diese muss manuell angestossen werden.
  • in der commandref ist das Attribut dbplan_station zweimal beschrieben (auf deutsch und englisch)
  • bei vielen Attributen ist zwar klar wozu sie dienen, aber nicht klar welche Werte erlaubt sind, etwa bei "dbplan_board_type". Kann man on/off oder 1/0 oder muss man etwas anderes schreiben? Die Angabe der jeweils erlaubten Werte oder zumindest jeweils ein Beispiel würden helfen
Funktionieren tut es an sich aber super (bis auf die fehlende Aktualisierung alle 300 s)! Danke für dieses hilfreiche Modul.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Dr. Boris Neubert

Zitat von: JoWiemann am 14 Januar 2017, 17:00:03
ich habe jetzt beide Fehler nachstellen können. Habe aber gerade bei: readingsUpdate(DBPlan,row1,none) missed to call readingsBeginUpdate first noch keinen Schimmer woher das kommt.

Ich habe mir mal den Kode durchgesehen.

In Zeile 738 gibt es ein readingsEndUpdate(), das zu dem das passenden readingsBeginUpdate() innerhalb eines else-Zweigs steht - das ist problematisch.

Um Readings zu löschen, rufst Du fhem("deletereading ...", 1) auf. Das ist superaufwändig und langsam. Gibt es einen Grund, das nicht in einer eigenen sub durch direktes Löschen des Eintrags im Hash zu erledigen?

Es ist schneller, möglichst viele ReadingsBulkUpdate() zwischen readingsBeginUpdate() und readingsEndUpdate() unterzubringen.  Beide Routinen sind teuer. Es ist allerdings aufwendig, das zu ändern wegen der Logik, die Routinen bei Fehlern mit undef zeitig zu verlassen.

Die Meldung ist übrigens falsch ist - sie muss "readingsBeginUpdate() missed..." heißen - ich gebe Rudi Bescheid.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Zitat von: Dr. Boris Neubert am 16 Januar 2017, 21:23:59
In Zeile 738 gibt es ein readingsEndUpdate(), das zu dem das passenden readingsBeginUpdate() innerhalb eines else-Zweigs steht - das ist problematisch.

Das selbe Problem ist in der Nähe von Zeile 1203. Wenn ich das einsame readingsEndUpdate() von dort in die den else-Zweig verlege, ist die Meldung über das fehlende readingsBeginUpdate() weg.

Ursache: readingsEndUpdate() ruft readingsBulkUpdate() auf, um das userReading zu setzen.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

JoWiemann

Hallo Boris, vielen Dank für die Analyse und die investierte Zeit. Ich werde mich dann mal am Wochenende dran machen.


Grüße Jörg

Gesendet von iPhone mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Ich habe mich nach einiger Zeit mal wieder mit meinen beiden DBPlan-Instanzen beschäftigt, da sie nicht mehr funktioniert haben.
-> Welche Version setzt Du ein?

Mir ist aufgefallen

  • es gibt anscheinend keinen Default-Wert für das Attribut "dbplan_station-file"; würde sich nicht "FHEM/deutschland_bhf.csv" dafür anbieten?
-> Ich mache an dem Attribut fest, ob ich überhaupt die Routinen für das Stationfile anfahre.

  • beim Attribut "dbplan_default-char" fände ich eine Drop-Down-Auswahlliste sehr schön
-> Das ist ein frei wählbares Zeichen/Zeichenkette. Wie soll da eine Auswahlliste aufgebaut sein?

  • sehr schön ist die Darstellung bei "get ... PlainText", allerdings funktionieren die beiden Buttons "frühere/spätere Verbindungen" bei mir nicht
-> Habe ich noch auf der ToDo-Liste. Ich wusste garn nicht, dass es jemand benutzt.

  • der Aufruf von "get ... showStations Frohnau" liefert anscheinend alle Stations; erwartet hätte ich nur eine Liste der Stations, die Frohnau in ihrem Namen tragen (was ist der Unterschied zu searchStations ?)
-> Leider kann das Eingabefeld hinter dem get nicht unterdrückt werden. showStations zeigt einfach nur die Dateien an. Vlt. benenne ich es noch in listStations um?!

  • das Aktivierungsintervall steht auf 300 s, aber es erfolgt generell keine Aktualisierung; diese muss manuell angestossen werden.
-> das überrascht mich. Steht das Modul auf aktiv? Nur bei aktiv wird der Timer getriggert!

  • in der commandref ist das Attribut dbplan_station zweimal beschrieben (auf deutsch und englisch)
-> bereinige ich.

  • bei vielen Attributen ist zwar klar wozu sie dienen, aber nicht klar welche Werte erlaubt sind, etwa bei "dbplan_board_type". Kann man on/off oder 1/0 oder muss man etwas anderes schreiben? Die Angabe der jeweils erlaubten Werte oder zumindest jeweils ein Beispiel würden helfen
-> bei dbplan_board_type wird depart / arrive als Auswahlliste angezeigt. Für Beispiele war ich bisher zu faul. Sorry.
[/list]
Funktionieren tut es an sich aber super (bis auf die fehlende Aktualisierung alle 300 s)! Danke für dieses hilfreiche Modul.
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Hallo,

ich habe die von Boris gefundenen Fehler bereinigt. Da habe ich einfach beim Umstellen auf nonBlocking und bei der Implementation der Bahnhofsanzeige geschlampt. Sorry

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

hartenthaler

#359
Zitat von: JoWiemann am 17 Januar 2017, 21:28:39
Ich habe mich nach einiger Zeit mal wieder mit meinen beiden DBPlan-Instanzen beschäftigt, da sie nicht mehr funktioniert haben.
-> Welche Version setzt Du ein?
98_DBPlan.pm 68636 2017-01-08 10:21:00Z jowiemann

Zitat
  • beim Attribut "dbplan_default-char" fände ich eine Drop-Down-Auswahlliste sehr schön
-> Das ist ein frei wählbares Zeichen/Zeichenkette. Wie soll da eine Auswahlliste aufgebaut sein?
Ich hatte die commandref so verstanden, dass dort nur "none", "delete"  und "nochar" zulässig sind. Bitte klarer ausdrücken.

Zitat
  • der Aufruf von "get ... showStations Frohnau" liefert anscheinend alle Stations; erwartet hätte ich nur eine Liste der Stations, die Frohnau in ihrem Namen tragen (was ist der Unterschied zu searchStations ?)
-> Leider kann das Eingabefeld hinter dem get nicht unterdrückt werden. showStations zeigt einfach nur die Dateien an. Vlt. benenne ich es noch in listStations um?!
Wie wäre es mit listAllStations? Auf jeden Fall sollte aus der commnadref hervorgehen, welche get-Befehle mit und welche ohne Parameter aufgerufen werden können/sollen. Also bei search: Suche nach der als Parameter übergebenen Station in der lokal hinterlegten Liste. Und bei listAllStations: Anzeige aller Stationen in der lokal hinterlegten Liste.

Man kann übrigens auch noch andere Stationen verwenden, nicht nur die in der Liste hinterlegten, was aber nirgends erwähnt wird. Ich verwende z.B. Bushaltestellen in Berlin. Die haben wohl keinen IBNR-Code, funktionieren aber trotzdem; zumindest kommen sie in der Stationsliste nicht vor, weshalb ich diese Liste als nur bedingt hilfreich empfinde.

Zitat
  • das Aktivierungsintervall steht auf 300 s, aber es erfolgt generell keine Aktualisierung; diese muss manuell angestossen werden.
-> das überrascht mich. Steht das Modul auf aktiv? Nur bei aktiv wird der Timer getriggert!
Das Internal STATE steht - wie ich eben erst bemerkt habe - auf "19:37 +0, 20:01 +0, 20:21 +0", was so nicht sein dürfte. Ich habe stateFormat entsprechend gesetzt, aber das dürfte nicht das Internal STATE beeinflussen. Da ist die Logik im Modul noch nicht ganz sauber.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...