From 9e73653dc55cef957d234a471e015ef85656dd08 Mon Sep 17 00:00:00 2001 From: Raph Estrada Date: Tue, 9 Jan 2018 11:58:39 +0000 Subject: [PATCH] v1 beta --- MMM-DublinRTPI.js | 322 ++++++++++++++++++++++++++++++++++++ README.md | 352 +++++++++++++++++++++++++++++++++++++++ docs/bus-stop-nr.png | Bin 0 -> 18387 bytes docs/parts.png | Bin 0 -> 34734 bytes docs/preview.png | Bin 0 -> 99345 bytes dublinrtpi.css | 28 ++++ node_helper.js | 76 +++++++++ package-lock.json | 381 +++++++++++++++++++++++++++++++++++++++++++ package.json | 33 ++++ rtpifetcher.js | 216 ++++++++++++++++++++++++ 10 files changed, 1408 insertions(+) create mode 100644 MMM-DublinRTPI.js create mode 100644 README.md create mode 100644 docs/bus-stop-nr.png create mode 100644 docs/parts.png create mode 100644 docs/preview.png create mode 100644 dublinrtpi.css create mode 100644 node_helper.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 rtpifetcher.js diff --git a/MMM-DublinRTPI.js b/MMM-DublinRTPI.js new file mode 100644 index 0000000..c52a32c --- /dev/null +++ b/MMM-DublinRTPI.js @@ -0,0 +1,322 @@ +/* A MagicMirror module to show bus, luas and rail arrival times. + * Copyright (C) 2017 Raphael Estrada + * http://raph.es/project/rtpi + * License: GNU General Public License */ + +Module.register("MMM-DublinRTPI", { + + defaults: { + animationSpeed: 1000, + broadcastEvents: true, + colored: false, + destinations: [], + directions: [], + displayDestination: true, + displayRoute: true, + displayStopName: true, + displaySymbol: true, + fade: true, + fadePoint: 0.25, + fetchInterval: 60000, + maximumEntries: 10, + maximumNumberOfMinutes: 60, + routes: [], + stops: [] + }, + + getStyles: function () { + return ["dublinrtpi.css", "font-awesome.css"]; + }, + + getScripts: function () { + return []; + }, + + getTranslations: function () { + return false; + }, + + /* initialize */ + start: function () { + Log.log("Starting module: " + this.name); + + for (var s in this.config.stops) { + var stop = this.config.stops[s]; + + /* RTPI uses lowercase letters, so we need to + * ensure the IDs in our config are lowercase */ + if (stop.id) { + stop.id = stop.id.toLowerCase(); + } + + /* if no individual symbols were defined, set + * the default ones here based on the stop id */ + if (!stop.symbol) { + stop.symbol = this.defaultSymbolForStop(stop.id); + } + + this.addStop(stop); + } + + this.stopData = {}; + this.loaded = false; + }, + + /* handle notifications */ + socketNotificationReceived: function (notification, payload) { + if (notification === "RTPI_EVENTS") { + if (this.hasStopId(payload.stopId)) { + this.stopData[payload.stopId] = payload.events; + this.loaded = true; + + if (this.config.broadcastEvents) { + this.broadcastEvents(); + } + } + } else if (notification === "FETCH_ERROR") { + Log.error("DublinRTPI Error. Could not fetch stop: " + payload.stopId); + } else { + Log.log("DublinRTPI received an unknown socket notification: " + notification); + } + + this.updateDom(this.config.animationSpeed); + }, + + /* build the HTML to render */ + getDom: function () { + + var events = this.createEventList(); + //console.log(events); + var wrapper = document.createElement("table"); + wrapper.className = "small"; + + if (events.length === 0) { + wrapper.innerHTML = (this.loaded) ? this.translate("EMPTY") : this.translate("LOADING"); + wrapper.className = "small dimmed"; + return wrapper; + } + + for (var e in events) { + var event = events[e]; + //console.log(event); + var eventWrapper = document.createElement("tr"); + + if (this.config.colored) { + eventWrapper.style.cssText = "color:" + this.colorForStop(event.stopId); + } + + eventWrapper.className = "normal"; + + /* symbol */ + if (this.config.displaySymbol) { + var symbolWrapper = document.createElement("td"); + symbolWrapper.className = "symbol align-right"; + var symbol = document.createElement("span"); + symbol.className = "fa fa-fw fa-" + this.symbolForStop(event.stopId); + //console.log(symbol.className); + symbol.style.paddingLeft = "5px"; + symbolWrapper.appendChild(symbol); + eventWrapper.appendChild(symbolWrapper); + } + + /* stop name */ + if (this.config.displayStopName) { + var stopNameWrapper = document.createElement("td"); + stopNameWrapper.className = this.config.colored ? "stopname" : "stopname bright"; + stopNameWrapper.innerHTML = this.nameForStop(event.stopId); + eventWrapper.appendChild(stopNameWrapper); + } + + /* route */ + if (this.config.displayRoute) { + var routeWrapper = document.createElement("td"); + routeWrapper.className = this.config.colored ? "route" : "route bright"; + routeWrapper.innerHTML = event.route; + eventWrapper.appendChild(routeWrapper); + } + + /* destination */ + if (this.config.displayDestination) { + var lineWrapper = document.createElement("td"); + lineWrapper.className = this.config.colored ? "destination" : "destination bright"; + lineWrapper.innerHTML = event.destination; + eventWrapper.appendChild(lineWrapper); + } + + var timeWrapper = document.createElement("td"); + timeWrapper.innerHTML = event.isDue ? "Due" : event.duetime + " min"; + //console.log(event.duetime); + //console.log(event); + timeWrapper.className = "time light"; + eventWrapper.appendChild(timeWrapper); + + wrapper.appendChild(eventWrapper); + + /* fade effect */ + if (this.config.fade && this.config.fadePoint < 1) { + if (this.config.fadePoint < 0) { + this.config.fadePoint = 0; + } + var startingPoint = events.length * this.config.fadePoint; + var steps = events.length - startingPoint; + if (e >= startingPoint) { + var currentStep = e - startingPoint; + eventWrapper.style.opacity = 1 - (1 / steps * currentStep); + } + } + } + + return wrapper; + }, + + /* Check if this config contains the stop ID. + * + * argument stopId string - stop ID to look for. + * + * return bool - The config has this stop ID + */ + hasStopId: function (stopId) { + for (var s in this.config.stops) { + var stop = this.config.stops[s]; + if (stop.id === stopId) { + return true; + } + } + + return false; + }, + + /* Creates the sorted list of all events. + * + * return array - Array with events. + */ + createEventList: function () { + var events = []; + for (var s in this.stopData) { + var stop = this.stopData[s]; + for (var e in stop) { + events.push(stop[e]); + } + } + + events.sort(function (a, b) { + return a.duetime - b.duetime; + }); + + return events.slice(0, this.config.maximumEntries); + }, + + /* Requests node helper to add a stop. + * + * argument stopConfig object - Configuration for the stop to add. + */ + addStop: function (stopConfig) { + Log.log("DublinRTPI adding stop id: " + stopConfig.id); + //console.log("addStop() " + stopConfig.id); + this.sendSocketNotification("ADD_RTPI_STOP", { + stopId: stopConfig.id, + directions: stopConfig.directions || this.config.directions, + routes: stopConfig.routes || this.config.routes, + destinations: stopConfig.destinations || this.config.destinations, + maximumEntries: stopConfig.maximumEntries || this.config.maximumEntries, + maximumNumberOfMinutes: stopConfig.maximumNumberOfMinutes || this.config.maximumNumberOfMinutes, + fetchInterval: stopConfig.fetchInterval || this.config.fetchInterval + }); + }, + + /* Detects an appropriate default symbol based on the stop ID. + * - Luas stop IDs always start with 'luas' followed by digits + * - Rail stop IDs are always alphabetical + * - Bus stop IDs are always numerical + * source: https://data.dublinked.ie/cgi-bin/rtpi/busstopinformation + * + * argument stopId - The stop ID to match a symbol to + * + * return string - The symbol for the stop. + */ + defaultSymbolForStop: function(stopId) { + if(stopId.match(/^luas\d+$/)) { + return "subway"; // https://fontawesome.com/icons/subway + } else if (stopId.match(/^[A-z]+$/)) { + return "train"; // https://fontawesome.com/icons/train + } else if (stopId.match(/^\d+$/)) { + return "bus"; // https://fontawesome.com/icons/bus + } else { + return "question-circle"; // https://fontawesome.com/icons/question-circle + } + }, + + /* Retrieves the symbol for a specific stop ID. + * + * argument stopId string - The stop ID to look for. + * + * return string - The symbol for the stop. + */ + symbolForStop: function (stopId) { + return this.getStopProperty(stopId, "symbol", this.defaultSymbolForStop(stopId)); + }, + + /* Retrieves the name for a specific stop ID. + * + * argument stopId string - The stop ID to look for. + * + * return string - The custom label if present, or the stop ID. + */ + nameForStop: function (stopId) { + return this.getStopProperty(stopId, "label", stopId); + }, + + /* Retrieves the color for a specific stop ID. + * + * argument stopId string - The stop ID to look for. + * + * return string - The color for the stop. + */ + colorForStop: function (stopId) { + return this.getStopProperty(stopId, "color", "#fff"); + }, + + /* Helper method to retrieve the property for a specific stop. + * + * argument stopId string - The stop ID to look for. + * argument property string - The property to look for. + * argument defaultValue string - Value if property is not found. + * + * return string - The value of the property on the stop. + */ + getStopProperty: function (stopId, property, defaultValue) { + //console.log("getStopProperty()"); + for (var s in this.config.stops) { + var stop = this.config.stops[s]; + if (stop.id === stopId && stop.hasOwnProperty(property)) { + //console.log("getStopProperty(" + stopId + ", ", + property + ", " + defaultValue + "): " + stop[property]); + return stop[property]; + } + } + return defaultValue; + }, + + + /* Broadcasts the events to all other modules for reuse. + * The all events available in one array, sorted on duetime. + */ + broadcastEvents: function () { + var eventList = []; + for (var stopId in this.stopData) { + var stop = this.stopData[stopId]; + for (var e in stop) { + var event = cloneObject(stop[e]); + event.symbol = this.symbolForStop(stopId); + event.color = this.colorForStop(stopId); + eventList.push(event); + } + } + + eventList.sort(function(a, b) { + return a.duetime - b.duetime; + }); + + this.sendNotification("RTPI_EVENTS", eventList); + + } +}); diff --git a/README.md b/README.md new file mode 100644 index 0000000..62a1244 --- /dev/null +++ b/README.md @@ -0,0 +1,352 @@ +# MagicMirror Module: DublinRTPI +`MMM-DublinRTPI` (**R**eal-**T**ime **P**assenger **I**nformation) is a module for the [MagicMirror](https://github.com/MichMich/MagicMirror). It displays real-time arrival times for Dublin Bus, IrishRail and LUAS stops. The data is sourced via the [Dublinked RTPI](https://data.dublinked.ie/dataset/real-time-passenger-information-rtpi-for-dublin-bus-bus-eireann-luas-and-irish-rail) API. + +This module is based on the [default `Calendar`](https://github.com/MichMich/MagicMirror/tree/master/modules/default/calendar) module, allowing it to display and be configured in a similar way. + +![preview of the Dublin Bus module](./docs/preview.png) + +# Usage +## Installation +### 1. Clone this module into your MagicMirror's `modules` directory +```bash +MagicMirror$ cd modules +modules$ git clone https://github.com/galaktor/MMM-DublinRTPI +``` + +### 2. Install this module's dependencies +```bash +modules$ cd MMM-DublinRTPI +MMM-DublinRTPI$ npm install +``` + +### 3. Add this module to your MM config's `modules` array +```bash +MMM-DublinRTPI$ cd ../.. +MagicMirror$ nano config/config.js +``` + +Configure as described below and restart your MagicMirror. + +## A typical configuration example +```javascript +/* MagicMirror/config/config.js */ +{ + /* ...your other config here */ + + modules: [ + + /* ...your other modules here */ + + { module: "MMM-DublinRTPI", + position: "top_left", + header: "Bus & Rail", + config: { colored: true, + stops: [{ id: "270", label: "O'Connell", color: "yellow", directions: ["in"], routes: ["40"] }, + { id: "PERSE", label: "Pearse", color: "green", directions: ["north"] }, + { id: "LUAS6", label: "Red Cow", color: "tomato", directions: ["south"] }] + } + } + ] +} +``` + +## The full configuration explained +```javascript +/* MagicMirror/config/config.js */ +{ + modules: [ + { + module: "MMM-DublinRTPI", + + /* the usual MM module settings */ + position: "top_left" + header: "Bus & Rail", + + /* configure this module */ + config: { + + /* the bus stops to show events for. + * this is the most important part of the configuration. + * TYPE: array of objects + * REQUIRED: no (but it won't be very useful if left empty) + * DEFAULT: [] (empty) */ + stops: [ + { + /* ID of the bus, luas or rail stop to show events for. + * see below for details on finding the right stop IDs. + * TYPE: string + * REQUIRED: yes */ + id: "123", + + /* a friendly name to display instead of the stop ID. + * because the stop ID often isn't very meaningful. + * TYPE: string + * REQUIRED: no + * DEFAULT: the stop ID */ + label: "O'Connell St", + + /* select which routes to show events for at this stop. + * routes which don't match any of these strings EXACTLY + * will not be displayed. letters are not case-sensitive. + * if left empty, will show all routes at the stop. + * TYPE: array of strings + * REQUIRED: no + * DEFAULT: [] (empty) */ + routes: ["123", "123x"], + + /* select which directions to show events for at this stop. + * directions which don't CONTAIN any of these strings + * will not be displayed. letters are not case-sensitive. + * the value you can use here depends on the service. + * typically they are one of: + * - "northbound" or "southbound" for luas and rail + * - "inbound" or "outbound" for bus + * if left empty, will show all directions at the stop. + * NOTE: "out" is contained in "southbound" as well as "outbound". + * TYPE: array of strings + * REQUIRED: no + * DEFAULT: [] (empty) */ + directions: ["northbound", "inbound"], + + /* select which destinations to show events for at this stop. + * destinations which don't CONTAIN any of these strings + * will not be displayed. letters are not case-sensitive. + * the value you can use here depends on the route. + * if left empty, will show all directions at the stop. + * NOTE: "Connolly" is contained in "Dublin Connolly" as well as "LUAS Connolly". + * TYPE: array of strings + * REQUIRED: no + * DEFAULT: [] (empty) */ + destinations: ["UCD", "Connolly"], + + /* the FontAwesome symbol to use for events at this stop. + * TYPE: string (see https://fontawesome.com/icons) + * REQUIRED: no + * DEFAULT: autodetect based on the stop ID + * - "bus" for Dublin Bus stops + * - "train" for Irish Rail stops + * - "subway" for Luas stops */ + symbol: "beer", + + /* the color to use for events at this stop. + * requires the module option 'colored' to be 'true' + * TYPE: string (CSS values, see https://www.w3schools.com/colors/colors_names.asp) + * REQUIRED: no + * DEFAULT: magic mirror default text color */ + color: "pink", + + /* maximum number of events to display for this stop. + * TYPE: uint + * REQUIRED: no + * DEFAULT: value of module config */ + maximumEntries: 123, + + /* hide events with a duetime greater than this. + * TYPE: uint (minutes) + * REQUIRED: no + * DEFAULT: value of module config */ + maximumNumberOfMinutes: 60, + }, + /* configure more stops if you wish to */ + ], + + + /* choose specific routes to be displayed for stops which + * don't have routes explicitly defined. per-stop config + * takes preference. see stop config above for more details. + * TYPE: array of strings + * REQUIRED: no + * DEFAULT: [] (empty) */ + routes: ["123", "123x"], + + /* choose specific directions to be displayed for stops which + * don't have directions explicitly defined. per-stop config + * takes preference. see stop config above for more details. + * TYPE: array of strings + * REQUIRED: no + * DEFAULT: [] (empty) */ + directions: ["northbound", "inbound"], + + /* choose specific directions to be displayed for stops which + * don't have directions explicitly defined. per-stop config + * takes preference. see stop config above for more details. + * TYPE: array of strings + * REQUIRED: no + * DEFAULT: [] (empty) */ + destinations: ["UCD", "Connolly"], + + /* maximum number of events to display IN TOTAL. + * TYPE: uint + * REQUIRED: no + * DEFAULT: 10 */ + maximumEntries: 10, + + /* hide events with a duetime later than this. + * TYPE: uint (minutes) + * REQUIRED: no + * DEFAULT: 60 */ + maximumNumberOfMinutes: 60, + + /* display a symbol for each event. + * TYPE: boolean + * REQUIRED: no + * DEFAULT: true */ + displaySymbol: true, + + /* display the bus stop name. + * TYPE: boolean + * REQUIRED: no + * DEFAULT: true */ + displayStopName: true, + + /* display the bus route. + * TYPE: boolean + * REQUIRED: no + * DEFAULT: true */ + displayRoute: true, + + /* display the destination of each event. + * TYPE: boolean + * REQUIRED: no + * DEFAULT: true */ + displayDestination: true, + + /* how long to wait before fetching new data. + * TYPE: uint (milliseconds) + * REQUIRED: no + * DEFAULT: 60000 (1 minute) */ + fetchInterval: 60000, + + /* the time an update animation takes. + * TYPE: uint (milliseconds) + * REQUIRED: no + * DEFAULT: 2000 (2 seconds) */ + animationSpeed: 1000, + + /* gradually fade out events towards the bottom. + * TYPE: boolean + * REQUIRED: no + * DEFAULT: true */ + fade: true, + + /* when to begin fading out events in the list. + * value between 0 and 1, where 0 is the top and + * 1 is the bottom of the list. + * TYPE: float (0-1) + * REQUIRED: no + * DEFAULT: 0.25 */ + fadePoint: 0.25, + + /* use colors to display the events. + * colors are individually set on the stops. + * TYPE: boolean + * REQUIRED: no + * DEFAULT: false */ + colored: false, + + /* broadcast all the events to all other modules. + * notification: `DUBLINBUS_EVENTS` + * TYPE: boolean + * REQUIRED: no + * DEFAULT: true */ + broadcastEvents: true, + } + } + ] + +} +``` + +# Valid RTPI values +The values for `id`, `direction`, `destination`, and `route` depend on the service and stop you want to use. You will need to determine the right values by querying the RTPI database. + +## Finding your stop ID +A full list of stops is available [via the RTPI API](https://data.dublinked.ie/cgi-bin/rtpi/busstopinformation). One can use [`curl`](https://curl.haxx.se/) and [`jq`](https://stedolan.github.io/jq/) to pull out stops, e.g. + +### stops with `UCD` in the name and which are served by route `67X` +```bash +curl https://data.dublinked.ie/cgi-bin/rtpi/busstopinformation | \ +jq '.results[] | + select(.fullname | contains("UCD")) | + select(.operators[].routes[]=="67X")' +``` +```json +/* response */ +{ + "stopid": "4952", /* <-- */ + "displaystopid": "4952", + "shortname": "UCD", + "shortnamelocalized": "UCD", + "fullname": "UCD", + "fullnamelocalized": "", + "latitude": "53.30494889", + "longitude": "-6.216826944", + "lastupdated": "11/12/2017 10:09:21", + "operators": [ + { + "name": "bac", + "routes": [ + "77X", + "84X", + "67X", + "66X", + "27X", + "32X" + ] + } + ] +} +``` + +### all stops for Luas green line +```bash +curl https://data.dublinked.ie/cgi-bin/rtpi/busstopinformation | \ +jq '.results[] | + select(.operators[].name=="LUAS") | + select(.operators[].routes[]=="Green")' +``` +```json +/* response */ +{ + "stopid": "LUAS24", /* <-- */ + "displaystopid": "LUAS St. Stephen's Green", + "shortname": "", + "shortnamelocalized": "", + "fullname": "LUAS St. Stephen's Green", + "fullnamelocalized": "", + "latitude": "53.33907222", + "longitude": "-6.261333333", + "lastupdated": "08/01/2018 09:29:30", + "operators": [ + { + "name": "LUAS", + "routes": [ + "Green" + ] + } + ] +} +/* ...and many more */ +``` + +### Bus Stop signs +Dublin Bus stop ids can also be found on the physical bus stop signs: + +![dublin bus stop with number](./docs/bus-stop-nr.png) + +The ID on this sign refers to [stop id 1605](https://data.dublinked.ie/cgi-bin/rtpi/busstopinformation?stopid=1605). + +### Customisation +You can customize this module in many ways. +- combine several stops into a single MM module +- group stops into separate MM modules by service, stop, direction, etc. +- assign stops different colors and symbols via the `symbol` and `color` settings +- hide some or all parts of the displayed events via the `displaySymbol`, `displayStopName`, `displayRoute` and `displayDestination` settings +- further modify how the parts of an event are styles by editing the [`dublinrtpi.css`](./dublinrtpi.css) file directly + +The naming used to describe the different parts of an event in the module are as follows: + +![an image explaining the different parts of an event](./docs/parts.png) + +# Kudos +This module is Loosely based on the [default Calendar module](https://github.com/MichMich/MagicMirror/tree/master/modules/default/calendar) by [Michael Teeuw](http://michaelteeuw.nl). Shout-out to [dr4ke616/MMM-Dublin-Bus](https://github.com/dr4ke616/MMM-Dublin-Bus), which showed me how to query the RTPI API. diff --git a/docs/bus-stop-nr.png b/docs/bus-stop-nr.png new file mode 100644 index 0000000000000000000000000000000000000000..45443cf9602174fe36f21db0f02163cddb28d8c7 GIT binary patch literal 18387 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 literal 0 HcmV?d00001 diff --git a/docs/parts.png b/docs/parts.png new file mode 100644 index 0000000000000000000000000000000000000000..be0f274c8c9cf86f91156d59518ffb02e003845c GIT binary patch literal 34734 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 OI;6zq#HvN~{QnP`D4S;h literal 0 HcmV?d00001 diff --git a/dublinrtpi.css b/dublinrtpi.css new file mode 100644 index 0000000..c861dad --- /dev/null +++ b/dublinrtpi.css @@ -0,0 +1,28 @@ +/* A MagicMirror module to show bus, luas and rail arrival times. + * Copyright (C) 2017 Raphael Estrada + * http://raph.es/project/rtpi + * License: GNU General Public License */ + +.symbol { + padding-left: 0; + padding-right: 10px; + font-size: 80%; + vertical-align: top; +} + +.symbol span { + display: inline-block; + -ms-transform: translate(0, 2px); /* IE 9 */ + -webkit-transform: translate(0, 2px); /* Safari */ + transform: translate(0, 2px); +} + +.route, .stopname, .destination { + padding: 0px 10px; +} + +.time { + padding-left: 30px; + text-align: right; + vertical-align: top; +} diff --git a/node_helper.js b/node_helper.js new file mode 100644 index 0000000..08aa323 --- /dev/null +++ b/node_helper.js @@ -0,0 +1,76 @@ +/* A MagicMirror module to show bus, luas and rail arrival times. + * Copyright (C) 2017 Raphael Estrada + * http://raph.es/project/rtpi + * License: GNU General Public License */ + +var NodeHelper = require("node_helper"); +var RTPIFetcher = require("./rtpifetcher.js"); + +module.exports = NodeHelper.create({ + + start: function() { + var events = []; + this.fetchers = []; + console.log("Starting node helper for: " + this.name); + }, + + socketNotificationReceived: function(notification, payload) { + if (notification === "ADD_RTPI_STOP") { + //console.log("ADD_RTPI_STOP:"); + //console.log(payload); + this.createFetcher(payload.stopId, + payload.fetchInterval, + payload.routes, + payload.directions, + payload.destinations, + payload.maximumEntries, + payload.maximumNumberOfMinutes); + } + }, + + /* Creates a fetcher for a new stopId if it doesn't exist yet. + * Otherwise it reuses the existing one. + * + * attribute stopId int - id of the stop. + * attribute fetchInterval number - Interval for getting new data for this stop. + * attribute routes - the routes to filter for at this stop. + * attribute directions - the directions to filter for at this stop. + * attribute maximumEntries - the max number of events to fetch for this stop. + * attribute maximumNumberOfMinutes - the max due time for events to show for this stop. + */ + createFetcher: function(stopId, fetchInterval, routes, directions, destinations, maximumEntries, maximumNumberOfMinutes) { + //console.log("DublinRTPI createFetcher()"); + var self = this; + + var fetcher; + if (typeof self.fetchers[stopId] === "undefined") { + console.log("Create new RTPI fetcher for stopId: " + stopId + " - Interval: " + fetchInterval); + fetcher = new RTPIFetcher(stopId, fetchInterval, routes, directions, destinations, maximumEntries, maximumNumberOfMinutes); + + fetcher.onReceive(function(fetcher) { + //console.log('Fetcher onReceive()'); + //console.log(fetcher.events()); + + self.sendSocketNotification("RTPI_EVENTS", { + stopId: fetcher.stopId(), + events: fetcher.events() + }); + }); + + fetcher.onError(function(fetcher, error) { + self.sendSocketNotification("FETCH_ERROR", { + stopId: fetcher.stopId(), + error: error + }); + }); + + self.fetchers[stopId] = fetcher; + } else { + //console.log('Use existing fetcher for stopId: ' + stopId); + fetcher = self.fetchers[stopId]; + fetcher.broadcastEvents(); + } + + fetcher.startFetch(); + } +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0e5c934 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,381 @@ +{ + "name": "MMM-DublinRTPI", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.2.0" + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..52f2dba --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "MMM-DublinRTPI", + "version": "1.0.0", + "description": "A MagicMirror module to show bus, luas and rail arrival times.", + "repository": { + "type": "git", + "url": "https://github.com/galaktor/MMM-DublinRTPI.git" + }, + "keywords": [ + "mmm", + "public transport", + "magic mirror", + "smart mirror", + "dublin bus", + "dublin luas", + "irish rail", + "module" + ], + "author": { + "name": "Raph Estrada", + "email": "galaktor@gmx.de", + "url": "http://raph.es" + }, + "contributors": "https://github.com/galaktor/MMM-DublinRTPI/graphs/contributors", + "license": "GPL-3.0-or-later", + "bugs": { + "url": "https://github.com/galaktor/MMM-DublinRTPI/issues" + }, + "homepage": "http://github.com/galaktor/MMM-DublinRTPI", + "dependencies": { + "request": "2.x" + } +} diff --git a/rtpifetcher.js b/rtpifetcher.js new file mode 100644 index 0000000..b3a738f --- /dev/null +++ b/rtpifetcher.js @@ -0,0 +1,216 @@ +/* A MagicMirror module to show bus, luas and rail arrival times. + * Copyright (C) 2017 Raphael Estrada + * http://raph.es/project/rtpi + * License: GNU General Public License */ + +var request = require('request'); + +var RTPIFetcher = function(stopId, fetchInterval, routes, directions, destinations, maximumEntries, maximumNumberOfMinutes) { + var self = this; + + var reloadTimer = null; + var events = []; + + var fetchFailedCallback = function() {}; + var eventsReceivedCallback = function() {}; + + /* fetches the data from RTPI API */ + var fetchStop = function() { + + clearTimeout(reloadTimer); + reloadTimer = null; + + var apiUrl = "https://data.dublinked.ie/cgi-bin/rtpi/realtimebusinformation?stopid=" + stopId; + request(apiUrl, function (err, response, body) { + var newEvents = []; + var data = {}; + + /* handle HTTP errors */ + if (err) { + console.error("DublinRTPI error querying RTPI API for stop id: " + stopId); + console.error(err); + fetchFailedCallback(self, err); + scheduleTimer(); + return; + } + + /* handle JSON errors */ + try { + data = JSON.parse(body); + //console.log(data); + } catch (e) { + console.error("DublinRTPI Error parsing RTPI JSON response for stop id: " + stopId); + console.error(e); + console.log(body); + fetchFailedCallback(self, e); + scheduleTimer(); + return; + } + + /* handle RTPI errors */ + switch (data.errorcode) { + case "0": + /* no errors */ + break; + case "1": + /* valid request, but no data for the stop */ + break; + default: + /* error */ + console.error("DublinRTPI RTPI API response has error for stop id: " + stopId + " - " + data.errormessage); + console.error(data); + console.log(data); + fetchFailedCallback(self, e); + scheduleTimer(); + return; + } + + /* store the event */ + for (var e in data.results) { + var event = data.results[e]; + event.stopId = data.stopid; + event.isDue = event.duetime === "Due"; + event.duetime = event.isDue ? -1 : parseInt(event.duetime); + + if (exclude(event)) { + //console.log("excluded event:"); + //console.log(event); + continue; + } + + newEvents.push(event); + //console.log(e); + } + + /* sort by duetime */ + newEvents.sort(function(a, b) { + return a.duetime - b.duetime; + }); + + /* limit number of events */ + events = newEvents.slice(0, maximumEntries); + //console.log(newEvents); + + /* notify */ + self.broadcastEvents(); + scheduleTimer(); + }); + }; + + /* Filters out events based on the user config */ + var exclude = function(event) { + return excludeDueTime(event) || excludeRoute(event) || excludeDirection(event) || excludeDestination(event); + }; + + /* exclude if the duetime is beyond the configured limit. + * never exclude if no max was configured. */ + var excludeDueTime = function(event) { + if (!maximumNumberOfMinutes) { return false; } + return event.duetime > maximumNumberOfMinutes; + }; + + /* exclude a route unless it matches exactly a value configured. + * using substrings to match routes could result in false positives. + * some routes are substrings of others, i.e. '42' and '42x' + * never exclude if no routes were configured. */ + var excludeRoute = function(event) { + if (!routes || !routes.length) { return false; } + var route = event.route.toLowerCase(); + for (var r in routes) { + var desiredRoute = routes[r].toLowerCase(); + if (desiredRoute && route === desiredRoute) { + //console.log("include route: " + route); + return false; + } + } + return true; + }; + + /* exclude a destination unless it contains a value configured. + * never exclude if no destinations were configured. */ + var excludeDestination = function(event) { + if (!destinations || !destinations.length) { return false; } + var destination = event.destination.toLowerCase(); + for (var d in destinations) { + var desiredDestination = destinations[d].toLowerCase(); + if (desiredDestination && destination.indexOf(desiredDestination) >= 0) { + //console.log("include destination: " + destination); + return false; + } + } + return true; + }; + + /* exclude a direction unless it contains a value configured. + * never exclude if no directions were configured. */ + var excludeDirection = function(event) { + if (!directions || !directions.length) { return false; } + var direction = event.direction.toLowerCase(); + for (var d in directions) { + var desiredDirection = directions[d].toLowerCase(); + if (desiredDirection && direction.indexOf(desiredDirection) >= 0) { + //console.log("include direction: " + direction); + return false; + } + } + return true; + }; + + /* schedule the timer for the next update */ + var scheduleTimer = function() { + //console.log('Schedule update timer.'); + clearTimeout(reloadTimer); + reloadTimer = setTimeout(function() { + fetchStop(); + }, fetchInterval); + }; + + /* PUBLIC METHODS */ + + /* trigger fetching a stop */ + this.startFetch = function() { + fetchStop(); + }; + + /* Broadcast the existing events */ + this.broadcastEvents = function() { + //console.log('Broadcasting ' + events.length + ' events.'); + //console.log(events); + eventsReceivedCallback(self); + }; + + /* Sets the on success callback + * + * argument callback function - The on success callback. + */ + this.onReceive = function(callback) { + eventsReceivedCallback = callback; + }; + + /* Sets the on error callback + * + * argument callback function - The on error callback. + */ + this.onError = function(callback) { + fetchFailedCallback = callback; + }; + + /* Returns the stopId of this fetcher. + * + * return string - The stopId of this fetcher. + */ + this.stopId = function() { + return stopId; + }; + + /* Returns current available events for this fetcher. + * + * return array - The current available events for this fetcher. + */ + this.events = function() { + return events; + }; +}; + + +module.exports = RTPIFetcher;