Advertisement
DGorka

VGN/VAG - PRTG

Dec 9th, 2016
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Dieses Skript sucht nach dem nächsten Bus der VAG/VGN
  2. # Parameter Haltestelle - der erste gefundene Bus/Ubahn zur Eingabe wird ausgewertet - numerischer Wert (findbar über: https://start.vag.de/dm/api/haltestellen.json/vgn?name=)
  3. # Parameter Richtung - gibt die Richtung an (Zielort, entweder Richtung1 oder Richtung2) (findbar über: https://start.vag.de/dm/api/abfahrten.json/vgn/<HALTESTELLENNUMMER-VGN>)
  4. # Parameter Beförderung - gibt die Beförderungsart an (UBahn/Bus/Tram) (findbar über: https://start.vag.de/dm/api/abfahrten.json/vgn/<HALTESTELLENNUMMER-VGN>)
  5. #
  6. # Author: Dariusz Gorka | Paessler AG 2016
  7. #
  8.  
  9. param(
  10.     [string]$haltestelle = "Nordostpark Ost",
  11.     [string]$richtung= "Richtung2",
  12.     [string]$befoerderung = "bus"
  13. )
  14.  
  15. # URL für die Haltestelle
  16. $url_haltestelle = [string]::Format("http://start.vag.de/dm/api/haltestellen.json/vgn?name={0}",$haltestelle);
  17. # Request API und konvertiere die Seite in JSON
  18. $request_haltestelle = Invoke-WebRequest $url_haltestelle -UseBasicParsing | ConvertFrom-Json | Select -expand Haltestellen | Select-Object -first 1
  19. # HaltestellenNr sowie Haltestellen-Name erhalten
  20. $haltestelleNr = ($request_haltestelle | Select VGNKennung).VGNKennung
  21. $haltestelleName = ($request_haltestelle | Select Haltestellenname).Haltestellenname
  22.  
  23. # URL für die Abfahrten
  24. $url_bus = [string]::Format("http://start.vag.de/dm/api/abfahrten.json/vgn/{0}",$haltestelleNr)
  25. # Request API und replace umlauts
  26. $request_bus = (Invoke-WebRequest $url_bus -UseBasicParsing).Content -replace  "ü","ue" -replace "ä","ae" -replace "ö","oe" -replace "ß","ss"
  27. # konvertiere in JSON
  28. $request_bus = $request_bus | ConvertFrom-Json | Select -expand Abfahrten | Where { $_.Richtung -eq $richtung -and $_.Produkt -eq $befoerderung } | Select -first 1
  29.  
  30. # Bekomme Daten
  31. $busLinie = ($request_bus | Select Linienname).Linienname -replace  "ue","ü" -replace "ae","ä" -replace "oe","ö" -replace "ss","ß"
  32. $busRichtung =($request_bus | Select Richtungstext).Richtungstext -replace  "ue","ü" -replace "ae","ä" -replace "oe","ö" -replace "ss","ß"
  33. $busAbfahrtIst =($request_bus | Select AbfahrtszeitIst).AbfahrtszeitIst -replace  "ue","ü" -replace "ae","ä" -replace "oe","ö" -replace "ss","ß"
  34. $busAbfahrtSoll =($request_bus | Select AbfahrtszeitSoll).AbfahrtszeitSoll -replace  "ue","ü" -replace "ae","ä" -replace "oe","ö" -replace "ss","ß"
  35.  
  36. # Zeitzone-Deutschland
  37. $timezone = [System.TimeZoneInfo]::FindSystemTimeZoneById("W. Europe Standard Time")
  38. $time = [System.TimeZoneInfo]::ConvertTimeFromUtc((Get-Date).ToUniversalTime(), $timezone)
  39. $time = [string]::Format($time)
  40.  
  41. # Rechne Ankuftszeit und Verspätung aus
  42. $arrival_minutes = (New-TimeSpan -Start $time.Substring(11,8) -End $busAbfahrtIst.Substring(11,8)).Minutes
  43. $arrival_seconds = (New-TimeSpan -Start $time.Substring(11,8) -End $busAbfahrtIst.Substring(11,8)).Seconds
  44. $arrival_totalseconds = [Math]::Floor((New-TimeSpan -Start $time.Substring(11,8) -End $busAbfahrtIst.Substring(11,8)).TotalSeconds)
  45. $delay_minutes = (New-TimeSpan -Start $busAbfahrtSoll.Substring(11,8) -End $busAbfahrtIst.Substring(11,8)).Minutes
  46. $delay_seconds = (New-TimeSpan -Start $busAbfahrtSoll.Substring(11,8) -End $busAbfahrtIst.Substring(11,8)).Seconds
  47. $delay_totalseconds = [Math]::Floor((New-TimeSpan -Start $busAbfahrtSoll.Substring(11,8) -End $busAbfahrtIst.Substring(11,8)).TotalSeconds)
  48.  
  49. # Verspätung? Ja/Nein
  50. if($delay_minutes -gt 0 -Or $delay_minutes -gt 0){
  51. $delay = [string]::Format("Verspätung von {0} Minuten und {1} Sekunden",$delay_minutes,$delay_seconds)
  52. } else {
  53. $delay = "Keine Verspätung"
  54. }
  55.  
  56. # Setze Text der Beförderungsart
  57. if($befoerderung -like "bus"){
  58. $befoerderungstext = "Der Bus"
  59. } elseif($befoerderung -like "ubahn"){
  60. $befoerderungstext = "Die UBahn"
  61. } elseif($befoerderung -like "Tram"){
  62. $befoerderungstext = "Die Tram"}
  63.  
  64.  
  65.  
  66. # Ausgabetext Zusammensetzung
  67. $arrival_text = [string]::Format("{5} (Linie: {0}) Richtung {1} kommt in {2} Minuten und {3} Sekunden ({4})",$busLinie,$busRichtung,$arrival_minutes,$arrival_seconds,$delay,$befoerderungstext)
  68.  
  69. $result = @"
  70. <?xml version=`"1.0`" encoding=`"UTF-8`" ?>
  71. <PRTG>
  72.  <result>
  73.    <channel>Arrival</channel>
  74.    <value>$arrival_totalseconds</value>
  75.    <showChart>1</showChart>
  76.    <showTable>1</showTable>
  77.    <Float>0</Float>
  78.    <unit>TimeSeconds</unit>
  79.    <mode>Absolute</mode>
  80.  </result>
  81.  <result>
  82.    <channel>Delay</channel>
  83.    <value>$delay_totalseconds</value>
  84.    <showChart>1</showChart>
  85.    <showTable>1</showTable>
  86.    <Float>0</Float>
  87.    <unit>TimeSeconds</unit>
  88.    <mode>Absolute</mode>
  89.  </result>
  90.  <text>
  91.  $arrival_text
  92.  </text>
  93. </PRTG>
  94. "@
  95.  
  96. # set output encoding
  97. [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
  98. [Console]::WriteLine($result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement