Giter VIP home page Giter VIP logo

concerto-hardware's Introduction

Concerto 2 Digital Signage System

Build Status

Full Installation Instructions: https://github.com/concerto/concerto/wiki/Installing-Concerto-2

What is Concerto?

Concerto is an open source digital signage system. Users submit graphic, textual, and other content, and moderators approve that content for use in a variety of content feeds which are displayed on screens connected to computers displaying the Concerto frontend.

Each screen has a template that has fields designated for content. The template can also have a background graphic and a CSS stylesheet. You can easily define your own templates.

A screen can subscribe its fields to feeds (or channels). Screens can be public or private (requiring a token).

Users can create content (an image, an iframe, video, rss content, etc.) and submit it to various feeds. The content can be scheduled for a specific date range. Content submitted to a feed can be ordered on that feed if desired. The default ordering is by content start date.

Feeds can be hidden or locked. Feeds belong to groups. If the user that submitted the content is an administrator or is authorized to moderate content on the feed based on their group membership permissions then the submission is automatically approved. Otherwise the content submission to the feed is pending a moderator’s approval.

A screen can define the content display rules for each field. This includes whether content should be displayed in order or randomly or based on priority. It can also designate the animation for transitions when content is swapped out and in.

There are various plugins that extend functionality which can be added as desired. You can even write your own.

Dependencies

  • Ruby 2.6
  • Rubygems
  • Imagemagick, GhostScript, Poppler-Utils
  • LibreOffice
  • Webserver (Apache/Unicorn/Thin/Nginx)
  • Rack interface to the webserver (Passenger, FastCGI)
  • ActiveRecord-compatible database (Mysql, SQLite, Postgres)
  • Nodejs as the javascript engine (as of version 2.4.0)

Docker Image

