IPSLibrary - BusBahn

Hallo
Bei mir laeuft auf meinem System das Sript von sysrun zur Anzeige
von Abfahrtstafeln von Bussen,Bahnen etc.

Hab dazu mein erstes Modul fuer IPSLibrary geschrieben.
Vielleicht hat ja jemand Lust diese erste Version zu testen.

Installation :

$remoteRepository = 'https://raw.github.com/1007/IPSLibrary/BusBahn/';
$component = 'BusBahn';
	
IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
$moduleManager = new IPSModuleManager($component,$remoteRepository);
$moduleManager->LoadModule($remoteRepository);
$moduleManager->InstallModule($remoteRepository);

Danach updates uebers Webfront
Ist noch nicht im Master-Repositry

Konfiguration:
Den Bahnhof,Station etc auf
DB BAHN - Abfahrt und Ankunft
raussuchen.
Im Konfigurationsfile
…\scripts\IPSLibrary\config\modules\BusBahn\BusBahn_Configuration.inc.php
eintragen. Verkehrsmittel ein/ausblenden.
Aenderungen von Stationen,Wegezeit oder Verkehrsmittel werden
automatisch erkannt - hofffe ich :wink:

Webfrontdaten unter
Visualization.Webfront.Busbahn

Hallo 1007,

ich habe mal das BusBahn-Modul installiert und mir Tafeln für 4 Bahnhöfe eingerichtet. Insgesamt funktioniert es recht gut, am Design könnte man evtl. noch etwas feilen.

Drei Punkte hätte ich dazu noch:

1.) Bei der Angabe zum Gleis steht (Beispiel: Berlin Hbf) nicht nur die Gleisnummer, sondern noch zus. Text, der das Ganze etwas „verunstaltet“. Kann man das noch evtl. irgendwie filtern???

2.) Es wäre schön, wenn man die Spaltenbreiten beeinflussen könnte (z.B. im ini-File per css-angaben o.ä.). Kannst du da entsprechendes einbauen?

3.) Es sieht so aus, als ob das Modul Fehler verursacht, wenn mal die Bahn-API nicht antwortet. Genaugenommen habe ich folgende Fehlermeldung(en):


Warning: Invalid argument supplied for foreach()
Error in Script C:\IP-Symcon\scripts\IPSLibrary\app\modules\BusBahn\busbahnrefresh.ips.php on Line 284
132 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
36 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php
284 in IPSLibrary\app\modules\BusBahn\busbahnrefresh.ips.php (call IPSLogger_PhpErrorHandler)
65 in IPSLibrary\app\modules\BusBahn\busbahnrefresh.ips.php (call anzeige)


und


Notice: Undefined index: route
Error in Script C:\IP-Symcon\scripts\IPSLibrary\app\modules\BusBahn\busbahnrefresh.ips.php on Line 271
132 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
42 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
271 in IPSLibrary\app\modules\BusBahn\busbahnrefresh.ips.php (call IPSLogger_PhpErrorHandler)
65 in IPSLibrary\app\modules\BusBahn\busbahnrefresh.ips.php (call anzeige)

Ansonsten ein tadelloses Modul - meinen Respekt für die Arbeit.

BTW: Natürlich auch meinen Dank an Brownson, ohne dessen Grundarbeit an der IPSLibrary das hier auch net möglich wäre - auch an diese Adresse meinen fetten Respekt für diie Arbeit und das Ergebnis. :smiley:

Hab etwas geaendert.
Mach einfach ein „install“.
Die Fehlermeldungen scheinen daher zu kommen wenn es keine
Route gibt ( array leer ). Deshalb kommt die Fehlermeldung
auch nicht immer. Koennte jetzt weg sein.

Das mit den Gleisnummern hab ich auch geaendert. Nur bei den
Verkehrsmittel ohne Gleis , wie zB Bus , wird noch der Text angezeigt.

Mit der css Geschichte werd ich auf alle Faelle was machen.
Nur nicht heute :wink:

BusBahn Modul ist umgezogen nach BusBahnInfo im Branch Informationen

$remoteRepository = 'https://raw.github.com/1007/IPSLibrary/Informationen/';
$component = 'BusBahnInfo';

IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
$moduleManager = new IPSModuleManager($component,$remoteRepository);
$moduleManager->LoadModule($remoteRepository);
$moduleManager->InstallModule($remoteRepository);

css-File um das Webfront zu verschoenern liegt in
…\webfront\user\BusBahnInfo
Diese File wird bei update oder install nicht ueberschrieben.
Ein defaultfile liegt im Defaultordner.

Habe das BusBahn Modul gestartet und bekomme die folgende Fehlermeldung :

Fatal error:  Uncaught exception 'Exception' with message 'script C:\IP-Symcon\\scripts\IPSLibrary\app\core\IPSMessageHandler\IPSMessageHandler.class.php could NOT be found!' in C:\IP-Symcon\scripts\IPSLibrary\app\core\IPSUtils\IPSUtils.inc.php:40
Stack trace:
#0 C:\IP-Symcon\scripts\IPSLibrary\install\InstallationScripts\BusBahnInfo_Installation.ips.php(39): IPSUtils_Include('IPSMessageHandl...', 'IPSLibrary::app...')
#1 C:\IP-Symcon\scripts\IPSLibrary\install\IPSModuleManager\IPSModuleManager.class.php(674): include('C:\IP-Symcon\sc...')
#2 C:\IP-Symcon\scripts\36259.ips.php(8): IPSModuleManager->InstallModule('https://raw.git...')
#3 {main}
  thrown in C:\IP-Symcon\scripts\IPSLibrary\app\core\IPSUtils\IPSUtils.inc.php on line 40

Im File System ist der Folder /IPSMessageHandler/ nicht vorhanden. Also doch ein Library Problem ??

Wenn dieser Ordner nicht da ist

scripts\IPSLibrary\app\core\IPSMessageHandler

dann kann es nur daran liegen , dass er nicht installiert wurde.
Bis jetzt hast du nur den Baseloader laufen lassen ?
IPSMessageHandler muss extra installiert werden.
Schau mal hier
http://www.ip-symcon.de/forum/f74/ipslibrary-step-step-fuer-dummies-17370/#post152688

OK habe ich gemacht und jetzt läuft die Bahn inclusive Bus ohne Fehler durch.

Das IPS Logger Modul habe ich auch versucht aber dabei vermutlich gekillt :frowning:
Ich denke ich versuche jetzt das ursprüngliche Modul Waage und Blutdruck zu installieren (wobei ich meinen Blutdruck besser nicht sofort messe :slight_smile: )

Für jemanden wie mich der sich nur als Hobby mit dem ganzen beschäftigt ist das ganze ohne Eure Hilfe sehr schwierig zu managen, also nochmals herzliche Dank für die tolle Unterstützung

OK das hat das Problem gelöst Danke

Hallo 1007,

bin jetzt endlich dazu gekommen, die aktuelle Version von BusBahnInfo einzubinden. Soweit echt klasse (insbesondere die CSS-Datei) - ich musste jedoch den body-Teil entschärfen, da er mir die allgemeine Schriftart im WebFront zu klein gemacht hat. Aber…

Leider treten immer noch Fehler während des Betriebs auf. Hier mal der zugehörige Eintrag aus dem IPSLogger-Logfile:


<event logger="PHP" timestamp="2012-03-21T23:55:33.000000+01:00" level="ERROR" domain="IPS.exe" username="IPS">
<message>Warning: Invalid argument supplied for foreach()
   Error in Script C:\IP-Symcon\scripts\IPSLibrary\app\modules\Informationen\BusBahnInfo\busbahninforefresh.ips.php on Line 306
  132 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out)
   36 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
  306 in IPSLibrary\app\modules\Informationen\BusBahnInfo\busbahninforefresh.ips.php (call IPSLogger_PhpErrorHandler)
   66 in IPSLibrary\app\modules\Informationen\BusBahnInfo\busbahninforefresh.ips.php (call anzeige)</message>
