Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
npm-debug.log
Dockerfile
docker-compose*.yml
32 changes: 32 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
FROM node:10-alpine
EXPOSE 8080
ENV HOST 0.0.0.0


ARG WORKDIR=/sMirror
RUN mkdir -p $WORKDIR
WORKDIR $WORKDIR

# See: https://github.com/nodejs/docker-node/pull/367#issuecomment-430807898
RUN apk --no-cache add git

# mosquitto
RUN apk --no-cache add mosquitto mosquitto-clients

RUN npm install http-server -g


COPY package.json .
COPY package-lock.json .
RUN npm install

RUN mkdir -p slave/displays
COPY slave/displays/package.json slave/displays/
COPY slave/displays/package-lock.json slave/displays/
RUN cd slave/displays && npm install

COPY . .
RUN cd slave/displays && npm run-script build

CMD cd slave/displays && http-server --cors

13 changes: 13 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: '3'

services:
smirror:
image: roschaefer/smirror
build: .
ports:
- 8080:8080
environment:
- HOST=0.0.0.0
- TRANSIT_API_KEY=${TRANSIT_API_KEY}
- WEATHER_API_KEY=${WEATHER_API_KEY}
- STOCKS_API_KEY=${STOCKS_API_KEY}
10 changes: 10 additions & 0 deletions now.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "smirror",
"alias": "smirror.now.sh",
"type": "docker",
"env": {
"TRANSIT_API_KEY": "@transit-api-key",
"WEATHER_API_KEY": "@weather-api-key",
"STOCKS_API_KEY": "@stocks-api-key"
}
}
7 changes: 4 additions & 3 deletions slave/displays/assets/src/js/maus.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ const MAX_ENTRIES = 5;

