Git Product home page Git Product logo

dashkiosk's Introduction

This project is unmaintained. Due to the rapid decay of the JavaScript ecosystem, this project was too difficult for me to maintain. As of today, Dashkiosk relies mostly on unmaintained library versions that may not build on modern systems.

Dashkiosk

Build Status

Dashkiosk is a solution to manage dashboards on multiple screens. It comes as four components:

  1. A receiver runs in a browser attached to each screen and will display the requested dashboards. The receiver is quite dumb, it contacts the server and wait for it to tell which URL to display.

  2. A server which will manage the screens by sending them what they should display. An administration interface allows the user to manage those screens individually or in a group.

  3. An Android app that will run the receiver. This is mainly a fullscreen webview. There is also a Firefox app fulfilling the same purpose.

  4. A Chromecast custom receiver which will run the regular receiver if you want to display dashboards using Google Chromecast devices.

The full documentation is available on ReadTheDocs.

A live installation, reset every hour, is publicly available:

Here is a demonstration video:

Dashkiosk demo

Development

To run the server for development:

$ grunt serve

Android receiver

The Android receiver has moved to its own repository.

Chromecast receiver

The "official" Chromecast receiver has app ID 5E7A2C2C and is hosted in the gh-pages branch of this repository. To update it:

$ grunt dist
$ git worktree add ~/src/dashkiosk-gh-pages gh-pages
$ cd ~/src/dashkiosk-gh-pages
$ git rm -r *
$ rsync -rv --include '*chromecast*' --include '*/' --exclude '*' ~-dashkiosk/dist/public/* .
$ git add *
$ git commit -m "Update"

Docker

There is a Dockerfile to run Dashkiosk inside Docker. This will also work with Chromecast devices if your Docker host supports the --net=host option:

$ docker run --net=host \
             -v /var/lib/dashkiosk/database:/database \
             -e "chromecast__enabled=1" \
             -e "chromecast__receiver=http://<DOCKER_HOST_IP>:8081/receiver" \
             -e "port=8081" \
             ghcr.io/vincentbernat/dashkiosk:latest

To start without Chromecast support, simply run:

$ docker run -d -p 8080:8080 \
             -v /var/lib/dashkiosk/database:/database \
             ghcr.io/vincentbernat/dashkiosk:latest

Using latest can be broken from time to time. You may prefer a stable tag, like 2.7.9 or 2.7.

dashkiosk's People

Contributors

abkfenris avatar alexdebiasio avatar brianwhigham avatar damoun avatar dependabot[bot] avatar dersimn avatar frankfolsche avatar graham-m-dunn avatar rockyluke avatar tlourey avatar vincentbernat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dashkiosk's Issues

Drag'n dropping a dashboard in place duplicates it

With the new features of being able to drag'n drop dashboards across groups, what looks like to be a bug is triggered by DnDing a dashboard almost "in place", for example grabbing the line, moving it by a few pixels and releasing: the dashboard line is now duplicated. Is this the expected behavior? I thought DnD would "move" a dashboard to its new destination.

Issue with jpegtran-bin

Hello,
Dashkiosk do not require jpegtran-bin.
However, running grunt without jpegtran-bin being installed fails with message:

Running "imagemin:dist" (imagemin) task
Warning: Cannot find module 'jpegtran-bin' Use --force to continue.

Aborted due to warnings.

So, I added jpegtran-bin to dependencies list in package.json and run npm install
Now grunt optimizes jpg files but then never ends. Last messages are:

Running "imagemin:dist" (imagemin) task
✔ build/images/dark-wood.jpg (saved 1.45 kB)
✔ build/images/unassigned/grapes.jpg (saved 10.15 kB)
✔ build/images/unassigned/crab.jpg (saved 19.12 kB)
✔ build/images/unassigned/seagull.jpg (saved 4.84 kB)
✔ build/images/display-bg.jpg (already optimized)
✔ build/images/unassigned/otter.jpg (saved 17.11 kB)
✔ build/images/unassigned/solda.jpg (saved 22.32 kB)
✔ build/images/unassigned/forest.jpg (saved 52.65 kB)
✔ build/images/unassigned/water.jpg (saved 22.93 kB)
✔ build/images/unassigned/wheat.jpg (saved 21.84 kB)

Thanks,
JB

Chromecast very slow page load

Hi there,

I'm using dashkiosk to transmit performance data to TV screens throughout our office. All screens are connected via Chromecast, and are piping team-specific web-dashboards (geckoboard), to the different devices.
The setup looks great, and connections are fairly stable. The server running dashkiosk is hardly breaking a sweat.

If I serve a single page to each screen, everything works great. But ideally I would like to cycle between different pages for each device, but that causes significant delays with the chromecasts.

There's about a 30 second load-time for a chromecast to load another webpage, which seems a bit excessive. A receiver from a browser window loads the same content in under 2 seconds, allowing for smooth and dynamic transitions with frequent updates. But with our chromecast implementation we're either forced to serve static content, or cycle pages very infrequently/slowly.

Any idea why the chromecasts take so long to load content, and is there anything that can be done to improve on this?

Thanks for a fantastic piece of software otherwise. :)

Cast and setMediaPlaybackRequiresUserGesture

Hello Vincent,

I was trying to deploy dashkiosk in our company but hit a few snag. We have nexus players with cast enabled. Everything is working great except for videos.

They do not autoplay as it seems the Nexus Player must have the setMediaPlaybackRequiresUserGesture set to true.

We tried doing a JS hack (simulate press on play) but it doesn't work on video hosted on separate domains. Do you think this can still be done that way ?

It does work with the Android application but it seems a lot slower than through Cast and it display continuously the DashKiosk logo and top bar overlay.

Can you confirm that if we buy Chromecast they will autoplay video ?

Thanks in advance !
Anthony

Chromecast attempts to connect to http://dashkiosk:9400/reciever

I'm having some issues with one of my installations since upgrading to 2.4.6, it seems like the chromecasts are getting stuck attempting to connect to a reciever at http://dashkiosk:9400, since the Chromecast only listens on Google DNS servers, I can't make it go to my local url. (I checked this through the Google Cast Debugger)

node server.js --port 9400 --environment production --chromecast.enabled --chromecast.app "4E937438" --chromecast.receiver "http://10.0.1.146:9400/receiver"

I see that there's a default in chromecast.js

  function receiverUrl() {
    var url = config.get('chromecast:receiver') || (function() {
      return 'http://dashkiosk:' + config.get('port') + '/receiver';
    })();
    if (!(/^https?:\/\//.test(url))) {
      logger.warn('Receiver URL should be a fully qualified URL!');
      url = 'http://' + url;
    }
    return url;
  }

It's really strange...

Permanent link

We are trying to setup some raspberry pi's to automatically reload the group they were in if they are rebooted.

We tried bookmarking and setting the homepage to the registr url that it receives the first time it checks in, but we've had instances where it generates a new display.

Is there a way to pass a parameter or to set it so the links are always going to the same display even if the cookies are deleted?

Grunt build failing

Not sure where to go with this one, as it's not building the dist directory.

Running "imagemin:dist" (imagemin) task
✔ build/images/dark-wood.jpg (saved 1.45 kB)
Warning: ** Error:  Use --force to continue.

Aborted due to warnings.

When running grunt imagemin --force

Running "imagemin:dist" (imagemin) task
✔ build/images/dark-wood.jpg (saved 1.45 kB)
Warning: ** Error:  Used --force, continuing.
Fatal error: Cannot read property 'diffSizeRaw' of undefined

missed heartbeat error occurred with some Chromecast device

Hi there,

We've been running dashkiosk for a while now and love it - thanks for the great project!

However, every so often, we have a problem with a ChromeCast screen. The screen will revert to the "standard" ChromeCast display (random image from Google) and never reconnect to dashkiosk. The dashkiosk admin interface show the Chromecast is still there, with the "Wifi" icon bottom left, but not the green light at bottom right.

Restarting dashkiosk makes the Chromecast reconnect immediately and display our dashboard.

The logs show this error:

{
  "domain": {
    "domain": null,
    "_events": {},
    "_eventsCount": 1,
    "members": []
  },
  "_events": {},
  "_eventsCount": 5,
  "id": "47d492cf484d7645c0bbdfd51bf7c5a7",
  "friendlyName": "Bureaux-2",
  "address": "192.168.90.160",
  "port": 8009,
  "logger": {
    "domain": null,
    "_events": {},
    "_eventsCount": 0,
    "padLevels": false,
    "levels": {
      "silly": 0,
      "debug": 1,
      "verbose": 2,
      "info": 3,
      "warn": 4,
      "error": 5
    },
    "level": "info",
    "emitErrs": false,
    "stripColors": false,
    "exitOnError": true,
    "transports": {
      "console": {
        "domain": null,
        "_events": {
          "error": [
            null,
            null
          ]
        },
        "_eventsCount": 1,
        "silent": false,
        "raw": false,
        "name": "console",
        "level": "info",
        "handleExceptions": true,
        "exceptionsLevel": "error",
        "humanReadableUnhandledException": false,
        "json": false,
        "colorize": true,
        "prettyPrint": true,
        "timestamp": true,
        "showLevel": true,
        "label": null,
        "logstash": false,
        "debugStdout": false,
        "depth": null
      },
      "file": {
        "domain": null,
        "_events": {
          "error": [
            null,
            null
          ]
        },
        "_eventsCount": 1,
        "silent": false,
        "raw": false,
        "name": "file",
        "level": "info",
        "handleExceptions": true,
        "exceptionsLevel": "error",
        "humanReadableUnhandledException": false,
        "filename": "dashkiosk.log",
        "_basename": "dashkiosk.log",
        "dirname": "/var/log",
        "options": {
          "flags": "a",
          "highWaterMark": 24
        },
        "json": true,
        "logstash": false,
        "colorize": false,
        "maxsize": null,
        "rotationFormat": false,
        "zippedArchive": false,
        "maxFiles": null,
        "prettyPrint": false,
        "label": null,
        "timestamp": true,
        "eol": "\n",
        "tailable": false,
        "depth": null,
        "showLevel": true,
        "maxRetries": 2,
        "_size": 2213422,
        "_created": 0,
        "_buffer": [],
        "_draining": true,
        "_opening": false,
        "_failures": 0,
        "_archive": null,
        "opening": false,
        "_stream": {
          "_writableState": {
            "objectMode": false,
            "highWaterMark": 24,
            "needDrain": false,
            "ending": false,
            "ended": false,
            "finished": false,
            "decodeStrings": true,
            "defaultEncoding": "utf8",
            "length": 0,
            "writing": false,
            "corked": 0,
            "sync": false,
            "bufferProcessing": false,
            "writecb": null,
            "writelen": 0,
            "bufferedRequest": null,
            "lastBufferedRequest": null,
            "pendingcb": 0,
            "prefinished": false,
            "errorEmitted": false,
            "bufferedRequestCount": 0,
            "corkedRequestsFree": {
              "next": {
                "next": null,
                "entry": null
              },
              "entry": null
            }
          },
          "writable": true,
          "domain": null,
          "_events": {},
          "_eventsCount": 2,
          "_maxListeners": null,
          "path": "/var/log/dashkiosk.log",
          "fd": 17,
          "flags": "a",
          "mode": 438,
          "bytesWritten": 60378,
          "_draining": false
        },
        "_isStreams2": true
      }
    },
    "rewriters": [],
    "filters": [],
    "exceptionHandlers": {},
    "profilers": {},
    "_names": [
      "console",
      "file"
    ],
    "_hnames": [],
    "express": {}
  },
  "timeout": 20000,
  "_stopped": false,
  "_backoff": {
    "domain": {
      "$ref": "$[\"domain\"]"
    },
    "_events": {},
    "_eventsCount": 2,
    "backoffStrategy_": {
      "initialDelay_": 100,
      "maxDelay_": 10000,
      "randomisationFactor_": 0.2,
      "backoffDelay_": 0,
      "nextBackoffDelay_": 100
    },
    "maxNumberOfRetry_": -1,
    "backoffNumber_": 0,
    "backoffDelay_": 0,
    "timeoutID_": -1,
    "handlers": {}
  },
  "channel": {
    "domain": {
      "$ref": "$[\"domain\"]"
    },
    "_events": {
      "disconnect": [
        null
      ],
      "message": [
        null
      ]
    },
    "_eventsCount": 3,
    "logger": {
      "$ref": "$[\"logger\"]"
    },
    "name": "sender-6VFRBBLQ3S",
    "authenticated": true,
    "disconnecting": true,
    "_buflen": null,
    "_currentSession": "web-8"
  },
  "_subscriptions": [
    {
      "channel": "dashkiosk",
      "topic": "group.*.dashboard.*.added",
      "pipeline": [],
      "cacheKeys": []
    },
    {
      "channel": "dashkiosk",
      "topic": "display.*.group",
      "pipeline": [],
      "cacheKeys": []
    }
  ],
  "_updateRunning": false,
  "level": "error",
  "message": "An error occurred with some Chromecast device { stack: \n   [ 'Error: missed heartbeat',\n     '    at deadline [as _onTimeout] (/home/dashkiosk/dashkiosk-git/dashkiosk/dist/node_modules/nodecastor/lib/channel.js:68:16)',\n     '    at Timer.listOnTimeout (timers.js:92:15)' ],\n  message: 'missed heartbeat' }",
  "timestamp": "2016-10-25T05:53:08.188Z"
}

Please let me know if I can provide any further/better information - this happens rougly 5 times a week now, so is quite easy to "reproduce" :)

Thanks!

Preload new site in background

Would it be hard to get the next site to load a configurable time period before hand eg 5 seconds. Behind the existing site then hiding the current site to show the one behind. That will allow sites like Grafana to load completely before being displayed.

Feature: List of Dashboards with edit, duplicate, remove.

Would be a nice feature if we could just add a list of dashboards in the admin, and copy them to whichever group we want.

We have instances were some dashboards are displayed in multiple groups, and instead of having to go to each one and type it all in. It would be great just to duplicate it.

Basically a left pane with dashboard management.

Loving this project so far! Thanks for all your work on it.

typo in installation description

not sure whether this is platform dependent but I had to run
createdb -O dashkiosk dashkiosk
instead of
createuser -O dashkiosk dashkiosk

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

Hello vincent,

First of all great project, a cool feature would be if we could choose wether to reload or not webpages when cycling between dash ! 👍

Since a few days our dashkiosk is mysteriously crashing with the following stack, no changes have been made to setup we have like 12 cast plugged on it.

{ channel: 'dashkiosk',
topic: 'display.*.group',
callback:
{ [Function]
steps: [Function],
context: [Function],
before: [Function],
after: [Function],
clear: [Function] } } ],
_updateRunning: false }
info: transport end (undefined)
info: display disconnected Y4LAAD
info: transport end (undefined)
info: display disconnected 21TMXS
info: transport end (undefined)
info: display disconnected ZWNTAA
info: transport end (undefined)
info: display disconnected 3HV0OK
info: transport end (undefined)
info: display disconnected CZ2L0M
info: transport end (undefined)
info: display disconnected FMTLP6
info: transport end (undefined)
info: display disconnected O6GS7M
info: Rescan Chromecast devices
FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
Aborted

Thanks for your help !

Error: BLANKET-Error parsing instrumented code

Hi,

I am getting the following error when running grunt. System is running Ubuntu 14.04.1 with the suggested nodesource packages.

Running "mochaTest:server" (mochaTest) task

Mocha exploded!
Error: BLANKET-Error parsing instrumented code: Error: BLANKET-Error parsing instrumented code: Error: BLANKET-Error parsing instrumented code: TypeError: Object function lodash(value) {
// don't wrap if already wrapped, even if wrapped by a different lodash constructor
return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, 'wrapped'))
? value
: new lodashWrapper(value);
} has no method 'addWireTap'
at /home/chrisk/dashkiosk-2.3.0/node_modules/blanket/src/index.js:167:35
at Object.blanket._blanket.instrument (/home/chrisk/dashkiosk-2.3.0/node_modules/blanket/src/blanket.js:125:17)
at Object.require.extensions..js (/home/chrisk/dashkiosk-2.3.0/node_modules/blanket/src/index.js:148:25)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object. (/home/chrisk/dashkiosk-2.3.0/test/api/rest/dashboards.js:9:14)
at Module._compile (module.js:456:26)
at Module._extensions..js (module.js:474:10)
Warning: Task "mochaTest:server" failed. Use --force to continue.

Aborted due to warnings.

Feature-Wish: Please Improve OSD

Dear Vincent
Thank you very much for dashkiosk! I have been evaluting it with the help of your demo instance and I like it very much! After I learned how to use the api thanks to the great documentation, I managed to use the OSD which would be my main application (Sending Alert information to different screens that display e.g. Visitor information etc).
However the OSD does not support multi line text (or I could not figure out how). If it would be easily possible, the following would be my wishes for osd:

  1. If text length > 1 Line, please wrap around to the next line (or scroll message). -> Important to me
  2. If possible, please leave away screen size etc (I attached a screenshot to try and make this more clear) -> Less Importand
  3. How would you suggest to do it if I would like the text to dissapear after some time? Maybe add a new parameter "timeout"? The OSD seems to stay when I switch between dashboards with the built in timeout
    Not needed, text display "speed" font-size, font etc. (I'm very happy with the defaults provided here).

Just some suggestions how to futher improve dashkiosk, if this is out of scope, please feel free to close without comment!
Thanks

Will this run on OSX? Sorry if it's a lame question...

Hi, I'm wanting to get stuck into this - Tried Groupons Greenscreen but failed to get it up and running. Purchased a Mac mini to run it on, so - I'm guessing, after reading through the docs that it's predominantly Linux that this was designed for... before I get stuck-in what is the recommended platform? Any particular distro of Linux or shall I continue with OSX?

Restarting loop

I'm using 2.6.2 with bunch of chromecasts. Everything works fine, except some heavy JS pages with multiple charts, etc. Dashkiosk tries to load the page but then does not let it finish loading and restarts (shows "Please wait" receiver screen for a second). And does this infinitely.

I have tried setting Timeout to like 120 seconds, but it does not help.

How can I solve this? Thanks!

Chromecasts reconnecting/disconnecting

Alas, my Chromecasts still randomly reload the page or completely disconnect from the Dashkiosk server on an arbitrary basis. I've eliminated Wifi as a potential cause by cabling them into Ethernet. The erro log in Chrome shows these errors:

[Dashkiosk] reconnect in progress to socket.io server (next: 7 attempts:undefined)
http://tron.soe.waikato.ac.nz:9000/socket.io/?EIO=3&transport=polling&t=1447714827274-11 Failed to load resource: net::ERR_CONNECTION_REFUSED

As you can see I'm running on port 9000. Any thoughts/tips?

Thanks!

some sites just do not work

I am finding that some sites I can not get to function, for example http://www.google.com will not come through the iframe.

I see no errors in the logs, etc but when I have google.com (or any of it's sites) as a dashboard I only get the cog wheel animation/screen/icon.

Chromecast at 1080p

I have dashkiosk up and running and have multiple TVs with Chromecasts. The problem I'm facing is that I can't get to output 1920x1080 to my Full HD TVs even if I manually set the viewport. It shows width/height 1280x720 on TV screen when i click "Show names" icon. And it is the same on different TV models.

Why is this happening and where should I start troubleshooting?

Thanks!

nodecastor discover hangs

v2.5.0, running ./dist/node_modules/nodecastor/bin/chromecast discover returns

** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister>

and waits there forever. Any ideas on where to start looking for a solution? This used to work under v2.3.5, I've copied over the db from there to 2.4.0, and now into 2.5.0.

New google API for ChromeCast devices support

Google published in May a full fledged API for interacting with ChromeCasts devices.

It is a bit sorry that dashkiosk does not support ChromeCasts by default, on the legitimate assumption that nodecastor may be unable to communicate with them after an API update by Google. I understand this was obviously the case before May with the "hack" providen by nodecastor, but now with the official API things may have changed, right ?

Am I totally mistaken here ? If not, well is support for the official API planned for dashkiosk ?

Exemple for password protection

Hi Vincent,

First, thank you for this amazing product!

Can you give me an exemple about how to enable password protection for dashkiosk?

Actually I tried to launch Dashkiok on the server with something like:

node server.js --environment production --auth.enabled --auth.username admin --auth.password password

but it doesn't work. :-(

I think I miss something.

Thank you.

epiphany issue

it seems that epiphany browser doesn't support dashkiosk as a receiver, browser enters in a loading page loop.

Authentication with multiple levels

Hello vincent,

here is a new feature that would be nice:

. multiple authentication levels: admin (full access), teams (access to specified group only)

thx.

'Error: dns service error: unknown' when starting with chromecast enabled

Hi,

I get an error at start when I try to enable the chromecast support :

{ stack:
   [ 'Error: dns service error: unknown',
     '    at new Browser (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/nodecastor/node_modules/mdns2/lib/browser.js:76:10)',
     '    at Object.create [as createBrowser] (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/nodecastor/node_modules/mdns2/lib/browser.js:104:10)',
     '    at new Scanner (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/nodecastor/lib/scanner.js:16:23)',
     '    at Object.module.exports.scan (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/nodecastor/index.js:5:12)',
     '    at chromecast (/home/aguy/dashkiosk/dashkiosk-2.2.1/dist/lib/chromecast.js:96:28)',
     '    at module.exports (/home/aguy/dashkiosk/dashkiosk-2.2.1/dist/server.js:54:7)',
     '    at tryCatch1 (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/sequelize/node_modules/bluebird/js/main/util.js:64:19)',
     '    at Promise$_callHandler [as _callHandler] (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:708:13)',
     '    at Promise$_settlePromiseFromHandler [as _settlePromiseFromHandler] (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:724:18)',
     '    at Promise$_settlePromiseAt [as _settlePromiseAt] (/home/aguy/dashkiosk/dashkiosk-2.2.1/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:896:14)' ],
  errorCode: -65537 }
'''

Time triggered Dashboards / Screensaver

Problem:

We use dashkiosk to show business KPIs during the day. At night when the office is empty we show a screensaver with company logo and images as a slideshow.

Current Workaround

What we do right now is to prefix every url in our dashkiosk with another url to control at which times what url is shown. eg http://domain/timer.php?url=http://actionalurl.
This proxy page basically checks every few seconds for the time and then adds css classes which define what elements of the page (actually more iframes) are shown and which are not.

Proper feature

Since you already have the resolution and refresh interval settings of a url in a dashboard group, you could also add some scheduling. Either with some real control elements, or with some scheduling syntax, like: "Mo-Fr:8:00-21:00|Sa-So:10:00-16:00".

Maybe it's a very specific feature request, but maybe many other do something similar and would very much like such a feature. In any case, I think with the iframes and communication protocols you already have in place, it should not be to hard to add. If I can help with any part here, like the schedule string parsing, just let me know.

login in a specific URL

Hi! I've a doubt. I want to make login in a external URL to see an specific content inside the dashboard. There is a possibility to do that in dashkiosk? or... what could be an easy way to do it?

Raspberry Pi as a server

Trying to use the Raspberry Pi 2B as a server for dashkiosk. Anyone tried this ? Any luck ? Right now I'm running into compilations issues, solving them one at a time.

Since upgrade to 2.3.2, chromecast stuck on chromecast.html

Hello vincent,

we upgraded to 2.3.2 to fix the app id change with the new chromecast firmware and it's working fine, we now see all our chromcast on the /admin page, old and new app id. But since the upgrade, our chromecast are stuck on the chromecast.html page (please wait, this jen is the internet one). If i restart the chromecast or use the refresh button on the admin page it displays our dashboards for a few minutes and then revert to chromecast.html. We did not change anything to configuration.json, i do not see any errors in the dashkiosk.log. I'm probably missing something but running out of idea. Thanks for your help

Chromecast Not Able to Reconnect

So Dashkiosk & Nodecastor work perfectly when I already have my chromecast running and start up the Dashkiosk server from the command line. The Chromecast is found and switches over to the dashboard and works great.

The problem that I'm experiencing occurs when the chromecast / tv is turned off and then turned back on. This is the output I get:

info: Chromecast device detected on home screen
{ id: '2bf63f93131d2b50b0a09d314897e4e6',
name: undefined,
chromecast: 'Chromecast7089' }
error: Unable to run Dashkiosk application
{ stack:
[ 'Error: no answer from Chromecast device',
' at null._onTimeout (/dashkiosk-2.5.0/dist/node_modules/nodecastor/lib/channel.js:235:12)',
' at Timer.listOnTimeout (timers.js:110:15)' ],
message: 'no answer from Chromecast device' }

I can let it sit for hours, and nothing changes. The chromecast just sits on the home screen. The same happens if I turned the tv on and off. If i restart the Dashkiosk server, it immediately finds the Chromecast and the dashboard is instantly displayed. Any ideas what could be causing this problem with the reconnect?

Got an uncaught exception on the Chromecast subsystem

Hello,
Got this error with lastest version of Dashkiosk.
I'm running it on Debian Wheezy and nodejs 0.10.33 from Joyent.

That does not prevent Dashkiosk to run, but maybe it could explain connexion loss I got from time to time with Chromecast devices ?

Regards,
JB

error: Got an uncaught exception on the Chromecast subsystem 
{ stack: 
   [ 'Error: dns service error: unknown',
     '    at MDNSService.on_resolver_done (/var/www/node_modules/nodecastor/node_modules/mdns2/lib/resolver_sequence_tasks.js:19:30)',
     '    at SocketWatcher.MDNSService.self.watcher.callback (/var/www/node_modules/nodecastor/node_modules/mdns2/lib/mdns_service.js:17:38)' ],
  message: 'dns service error: unknown',
  errorCode: -65537,
  domainEmitter: 
   { domain: 
      { domain: null,
        _events: { error: [Function] },
        _maxListeners: 10,
        members: [] },
     _events: 
      { serviceUp: [Function: onServiceUp],
        serviceDown: [Function: onServiceDown] },
     _maxListeners: 10,
     _watcherStarted: true,
     serviceRef: { initialized: true, fd: 13 },
     watcher: 
      { host: { '$ref': '$["domainEmitter"]' },
        callback: [Function] } },
  domain: { '$ref': '$["domainEmitter"]["domain"]' },
  domainThrown: false }

Failed to find SQL server.

Good afternoon,

I'm sure this is a really simple/silly issue, but I just don't have the knowledge on SQL as of yet. I'm fairly certain I've gotten all the steps correctly completed, but I cannot get a SQLite DB to be created for the life of me. Any help is appreciated.

2016-01-07T19:50:40.545Z - error: uncaughtException: Uncaught, unspecified "error" event. (Failed to find SQL server. Please double check your settings.)
{ date: 'Thu Jan 07 2016 14:50:40 GMT-0500 (EST)',
process:
{ pid: 1573,
uid: 501,
gid: 20,
cwd: '/Users/admin/Desktop/dashkiosk-master/dist',
execPath: '/usr/local/bin/node',
version: 'v5.1.1',
argv:
[ '/usr/local/bin/node',
'/Users/admin/Desktop/dashkiosk-master/dist/server.js',
'--environment',
'production' ],
memoryUsage: { rss: 66772992, heapTotal: 59120896, heapUsed: 32351088 } },
os:
{ loadavg: [ 0.7548828125, 0.9775390625, 1.0478515625 ],
uptime: 1089 },
trace:
[ { column: 17,
file: 'events.js',
function: 'EventEmitter.emit',
line: 144,
method: 'emit',
native: false },
{ column: 19,
file: '/Users/admin/Desktop/dashkiosk-master/dist/node_modules/sequelize/lib/dialects/sqlite/connector-manager.js',
function: '',
line: 27,
method: null,
native: false } ],
stack:
[ 'Error: Uncaught, unspecified "error" event. (Failed to find SQL server. Please double check your settings.)',
' at EventEmitter.emit (events.js:144:17)',
' at Database. (/Users/admin/Desktop/dashkiosk-master/dist/node_modules/sequelize/lib/dialects/sqlite/connector-manager.js:27:19)' ] }
hs-126-test:dist admin$ node server.js --environment production
2016-01-07T19:54:35.208Z - error: uncaughtException: Uncaught, unspecified "error" event. (Failed to find SQL server. Please double check your settings.)
{ date: 'Thu Jan 07 2016 14:54:35 GMT-0500 (EST)',
process:
{ pid: 1822,
uid: 501,
gid: 20,
cwd: '/Users/admin/Desktop/dashkiosk-master/dist',
execPath: '/usr/local/bin/node',
version: 'v5.1.1',
argv:
[ '/usr/local/bin/node',
'/Users/admin/Desktop/dashkiosk-master/dist/server.js',
'--environment',
'production' ],
memoryUsage: { rss: 67084288, heapTotal: 59120896, heapUsed: 32563648 } },
os:
{ loadavg: [ 1.0283203125, 1.01806640625, 1.04248046875 ],
uptime: 1324 },
trace:
[ { column: 17,
file: 'events.js',
function: 'EventEmitter.emit',
line: 144,
method: 'emit',
native: false },
{ column: 19,
file: '/Users/admin/Desktop/dashkiosk-master/dist/node_modules/sequelize/lib/dialects/sqlite/connector-manager.js',
function: '',
line: 27,
method: null,
native: false } ],
stack:
[ 'Error: Uncaught, unspecified "error" event. (Failed to find SQL server. Please double check your settings.)',
' at EventEmitter.emit (events.js:144:17)',
' at Database. (/Users/admin/Desktop/dashkiosk-master/dist/node_modules/sequelize/lib/dialects/sqlite/connector-manager.js:27:19)' ] }

Thanks!

Using chromecasts with a server hosted on heroku

First of all, thanks for creating this project!

I still don't know a lot about how the chromecast discovery protocols work but If i understand correctly the chromecast support would work if we host dashkiosk in the same network with the chromecasts due to the way they are discovered. So hosting on something like heroku and having chromecast support is pretty much impossible.

but how about using something like to cast the dashkiosk receiver url:
https://github.com/boombatower/chromecast-dashboard

Basically have a receiver application that loads the receiver url in a iframe or redirect to the dashkiosk screen url.

404 in production on all URLs

if I set the environment ot developments I am able to access the admin interface... if I set it to production it does not work.. I just receive a 404.

ideas?

monitoring@monitoring:~/dashkiosk-2.3.1$ cat config.json
{
    "environment": "production",
    "log": {
        "file": "/var/log/dashkiosk.log",
        "level": "debug"
    }
}
monitoring@monitoring:~/dashkiosk-2.3.1$ node server.js --environment production --configuration config.json
*** WARNING *** The program 'nodejs' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=nodejs>
*** WARNING *** The program 'nodejs' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=nodejs&f=DNSServiceRegister>
express deprecated app.configure: Check app.get('env') in an if statement lib/express.js:10:5
express deprecated app.configure: Check app.get('env') in an if statement lib/express.js:15:5
connect deprecated methodOverride: use method-override npm module instead lib/express.js:17:19
express deprecated app.configure: Check app.get('env') in an if statement lib/express.js:23:5
info: socket.io started
debug: Executing (default): CREATE TABLE IF NOT EXISTS `SequelizeMeta` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `from` VARCHAR(255), `to` VARCHAR(255));
debug: Executing (default): SELECT * FROM `SequelizeMeta` ORDER BY id DESC LIMIT 1;
There are no pending migrations.
debug: Executing (default): SELECT * FROM `Groups`;
info: Express server listening on port 9400 in production mode
info: HTTP GET /receiver
{ req:
   { url: '/receiver',
     headers:
      { host: '10.21.28.223:9400',
        connection: 'keep-alive',
        'cache-control': 'max-age=0',
        accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
        'accept-encoding': 'gzip,deflate,sdch',
        'accept-language': 'en-US,en;q=0.8,pt;q=0.6,ru;q=0.4' },
     method: 'GET',
     httpVersion: '1.1',
     originalUrl: '/receiver',
     query: {},
     body: {} },
  res: { statusCode: 404 },
  responseTime: 3 }

Picture-in-picture / multi viewports

More of a suggestion I guess, but would it be possible to put more than one dashboard up at a time? It would be interesting in some cases... I suppose one can create a framed page, but that defeats the purpose of a central admin...

Chromecast support broken?

Hiya,

In my console log for dashkiosk I can see it finds the chromecast device but it never displays it in the web interface for dashkiosk.

Here's the relevant log file part -

info: Express server listening on port 9400 in production mode
info: New Chromecast device discovered
{ address: '192.168.1.3',
port: 8009,
id: '5aa559b51ba55f5478249094ceb489c6',
friendlyName: 'pikeletcast' }

I've tried both Nodecastor and dashkiosk and both can locate and identify chromecasts but seem to largely be unable to launch any dashboard/content.

I've tried this with two separate devices both running the latest chromecast versions (pikeletcast is rooted with Eureka rom but t hat should not change anything.)

always dev-mode despite enviroment

Hi, I'm having issues with getting this to start in production mode rather then developement mode.
run command: ../dist/& node server.js --port 9400 --environment production --chromecast.enabled --chromecast.receiver "http://vmip:9400/receiver"

I'm using a nodeJs OVH image from Bitnami (https://bitnami.com/stack/nodejs/virtual-machine)

using the vm, having to install some dependencies first
sudo apt-get install libavahi-compat-libdnssd-dev libsqlite3-dev (and sqlite3?) as well as npm install grunt-mocha-test mocha before running npm install && grunt

Cannot call method 'replace' of undefined in 2.6.6

Dashkiosk v2.6.6 started crashing periodically (once or twice per week). Such error didn't happen in earlier versions.

error: uncaughtException: Cannot call method 'replace' of undefined
{ date: 'Mon Feb 08 2016 16:14:45 GMT+0200 (EET)',
process:
{ pid: 16512,
uid: 502,
gid: 20,
cwd: '/Users/macuser/Documents/dashkiosk-2.6.6/dist',
execPath: '/Users/macuser/n/bin/node',
version: 'v0.10.40',
argv:
[ 'node',
'/Users/macuser/Documents/dashkiosk-2.6.6/dist/server.js',
'--environment',
'production',
'--chromecast.enabled',
'--chromecast.receiver',
'http://192,168.0.130:9400/receiver',
'--port',
'9400' ],
memoryUsage:
{ rss: 109051904,
heapTotal: 85364544,
heapUsed: 41827216 } },
os:
{ loadavg:
[ 1.3525390625,
1.3330078125,
1.322265625 ],
uptime: 1060076 },
trace:
[ { column: 13,
file: '/Users/macuser/Documents/dashkiosk-2.6.6/dist/lib/api/socketio/displays.js',
function: '',
line: 17,
method: null,
native: false },
{ column: 17,
file: 'events.js',
function: 'Namespace.emit',
line: 95,
method: 'emit',
native: false },
{ column: 10,
file: '/Users/macuser/Documents/dashkiosk-2.6.6/dist/node_modules/socket.io/lib/namespace.js',
function: 'Namespace.emit',
line: 205,
method: 'emit',
native: false },
{ column: 14,
file: '/Users/macuser/Documents/dashkiosk-2.6.6/dist/node_modules/socket.io/lib/namespace.js',
function: null,
line: 172,
method: null,
native: false },
{ column: 13,
file: 'node.js',
function: 'process._tickDomainCallback',
line: 492,
method: '_tickDomainCallback',
native: false } ],
stack:
[ 'TypeError: Cannot call method \'replace\' of undefined',
' at Namespace. (/Users/macuser/Documents/dashkiosk-2.6.6/dist/lib/api/socketio/displays.js:17:13)',
' at Namespace.emit (events.js:95:17)',
' at Namespace.emit (/Users/macuser/Documents/dashkiosk-2.6.6/dist/node_modules/socket.io/lib/namespace.js:205:10)',
' at /Users/macuser/Documents/dashkiosk-2.6.6/dist/node_modules/socket.io/lib/namespace.js:172:14',
' at process._tickDomainCallback (node.js:492:13)' ] }

node server.js --help → exception

Hi,

On a fresh install of dashkiosk 2.7.2, I tried --help but I got:

  stack: 
   [ 'Error: ENOENT: no such file or directory, scandir \'/usr/local/src/dashkiosk/dashkiosk-2.7.2/dist/build/images/unassigned\'',
     '    at Error (native)',
     '    at Object.fs.readdirSync (fs.js:808:18)',
     '    at Object.<anonymous> (/usr/local/src/dashkiosk/dashkiosk-2.7.2/dist/lib/express.js:51:18)',
     '    at Module._compile (module.js:409:26)',
     '    at Object.Module._extensions..js (module.js:416:10)',
     '    at Module.load (module.js:343:32)',
     '    at Function.Module._load (module.js:300:12)',
     '    at Module.require (module.js:353:17)',
     '    at require (internal/module.js:12:17)',
     '    at Object.<anonymous> (/usr/local/src/dashkiosk/dashkiosk-2.7.2/dist/server.js:12:11)' ] }

I expected a nice list of command line options instead.

Chromecast device unable to load receiver

Dashkiosk is started with following command line:

node server.js --environment production --chromecast.enabled

My Chromecast devices are detected and registered with Dashkiosk.
When I put them in a group with a dashboard, they load the default app (https://vincentbernat.github.io/dashkiosk/chromecast.html) but nothing more.

Looking into log, node tells me:

warn: Chromecast device is NOT able to retrieve the receiver
{ id: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  chromecast: 'XXXXXXXXX' }

Any idea ?

Feature request: Disable animations entirely

The slow browser detection doesn't seem to work well and on the Raspberry Pi (even 3) it's very slow to render the transition animation (using Chromium). Could there be an option to just never animate?

webgl

this is a question, not an issue.

i want to project to many chromecasts webgl 3d content.
the chromecast does not support webgl, so the only way to do it is to use the equivalent of tabcasting, where the content is rendered on the "server", and then projected to the ChromeCast as a video feed.

i am wondering if the current code can / wants to support this scenario ?

thank you !!!

chromecast: nodecastor module wont build due to error

encountered this error on both ubuntu 15.04 and debian wheezy.
Seems like nodecastor fails to build because mdns module doesnt build due to missing headers/dev pkgs at:
../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory

~/dashkiosk-2.6.4/dist$ npm install nodecastor

> [email protected] install /home/jens/dashkiosk-2.6.4/dist/node_modules/nodecastor/node_modules/mdns
> node-gyp rebuild

make: Entering directory `/home/jens/dashkiosk-2.6.4/dist/node_modules/nodecastor/node_modules/mdns/build'
  CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o
In file included from ../src/dns_sd.cpp:1:0:
../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory
compilation terminated.
make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1
make: Leaving directory `/home/jens/dashkiosk-2.6.4/dist/node_modules/nodecastor/node_modules/mdns/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack     at ChildProcess.emit (events.js:110:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Linux 3.2.0-4-amd64
gyp ERR! command "node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/jens/dashkiosk-2.6.4/dist/node_modules/nodecastor/node_modules/mdns
gyp ERR! node -v v0.12.7
gyp ERR! node-gyp -v v2.0.1
gyp ERR! not ok 
npm WARN engine [email protected]: wanted: {"node":"0.8.x"} (current: {"node":"0.12.7","npm":"2.11.3"})
npm WARN engine [email protected]: wanted: {"node":"0.8.x"} (current: {"node":"0.12.7","npm":"2.11.3"})
npm WARN engine [email protected]: wanted: {"node":"0.8.x"} (current: {"node":"0.12.7","npm":"2.11.3"})
npm WARN engine [email protected]: wanted: {"node":"0.8.x"} (current: {"node":"0.12.7","npm":"2.11.3"})
npm WARN engine [email protected]: wanted: {"node":"0.8.x"} (current: {"node":"0.12.7","npm":"2.11.3"})
npm WARN optional dep failed, continuing [email protected]

solution seems to be to install libavahi-compat-libdnssd-dev:

sudo apt-get install libavahi-compat-libdnssd-dev

and then rebuild:

npm install

note that it does log the following warning at startup, but still seems basically functional on chromecast:

~/dashkiosk-2.6.4/dist$ nodejs server.js
*** WARNING *** The program 'nodejs' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=nodejs>
*** WARNING *** The program 'nodejs' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=nodejs&f=DNSServiceRegister>

Movie freezing intermittently

Hello,
Unfortunately, I do not have any logs at the moment to share, however our locally hosted movie(s) freeze intermittently when being streamed to a chromecast. Usually it happens in the transition from one movie to the other. It has been tested on two different chromecasts in 2 differrent network locations. The video(s) are in .mp4 format and everything works okay but I would say once a day this happens.
What I have tried:

  1. Adding individual movie urls (locally hosted) to a group will freeze instantly between the transition between the two movies.
  2. Movies are re-converted into the proper format and movies will play through maybe once or twice in the group then freeze.
  3. We have tried to manage apache to control the movie looping, it worked but once a day the proper exists.
  4. We have taken all the movies and "joined" them into 1 .mp4 and the movie will still freeze in what appears to be the transition between the two.

My guess: One of the .mp4s are in the wrong format for the Chromecast. Other than that, do you have any advice or any fixes to handle movies freezing?

Thank you for all of your efforts and I deeply enjoy this software.

Regards

Troubleshooting blank display

Hi,

I have an internal dashboard (written with the same framework as Dashing) that just displays as a white page (both in a browser hitting /receiver and a Chromecast). The original URL loads fine in Chrome, other dashboards (Google Slide, leftronic, geckoboard) load just fine using DashKiosk. I'm not sure where else to look for problems, are there any diagnostics that can be viewed when a screen is loading a URL?

Thanks,
Graham

Raspberry Pi 3 jessie lite / pixel

Hello again- been trying to migrate to a raspberry pi 3 instead of that virtual machine (diff sub-network, blabla chromecast wont work, etc).

been having troubles with getting past the initial 'npm install' where it gets caught on the post-install script.

I have a npm-debug.log file here: http://pastebin.com/m3zWPrCE

I've seen some errors about jpegtran, optipng and gifsicle- however i found the package 'libjpeg-progs' as suggested in previous issues by others, and installed that, without any noticeable differences.

I installed 'libavahi-compat-libdnssd-dev' aswell.

I'm not sure what else to do, does the log file tell you anything?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.