</event>

Kannst du dir das noch mal anschauen?

Das mit den Plattformnummern sieht jetzt richtig gut aus.

Was ich mir noch wünschen würde:

  • Eine Fkt. um Texte ein wenig „aufzupolieren“, soll heißen:
    Öffnende Klammer ohne vorheriges Leerzeichen -> Leerzeichen einfügen
    Damit würde dann z.B. aus „Nürnberg Hbf(U-Bahn)“ ein schönes „Nürnberg Hbf (U-Bahn)“ werden.

Hi 1007,

gerade habe ich noch mal meine Anzeige umgebaut und überarbeitet, wollte eigentlich die Nah- und die Fernverkehrstafeln trennen. Dazu hab ich folgende Einträge im INI-File angelegt (Beispiel für einen Bahnhof):


   array("Berlin Hbf Fern - Abfahrt", "Berlin Hbf", "Abfahrt", 70,  true,  true,  true,  true, false, false, false, false, false),
   array("Berlin Hbf Fern - Ankunft", "Berlin Hbf", "Ankunft", 70,  true,  true,  true,  true, false, false, false, false, false),
   array("Berlin Hbf Nah - Abfahrt",  "Berlin Hbf", "Abfahrt", 70, false, false, false, false,  true,  true,  true,  true,  true),
   array("Berlin Hbf Nah - Ankunft",  "Berlin Hbf", "Ankunft", 70, false, false, false, false,  true,  true,  true,  true,  true),

Nun musste ich zu meiner Überraschung feststellen, das er zwar unter „Visualization/WebFront/Information/BusBahnInfo“ schön alle Kategorien angelegt hat, aber leider für „Ankunft Nah“ und „Ankunft Fern“ auf die GLEICHE VARIABLE im data-Bereich der APP verweisst. Dort findet sich dann auch wirklich nur zwei Variablen je Bahnhof, nicht 4 wie ich eigentlich erwartet hätte…

Das ist jetzt irgendwie „dumm“ gelaufen, weil mit Nahverkehr kann ich nicht mehr genug Fernverkehr sehen, weil ja alle 2-3 Minuten ein Zug/Bus kommt (Insbesondere für Nürnberg Hbf ist das ein Problem).

Auch kann ich schön beobachten, wie im WebFront zuerst die Tafel für den Fernverkehr erscheint und einen Augenblick später dieser Inhalt durch die Tafel für den Nahverkehr ersetzt wird…

Alles klar fuer die Variablenamen nimmt er aus dem array den Bahnhof und die Richtung. Werd das umbauen , dass er den ersten Wert aus dem array nimmt.
Sowas faellt beim Testen nicht auf :wink:

Hab ich eben geaendert mach mal ein update oder install .

Hallo 1007

Puh, so schnell kann ja keiner die Updates einspielen… :wink:

Also, jetzt funzt das einwandfrei. Kann jetzt alle 16 Anzeigetafeln über 2 Umschaltbuttons duchblättern… kommt wirklich gut… :smiley:

Wenn du jetzt noch die Sache mit dem RegEx-Replace einbaust, dann wäre ich rundum glücklich. :stuck_out_tongue:

Noch mal vielen Dank für dieses fantastische Modul.

Moin
Mach mal ein Update :wink:

Heutige Aenderungen:
+Variablennamen sind jetzt der Stationsalias
+Anzeigeoptimierung
+sporadisches Auftreten von Warnungen im Log ( array Fehler ) gefixt
+Sortierung von Variablen und Webtab jetzt nicht mehr alphabetisch sondern so
wie ConfigFile.

Einfach ein Online Update machen.
Bei einem install oder update werden eure Configurationsfiles nicht ueberschrieben.

Nochmal zur Info zur gestrige Aenderungen
CSS-File webfront\user\BusBahnInfo\BusBahnInfo.css
Das kann jeder aendern wie er mag.
Dieses wird bei Install oder Update nicht ueberschrieben.

Anregungen,Ideen,Verbesserungen einfach schreiben.

@bruns8234: Wie hast Du das implementiert? Per default ist das ja nicht drin.

Hallo honk0504

Das mit den 2 Buttons ist an und für sich sehr einfach gelöst - ich benutzte die Hidden-Eigenschaft um zwischen den 16 Seiten zu wechseln. Aussehen tut das ganze wie im ersten Screenshot unten.
Die beiden oberen Elemente „Bahnhof“ und „Anzeigetagel“ sind zwei integer-Variablen jeweils mit Userprofil in dem die Bahnhofsbezeichnungen und die Anzeigetafel-Bezeichnungen hinterlegt sind.
Für das WebFront habe ich eine Kategorie angelegt, in der die beiden Variablen sowie Links auf alle 16 Anzeigetafeln von BusBahnInfo sind. Über die Benennung der Links steuert das folgende Script dann einfach mit Hilfe des IPS_SetHidden-Befehls die sichtbarkeit der Tafeln so, das ich so zwischen den 16 Seiten blättern kann.

Hier noch das Script:


if ($_IPS['SENDER'] == "WebFront") {

  SetValueInteger($_IPS['VARIABLE'], $_IPS['VALUE']);

  $identBahnhof = ['Gransee Bahnhof', 'Löwenberg (Mark)', 'Oranienburg Bahnhof', 'Berlin Hauptbahnhof', 'Nürnberg Hauptbahnhof'];
  $identTafel   = ['Nahverkehr - Ankunft', 'Nahverkehr - Abfahrt', 'Fernverkehr - Ankunft', 'Fernverkehr - Abfahrt'];
  $bahnhof      = GetValueInteger(42577 /*[WebFrontElemente\Fahrpläne\ Bahnhof]*/);
  $tafel        = GetValueInteger(49802 /*[WebFrontElemente\Fahrpläne\Anzeigetafel]*/);
  $ident        = $identBahnhof[$bahnhof].' - '.$identTafel[$tafel];

  //$flag       = "";
    
  $parentID     = IPS_GetParent($_IPS['VARIABLE']);

  //echo "ParentID = $parentID
";
  foreach(IPS_GetChildrenIDs($parentID) as $objectID) {
    $info = IPS_GetObject($objectID);
    if ($info['ObjectType'] == 6) {
      $name = IPS_GetName($objectID);
      if ($name == $ident) {
        //$flag = "ANZEIGEN";
        IPS_SetHidden($objectID, false);
      } else {
        //$flag = "AUSBLENDEN";
        IPS_SetHidden($objectID, true);
      }
    }
    //printf("Name: [%'.50s] %'_5s Ident: [%'.50s] %'_5s Flag: [%s] %'.40s ", $name, '.', $ident, '.', $flag, '.');
  }
}

Hoffe das es verständlich rüberkommt.

Sehr Cool.
Hab mich gefragt ob ich das uebernehmen kann ?
Aber da hat wohl jeder andere Ansprueche.

Aber wer Ideen oder Ansprueche hat - einfach schreiben.

Ich finde die Erweiterung von @bruns8234 sehr sinnvoll und hätte nichts dagegen wenn die Funktionen vom Main Fork übernommen werden

Hab da mal was heute „gebastelt“ :slight_smile:
Zum installieren der Version 1.0.1

$remoteRepository = 'https://raw.github.com/1007/IPS1007Library/master/';
$component = 'BusBahnInfo';

IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
$moduleManager = new IPSModuleManager($component,$remoteRepository);
$moduleManager->LoadModule();
$moduleManager->InstallModule();

Diese Version installiert automatisch im WebFront ein „Tab“.
Gesteuert wird das in der Datei BusBahnInfo.ini.
WebFrontID= // wenn leer dann im ersten gefunden WebfrontID
TabParent=roottp // unter welchen Tab soll installiert werden
TabName=Fahrpläne // Name des Tabs