• Stars
    star
    1,197
  • Rank 39,089 (Top 0.8 %)
  • Language
    CoffeeScript
  • License
    BSD 3-Clause "New...
  • Created about 10 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Greenscreen

A digital signage solution using the Web and Chromecast devices.

Built with Angular.js, Node.js, Express.js, and CouchDB.

How to Use

Home

HomePage

On the homepage, you will find several options currently at your disposal, namely:

  • Chromecasts
  • Channels
  • Alerts
  • Channel Takeover

Channels

Channels

Chromecasts tune into 'Channels', which refer to certain URLs.

Create a channel by clicking the 'Add a Channel' button.

New Channel

Here, you can specify the name of your channel as well as the URL it points to. You can also choose to serve multiple URLs, which rotate at a specified time interval.

Edit Channel

To edit a channel, click the name of your channel and adjust accordingly.

Chromecasts

Chromecasts

Here, you can browse the available chromecasts. Click 'Add a chromecast' to connect a new Chromecast.

You can also preview what that Chromecast is tuning into, by clicking 'Preview.'

New Chromecast

You will be prompted by the Google Cast extension to select a Chromecast. Select one of the available devices. This will automatically populate the 'Name' field with the name of the Chromecast.

Describe the location of the Chromecast in the 'Location' field.

From the dropdown, select the channel that you want that chromecast to view.

Edit Chromecast

You can edit a Chromecast by clicking a Chromecast's name. From here, you can edit the location and the channel.

That Chromecast will be automatically updated with that location and channel.

In the case that a Chromecast becomes disconnected, you can also reconnect a Chromecast by clicking 'Reconnect.' Just like adding a Chromecast, you can select the appropriate Chromecast, and it will associate itself with the current record.

Alerts

Push Alert

You can also push an alert to all Chromecasts using 'Push Alert'.

Here, you can specify the alert's content, its type, and its duration.

Clicking 'Push Alert' will publicize this alert on all pages. Any subsequent alerts will currently override the current alert.

Example Alert

Channel Takeover

Channel Takeover

Here, you can do a 'Channel Takeover' to set all Chromecasts to a specific channel, and also choose to stop said takeover.

Getting Started: Local

Installing dependencies

To install dependencies:

brew install couchdb
npm install

You must also have the Google Cast Chrome extension, as well as a Chromecast setup application.

You'll also need at least one Chromecast :)

Registering your Application

In order for your Chromecast to properly receive our Custom Receiver, your must first register your Cast Application.

Following the instructions, you should sign into the Google Cast SDK Developer Console, create a new application, and select Custom Receiver.

In the URL field, you will need to provide a URL to the application.

By default, the URL you want will be:

http://<YOUR-LOCAL-IP>:4994/setup-chromecast.html

For OS X, you can find your local IP in System Preferences > Network, and will generally begin with 192.

You may notice your newly created chromecast application will be in the 'Unpublished' state. This is expected, and your chromecast's will still be able to get to the app as long as they're registered (which is covered in the following section).

Registering your Chromecasts

Along with registering your Chromecast Application, you will need to register your Chromecasts. This is done through the Google Cast SDK Developer Console.

Serial numbers can be found on the back of your Chromecast. Once registration is complete, make sure to reboot your devices, which can be done through the Chromecast Desktop Application.

Setting up your Chromecasts

Set up your chromecasts using the Chromecast Setup Application, through mobile or desktop (Desktop preferred).

Make sure that they are on the same Wi-Fi network as your local machine.

Make sure that each Chromecast is configured to send its ID number via the Chromecast App. In the desktop application, this involves checking the box that says to 'Send this Chromecast's serial number to Google when checking for updates'.

Once that preference is saved, it may be useful to reboot your chromecast. Doesn't hurt!

Application Config

You will need to create and edit some config files.

npm run create-config

In public/js/gscreen-config.js, edit the chromecastApplicationId field to your Chromecast Application ID.

You can configure the couchDB and sever details in config.json.

Starting the Server

Phew! Now that all of that yucky registration is done, you're ready to start the Greenscreen server.

Start up couchdb with:

couchdb

Start the server (make sure you've installed the dependencies, see above section 'Installing Dependencies'):

npm start

(Optional) You can seed the database with dummy chromecasts.

npm run seed

View the project locally at http://localhost:4994.

Developing

The client-side code is bundled from the src/client directory. To build, run:

npm run bundle

This will watch all changes to client side code, and bundle it to public/js/gscreen.js.

public/js/gscreen.js is automatically generated, so don't edit this file!

While the server is running with npm start, changes in the src/server will cause the server to restart with the new changes.

Tests

End-to-end tests are run using protractor. To start tests:

You will need protractor installed:

npm install -g protractor

Start up the application locally, and then:

Start a webdriver-manager:

npm run webdriver

Start the tests:

npm test

Known Issues

When adding a Chromecast, the Chrome extension may time out on requesting a Session, though the Chromecast may successfully display the 'Setting up Chromecast' page. This timeout occurs because connecting to your local server tends to be pretty slow.

To remedy this, select the Chromecast in the Google Cast extension, and select 'Stop Casting.' You'll need to navigate back to the Chromecasts list, and click 'Add new Chromecast' to try again.

Troubleshooting

My Chromecasts aren't appearing in the Google Cast extension!

Make sure that you are able to see your Chromecast(s) in the Google Cast extension on other tabs/pages. If not, this is most likely an error with your extension, or your connection.

  • Check that your Chromecast and your local development server are on the same Wi-Fi network
  • Try rebooting your Chromecasts through the desktop applications or manually, and reconnecting them.
  • Try restarting your Chrome browser (Completely quit the application and re-open)

When all else fails, reboot your chromecasts, and restart Chrome.

Security

Obviously, you don't neccessarily want to have everyone able to manipulate every Chromecast through the web interface. Currently, the best way to secure this is by setting up a private Wi-Fi network for the Chromecasts to connect to.

Good luck, and happy casting! :)

More Repositories

1

Selenium-Grid-Extras

Simplify the management of the Selenium Grid Nodes and stabilize said nodes by cleaning up the test environment after the build has been completed
Ruby
536
star
2

DotCi

DotCi Jenkins github integration, .ci.yml http://groupon.github.io/DotCi
Java
500
star
3

sparklint

A tool for monitoring and tuning Spark jobs for efficiency.
Scala
357
star
4

grox

Grox helps to maintain the state of Java / Android apps.
Java
339
star
5

testium

⛔️ [DEPRECATED] see https://github.com/testiumjs/testium-mocha
CoffeeScript
305
star
6

gleemail

Making email template development fun! Sort of!
CoffeeScript
291
star
7

ansible-silo

Ansible in a self-contained environment via Docker.
Shell
203
star
8

ndu

node disk usage
JavaScript
194
star
9

odo

A Mock Proxy Server
Java
153
star
10

spark-metrics

A library to expose more of Apache Spark's metrics system
Scala
146
star
11

cson-parser

Simple & safe CSON parser
JavaScript
133
star
12

FeatureAdapter

FeatureAdapter (FA) is an Android Library providing an optimized way to display complex screens on Android.
Java
113
star
13

dependency-injection-checks

Dependency Injection Usage Checks
Java
97
star
14

node-cached

A simple caching library for node.js, inspired by the Play cache API
JavaScript
94
star
15

luigi-warehouse

A luigi powered analytics / warehouse stack
Python
87
star
16

gofer

A general purpose service client library for node.js
JavaScript
82
star
17

codeburner

Security-focused static code analysis for everyone
Ruby
81
star
18

locality-uuid.java

Java
80
star
19

jesos

Java
51
star
20

swagql

Create a GraphQL schema from swagger spec
JavaScript
45
star
21

quinn

A set of convenient helpers to use promises to handle http requests
JavaScript
40
star
22

robo-remote

RoboRemote is a remote control framework for Robotium. The goal of RoboRemote is to allow for more complex test scenarios by letting the automator write their tests using standard desktop Java/JUnit. All of the Robotium Solo commands are available. RoboRemote also provides some convencience classes to assist in common tasks such as interacting with list views.
Java
40
star
23

