initial commit
This commit is contained in:
commit
b70cbfbad8
231
hosted.lua
Normal file
231
hosted.lua
Normal file
|
@ -0,0 +1,231 @@
|
||||||
|
--[[
|
||||||
|
|
||||||
|
Part of info-beamer hosted. You can find the latest version
|
||||||
|
of this file at:
|
||||||
|
|
||||||
|
https://github.com/info-beamer/package-sdk
|
||||||
|
|
||||||
|
Copyright (c) 2014,2015,2016,2017 Florian Wesch <fw@dividuum.de>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
]]--
|
||||||
|
|
||||||
|
local resource_types = {
|
||||||
|
["image"] = function(value)
|
||||||
|
local surface
|
||||||
|
local image = {
|
||||||
|
asset_name = value.asset_name,
|
||||||
|
filename = value.filename,
|
||||||
|
type = value.type,
|
||||||
|
}
|
||||||
|
|
||||||
|
function image.ensure_loaded()
|
||||||
|
if not surface then
|
||||||
|
surface = resource.load_image(value.asset_name)
|
||||||
|
end
|
||||||
|
return surface
|
||||||
|
end
|
||||||
|
function image.load()
|
||||||
|
image.ensure_loaded()
|
||||||
|
local state = surface:state()
|
||||||
|
return state ~= "loading"
|
||||||
|
end
|
||||||
|
function image.get_surface()
|
||||||
|
return image.ensure_loaded()
|
||||||
|
end
|
||||||
|
function image.draw(...)
|
||||||
|
image.ensure_loaded():draw(...)
|
||||||
|
end
|
||||||
|
function image.unload()
|
||||||
|
if surface then
|
||||||
|
surface:dispose()
|
||||||
|
surface = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function image.get_config()
|
||||||
|
return image
|
||||||
|
end
|
||||||
|
return image
|
||||||
|
end;
|
||||||
|
["video"] = function(value)
|
||||||
|
local surface
|
||||||
|
local video = {
|
||||||
|
asset_name = value.asset_name,
|
||||||
|
filename = value.filename,
|
||||||
|
type = value.type,
|
||||||
|
}
|
||||||
|
function video.ensure_loaded(opt)
|
||||||
|
if not surface then
|
||||||
|
surface = util.videoplayer(value.asset_name, opt)
|
||||||
|
end
|
||||||
|
return surface
|
||||||
|
end
|
||||||
|
function video.load(opt)
|
||||||
|
video.ensure_loaded(opt)
|
||||||
|
local state = surface:state()
|
||||||
|
return state ~= "loading"
|
||||||
|
end
|
||||||
|
function video.get_surface(opt)
|
||||||
|
return video.ensure_loaded(opt)
|
||||||
|
end
|
||||||
|
function video.draw(...)
|
||||||
|
video.ensure_loaded():draw(...)
|
||||||
|
end
|
||||||
|
function video.unload()
|
||||||
|
if surface then
|
||||||
|
surface:dispose()
|
||||||
|
surface = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function video.get_config()
|
||||||
|
return video
|
||||||
|
end
|
||||||
|
return video
|
||||||
|
end;
|
||||||
|
["child"] = function(value)
|
||||||
|
local surface
|
||||||
|
local child = {
|
||||||
|
asset_name = value.asset_name,
|
||||||
|
filename = value.filename,
|
||||||
|
type = value.type,
|
||||||
|
}
|
||||||
|
function child.ensure_loaded()
|
||||||
|
if surface then
|
||||||
|
surface:dispose()
|
||||||
|
end
|
||||||
|
surface = resource.render_child(value.asset_name)
|
||||||
|
return surface
|
||||||
|
end
|
||||||
|
function child.load()
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
function child.get_surface()
|
||||||
|
return child.ensure_loaded()
|
||||||
|
end
|
||||||
|
function child.draw(...)
|
||||||
|
child.ensure_loaded():draw(...)
|
||||||
|
end
|
||||||
|
function child.unload()
|
||||||
|
if surface then
|
||||||
|
surface:dispose()
|
||||||
|
surface = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function child.get_config()
|
||||||
|
return child
|
||||||
|
end
|
||||||
|
return child
|
||||||
|
end;
|
||||||
|
["json"] = function(value)
|
||||||
|
return require("json").decode(value)
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
local types = {
|
||||||
|
["date"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["json"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["text"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["string"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["integer"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["select"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["device"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["boolean"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["duration"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["custom"] = function(value)
|
||||||
|
return value
|
||||||
|
end;
|
||||||
|
["color"] = function(value)
|
||||||
|
local color = {}
|
||||||
|
color.r = value.r
|
||||||
|
color.g = value.g
|
||||||
|
color.b = value.b
|
||||||
|
color.a = value.a
|
||||||
|
color.rgba_table = {color.r, color.g, color.b, color.a}
|
||||||
|
color.rgba = function()
|
||||||
|
return color.r, color.g, color.b, color.a
|
||||||
|
end
|
||||||
|
color.rgb_with_a = function(a)
|
||||||
|
return color.r, color.g, color.b, a
|
||||||
|
end
|
||||||
|
color.clear = function()
|
||||||
|
gl.clear(color.r, color.g, color.b, color.a)
|
||||||
|
end
|
||||||
|
return color
|
||||||
|
end;
|
||||||
|
["resource"] = function(value)
|
||||||
|
return resource_types[value.type](value)
|
||||||
|
end;
|
||||||
|
["font"] = function(value)
|
||||||
|
return resource.load_font(value.asset_name)
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
local function parse_config(options, config)
|
||||||
|
local function parse_recursive(options, config, target)
|
||||||
|
for _, option in ipairs(options) do
|
||||||
|
local name = option.name
|
||||||
|
if name then
|
||||||
|
if option.type == "list" then
|
||||||
|
local list = {}
|
||||||
|
for _, child_config in ipairs(config[name]) do
|
||||||
|
local child = {}
|
||||||
|
parse_recursive(option.items, child_config, child)
|
||||||
|
list[#list + 1] = child
|
||||||
|
end
|
||||||
|
target[name] = list
|
||||||
|
else
|
||||||
|
target[name] = types[option.type](config[name])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local current_config = {}
|
||||||
|
parse_recursive(options, config, current_config)
|
||||||
|
return current_config
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
parse_config = parse_config;
|
||||||
|
}
|
38
node.lua
Normal file
38
node.lua
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
util.init_hosted()
|
||||||
|
|
||||||
|
local json = require "json"
|
||||||
|
|
||||||
|
local serial = sys.get_env "SERIAL"
|
||||||
|
local location = "<please wait>"
|
||||||
|
local description = "<please wait>"
|
||||||
|
|
||||||
|
util.data_mapper{
|
||||||
|
["device_info"] = function(info)
|
||||||
|
info = json.decode(info)
|
||||||
|
location = info.location
|
||||||
|
description = info.description
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
gl.setup(NATIVE_WIDTH, NATIVE_HEIGHT)
|
||||||
|
|
||||||
|
card = resource.load_image("testcard.png")
|
||||||
|
font = resource.load_font("vera.ttf")
|
||||||
|
|
||||||
|
function node.render()
|
||||||
|
gl.clear(0,0,0,1)
|
||||||
|
|
||||||
|
card:draw(0, 0, 1920, 1080)
|
||||||
|
|
||||||
|
-- upper: 623
|
||||||
|
-- lower: 707
|
||||||
|
|
||||||
|
upper_text = "C3VOC: " .. description
|
||||||
|
lower_text = location .. " - Serial " .. serial
|
||||||
|
|
||||||
|
upper_width = font:width(upper_text, 40)
|
||||||
|
font:write(1920-(upper_width/2), 631, upper_text, 40, 1,1,1,1)
|
||||||
|
|
||||||
|
lower_width = font:width(lower_text, 20)
|
||||||
|
font:write(1920-(lower_width/2), 679, lower_text, 20, 1,1,1,1)
|
||||||
|
end
|
20
package.json
Normal file
20
package.json
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"name": "c3voc testcard",
|
||||||
|
"author": "Kunsi <kunsi@c3voc.de>",
|
||||||
|
"desc": "testcard",
|
||||||
|
"repository": "https://git.kunsmann.eu/kunsi/icinga2beamer",
|
||||||
|
"nesting": {
|
||||||
|
"parents": [
|
||||||
|
"top-level"
|
||||||
|
],
|
||||||
|
"childs": "any"
|
||||||
|
},
|
||||||
|
"platforms": [
|
||||||
|
"pi/epoch-1",
|
||||||
|
"pi/epoch-2"
|
||||||
|
],
|
||||||
|
"offline": {
|
||||||
|
"support": "no",
|
||||||
|
"info": "Needs to fetch information about itself from info-beamer api"
|
||||||
|
}
|
||||||
|
}
|
BIN
package.png
Normal file
BIN
package.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
27
service
Normal file
27
service
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
from hosted import api, node
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_info():
|
||||||
|
info = api.device_info.get()
|
||||||
|
print >> sys.stderr, info
|
||||||
|
node["/device_info"](
|
||||||
|
dict(
|
||||||
|
description=info["description"],
|
||||||
|
location=info["location"],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
while 1:
|
||||||
|
try:
|
||||||
|
fetch_info()
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
finally:
|
||||||
|
time.sleep(15)
|
BIN
testcard.png
Normal file
BIN
testcard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
47
vera.txt
Normal file
47
vera.txt
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
Bitstream Vera Fonts Copyright
|
||||||
|
|
||||||
|
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream
|
||||||
|
Vera is a trademark of Bitstream, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the fonts accompanying this license ("Fonts") and associated
|
||||||
|
documentation files (the "Font Software"), to reproduce and distribute
|
||||||
|
the Font Software, including without limitation the rights to use,
|
||||||
|
copy, merge, publish, distribute, and/or sell copies of the Font
|
||||||
|
Software, and to permit persons to whom the Font Software is furnished
|
||||||
|
to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright and trademark notices and this permission notice
|
||||||
|
shall be included in all copies of one or more of the Font Software
|
||||||
|
typefaces.
|
||||||
|
|
||||||
|
The Font Software may be modified, altered, or added to, and in
|
||||||
|
particular the designs of glyphs or characters in the Fonts may be
|
||||||
|
modified and additional glyphs or characters may be added to the
|
||||||
|
Fonts, only if the fonts are renamed to names not containing either
|
||||||
|
the words "Bitstream" or the word "Vera".
|
||||||
|
|
||||||
|
This License becomes null and void to the extent applicable to Fonts
|
||||||
|
or Font Software that has been modified and is distributed under the
|
||||||
|
"Bitstream Vera" names.
|
||||||
|
|
||||||
|
The Font Software may be sold as part of a larger software package but
|
||||||
|
no copy of one or more of the Font Software typefaces may be sold by
|
||||||
|
itself.
|
||||||
|
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
|
||||||
|
BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
|
||||||
|
OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
|
||||||
|
SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the names of Gnome, the Gnome
|
||||||
|
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||||
|
otherwise to promote the sale, use or other dealings in this Font
|
||||||
|
Software without prior written authorization from the Gnome Foundation
|
||||||
|
or Bitstream Inc., respectively. For further information, contact:
|
||||||
|
fonts at gnome dot org.
|
Loading…
Reference in a new issue