mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
webui: initial support for leddevice options (#232)
* initial support for leddevice options * fix schema and editor init * fix led editor labels and schema * add some led schemas * led config: insert current values. not yet perfect, but it works
This commit is contained in:
parent
678624c959
commit
2d88cdc2d3
@ -10,7 +10,7 @@
|
|||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<!-- <form id="grabberConfForm"></form>-->
|
<!-- <form id="grabberConfForm"></form>-->
|
||||||
<div id='editor_container'/>
|
<div id='editor_container'/>
|
||||||
<button id='submit'>Submit (console.log)</button>
|
<button id='btn_submit'>Submit (console.log)</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,7 +49,10 @@
|
|||||||
<select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
|
<select id="leddevices" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
... device specific options ... we need some cpp code extension to get schema for all leds
|
<div id="ledDeviceOptions">
|
||||||
|
<div id='editor_container'></div>
|
||||||
|
<button id='btn_submit'>Submit (console.log)</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="huebridge" class="container-fluid" style="display:none">
|
<div id="huebridge" class="container-fluid" style="display:none">
|
||||||
|
@ -49,7 +49,7 @@ $(hyperion).one("cmd-config-getschema", function(event) {
|
|||||||
$(document).ready( function() {
|
$(document).ready( function() {
|
||||||
requestServerConfigSchema();
|
requestServerConfigSchema();
|
||||||
|
|
||||||
document.getElementById('submit').addEventListener('click',function() {
|
document.getElementById('btn_submit').addEventListener('click',function() {
|
||||||
// Get the value from the editor
|
// Get the value from the editor
|
||||||
//console.log(general_conf_editor.getValue());
|
//console.log(general_conf_editor.getValue());
|
||||||
});
|
});
|
||||||
|
@ -15,10 +15,6 @@ $(document).ready( function() {
|
|||||||
//Change all Checkboxes to Switches
|
//Change all Checkboxes to Switches
|
||||||
$("[type='checkbox']").bootstrapSwitch();
|
$("[type='checkbox']").bootstrapSwitch();
|
||||||
|
|
||||||
$(hyperion).on("open",function(event){
|
|
||||||
requestServerInfo();
|
|
||||||
});
|
|
||||||
|
|
||||||
$(hyperion).on("cmd-serverinfo",function(event){
|
$(hyperion).on("cmd-serverinfo",function(event){
|
||||||
parsedServerInfoJSON = event.response;
|
parsedServerInfoJSON = event.response;
|
||||||
currentVersion = parsedServerInfoJSON.info.hyperion[0].version;
|
currentVersion = parsedServerInfoJSON.info.hyperion[0].version;
|
||||||
@ -57,9 +53,20 @@ $(document).ready( function() {
|
|||||||
});
|
});
|
||||||
}); // end cmd-serverinfo
|
}); // end cmd-serverinfo
|
||||||
|
|
||||||
|
$(hyperion).one("cmd-config-getschema", function(event) {
|
||||||
|
parsedConfSchemaJSON = event.response.result;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
$(hyperion).on("error",function(event){
|
$(hyperion).on("error",function(event){
|
||||||
showErrorDialog("error", event.reason);
|
showErrorDialog("error", event.reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(hyperion).on("open",function(event){
|
||||||
|
requestServerConfigSchema();
|
||||||
|
requestServerInfo();
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$(function(){
|
$(function(){
|
||||||
|
@ -41,6 +41,7 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
$("#leddevices").html(ledDevicesHtml);
|
$("#leddevices").html(ledDevicesHtml);
|
||||||
$("#leddevices").val(server.info.ledDevices.active);
|
$("#leddevices").val(server.info.ledDevices.active);
|
||||||
|
$("#leddevices").trigger("change");
|
||||||
});
|
});
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
@ -120,6 +121,48 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("#leddevices").off().on("change", function(event) {
|
$("#leddevices").off().on("change", function(event) {
|
||||||
|
generalOptions = parsedConfSchemaJSON.properties.device;
|
||||||
|
specificOptions = parsedConfSchemaJSON.properties.alldevices[$(this).val()];
|
||||||
|
//$('#ledDeviceOptions').html(JSON.stringify(generalOptions)+"<br>"+JSON.stringify(specificOptions));
|
||||||
|
$('#editor_container').off();
|
||||||
|
$('#editor_container').html("");
|
||||||
|
var element = document.getElementById('editor_container');
|
||||||
|
|
||||||
|
var grabber_conf_editor = new JSONEditor(element,{
|
||||||
|
theme: 'bootstrap3',
|
||||||
|
disable_collapse: 'true',
|
||||||
|
form_name_root: 'sa',
|
||||||
|
disable_edit_json: 'true',
|
||||||
|
disable_properties: 'true',
|
||||||
|
no_additional_properties: 'true',
|
||||||
|
schema: {
|
||||||
|
title:' ',
|
||||||
|
properties: {
|
||||||
|
generalOptions,
|
||||||
|
specificOptions,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
values_general = {};
|
||||||
|
values_specific = {};
|
||||||
|
isCurrentDevice = (server.info.ledDevices.active == parsedConfJSON.device.type);
|
||||||
|
|
||||||
|
for(var key in parsedConfJSON.device){
|
||||||
|
if (key in generalOptions.properties)
|
||||||
|
values_general[key] = parsedConfJSON.device[key];
|
||||||
|
};
|
||||||
|
grabber_conf_editor.setValue( { "generalOptions" : values_general, "specificOptions" : specificOptions });
|
||||||
|
|
||||||
|
if (isCurrentDevice)
|
||||||
|
{
|
||||||
|
for(var key in parsedConfJSON.device){
|
||||||
|
if (key in specificOptions.properties)
|
||||||
|
values_specific[key] = parsedConfJSON.device[key];
|
||||||
|
};
|
||||||
|
grabber_conf_editor.setValue( { "generalOptions" : values_general, "specificOptions" : values_specific });
|
||||||
|
};
|
||||||
|
|
||||||
if ($(this).val() == "philipshue")
|
if ($(this).val() == "philipshue")
|
||||||
{
|
{
|
||||||
$("#huebridge").show();
|
$("#huebridge").show();
|
||||||
|
@ -55,6 +55,8 @@ public:
|
|||||||
static const LedDeviceRegistry& getDeviceMap();
|
static const LedDeviceRegistry& getDeviceMap();
|
||||||
static void setActiveDevice(std::string dev);
|
static void setActiveDevice(std::string dev);
|
||||||
static std::string activeDevice() { return _activeDevice; };
|
static std::string activeDevice() { return _activeDevice; };
|
||||||
|
static Json::Value getLedDeviceSchemas();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// The common Logger instance for all LedDevices
|
/// The common Logger instance for all LedDevices
|
||||||
Logger * _log;
|
Logger * _log;
|
||||||
|
@ -23,33 +23,34 @@
|
|||||||
"device" :
|
"device" :
|
||||||
{
|
{
|
||||||
"type" : "object",
|
"type" : "object",
|
||||||
"title" : "LED Device",
|
"title" : "LED Device General",
|
||||||
"required" : true,
|
"required" : true,
|
||||||
|
"defaultProperties": ["name","ledCount","colorOrder"],
|
||||||
"properties" :
|
"properties" :
|
||||||
{
|
{
|
||||||
"name" :
|
"name" :
|
||||||
{
|
{
|
||||||
"type" : "string",
|
"type" : "string",
|
||||||
"required" : true
|
"required" : true,
|
||||||
|
"propertyOrder" : 1
|
||||||
},
|
},
|
||||||
"type" :
|
"type" :
|
||||||
{
|
{
|
||||||
"type" : "string",
|
"type" : "string",
|
||||||
"required" : true
|
"required" : true
|
||||||
},
|
},
|
||||||
"output" :
|
"ledCount" :
|
||||||
{
|
|
||||||
"type" : "string"
|
|
||||||
},
|
|
||||||
"rate" :
|
|
||||||
{
|
{
|
||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"minimum" : 0
|
"minimum" : 0,
|
||||||
|
"title" : "Count of all hardware LEDs",
|
||||||
|
"propertyOrder" : 2
|
||||||
},
|
},
|
||||||
"colorOrder" :
|
"colorOrder" :
|
||||||
{
|
{
|
||||||
"type" : "string",
|
"type" : "string",
|
||||||
"enum" : ["rgb", "bgr", "rbg", "brg", "gbr", "grb"]
|
"enum" : ["rgb", "bgr", "rbg", "brg", "gbr", "grb"],
|
||||||
|
"propertyOrder" : 3
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties" : true
|
"additionalProperties" : true
|
||||||
|
@ -911,6 +911,8 @@ void JsonClientConnection::handleSchemaGetCommand(const Json::Value & message, c
|
|||||||
result["tan"] = tan;
|
result["tan"] = tan;
|
||||||
Json::Value & schemaJson = result["result"];
|
Json::Value & schemaJson = result["result"];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// make sure the resources are loaded (they may be left out after static linking)
|
// make sure the resources are loaded (they may be left out after static linking)
|
||||||
Q_INIT_RESOURCE(resource);
|
Q_INIT_RESOURCE(resource);
|
||||||
|
|
||||||
@ -923,6 +925,7 @@ void JsonClientConnection::handleSchemaGetCommand(const Json::Value & message, c
|
|||||||
{
|
{
|
||||||
throw std::runtime_error("ERROR: Json schema wrong: " + jsonReader.getFormattedErrorMessages()) ;
|
throw std::runtime_error("ERROR: Json schema wrong: " + jsonReader.getFormattedErrorMessages()) ;
|
||||||
}
|
}
|
||||||
|
result["result"]["properties"]["alldevices"] = LedDevice::getLedDeviceSchemas();
|
||||||
|
|
||||||
// send the result
|
// send the result
|
||||||
sendMessage(result);
|
sendMessage(result);
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
#include <leddevice/LedDevice.h>
|
#include <leddevice/LedDevice.h>
|
||||||
|
|
||||||
|
#include <QResource>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QDir>
|
||||||
|
#include <json/json.h>
|
||||||
|
|
||||||
LedDeviceRegistry LedDevice::_ledDeviceMap = LedDeviceRegistry();
|
LedDeviceRegistry LedDevice::_ledDeviceMap = LedDeviceRegistry();
|
||||||
std::string LedDevice::_activeDevice = "";
|
std::string LedDevice::_activeDevice = "";
|
||||||
|
|
||||||
@ -10,6 +15,7 @@ LedDevice::LedDevice()
|
|||||||
, _ledBuffer(0)
|
, _ledBuffer(0)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
LedDevice::getLedDeviceSchemas();
|
||||||
}
|
}
|
||||||
|
|
||||||
// dummy implemention
|
// dummy implemention
|
||||||
@ -32,4 +38,32 @@ const LedDeviceRegistry& LedDevice::getDeviceMap()
|
|||||||
void LedDevice::setActiveDevice(std::string dev)
|
void LedDevice::setActiveDevice(std::string dev)
|
||||||
{
|
{
|
||||||
_activeDevice = dev;
|
_activeDevice = dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Json::Value LedDevice::getLedDeviceSchemas()
|
||||||
|
{
|
||||||
|
// make sure the resources are loaded (they may be left out after static linking)
|
||||||
|
Q_INIT_RESOURCE(LedDeviceSchemas);
|
||||||
|
|
||||||
|
// read the json schema from the resource
|
||||||
|
QDir d(":/leddevices/");
|
||||||
|
QStringList l = d.entryList();
|
||||||
|
Json::Value result;
|
||||||
|
for(QString &item : l)
|
||||||
|
{
|
||||||
|
QResource schemaData(QString(":/leddevices/")+item);
|
||||||
|
std::string devName = item.remove("schema-").toStdString();
|
||||||
|
Json::Value & schemaJson = result[devName];
|
||||||
|
|
||||||
|
Json::Reader jsonReader;
|
||||||
|
if (!jsonReader.parse(reinterpret_cast<const char *>(schemaData.data()), reinterpret_cast<const char *>(schemaData.data()) + schemaData.size(), schemaJson, false))
|
||||||
|
{
|
||||||
|
Error(Logger::getInstance("LedDevice"), "LedDevice JSON schema error in %s (%s)", item.toUtf8().constData(), jsonReader.getFormattedErrorMessages().c_str() );
|
||||||
|
throw std::runtime_error("ERROR: Json schema wrong: " + jsonReader.getFormattedErrorMessages()) ;
|
||||||
|
}
|
||||||
|
schemaJson["title"] = "LED Device Specific";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/leddevices/">
|
||||||
<file alias="schema-adalightapa102">schemas/schema-adalightapa102.json</file>
|
<file alias="schema-adalightapa102">schemas/schema-adalightapa102.json</file>
|
||||||
<file alias="schema-adalight">schemas/schema-adalight.json</file>
|
<file alias="schema-adalight">schemas/schema-adalight.json</file>
|
||||||
<file alias="schema-apa102">schemas/schema-apa102.json</file>
|
<file alias="schema-apa102">schemas/schema-apa102.json</file>
|
||||||
|
@ -34,7 +34,7 @@ bool LedDeviceSk6812SPI::setConfig(const Json::Value &deviceConfig)
|
|||||||
{
|
{
|
||||||
ProviderSpi::setConfig(deviceConfig);
|
ProviderSpi::setConfig(deviceConfig);
|
||||||
|
|
||||||
_baudRate_Hz = deviceConfig.get("rate",3000000).asInt();
|
_baudRate_Hz = deviceConfig.get("rate",3000000).asInt();
|
||||||
if ( (_baudRate_Hz < 2050000) || (_baudRate_Hz > 4000000) )
|
if ( (_baudRate_Hz < 2050000) || (_baudRate_Hz > 4000000) )
|
||||||
{
|
{
|
||||||
Warning(_log, "SPI rate %d outside recommended range (2050000 -> 4000000)", _baudRate_Hz);
|
Warning(_log, "SPI rate %d outside recommended range (2050000 -> 4000000)", _baudRate_Hz);
|
||||||
|
@ -2,6 +2,15 @@
|
|||||||
"type":"object",
|
"type":"object",
|
||||||
"required":true,
|
"required":true,
|
||||||
"properties":{
|
"properties":{
|
||||||
|
"host" : {
|
||||||
|
"type": "string",
|
||||||
|
"title":"Target IP"
|
||||||
|
},
|
||||||
|
"port" : {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"Port",
|
||||||
|
"default": 5568
|
||||||
|
},
|
||||||
"universe": {
|
"universe": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"title":"Universe",
|
"title":"Universe",
|
||||||
@ -14,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"cid": {
|
"cid": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"title":"CID",
|
"title":"CID"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": true
|
"additionalProperties": true
|
||||||
|
@ -2,6 +2,64 @@
|
|||||||
"type":"object",
|
"type":"object",
|
||||||
"required":true,
|
"required":true,
|
||||||
"properties":{
|
"properties":{
|
||||||
|
"output" : {
|
||||||
|
"type": "string",
|
||||||
|
"title":"Target IP",
|
||||||
|
"propertyOrder" : 1
|
||||||
|
},
|
||||||
|
"port" : {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"Port",
|
||||||
|
"default": 7890,
|
||||||
|
"propertyOrder" : 2
|
||||||
|
},
|
||||||
|
"setFcConfig": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title":"Set fadecandy Configuration",
|
||||||
|
"default": false,
|
||||||
|
"propertyOrder" : 3
|
||||||
|
},
|
||||||
|
"manualLed": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title":"Manual control of fadecandy LED",
|
||||||
|
"default": false,
|
||||||
|
"propertyOrder" : 4
|
||||||
|
},
|
||||||
|
"ledOn": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title":"Fadecandy LED set to on",
|
||||||
|
"default": false,
|
||||||
|
"propertyOrder" : 5
|
||||||
|
},
|
||||||
|
"interpolation": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title":"Interpolation",
|
||||||
|
"default": false,
|
||||||
|
"propertyOrder" : 6
|
||||||
|
},
|
||||||
|
"dither": {
|
||||||
|
"type": "boolean",
|
||||||
|
"title":"Dithering",
|
||||||
|
"default": false,
|
||||||
|
"propertyOrder" : 7
|
||||||
|
},
|
||||||
|
"gamma" : {
|
||||||
|
"type" : "number",
|
||||||
|
"minimum" : 0.0,
|
||||||
|
"maximum": 100.0,
|
||||||
|
"propertyOrder" : 8
|
||||||
|
},
|
||||||
|
"whitepoint" : {
|
||||||
|
"type" : "array",
|
||||||
|
"propertyOrder" : 9,
|
||||||
|
"items" : {
|
||||||
|
"type" : "number",
|
||||||
|
"minimum" : 0.0,
|
||||||
|
"maximum": 1.0,
|
||||||
|
"default" : 1.0
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": true
|
"additionalProperties": true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
"output": {
|
"output": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"title":"Output",
|
"title":"Output",
|
||||||
"default" : "/dev/null",
|
"default" : "/dev/null"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": true
|
"additionalProperties": true
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"transitiontime": {
|
"transitiontime": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"title":"Transistion time (x100ms)",
|
"title":"Transistion time (x100ms)",
|
||||||
"default" : 1,
|
"default" : 1
|
||||||
},
|
},
|
||||||
"switchOffOnBlack": {
|
"switchOffOnBlack": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
|
@ -2,6 +2,15 @@
|
|||||||
"type":"object",
|
"type":"object",
|
||||||
"required":true,
|
"required":true,
|
||||||
"properties":{
|
"properties":{
|
||||||
|
"host" : {
|
||||||
|
"type": "string",
|
||||||
|
"title":"Target IP"
|
||||||
|
},
|
||||||
|
"port" : {
|
||||||
|
"type": "integer",
|
||||||
|
"title":"Port",
|
||||||
|
"default": 5568
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"additionalProperties": true
|
"additionalProperties": true
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user