webdriver-http-sync

sync http implementation of the WebDriver protocol for Node.js
JavaScript
39
star
24

mysql_slowlogd

Daemon that serves MySQL's slow query log via HTTP as a streaming download
Shell
36
star
25

mongo-deep-mapreduce

Use Hadoop MapReduce directly on Mongo data
Java
30
star
26

tdsql

Run SQL queries against a Teradata data warehouse server
Perl
29
star
27

nlm

Lifecycle manager for node projects
JavaScript
29
star
28

monsoon

An extensible monitor system that checks java processes and exposes metrics based on them.
Java
28
star
29

backbeat

A workflow service for processing asynchronous tasks across distributed systems
Ruby
28
star
30

selenium-download

allow downloading of latest selenium standalone server and chromedriver
JavaScript
28
star
31

Message-Bus

Java
25
star
32

retromock

Like Wiremock for Retrofit, but faster.
Java
24
star
33

report-card

An Open Source Report Card
JavaScript
23
star
34

nakala

Java
22
star
35

assertive

Assertive is a terse yet expressive assertion library
JavaScript
21
star
36

locality-uuid.rb

Ruby
18
star
37

javascript

Guidelines for using Javascript at Groupon
JavaScript
16
star
38

KatMaps

Kotlin
16
star
39

shellot

Slim terminal realtime graphing tool
Ruby
14
star
40

roll

roll - bootstrap or upgrade a Unix host with Roller
C
13
star
41

sycl

Simple YAML Config Library
Ruby
13
star
42

vertx-utils

Java
12
star
43

baryon

Baryon is a library for building Spark Streaming applications that consume data from Kafka.
Scala
11
star
44

params_deserializers

Deserializers for Rails params
Ruby
11
star
45

poller

Poll a URL, and trigger code on changes
Ruby
10
star
46

git-workflow

JavaScript
10
star
47

json-schema-validator

Maven plugin to validate json files against a json schema. Uses https://github.com/fge/json-schema-validator library under the covers
Java
10
star
48

mysql-junit4

Java
9
star
49

vertx-memcache

Java
9
star
50

shared-store

Keeping config data in sync
JavaScript
9
star
51

artemisia

A light-weight configuration driven Data-Integration utility
Scala
8
star
52

pg_consul

C++
8
star
53

vertx-redis

Java
7
star
54

phy

Minimal hyperscript helpers for Preact
JavaScript
6
star
55

mezzanine

Mezzanine is a library built on Spark Streaming used to consume data from Kafka and store it into Hadoop.
Scala
6
star
56

DotCi-Plugins-Starter-Pack

DotCi-Plugins-Starter-Pack - Expansion-pack for DotCi
Java
6
star
57

Novie

Java
5
star
58

backbeat_ruby

A Ruby client for Backbeat workflow service
Ruby
4
star
59

gh-grep

GitHub CLI grep extension
TypeScript
4
star
60

nilo

A dependency injection toolset for building applications
JavaScript
3
star
61

promise

Java
3
star
62

schema-inferer

Scala
2
star
63

two-to-three

Swagger to Open API Converter
Java
2
star
64

assertive-as-promised

extends assertive with promise support
CoffeeScript
2
star
65

jtier-ctx

Java
2
star
66

kmond

Kotlin
2
star
67

api-build-resources

Build related resources files, e.g. checkstyle configs, etc.
2
star
68

tiquette

Have some etiquette. Format your commit messages with a ticket or issue number.
TypeScript
2
star
69

gofer-proxy

Use a `gofer` client as an express middleware
JavaScript
1
star
70

stylint-config-groupon

CSS
1
star
71

coffeelint-config-groupon

CoffeeScript lint setting used at Groupon
JavaScript
1
star
72

installed-package

Run your node tests against an installed version of your package
JavaScript
1
star
73

api-parent-pom

Project to contain parent pom for common plugin configuration across all API team Maven projects.
1
star
74

jdbi-st4

1
star
75

gh-bulk-pr

GitHub CLI bulk-pr extension
TypeScript
1
star