To build and run the docker image locally, (make sure you don't already have port 80 in use):

1. git clone http://github.com/concerto/concerto
2. cd concerto
3. docker build -t concerto .
4. docker-compose up

To get into the concerto container: docker exec -t -i concerto_concerto_1 bash -l and then you can also "login" as the app user via setuser app bash --login.

** Note - we are still working on a viable docker image capable of handling persistence and upgrades. **

Debian Package Installation

Note: For those upgrading Concerto from earlier Debian/Ubuntu versions, make sure that your APT source line looks like this: http://dl.concerto-signage.org/packages/ stretch main

  • Add Concerto repository using curl -k https://get.concerto-signage.org/add_repo.sh | sh
  • Install Concerto via APT sudo apt-get install concerto-full

Virtual Server Image (VirtualBox, VMWare, et. al.)

The virtual server image contains a full-stack installation of the Concerto webserver with all components pre-configured.

Concerto 2 is licensed under the Apache License, Version 2.0.

concerto-hardware's People

Contributors

augustf avatar brzaik avatar mfrederickson avatar mikldt avatar simplysoft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

mohala562

concerto-hardware's Issues

Automatically link screens

The workflow for creating a new player is to click the Hardware: add link in screens/show. Right now, the user has to then enter the screen ID in the player#new form once they click the link.

Instead, we should pass a screen_id GET parameter as part of that link, and use that for the new player. It would probably make sense to hide the Screen ID field (since there's no reason to change it) and just show the screen name.

Implement Player Initialization

Provide the action for a new screen to register itself, and a seperate view/action for the administrator to verify the screen and get directed to its configuration options.

remove new player button from all players list?

Because a player must be connected with a screen [and you can easily add one from there], and because the screen_id field is now a hidden field in the form, perhaps we should remove the "New Player" button from the All Players view?

Currently if you used this button you cant specify the screen and hence it never validates.

Can't change weekend off time from 8PM

Odd as it may seem, I'm unable to change my screen weekend off time away from 8PM. I set the control for weekend on at 1PM and off at 3PM, but the off value remains 8PM. I'm able to change the weekday on and off times without incident.

Capture Player IP Address

We should capture the player IP address from the API rather than having the user enter it into the form. The UI should then link to the status and configuration pages on the Bandshell server.

Ideally it would only write to the database when the recorded IP address is nil or different from the reported one.

A bonus might be to check whether it is routable from the server (could be a delayed job). This would be informative to the user and possibly useful down the line in a pseudo-push scenario. In this case we could store some serialized data (address, last updated, and routability) rather than just the address.

Resolution and Rotation Control

Provide UI and a database object that allow the user to optionally override the resolution (px x px) and rotation (normal, left, right, inverted) of the player's graphics card.

Storage will likely take the form of a JSON blob in the database since it need not be indexed or searchable, and may grow over time.

Future modifications may include overscan/underscan adjustment and reflection, though these are probably not priorities right now.

controller questions

Why do you have the require and screen_api filter in the controller? When will other plugins need these?

require_dependency "concerto_hardware/application_controller"

module ConcertoHardware
class PlayersController < ApplicationController
  unloadable #marks this class for reloading in between requests
  #include routes.named_routes.helpers
  before_filter :screen_api

Develop file management utility

Develop an infrastructure to manage the pushing of files to Concerto Players - X configs, certificates, software updates, etc.

how is the screen turned on or off?

I'm assuming that there is different methods to do this for the different kinds of displays, so where do you specify the actual hardware type so (bandshell?) will know how to do it?

Or will it just use some x command to do it?

screen on/off validation and interface

Since times can't wrap, should probably validate that begin time is before end time.

Weekend time fields should be disabled or hidden if the "Disable on weekends" checkbox is checked.

Remove secret from schema

Secrets are now handled by Concerto proper. I have to look in to whether the best way to change the schema is to add another migration or to just modify the existing one (leaving existing deployments in the lurch, but there are not many). Low priority.

Implement Screen Control Selection

Each Player should have information about how to control its screen. For the purposes of this ticket we will only implement control method selection, but it should be implemented so more parameters may be added in the future.

Since this is likely to evolve, it might be best implemented as serialized JSON, as was done with the screen_on_off field. The field could be called screen_control_info.

The JSON should represent a hash. Right now there will only be one key, method. the associated value would be a string determining the control type, initially either dpms (default) or none.

The Player owner should be able to control this through the Edit Player view. This information should be available to the Player through the API.

Rails 4: Player Model Time Attributes broken

It seems the setter from attr_accessor via our time_accessor method is being overwritten. Everytime a call is made, for example to wkday_on_time=, it seems to get sucked up by ActiveModel, which attempts to interpret it is a DB field. wkday_on_time= is called in :after_find so the plugin is non-viable while this bug exists.

ActiveModel seems to be doing some funny things these days (aliasing method_missing for one). Some investigation is required to see if the on-the-fly attr_accessor approach is still valid.

ActiveModel::MissingAttributeError in ConcertoHardware::PlayersController#show
can't write unknown attribute `wkday_on_time'
vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.6/lib/active_record/attribute_methods/write.rb:93:in `write_attribute_with_type_cast'
vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.6/lib/active_record/attribute_methods/write.rb:58:in `write_attribute'
vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.6/lib/active_record/attribute_methods/dirty.rb:68:in `write_attribute'
vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.6/lib/active_record/attribute_methods.rb:395:in `[]='
vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.6/lib/active_record/aggregations.rb:255:in `block (2 levels) in writer_method'
vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.6/lib/active_record/aggregations.rb:255:in `each'
vendor/bundle/ruby/2.1.0/gems/activerecord-4.1.6/lib/active_record/aggregations.rb:255:in `block in writer_method'
/home/mike/dev/concerto-hardware/app/models/concerto_hardware/player.rb:107:in `block in retrieve_screen_on_off'
/home/mike/dev/concerto-hardware/app/models/concerto_hardware/player.rb:102:in `each'
/home/mike/dev/concerto-hardware/app/models/concerto_hardware/player.rb:102:in `retrieve_screen_on_off'

why is view stuff in engine.rb?

@mikldt or @augustf I'm wondering why this view stuff is in the engine.rb

        add_view_hook "ScreensController", :screen_details, :text => "<p><b>All systems:</b> go</p>"
        add_view_hook "ScreensController", :screen_details do
          "<p><b>Name via View Hook:</b> "[email protected]+"</p>"
        end

since the screen_link is already wired up here...

     add_view_hook "ScreensController", :screen_details, :partial => "concerto_hardware/screens/screen_link"

and can't it be moved into the screen_link partial? And shouldn't the partial be renamed to screen_details?

Implement Player API

Ensure necessary data (for example Screen information) is displayed and private data (hashed secret) is not. Make sure proper authorizations are in place for the views that the Player will talk to.

Access Denied in API causes redirect

For example, GETing /hardware/players/by_screen/1.json without appropriate permissions does a 302 redirect to /users/sign_in. Better would be to detect that this is a non-interactive format and render a 403 with empty data instead.

Some research is needed to decide whether this should be done on a piecemeal basis or just made part of the exception handler in Concerto.

Hardware controlled screen flickers (DPMS)

Upon having @emalac deploy a hardware-controlled screen, the screen will at times begin flickering on and then off. I set what I thought to be reasonable on and off times that wouldn't even coincide with the UTC time in case this was a time zone interpretation issue.

@gbprz I know you had this issue in the past. Was there a resolution?

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.