window.onload = () => {
// real feed url - uncomment line below
let url = 'http://smirrormaster.local:8080/http://www1.wdr.de/mediathek/video/podcast/channel-sendung-mit-der-maus-100.podcast';
let url = 'http://www1.wdr.de/mediathek/video/podcast/channel-sendung-mit-der-maus-100.podcast';
// local test feed url
//let url = './local-feed.xml';

RSSParser.parseURL(url, (err, parsed) => {
const CORS_PROXY = "https://cors-anywhere.herokuapp.com/"
RSSParser.parseURL(CORS_PROXY + url, (err, parsed) => {
if (err || parsed === undefined) {
console.error(err);
} else {
Expand All @@ -30,4 +31,4 @@ window.onload = () => {

});

};
};
7 changes: 5 additions & 2 deletions slave/displays/assets/src/js/news.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ import moment from 'moment';
import ProgressBar from './lib/progress-bar.js';

window.onload = () => {
RSSParser.parseURL('http://smirrormaster.local:8080/https://spiegel.de/schlagzeilen/tops/index.rss', (err, parsed) => {
//https://github.com/bobby-brennan/rss-parser#web
const CORS_PROXY = "https://cors-anywhere.herokuapp.com/"
const url = 'https://spiegel.de/schlagzeilen/tops/index.rss'
RSSParser.parseURL(CORS_PROXY + url, (err, parsed) => {
let items = parsed.feed.entries.slice(0, 5);
let i = 0;

Expand Down Expand Up @@ -34,4 +37,4 @@ window.onload = () => {

}(), 20000);
});
};
};
8 changes: 3 additions & 5 deletions slave/displays/assets/src/js/stocks.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import keys from './config/keys.js';

// needs an api key from alphavantage.co -> https://www.alphavantage.co/support/#api-key

// list of all stocks to be retrieved
Expand All @@ -17,7 +15,7 @@ let currentIndex = 0;

let urls = [];
SYMBOLS.forEach((s) => {
urls.push('https://www.alphavantage.co/query?function=' + TIMESPAN + '&symbol=' + s.symbol + '&interval=60min&apikey=' + keys.stocks);
urls.push('https://www.alphavantage.co/query?function=' + TIMESPAN + '&symbol=' + s.symbol + '&interval=60min&apikey=' + process.env.STOCKS_API_KEY);
});

let data = [];
Expand All @@ -28,7 +26,7 @@ window.onload = () => {


SYMBOLS.forEach(s => {
let url = 'http://smirrormaster.local:8080/https://www.alphavantage.co/query?function=' + TIMESPAN + '&symbol=' + s.symbol + '&interval=60min&apikey=' + keys.stocks;
let url = 'https://www.alphavantage.co/query?function=' + TIMESPAN + '&symbol=' + s.symbol + '&interval=60min&apikey=' + process.env.STOCKS_API_KEY;

promises.push(fetch(url)
.then(response => response.json())
Expand Down Expand Up @@ -165,4 +163,4 @@ window.onload = () => {
.call(d3.axisLeft(y));

};
}
}
8 changes: 5 additions & 3 deletions slave/displays/assets/src/js/tagesschau.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ require('../../../node_modules/rss-parser/dist/rss-parser.js');

window.onload = () => {
// real feed url - uncomment line below
let url = 'http://smirrormaster.local:8080/https://www.tagesschau.de/export/video-podcast/tagesschau-in-100-sekunden/';
let url = 'https://www.tagesschau.de/export/video-podcast/tagesschau-in-100-sekunden/';
// local test feed url
//let url = './local-feed.xml';

RSSParser.parseURL(url, (err, parsed) => {
//https://github.com/bobby-brennan/rss-parser#web
const CORS_PROXY = "https://cors-anywhere.herokuapp.com/"
RSSParser.parseURL(CORS_PROXY + url, (err, parsed) => {
if (err || parsed === undefined) {
console.error(err);
} else {
Expand All @@ -19,4 +21,4 @@ window.onload = () => {

});

};
};
7 changes: 3 additions & 4 deletions slave/displays/assets/src/js/transit.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import moment from 'moment';
import keys from './config/keys.js';

const ORIGIN = 'Hinter dem Brunnen 6, Lüneburg';
const DESTINATION = 'Hongkongstr. 1, Hamburg';

let key = keys.transit;
let base = 'http://smirrormaster.local:8080/https://maps.googleapis.com/maps/api/directions/json';
let key = process.env.TRANSIT_API_KEY;
let base = 'https://maps.googleapis.com/maps/api/directions/json';
let url = `${base}?origin=${ORIGIN}&destination=${DESTINATION}&mode=transit&alternatives=true&key=${key}`;

fetch(url, {
Expand Down Expand Up @@ -80,4 +79,4 @@ let url = `${base}?origin=${ORIGIN}&destination=${DESTINATION}&mode=transit&alte
return updateTime;
}(), 1000);

});
});
5 changes: 2 additions & 3 deletions slave/displays/assets/src/js/weather.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import keys from './config/keys.js';
import moment from 'moment';
import timespans from './weather/timespans.js';
import icons from './weather/icons.js';

// api configuration
let base = 'https://api.openweathermap.org/data/2.5/';
let location = 'Lüneburg';
let key = keys.weather;
let key = process.env.WEATHER_API_KEY;

let current = `${base}/weather?q=${location}&APPID=${key}`;
let forecast = `${base}/forecast?q=${location}&APPID=${key}`;
Expand Down Expand Up @@ -86,4 +85,4 @@ window.onload = () => {

});

};
};
8 changes: 4 additions & 4 deletions slave/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
<body>
<script src="https://unpkg.com/mqtt@2.15.0/dist/mqtt.min.js"></script>
<script>
var client = mqtt.connect('ws://smirrormaster.local:9001') // you add a ws:// url here
let urlParams = new URLSearchParams(window.location.search);
var client = mqtt.connect('ws://broker.hivemq.com:8000') // you add a ws:// url here
let urlParams = new URLSearchParams(window.location.search);
let topic = urlParams.get("topic") || "slave";
console.log(topic);
client.subscribe(topic)


client.on("message", function (topic, payload) {
console.log(`topic: ${topic}`);
console.log(`payload: ${payload}`);
console.log(`topic: ${topic}`);
console.log(`payload: ${payload}`);
document.getElementById("main").setAttribute("src", payload);
})

Expand Down