Screenly OSE -- Digital Signage for the Raspberry Pi


547 posts   Page 1 of 22   1, 2, 3, 4, 5 ... 22
by vpetersson » Wed Jul 25, 2012 10:17 am
Hey guys,

I just released a complete turn-key digital signage solution for the Raspberry Pi called Screenly. While still in beta, I was hoping to tap into this vibrant community for beta testers.

The idea is for Screenly to be a 'set and forget' appliance. Once installed, you manage all the content remotely using your web-browser (with the built-in web-server).

Currently, Screenly support images, videos (using omxplayer) and web-sites.

Screenly is built for Raspbian and the full instructions can be found here:
https://github.com/wireload/screenly-ose

Looking forward to getting some feedback.

Ps. I know the management-pages are somewhat ugly at the moment, but we'll sort that out as we move forward. Ds.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by vpetersson » Wed Jul 25, 2012 1:49 pm
I've uploaded a (rough) video of Screenly in action here:
http://www.youtube.com/watch?v=yjDjEfhspxk

Screenshots and photos are available here:
https://picasaweb.google.com/1021123476 ... qp-j5vWUGQ
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by tkerbavaz » Sat Jul 28, 2012 4:24 am
I installed Screenly today. Some thoughts and questions:

1) Your git install instructions are predicated on the user having a github account. I ended up just downloading your source and then installing from there.

2) When I try to submit an asset, I get an Error 500: Internal Server Error. Mayhaps I have a bug in my install because I installed manually, but I'm not sure how to get around this.
Posts: 4
Joined: Sat Jul 28, 2012 4:18 am
by vpetersson » Sat Jul 28, 2012 11:09 am
tkerbavaz wrote:I installed Screenly today. Some thoughts and questions:

1) Your git install instructions are predicated on the user having a github account. I ended up just downloading your source and then installing from there.


Hmm, I don't think that is the case. Maybe if you try to clone using the git protocol. Try cloning using http.

tkerbavaz wrote:2) When I try to submit an asset, I get an Error 500: Internal Server Error. Mayhaps I have a bug in my install because I installed manually, but I'm not sure how to get around this.

[/quote]

Please send me a PM and we should be able sort it out. It could be something to do with the content.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by felix123 » Sat Jul 28, 2012 11:36 am
Cool! Do you plan on making the Pi store contents locally?
Posts: 153
Joined: Tue May 15, 2012 6:06 am
by vpetersson » Sat Jul 28, 2012 11:50 am
felix123 wrote:Cool! Do you plan on making the Pi store contents locally?


Not at the moment, but there is still some local caching going on in the browser.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by tkerbavaz » Mon Jul 30, 2012 4:27 am
So I got it working, I created a github account and SSH key, and was able to install screenly.

Now, however, the viewer doesn't start automatically on boot. I have to manually activate the viewer python script to activate the sign.

Any ideas why that might be and how to fix it?

Do I need to add an rc.d script to make it run?
Posts: 4
Joined: Sat Jul 28, 2012 4:18 am
by vpetersson » Mon Jul 30, 2012 9:08 am
tkerbavaz wrote:So I got it working, I created a github account and SSH key, and was able to install screenly.


Odd, that should not be needed.

tkerbavaz wrote:Now, however, the viewer doesn't start automatically on boot. I have to manually activate the viewer python script to activate the sign.

Any ideas why that might be and how to fix it?

Do I need to add an rc.d script to make it run?


No rc.d script is needed. The installation instruction adds Screenly to the autorun in LXDE, so if you follow them, Screenly should automatically start with X.

It's important that the paths are correctly set, otherwise it will not work. If Screenly doesn't reside in /home/pi/screenly it will not work. Also, if you don't have a fresh Raspbian installation, but one with prior modifications, this might very well interfere.

Try opening a terminal window inside of X and running:
Code: Select all
python ~/screenly/viewer.py
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by tkerbavaz » Tue Jul 31, 2012 8:40 am
Try opening a terminal window inside of X and running:
Code: Select all
python ~/screenly/viewer.py


That's what I've been doing to run the viewer (which does indeed start the viewer) but I thought it was supposed to autorun at boot? The server is starting automatically, but the viewer is not.

Edit:

This was installed per the readme file on a fresh install of Raspbian. I burned the image, booted, configured raspbian (expanded the image to fill the SD card), and installed Screenly.
Posts: 4
Joined: Sat Jul 28, 2012 4:18 am
by vpetersson » Tue Jul 31, 2012 3:44 pm
tkerbavaz wrote:That's what I've been doing to run the viewer (which does indeed start the viewer) but I thought it was supposed to autorun at boot? The server is starting automatically, but the viewer is not.

Edit:

This was installed per the readme file on a fresh install of Raspbian. I burned the image, booted, configured raspbian (expanded the image to fill the SD card), and installed Screenly.


Yes, the idea is that viewer should start automatically with X.

Can you run
Code: Select all
cat ~/.config/lxsession/LXDE/autostart


That should come out as:
@~/screenly/misc/xloader.sh

If that isn't the case, the installation failed somehow. Try to fix that, run:
Code: Select all
echo "@~/screenly/misc/xloader.sh" > ~/.config/lxsession/LXDE/autostart


Also, please run
Code: Select all
ls -l ~/screenly/misc/xloader.sh

and verify that it is executable.

If it isn't executable, run
Code: Select all
chmod +x ~/screenly/misc/xloader.sh
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by vpetersson » Wed Aug 01, 2012 9:25 am
I found a pretty big issue with the installation instructions. Turns out I was using the 'read-write' Github URL instead of the 'read-only' one. This explains the issue some of you reported about not being able to clone the repository.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by Clifor » Wed Aug 01, 2012 12:20 pm
Hi all

First of all, thank you for your effort and sharing :)

I have managed to install Screenly without problems but I get the following error when trying to add new contents with a local URL (i.e. http://192.168.1.60:7070)

Error 500: Internal Server Error
Sorry, the requested URL 'http://192.168.1.48:8080/process_asset' caused an error:
Internal Server Error


I can add an external web site http://www.yahoo.com without problems though...

Any ideas?
Posts: 12
Joined: Thu Jul 26, 2012 10:58 am
by vpetersson » Wed Aug 01, 2012 1:42 pm
Clifor wrote:I have managed to install Screenly without problems but I get the following error when trying to add new contents with a local URL (i.e. http://192.168.1.60:7070)


Can you ping the address from the Raspberry Pi?

Clifor wrote:Error 500: Internal Server Error
Sorry, the requested URL 'http://192.168.1.48:8080/process_asset' caused an error:
Internal Server Error



What kind of asset are you trying to add? Is it just a plain HTML-page?

Could you also post the content of /var/log/supervisor/screenly*.log ?
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by Clifor » Thu Aug 02, 2012 8:42 am
Thanks for the prompt answer :)

vpetersson wrote:
Can you ping the address from the Raspberry Pi?

What kind of asset are you trying to add? Is it just a plain HTML-page?

Could you also post the content of /var/log/supervisor/screenly*.log ?


And yes, I was able to ping the address and the asset was just a plain HTML-page with a small javascript to do some kind of slideshow.

The first problem I had was the rootfs was full, as I had not extended my partition to use the full SD card space. After rearranging partitions it failed again once, but then it worked fine.

That's the trace of the error as shown in the log file:

192.168.1.40 - - [01/Aug/2012 13:26:56] "GET /add_asset HTTP/1.1" 200 1157
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 744, in _handle
return route.call(**args)
File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 1479, in wrapper
rv = callback(*a, **ka)
File "/home/pi/screenly/server.py", line 77, in process_asset
conn = sqlite3.connect(database, detect_types=sqlite3.PARSE_DECLTYPES)
OperationalError: unable to open database file


We are testing it with a couple of RasPi attached to 46'' Samsung screens and it looks terrific :)
Posts: 12
Joined: Thu Jul 26, 2012 10:58 am
by vpetersson » Thu Aug 02, 2012 9:20 am
Clifor wrote:And yes, I was able to ping the address and the asset was just a plain HTML-page with a small javascript to do some kind of slideshow.

The first problem I had was the rootfs was full, as I had not extended my partition to use the full SD card space. After rearranging partitions it failed again once, but then it worked fine.

That's the trace of the error as shown in the log file:

192.168.1.40 - - [01/Aug/2012 13:26:56] "GET /add_asset HTTP/1.1" 200 1157
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 744, in _handle
return route.call(**args)
File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 1479, in wrapper
rv = callback(*a, **ka)
File "/home/pi/screenly/server.py", line 77, in process_asset
conn = sqlite3.connect(database, detect_types=sqlite3.PARSE_DECLTYPES)
OperationalError: unable to open database file


We are testing it with a couple of RasPi attached to 46'' Samsung screens and it looks terrific :)


Sounds like an issue with the database (it's probably corrupt). It may stem from the issue with a full disk as you described. Try deleting the database and reboot:

Code: Select all
rm  -rf ~/.screenly
sudo shutdown -r now


That should hopefully take care of the issue.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by Clifor » Thu Aug 02, 2012 10:13 am
This is just a comment about the duration of the assets.

If you set duration up as a large number, it would take that long for the viewer to realize there has been a change in the playlist.

Am I right?
Posts: 12
Joined: Thu Jul 26, 2012 10:58 am
by vpetersson » Thu Aug 02, 2012 10:26 am
Clifor wrote:This is just a comment about the duration of the assets.

If you set duration up as a large number, it would take that long for the viewer to realize there has been a change in the playlist.

Am I right?


Yes, the playlist will run through five times and then refresh. Hence if you only have one asset scheduled and set the duration to, let's say 3600s (1h), the playlist would only refresh every 5th hour.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by nreicher » Fri Aug 03, 2012 6:45 am
Hi,
I get Screenly set up but get 500 - Internal Server errors on adding assets. I read through the posts and tried trashing the db and recreating with no luck...
It seems a database access problem like one of the other posts. What was the fix for that?

My big question: If ALL content is loaded from external source, a la URL, why does it make a difference if you pick "image" or "video" or "website"?

I'd love this concept and it would be great to get this working. Thanks for all the hard work.
Attached: logs.
screenly access log:
Code: Select all
10.0.0.25 - - [03/Aug/2012 12:50:31] "GET /add_asset HTTP/1.1" 200 1157
10.0.0.25 - - [03/Aug/2012 12:50:31] "GET /static/css/style.css HTTP/1.1" 304 0
10.0.0.25 - - [03/Aug/2012 13:09:36] "GET / HTTP/1.1" 200 679
10.0.0.25 - - [03/Aug/2012 13:09:36] "GET /static/css/style.css HTTP/1.1" 304 0
10.0.0.25 - - [03/Aug/2012 13:09:38] "GET /add_asset HTTP/1.1" 200 1157
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 744, in _handle
    return route.call(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 1479, in wrapper
    rv = callback(*a, **ka)
  File "/home/pi/screenly/server.py", line 121, in process_asset
    conn = sqlite3.connect(database, detect_types=sqlite3.PARSE_DECLTYPES)
OperationalError: unable to open database file
10.0.0.25 - - [03/Aug/2012 13:09:52] "POST /process_asset HTTP/1.1" 500 754
10.0.0.25 - - [03/Aug/2012 13:11:09] "GET / HTTP/1.1" 200 679
10.0.0.25 - - [03/Aug/2012 13:11:10] "GET /add_asset HTTP/1.1" 200 1157
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 744, in _handle
    return route.call(**args)


supervisord.log
Code: Select all
2012-08-03 13:19:42,250 CRIT Supervisor running as root (no user in config file)
2012-08-03 13:19:42,255 WARN Included extra file "/etc/supervisor/conf.d/screenly.conf" during parsing
2012-08-03 13:19:43,561 INFO RPC interface 'supervisor' initialized
2012-08-03 13:19:43,562 WARN cElementTree not installed, using slower XML parser for XML-RPC
2012-08-03 13:19:43,564 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2012-08-03 13:19:43,579 INFO daemonizing the supervisord process
2012-08-03 13:19:43,602 INFO supervisord started with pid 1518
2012-08-03 13:19:44,661 INFO spawned: 'screenly' with pid 1527
2012-08-03 13:19:45,704 INFO success: screenly entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)


Screenly isn't actually writing to the error log as defined in the screenly.conf file... anyway to turn on debug mode?
Posts: 5
Joined: Fri Aug 03, 2012 6:31 am
by vpetersson » Fri Aug 03, 2012 8:55 am
nreicher wrote:Hi,
I get Screenly set up but get 500 - Internal Server errors on adding assets. I read through the posts and tried trashing the db and recreating with no luck...
It seems a database access problem like one of the other posts. What was the fix for that?


What kind of asset did you try to add?

Also, could you send the file ~/.screenly/screenly.db?

nreicher wrote:My big question: If ALL content is loaded from external source, a la URL, why does it make a difference if you pick "image" or "video" or "website"?


Because there are different handlers for them (ie. they use different methods for displaying). For instance, videos aren't displayed using a browser. Images are, but with some custom handling.

nreicher wrote:Screenly isn't actually writing to the error log as defined in the screenly.conf file... anyway to turn on debug mode?

Well, so there are two logs-file: one for viewer.py and one for server.py. The one you attached above is for server.py. The other log-file is irrelevant for this case.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by vpetersson » Sat Aug 04, 2012 4:18 pm
Update: I pushed a major fix to Screenly today that fixes video playback. It must have broken in some earlier update.

To update, simply do:
cd ~/screenly
git pull
pkill -f "viewer.py"
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by nreicher » Mon Aug 06, 2012 2:35 am
vpetersson wrote:What kind of asset did you try to add?

first a url, then an image. I decided that was broken enough.
vpetersson wrote:Also, could you send the file ~/.screenly/screenly.db?


No. There's 0 bytes in ~/.screenly... and it's not a directory, so no db in there.
Permissions are 777 now (I tried), and owner/group is pi/pi.

Obviously Screenly hadn't created the database properly, therefore not writing to it, therefore not able to do the processing. (ipso facto... Internal Server Error)...
Upon further investigation, I'm showing there's no space left on device:
$ mkdir ~/.screenly
mkdir: cannot create directory `/home/pi/.screenly': No space left on device
$ df -l
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1804128 1804124 0 100% /
/dev/root 1804128 1804124 0 100% /
tmpfs 18808 220 18588 2% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 37616 0 37616 0% /tmp
tmpfs 10240 0 10240 0% /dev
tmpfs 37616 0 37616 0% /run/shm
/dev/mmcblk0p1 57288 34552 22736 61% /boot


I think I need to expand this rootfs to fill the 4GB card and that may do it?
Thoughts...?
Posts: 5
Joined: Fri Aug 03, 2012 6:31 am
by vpetersson » Mon Aug 06, 2012 9:09 am
nreicher wrote:I think I need to expand this rootfs to fill the 4GB card and that may do it?
Thoughts...?


Sure, if the disk is full, Screenly cannot write any data to disk. Hence, the issue you described is to be expected.

At this point, I'd strongly advise you to reinstall Respbian from scratch, expand the rootfs on the first boot (which will require another reboot) and first then install Screenly.
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by atmosx » Mon Aug 06, 2012 1:42 pm
Hello from Greece,

I want to make a digital signage for our store. I will order a Raspberry Pi today. Hope it arrives asap.

I need to display some adds but also informations about which pharmacy is open in the city, with address and phone number. Meaning I'll need to display dynamic content.

I wrote a ruby script that tweets this info. Can I use the same script to somehow make this info available daily for this system?

Another question is, can I display the info a different channel and have maybe 2 or 3 channels at the same time? One displaying a JPEG (HD) or video (480p or 720p is fine) in one channel and an upper channel displaying the info or Screenly OSE is for displaying 1 signal at the time?

Best Regards
Posts: 17
Joined: Mon Aug 06, 2012 1:36 pm
Location: Greece
by vpetersson » Mon Aug 06, 2012 2:43 pm
atmosx wrote:I need to display some adds but also informations about which pharmacy is open in the city, with address and phone number. Meaning I'll need to display dynamic content.

I wrote a ruby script that tweets this info. Can I use the same script to somehow make this info available daily for this system?


I guess you could display the twitter feed from Twitter, but that wouldn't be very pretty. I recommend that write something that renders a web-page (optimized for 1920x1080) and use that.

atmosx wrote:Another question is, can I display the info a different channel and have maybe 2 or 3 channels at the same time? One displaying a JPEG (HD) or video (480p or 720p is fine) in one channel and an upper channel displaying the info or Screenly OSE is for displaying 1 signal at the time?


No, you can't display multiple channels at the same time with Screenly. I know there are digital signage solutions that can do this, but first of all I don't think it provides a very good user experience (generally speaking) and second I doubt the Raspberry Pi is powerful to do this in the first place (unless they're super lightweight or uses the GPU).
Creator of Screenly (ScreenlyApp.com), the leading digital signage solution for the Raspberry Pi.
Posts: 196
Joined: Wed Jul 25, 2012 9:23 am
by nreicher » Mon Aug 06, 2012 11:52 pm
vpetersson wrote:At this point, I'd strongly advise you to reinstall Respbian from scratch, expand the rootfs on the first boot (which will require another reboot) and first then install Screenly.


That did the trick... in fact, it was easier since there were a few more code fixes since the first time. Awesome use of my Raspberry guys! Thanks!
Posts: 5
Joined: Fri Aug 03, 2012 6:31 am