Merge remote-tracking branch 'refs/remotes/hyperion-project/master' into effects
@ -52,7 +52,7 @@ if ( NOT DEFINED PLATFORM )
|
||||
STRING ( TOLOWER "${SYSTEM_CPUINFO}" SYSTEM_CPUINFO )
|
||||
if ( "${SYSTEM_CPUINFO}" MATCHES "amlogic" AND ${CMAKE_SIZEOF_VOID_P} EQUAL 4 )
|
||||
SET( PLATFORM "amlogic" )
|
||||
elseif ( ("${SYSTEM_CPUINFO}" MATCHES "amlogic" OR "${SYSTEM_CPUINFO}" MATCHES "odroid-c2") AND ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
|
||||
elseif ( ("${SYSTEM_CPUINFO}" MATCHES "amlogic" OR "${SYSTEM_CPUINFO}" MATCHES "odroid-c2" OR "${SYSTEM_CPUINFO}" MATCHES "vero4k") AND ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
|
||||
SET( PLATFORM "amlogic64" )
|
||||
endif()
|
||||
endif()
|
||||
|
@ -107,9 +107,9 @@ To generate make files on OS X:
|
||||
|
||||
After which you can run cmake with the correct qt5 path:
|
||||
```
|
||||
cmake -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.7.0 -DCMAKE_BUILD_TYPE=Release ..
|
||||
export QVER=$(find /usr/local/Cellar/qt5 -type d -name "5.*" | sort -n | head -n1)
|
||||
cmake -DCMAKE_PREFIX_PATH=$QVER -DCMAKE_BUILD_TYPE=Release ..
|
||||
```
|
||||
|
||||
### Run make to build Hyperion
|
||||
The `-j $(nproc)` specifies the amount of CPU cores to use.
|
||||
```bash
|
||||
|
@ -157,13 +157,13 @@ void setup() {
|
||||
#if INITIAL_LED_TEST_ENABLED == true
|
||||
for (int v=0;v<INITIAL_LED_TEST_BRIGHTNESS;v++)
|
||||
{
|
||||
showColor(CRGB(v,v,v);
|
||||
showColor(CRGB(v,v,v));
|
||||
delay(INITIAL_LED_TEST_TIME_MS/2/INITIAL_LED_TEST_BRIGHTNESS);
|
||||
}
|
||||
|
||||
for (int v=0;v<INITIAL_LED_TEST_BRIGHTNESS;v++)
|
||||
{
|
||||
showColor(CRGB(v,v,v);
|
||||
showColor(CRGB(v,v,v));
|
||||
delay(INITIAL_LED_TEST_TIME_MS/2/INITIAL_LED_TEST_BRIGHTNESS);
|
||||
}
|
||||
#endif
|
||||
|
250
assets/firmware/arduino/adalight_mega_pwm/hyperion_mega.ino
Normal file
@ -0,0 +1,250 @@
|
||||
|
||||
#include "FastLED.h"
|
||||
|
||||
#define ANALOG_MODE_AVERAGE 0
|
||||
#define ANALOG_MODE_LAST_LED 1
|
||||
|
||||
/**************************************
|
||||
S E T U P
|
||||
|
||||
set following values to your needs
|
||||
**************************************/
|
||||
|
||||
// Number of leds in your strip. set to 1 and ANALOG_OUTPUT_ENABLED to true to activate analog only
|
||||
#define NUM_LEDS 100
|
||||
|
||||
#define LED_TYPE WS2812B // type of your led controller, possible values, see below
|
||||
|
||||
// 3 wire (pwm): NEOPIXEL BTM1829 TM1812 TM1809 TM1804 TM1803 UCS1903 UCS1903B UCS1904 UCS2903 WS2812 WS2852
|
||||
// S2812B SK6812 SK6822 APA106 PL9823 WS2811 WS2813 APA104 WS2811_40 GW6205 GW6205_40 LPD1886 LPD1886_8BIT
|
||||
// 4 wire (spi): LPD8806 WS2801 WS2803 SM16716 P9813 APA102 SK9822 DOTSTAR
|
||||
|
||||
// For 3 wire led stripes line Neopixel/Ws2812, which have a data line, ground, and power, you just need to define DATA_PIN.
|
||||
// For led chipsets that are SPI based (four wires - data, clock, ground, and power), both defines DATA_PIN and CLOCK_PIN are needed
|
||||
|
||||
// DATA_PIN, or DATA_PIN, CLOCK_PIN
|
||||
#define LED_PINS MOSI // 3 wire leds
|
||||
//#define LED_PINS MOSI, SCK // 4 wire leds
|
||||
|
||||
#define COLOR_ORDER GRB // colororder of the stripe, set RGB in hyperion
|
||||
|
||||
#define OFF_TIMEOUT 15000 // ms to switch off after no data was received, set 0 to deactivate
|
||||
|
||||
// analog rgb uni color led stripe - using of hyperion smoothing is recommended
|
||||
#define ANALOG_MODE ANALOG_MODE_LAST_LED // use ANALOG_MODE_AVERAGE or ANALOG_MODE_LAST_LED
|
||||
|
||||
|
||||
// overall color adjustments
|
||||
#define ANALOG_BRIGHTNESS_RED 255 // maximum brightness for analog 0-255
|
||||
#define ANALOG_BRIGHTNESS_GREEN 255 // maximum brightness for analog 0-255
|
||||
#define ANALOG_BRIGHTNESS_BLUE 255 // maximum brightness for analog 0-255
|
||||
|
||||
#define BRIGHTNESS 128 // maximum brightness 0-255
|
||||
#define DITHER_MODE BINARY_DITHER // BINARY_DITHER or DISABLE_DITHER
|
||||
#define COLOR_TEMPERATURE CRGB(255,255,255) // RGB value describing the color temperature
|
||||
#define COLOR_CORRECTION TypicalLEDStrip // predefined fastled color correction
|
||||
//#define COLOR_CORRECTION CRGB(255,255,255) // or RGB value describing the color correction
|
||||
|
||||
|
||||
// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
|
||||
#define serialRate 115200 // use 115200 for ftdi based boards
|
||||
//#define serialRate 460800 // use 115200 for ftdi based boards
|
||||
|
||||
// ATTENTION this pin config is default for atmega328 based arduinos, others might work to
|
||||
// if you have flickering analog leds this might be caused by unsynced pwm signals
|
||||
// try other pins is more or less the only thing that helps
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
||||
// 2 3 4 5 6 7 8 9 10 11 12 13 44 45 46
|
||||
// R B G R B G R B G R B G R B G
|
||||
#define ANALOG_PINS_MAX 15
|
||||
#define ANALOG_RGB_STRIPES 4
|
||||
const byte ANALOG_PINS[ANALOG_PINS_MAX] = {2,4,3,5,7,6,8,10,9,11,13,12,44,46,45};
|
||||
#else
|
||||
// 9 10 11
|
||||
// R B G
|
||||
#define ANALOG_PINS_MAX 3
|
||||
#define ANALOG_RGB_STRIPES 1
|
||||
const byte ANALOG_PINS[ANALOG_PINS_MAX] = {9,11,10};
|
||||
#endif
|
||||
|
||||
/**************************************
|
||||
A D A L I G H T C O D E
|
||||
|
||||
no user changes needed
|
||||
**************************************/
|
||||
|
||||
// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
|
||||
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
|
||||
|
||||
unsigned long endTime;
|
||||
|
||||
// Define the array of leds
|
||||
CRGB leds[NUM_LEDS];
|
||||
|
||||
// set rgb to analog led stripe
|
||||
void showAnalogRGB(const CRGB& led, const short stripeId=-1) {
|
||||
if (ANALOG_RGB_STRIPES > 0) {
|
||||
byte r = map(led.r, 0,255,0,ANALOG_BRIGHTNESS_RED);
|
||||
byte g = map(led.g, 0,255,0,ANALOG_BRIGHTNESS_GREEN);
|
||||
byte b = map(led.b, 0,255,0,ANALOG_BRIGHTNESS_BLUE);
|
||||
if (stripeId<0) {
|
||||
for (byte i=0;i<ANALOG_RGB_STRIPES;i++) {
|
||||
analogWrite(ANALOG_PINS[3*i+1], r);
|
||||
analogWrite(ANALOG_PINS[3*i] , g);
|
||||
analogWrite(ANALOG_PINS[3*i+2], b);
|
||||
}
|
||||
} else {
|
||||
analogWrite(ANALOG_PINS[stripeId*3] , g);
|
||||
analogWrite(ANALOG_PINS[stripeId*3+1], r);
|
||||
analogWrite(ANALOG_PINS[stripeId*3+2], b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// set color to all leds
|
||||
void showColor(const CRGB& led) {
|
||||
#if NUM_LEDS > ANALOG_RGB_STRIPES
|
||||
LEDS.showColor(led);
|
||||
#endif
|
||||
showAnalogRGB(led);
|
||||
}
|
||||
|
||||
|
||||
// function to check if serial data is available
|
||||
// if timeout occured leds switch of, if configured
|
||||
bool checkIncommingData() {
|
||||
boolean dataAvailable = true;
|
||||
while (!Serial.available()) {
|
||||
if ( OFF_TIMEOUT > 0 && endTime < millis()) {
|
||||
showColor(CRGB(0,0,0)); // leds off
|
||||
dataAvailable = false;
|
||||
endTime = millis() + OFF_TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
return dataAvailable;
|
||||
}
|
||||
|
||||
// main function that setups and runs the code
|
||||
void setup() {
|
||||
|
||||
// analog output
|
||||
if (ANALOG_RGB_STRIPES > 0) {
|
||||
for (byte i=0;i<ANALOG_PINS_MAX;i++) {
|
||||
pinMode(ANALOG_PINS[i], OUTPUT);
|
||||
}
|
||||
}
|
||||
|
||||
// Uncomment/edit one of the following lines for your leds arrangement.
|
||||
int ledCount = NUM_LEDS;
|
||||
if (ANALOG_MODE == ANALOG_MODE_LAST_LED) {
|
||||
ledCount -= ANALOG_RGB_STRIPES;
|
||||
}
|
||||
|
||||
#if NUM_LEDS > ANALOG_RGB_STRIPES
|
||||
FastLED.addLeds<LED_TYPE, LED_PINS, COLOR_ORDER>(leds, ledCount);
|
||||
#endif
|
||||
|
||||
// color adjustments
|
||||
FastLED.setBrightness ( BRIGHTNESS );
|
||||
FastLED.setTemperature( COLOR_TEMPERATURE );
|
||||
FastLED.setCorrection ( COLOR_CORRECTION );
|
||||
FastLED.setDither ( DITHER_MODE );
|
||||
|
||||
// initial RGB flash
|
||||
showColor(CRGB(255, 0, 0)); delay(400);
|
||||
showColor(CRGB(0, 255, 0)); delay(400);
|
||||
showColor(CRGB(0, 0, 255)); delay(400);
|
||||
showColor(CRGB(0, 0, 0));
|
||||
|
||||
Serial.begin(serialRate);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB
|
||||
}
|
||||
Serial.print("Ada\n"); // Send "Magic Word" string to host
|
||||
|
||||
boolean transmissionSuccess;
|
||||
unsigned long sum_r, sum_g, sum_b;
|
||||
|
||||
// loop() is avoided as even that small bit of function overhead
|
||||
// has a measurable impact on this code's overall throughput.
|
||||
while (true) {
|
||||
// wait for first byte of Magic Word
|
||||
for (i = 0; i < sizeof prefix; ++i) {
|
||||
// If next byte is not in Magic Word, the start over
|
||||
if (!checkIncommingData() || prefix[i] != Serial.read()) {
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
// Hi, Lo, Checksum
|
||||
if (!checkIncommingData()) continue;
|
||||
hi = Serial.read();
|
||||
if (!checkIncommingData()) continue;
|
||||
lo = Serial.read();
|
||||
if (!checkIncommingData()) continue;
|
||||
chk = Serial.read();
|
||||
|
||||
// if checksum does not match go back to wait
|
||||
if (chk != (hi ^ lo ^ 0x55)) continue;
|
||||
|
||||
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
|
||||
transmissionSuccess = true;
|
||||
sum_r = 0;
|
||||
sum_g = 0;
|
||||
sum_b = 0;
|
||||
|
||||
// read the transmission data and set LED values
|
||||
for (uint8_t idx = 0; idx < NUM_LEDS; idx++) {
|
||||
byte r, g, b;
|
||||
if (!checkIncommingData()) {
|
||||
transmissionSuccess = false;
|
||||
break;
|
||||
}
|
||||
r = Serial.read();
|
||||
if (!checkIncommingData()) {
|
||||
transmissionSuccess = false;
|
||||
break;
|
||||
}
|
||||
g = Serial.read();
|
||||
if (!checkIncommingData()) {
|
||||
transmissionSuccess = false;
|
||||
break;
|
||||
}
|
||||
b = Serial.read();
|
||||
leds[idx].r = r;
|
||||
leds[idx].g = g;
|
||||
leds[idx].b = b;
|
||||
#if ANALOG_OUTPUT_ENABLED == true && ANALOG_MODE == ANALOG_MODE_AVERAGE
|
||||
sum_r += r;
|
||||
sum_g += g;
|
||||
sum_b += b;
|
||||
#endif
|
||||
}
|
||||
|
||||
// shows new values
|
||||
if (transmissionSuccess) {
|
||||
endTime = millis() + OFF_TIMEOUT;
|
||||
#if NUM_LEDS > ANALOG_RGB_STRIPES
|
||||
FastLED.show();
|
||||
#endif
|
||||
|
||||
#if ANALOG_RGB_STRIPES > 0
|
||||
#if ANALOG_MODE == ANALOG_MODE_LAST_LED
|
||||
for ( byte x=1; x<=ANALOG_RGB_STRIPES; x++) {
|
||||
showAnalogRGB(leds[NUM_LEDS-x], x-1);
|
||||
}
|
||||
#else
|
||||
showAnalogRGB(CRGB(sum_r/NUM_LEDS, sum_g/NUM_LEDS, sum_b/NUM_LEDS));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} // end of setup
|
||||
|
||||
|
||||
void loop() {
|
||||
// Not used. See note in setup() function.
|
||||
}
|
||||
|
BIN
assets/webconfig/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 33 KiB |
@ -4,16 +4,22 @@
|
||||
<div class="col-lg-6">
|
||||
<div id="about_cont"></div>
|
||||
</div>
|
||||
<div id="danger_act"class="col-lg-6" style="display:none">
|
||||
<h4>You found a hidden service menu!</h4>
|
||||
<button id="reset_cache" class="btn btn-danger">Reset Browser Cache</button>
|
||||
<button id="hyp_restart" class="btn btn-danger">Force Hyperion Restart</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
performTranslation();
|
||||
|
||||
var si = serverInfo.info.hyperion[0];
|
||||
var si = sysInfo.hyperion;
|
||||
var libs = {"Bootstrap 3" : "http://getbootstrap.com/", "JQuery" : "https://jquery.com/", "Bootstrap Colorpicker" : "https://itsjavi.com/bootstrap-colorpicker/", "JSON-Editor" : "http://jeremydorn.com/json-editor/", "jQuery.i18n" : "https://github.com/wikimedia/jquery.i18n", "metisMenu" : "http://mm.onokumus.com/index.html", "download.js" : "http://danml.com/download.html", "gijgo" : "http://gijgo.com/"};
|
||||
var libh = "";
|
||||
var lang = [];
|
||||
var dcount = 0;
|
||||
|
||||
for(var i = 0; i<availLang.length; i++)
|
||||
lang.push($.i18n('general_speech_'+availLang[i]));
|
||||
@ -21,14 +27,26 @@
|
||||
libh += '<a href="'+libs[key]+'" target="_blank">'+key+'</a>, ';
|
||||
libh += "<br/>"+$.i18n("about_credits");
|
||||
|
||||
lang = lang.toString().replace(",",", ");
|
||||
|
||||
var fc = [$.i18n("about_version"),$.i18n("about_build"),$.i18n("about_builddate"),$.i18n("about_translations"),$.i18n("about_resources", $.i18n("general_webui_title"))];
|
||||
var sc = [currentVersion,si.build,si.time,'('+availLang.length+')<p>'+lang+'</p><p><a href="#" target="_blank">'+$.i18n("about_contribute")+'</a></p>',libh];
|
||||
lang = lang.toString().replace(/,/g,", ");
|
||||
|
||||
var fc = ['<span id="danger_trig">'+$.i18n("about_version")+'<span>',$.i18n("about_build"),$.i18n("about_builddate"),$.i18n("about_translations"),$.i18n("about_resources", $.i18n("general_webui_title"))];
|
||||
var sc = [currentVersion,si.build,si.time,'('+availLang.length+')<p>'+lang+'</p><p><a href="https://hyperion-project.org/contribute/?pk_campaign=WebUI&pk_kwd=about_contribute" target="_blank">'+$.i18n("about_contribute")+'</a></p>',libh];
|
||||
|
||||
createTable("","atb","about_cont");
|
||||
for(var i = 0; i<fc.length; i++)
|
||||
$('.atb').append(createTableRow([fc[i],sc[i]], "atb", false, true));
|
||||
|
||||
$('#danger_trig').off().on('click',function(){
|
||||
dcount++;
|
||||
if(dcount > 2)
|
||||
$('#danger_act').toggle(true);
|
||||
});
|
||||
|
||||
$('#reset_cache').off().on('click',function(){
|
||||
localStorage.clear();
|
||||
});
|
||||
|
||||
$('#hyp_restart').off().on('click',function(){
|
||||
initRestart();
|
||||
});
|
||||
</script>
|
@ -18,6 +18,7 @@
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div id="btn_wiz_holder"></div>
|
||||
<div id="ledDeviceOptions"> <div id='editor_container'></div> </div>
|
||||
</div>
|
||||
<div class="panel-footer" style="text-align:right">
|
||||
@ -267,8 +268,8 @@
|
||||
</div>
|
||||
<div id="collapse4" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<p data-i18n="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p>
|
||||
<textarea rows="25" id="ledconfig" class="form-control"></textarea>
|
||||
<p id="leds_wl" data-i18n="conf_leds_layout_textf1">This textfield shows by default your current loaded layout and will be overwritten if you generate a new one above. Optional you could perform further edits.</p>
|
||||
<div id="aceedit" style="width:100%;height:500px"></div>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<button type="button" class="btn btn-warning" id="leds_custom_updsim"><i class="fa fa-search fa-fw"></i><span data-i18n="conf_leds_layout_button_updsim">Update preview</span></button>
|
||||
@ -286,6 +287,7 @@
|
||||
<div class="panel-body">
|
||||
<p id="previewcreator" style="font-weight:bold"></p>
|
||||
<p id="previewledcount" style="font-weight:bold"></p>
|
||||
<p id="previewledpower" style="font-weight:bold"></p>
|
||||
<div id="led_vis_help"></div>
|
||||
<div class="col-lg-12 st_helper" style="padding-left:0px; padding-right:0px">
|
||||
<div id="leds_preview"></div>
|
||||
|
@ -6,6 +6,12 @@
|
||||
<div class="row" id='conf_cont'></div>
|
||||
<hr />
|
||||
<div id="log_content"><span style="font-weight:bold;font-size:17px" data-i18n="conf_logging_nomessage"></span></div>
|
||||
<hr>
|
||||
<h4 style="font-weight:bold"><i class="fa fa-reorder fa-fw"></i><span data-i18n="conf_logging_report">Bericht</span></h4>
|
||||
<button class="btn btn-primary" id="btn_logupload"><i class="fa fa-upload fa-fw"></i><span data-i18n="conf_logging_btn_pbupload"></span></button>
|
||||
<div id="log_upl_pol"></div>
|
||||
<div id="upl_link" style="margin-top:10px;font-weight:bold;"></div>
|
||||
<div id="prev_reports"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
<div class="container" style="margin:20px auto;max-width:600px;">
|
||||
<center>
|
||||
<img src="img/hyperion/hyperionlostconnection.png" alt="Redefine ambient light!">
|
||||
@ -10,10 +9,11 @@
|
||||
<p data-i18n="info_conlost_label_reason2">- You perform an update</p>
|
||||
<p data-i18n="info_conlost_label_reason3">- Hyperion isn't running</p>
|
||||
<hr>
|
||||
<i class="fa fa-refresh fa-spin" style="font-size:50px"></i>
|
||||
<h4 data-i18n="info_conlost_label_autorefresh">This page will be automatically refreshed.</h4>
|
||||
<h4 data-i18n="info_conlost_label_autorecon">We reconnect again after Hyperion is available.</h4>
|
||||
<a href="/" data-i18n="info_conlost_label_reload">If not, click me or reload the page</a>
|
||||
<i class="fa fa-refresh fa-spin reconstop" style="font-size:50px"></i>
|
||||
<h4 class="reconstop" data-i18n="info_conlost_label_autorefresh">This page will be automatically refreshed.</h4>
|
||||
<h4 class="reconstop" data-i18n="info_conlost_label_autorecon">We reconnect again after Hyperion is available.</h4>
|
||||
<span id="counter" class="reconstop"></span>
|
||||
<a class="reconstop" style="display:none" href="/" data-i18n="info_conlost_label_reload"></a>
|
||||
</div>
|
||||
</center>
|
||||
</div>
|
||||
@ -25,20 +25,37 @@
|
||||
performTranslation();
|
||||
var connectionLost = false;
|
||||
var connectionTimer;
|
||||
var count = 1;
|
||||
|
||||
function tryReconnect()
|
||||
{
|
||||
if(count > 100)
|
||||
{
|
||||
window.clearInterval(connectionTimer);
|
||||
$('.reconstop').toggle();
|
||||
}
|
||||
|
||||
$('#counter').html(count+'/100');
|
||||
|
||||
$.ajax({ url: "/" }).done(function(data) {
|
||||
window.clearInterval(connectionTimer);
|
||||
window.location.href ="/";
|
||||
})
|
||||
.fail( function( jqXHR, textStatus ) {
|
||||
count++;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function connectionLostAction()
|
||||
{
|
||||
if(!connectionLost)
|
||||
{
|
||||
window.clearInterval(cronId);
|
||||
connectionLost = true;
|
||||
connectionTimer = window.setInterval(tryReconnect, 4000);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
@ -14,24 +14,39 @@
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_currenthyp">Hyperion version:</td>
|
||||
<td id="currentversion">unknown</td>
|
||||
<td data-i18n="dashboard_infobox_label_statush"></td>
|
||||
<td id="dash_statush" style="font-weight:bold">unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_latesthyp">Latest version:</td>
|
||||
<td id="latestversion">unknown</td>
|
||||
<td data-i18n="dashboard_infobox_label_platform">Platform:</td>
|
||||
<td id="dash_platform"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="conf_leds_contr_label_contrtype">LED type:</td>
|
||||
<td id="dash_leddevice">unknown</td>
|
||||
<td id="dash_leddevice"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_device">Device:</td>
|
||||
<td id="dash_systeminfo"></td>
|
||||
<td data-i18n="dashboard_infobox_label_instance">Instance</td>
|
||||
<td id="dash_instance"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_ports">Ports</td>
|
||||
<td id="dash_ports"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_currenthyp">Hyperion version:</td>
|
||||
<td id="dash_currv">unknown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td data-i18n="dashboard_infobox_label_latesthyp">Latest version:</td>
|
||||
<td id="dash_latev">unknown</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<p style="font-weight:bold" data-i18n="dashboard_infobox_label_smartacc">Smart Access<p>
|
||||
<span id="btn_hsc"></span>
|
||||
<hr>
|
||||
<span id="versioninforesult"></span>
|
||||
</div>
|
||||
</div>
|
||||
@ -60,10 +75,11 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<i class="fa fa-newspaper-o fa-fw"></i>
|
||||
<span data-i18n="dashboard_newsbox_label_title">Latest blog posts</span>
|
||||
<span data-i18n="dashboard_newsbox_label_title">Visit Hyperion Blog</span>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
|
||||
<div id="dash_news" style="margin-bottom:7px"></div>
|
||||
<a href="https://hyperion-project.org/blog/?pk_campaign=WebUI&pk_kwd=visitblog" target="_blank" data-i18n="dashboard_newsbox_visitblog"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
11
assets/webconfig/content/ie_not_supported.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Hyperion WebUI - IE not supported</title>
|
||||
<meta content="">
|
||||
<style> body {margin:auto; padding:2%; text-align:center; font-family:arial;}</style>
|
||||
</head>
|
||||
<body>
|
||||
<img src="../img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" style="margin-bottom:20px;">
|
||||
<h2><span style="color:red">We are sorry, Internet Explorer is not supported!</span><br /><br /> Please use recent versions of Firefox, Chrome, Safari or MS Edge.</h2>
|
||||
</body>
|
||||
</html>
|
@ -1,16 +1,7 @@
|
||||
<div class="container-fluid">
|
||||
<h3 class="page-header"><i class="fa fa-wifi fa-fw"></i><span data-i18n="main_menu_remotecontrol_token">Remote Control</span></h3>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 col-xxl-7">
|
||||
<div class="col-md-12 col-lg-8 col-xxl-7">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_input_label">Source selection</span></div>
|
||||
<div class="panel-body">
|
||||
@ -20,7 +11,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-xxl-5">
|
||||
<div class="col-md-6 col-lg-4 col-xxl-5">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_components_label">Components control</span></div>
|
||||
<div class="panel-body" id="comp_intro">
|
||||
@ -28,35 +19,48 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 col-xxl-4">
|
||||
<div class="col-md-6 col-lg-6 col-xxl-4">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_color_label">Colors/Effects</span></div>
|
||||
<div class="panel-body" id="color_intro">
|
||||
<table class="table borderless">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label data-i18n="remote_color_label_color"></label></td>
|
||||
<td><div id="cp2" class="colorpicker-component input-group">
|
||||
<input type="text" class="form-control"/><span class="input-group-addon"><i></i></span>
|
||||
<td style="vertical-align:middle"><label for="cpeff" data-i18n="remote_color_label_color"></label></td>
|
||||
<td>
|
||||
<div id="cp2" class="colorpicker-component input-group">
|
||||
<input type="text" id="cpeff" class="form-control"/>
|
||||
<span class="input-group-addon"><i></i></span>
|
||||
<span class="input-group-addon" id="remote_input_rescol" title="Repeat Color" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label data-i18n="remote_effects_label_effects">Effect:</label></td>
|
||||
<td><select id="effect_select" class="form-control"></select></td>
|
||||
<td style="vertical-align:middle"><label for="effect_select" data-i18n="remote_effects_label_effects">Effect:</label></td>
|
||||
<td class="input-group">
|
||||
<select id="effect_select" class="form-control"></select>
|
||||
<span class="input-group-addon" id="remote_input_reseff" title="Repeat Effect" style="cursor:pointer"><i class="fa fa-repeat"></i></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="display:none">
|
||||
<td style="vertical-align:middle"><label for="remote_input_img" >Picture:</label></td>
|
||||
<td><input id="remote_input_img" type="file" accept="image/*" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align:middle"><label for="remote_duration" data-i18n="remote_input_duration"></label></td>
|
||||
<td class="input-group">
|
||||
<input id="remote_duration" type="number" class="form-control" value="0" min="0"/>
|
||||
<span class="input-group-addon" data-i18n="edt_append_s"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-warning" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
|
||||
<button data-i18n="remote_color_button_reset" type="button" class="btn btn-primary" id="reset_color" style="margin-top:10px;">Reset Color/Effect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-xxl-3">
|
||||
<div class="col-md-6 col-lg-6 col-xxl-3">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_maptype_label">Mapping types</span></div>
|
||||
<div class="panel-body" id="maptype_intro">
|
||||
@ -64,7 +68,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-xxl-5">
|
||||
<div class="col-md-6 col-lg-6 col-xxl-5">
|
||||
<div class="panel panel-default" >
|
||||
<div class="panel-heading"><i class="fa fa-wifi fa-fw"></i><span data-i18n="remote_adjustment_label"></span></div>
|
||||
<div class="panel-body" id="adjust_content">
|
||||
@ -73,5 +77,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/js/content_remote.js" ></script>
|
||||
|
@ -17,19 +17,30 @@
|
||||
performTranslation();
|
||||
var connectionLost = false;
|
||||
var connectionTimer;
|
||||
var count = 1;
|
||||
|
||||
function tryReconnect()
|
||||
{
|
||||
if(count > 25)
|
||||
window.clearInterval(connectionTimer);
|
||||
|
||||
$.ajax({ url: "/" }).done(function(data) {
|
||||
window.clearInterval(connectionTimer);
|
||||
window.location.href ="/";
|
||||
})
|
||||
.fail( function( jqXHR, textStatus ) {
|
||||
count++;
|
||||
});
|
||||
}
|
||||
|
||||
function restartAction()
|
||||
{
|
||||
if(!connectionLost)
|
||||
{
|
||||
window.clearInterval(cronId);
|
||||
connectionLost = true;
|
||||
connectionTimer = window.setInterval(tryReconnect, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
@ -4,14 +4,14 @@
|
||||
<h3 class="page-header"><i class="fa fa-info fa-fw"></i><span data-i18n="support_label_title">Support Hyperion</span></h3>
|
||||
<div id="supp_intro"></div>
|
||||
<h4 style="font-weight: bold" data-i18n="support_label_spreadtheword">Spread the word</h4>
|
||||
<a href="#" target="_blank" class="unlink">
|
||||
<a href="https://www.facebook.com/Hyperion-1415088231896140/" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-facebook bg-color-fb"></i>
|
||||
<h4>Facebook</h4>
|
||||
<p data-i18n="support_label_fbtext">Share our Hyperion Facebook page and get a notice when new updates are released</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="#" target="_blank" class="unlink">
|
||||
<a href="https://twitter.com/HyperionAmbient" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-twitter bg-color-tw"></i>
|
||||
<h4>Twitter</h4>
|
||||
@ -32,6 +32,13 @@
|
||||
<p data-i18n="support_label_yttext">Bored from pictures? Checkout our Youtube channel!</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://www.instagram.com/hyperionambient/" target="_blank" class="unlink">
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-instagram bg-color-ig"></i>
|
||||
<h4>Instagram</h4>
|
||||
<p data-i18n="support_label_igtext"></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
<hr>
|
||||
@ -65,19 +72,18 @@
|
||||
<li><a href="http://rover.ebay.com/rover/1/1185-53479-19255-0/1?pub=5575174930&toolid=10001&campid=1185-53479-19255-0&customid=&mpt=1016300&mpre=http%3A%2F%2Fwww.ebay.es" target="_blank" data-i18n="general_country_es">Spain</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<a href="https://www.paypal.me/hyperionproject/10" target="_blank" class="unlink">
|
||||
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-paypal bg-color-pp"></i>
|
||||
<h4>Paypal</h4>
|
||||
<p data-i18n="support_label_donationpp">Donation:</p><a href="https://www.paypal.me/hyperionproject/10" target="_blank">Paypal</a>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<div class="col-xs-12 col-sm-6 col-lg-3 support-container">
|
||||
<i class="fa fa-btc bg-color-btc"></i>
|
||||
<h4>Bitcoin</h4>
|
||||
<p data-i18n="support_label_btctext">Address:</p>
|
||||
<p>1GGZbsT6fH3cGq25H5HS2PfisPfDnffSJR</p>
|
||||
<p style="word-break: break-all;">1GGZbsT6fH3cGq25H5HS2PfisPfDnffSJR</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -118,7 +124,5 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
performTranslation();
|
||||
|
||||
if(showOptHelp)
|
||||
createHintH("intro", $.i18n('support_label_intro'), "supp_intro");
|
||||
</script>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Bootstrap Colorpicker v2.4.0
|
||||
* Bootstrap Colorpicker v2.5.1
|
||||
* https://itsjavi.com/bootstrap-colorpicker/
|
||||
*
|
||||
* Originally written by (c) 2012 Stefan Petre
|
||||
|
6757
assets/webconfig/css/bootstrap.css
vendored
14
assets/webconfig/css/bootstrap.min.css
vendored
Normal file
1
assets/webconfig/css/flag-icon.min.css
vendored
@ -9,7 +9,24 @@ body{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15
|
||||
#page-content {
|
||||
padding-bottom:50px;
|
||||
}
|
||||
body{
|
||||
overflow-y: scroll;
|
||||
}
|
||||
.btn{margin: 2px 0;}
|
||||
/*
|
||||
#page-wrapper a[target=_blank]::after {
|
||||
content:"\f08e";
|
||||
position:relative;
|
||||
font:normal normal normal 10px/1 FontAwesome;
|
||||
top:-3px;
|
||||
left:3px;
|
||||
margin-right:5px;
|
||||
}
|
||||
*/
|
||||
/* fixed brand icon */
|
||||
@media (min-width: 768px){
|
||||
.navbar-brand{position:fixed}
|
||||
}
|
||||
|
||||
/*mobile nav*/
|
||||
@media (max-width: 768px){
|
||||
@ -85,6 +102,7 @@ table label{margin:0}
|
||||
/*Dashboard*/
|
||||
.component-on{color:green;}
|
||||
.component-off{color:grey;}
|
||||
#dash_news hr{margin:10px 0}
|
||||
|
||||
/*Colorpicker 2x*/
|
||||
.colorpicker-2x {z-index:99999}
|
||||
@ -119,6 +137,7 @@ table label{margin:0}
|
||||
.support-container:hover .bg-color-btc{background-color:#f7931a; color:white;}
|
||||
.support-container:hover .bg-color-pp{background-color:#0070ba; color:white;}
|
||||
.support-container:hover .bg-color-am{background-color:#ef9c00; color:white;}
|
||||
.support-container:hover .bg-color-ig{background-color:#ab3392; color:white;}
|
||||
|
||||
/*Config introduction*/
|
||||
.introd h4{padding-left:14px;border-left:5px solid #0088cc;}
|
||||
@ -130,6 +149,23 @@ table label{margin:0}
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/*wizard button*/
|
||||
.btn-wizard {
|
||||
color: #fff;
|
||||
background-color: #993399;
|
||||
border-color: #732673;
|
||||
}
|
||||
.btn-wizard:hover{
|
||||
color: #fff;
|
||||
background-color: #732673;
|
||||
border-color: #602060;
|
||||
}
|
||||
.btn-wizard:focus{
|
||||
color: #fff;
|
||||
background-color: #732673;
|
||||
border-color: #602060;
|
||||
}
|
||||
|
||||
/*led preview & led visualisation*/
|
||||
#leds_canvas {background-color:#AAAAAA; position:absolute; margin:15px; background-image:url(/img/hyperion/hyperionlogo.png); background-repeat:no-repeat; background-position: center;}
|
||||
.led { display:inline-block; border: 1px solid black; position:absolute; opacity:0.8; text-align:center; vertical-align:middle; padding:4px; border-radius:2px;}
|
||||
@ -219,6 +255,70 @@ li a:active:after {
|
||||
transition: 0s;
|
||||
}
|
||||
|
||||
/*Bootstrap callouts*/
|
||||
.bs-callout {
|
||||
padding: 15px;
|
||||
margin: 15px 0;
|
||||
border: 1px solid #eee;
|
||||
border-left-width: 5px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.bs-callout h4 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.bs-callout p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.bs-callout code {
|
||||
border-radius: 3px;
|
||||
}
|
||||
.bs-callout+.bs-callout {
|
||||
margin-top: -5px;
|
||||
}
|
||||
.bs-callout-default {
|
||||
border-left-color: #777;
|
||||
}
|
||||
.bs-callout-default h4 {
|
||||
color: #777;
|
||||
}
|
||||
.bs-callout-primary {
|
||||
border-left-color: #428bca;
|
||||
}
|
||||
.bs-callout-primary h4 {
|
||||
color: #428bca;
|
||||
}
|
||||
.bs-callout-success {
|
||||
border-left-color: #5cb85c;
|
||||
}
|
||||
.bs-callout-success h4 {
|
||||
color: #5cb85c;
|
||||
}
|
||||
.bs-callout-danger {
|
||||
border-left-color: #d9534f;
|
||||
}
|
||||
.bs-callout-danger h4 {
|
||||
color: #d9534f;
|
||||
}
|
||||
.bs-callout-warning {
|
||||
border-left-color: #f0ad4e;
|
||||
}
|
||||
.bs-callout-warning h4 {
|
||||
color: #f0ad4e;
|
||||
}
|
||||
.bs-callout-info {
|
||||
border-left-color: #5bc0de;
|
||||
}
|
||||
.bs-callout-info h4 {
|
||||
color: #5bc0de;
|
||||
}
|
||||
.bs-callout-wizard {
|
||||
border-left-color: #993399;
|
||||
}
|
||||
.bs-callout-wizard h4 {
|
||||
color: #993399;
|
||||
}
|
||||
|
||||
/**add a dditional width defintion for bootstrap**/
|
||||
@media (min-width: 1500px) {
|
||||
.col-xxl-1, .col-xxl-2, .col-xxl-3, .col-xxl-4, .col-xxl-5, .col-xxl-6, .col-xxl-7, .col-xxl-8, .col-xxl-9, .col-xxl-10, .col-xxl-11, .col-xxl-12 {
|
||||
|
@ -1,68 +0,0 @@
|
||||
/**
|
||||
* jQuery Lined Textarea Plugin
|
||||
* http://alan.blog-city.com/jquerylinedtextarea.htm
|
||||
*
|
||||
* Copyright (c) 2010 Alan Williamson
|
||||
*
|
||||
* Released under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* Usage:
|
||||
* Displays a line number count column to the left of the textarea
|
||||
*
|
||||
* Class up your textarea with a given class, or target it directly
|
||||
* with JQuery Selectors
|
||||
*
|
||||
* $(".lined").linedtextarea({
|
||||
* selectedLine: 10,
|
||||
* selectedClass: 'lineselect'
|
||||
* });
|
||||
*
|
||||
*/
|
||||
|
||||
.linedwrap {
|
||||
border: 1px solid #c0c0c0;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.linedtextarea {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.linedtextarea textarea, .linedwrap .codelines .lineno {
|
||||
font-size: 10pt;
|
||||
font-family: monospace;
|
||||
line-height: normal !important;
|
||||
}
|
||||
|
||||
.linedtextarea textarea {
|
||||
padding-right:0.3em;
|
||||
padding-top:0.3em;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.linedwrap .lines {
|
||||
margin-top: 0px;
|
||||
width: 50px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
border-right: 1px solid #c0c0c0;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.linedwrap .codelines {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.linedwrap .codelines .lineno {
|
||||
color:#AAAAAA;
|
||||
padding-right: 0.5em;
|
||||
padding-top: 0.0em;
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.linedwrap .codelines .lineselect {
|
||||
color: red;
|
||||
}
|
1
assets/webconfig/css/jsonaceeditor.min.css
vendored
Normal file
Before Width: | Height: | Size: 1.1 KiB |
BIN
assets/webconfig/favicon.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
@ -1,7 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="512" width="512" version="1">
|
||||
<g fill-rule="evenodd" stroke-width="1pt">
|
||||
<path fill="#fc0" d="M0 341.338h512.005v170.67H0z"/>
|
||||
<path d="M0 0h512.005v170.67H0z"/>
|
||||
<path fill="red" d="M0 170.67h512.005v170.668H0z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 289 B |
@ -1,15 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="512" width="512">
|
||||
<defs>
|
||||
<clipPath id="a">
|
||||
<path fill-opacity=".67" d="M250 0h500v500H250z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#a)" transform="translate(-256) scale(1.024)">
|
||||
<g stroke-width="1pt">
|
||||
<path fill="#006" d="M0 0h1000.02v500.01H0z"/>
|
||||
<path d="M0 0v55.903l888.218 444.11h111.802V444.11L111.802.003H0zm1000.02 0v55.9L111.802 500.01H0v-55.9L888.218 0h111.802z" fill="#fff"/>
|
||||
<path d="M416.675 0v500.01h166.67V0h-166.67zM0 166.67v166.67h1000.02V166.67H0z" fill="#fff"/>
|
||||
<path d="M0 200.004v100.002h1000.02V200.004H0zM450.01 0v500.01h100V0h-100zM0 500.01l333.34-166.67h74.535L74.535 500.01H0zM0 0l333.34 166.67h-74.535L0 37.27V0zm592.145 166.67L925.485 0h74.535L666.68 166.67h-74.535zm407.875 333.34L666.68 333.34h74.535l258.805 129.403v37.267z" fill="#c00"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 889 B |
@ -1,7 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="480" width="640" version="1">
|
||||
<g fill-rule="evenodd" stroke-width="1pt">
|
||||
<path fill="#fc0" d="M0 320h640v160.002H0z"/>
|
||||
<path d="M0 0h640v160H0z"/>
|
||||
<path fill="red" d="M0 160h640v160H0z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 264 B |
@ -1,15 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="480" width="640">
|
||||
<defs>
|
||||
<clipPath id="a">
|
||||
<path fill-opacity=".67" d="M-85.333 0h682.67v512h-682.67z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#a)" transform="translate(80) scale(.94)">
|
||||
<g stroke-width="1pt">
|
||||
<path fill="#006" d="M-256 0H768.02v512.01H-256z"/>
|
||||
<path d="M-256 0v57.244l909.535 454.768H768.02V454.77L-141.515 0H-256zM768.02 0v57.243L-141.515 512.01H-256v-57.243L653.535 0H768.02z" fill="#fff"/>
|
||||
<path d="M170.675 0v512.01h170.67V0h-170.67zM-256 170.67v170.67H768.02V170.67H-256z" fill="#fff"/>
|
||||
<path d="M-256 204.804v102.402H768.02V204.804H-256zM204.81 0v512.01h102.4V0h-102.4zM-256 512.01L85.34 341.34h76.324l-341.34 170.67H-256zM-256 0L85.34 170.67H9.016L-256 38.164V0zm606.356 170.67L691.696 0h76.324L426.68 170.67h-76.324zM768.02 512.01L426.68 341.34h76.324L768.02 473.848v38.162z" fill="#c00"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 934 B |
@ -1,13 +1,4 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"brindosch"
|
||||
],
|
||||
"project" : "Hyperion WebUI",
|
||||
"locale": "de",
|
||||
"last-updated": "2016-11-30",
|
||||
"message-documentation": "qqq"
|
||||
},
|
||||
"general_webui_title" : "Hyperion - Web Konfiguration",
|
||||
"general_country_de" : "Deutschland",
|
||||
"general_country_us" : "Amerika",
|
||||
@ -25,11 +16,12 @@
|
||||
"general_comp_SMOOTHING" : "Glättung",
|
||||
"general_comp_BLACKBORDER" : "Schwarze Balken Erkennung",
|
||||
"general_comp_KODICHECKER" : "Kodi Überwachung",
|
||||
"general_comp_FORWARDER" : "JSON/PROTO Weiterleitung",
|
||||
"general_comp_FORWARDER" : "Weiterleitung",
|
||||
"general_comp_UDPLISTENER" : "UDP Listener",
|
||||
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
||||
"general_comp_GRABBER" : "Plattform Aufnahme",
|
||||
"general_comp_V4L" : "USB Aufnahme",
|
||||
"general_comp_LEDDEVICE" : "LED Hardware",
|
||||
"general_col_red" : "rot",
|
||||
"general_col_green" : "grün",
|
||||
"general_col_blue" : "blau",
|
||||
@ -45,18 +37,32 @@
|
||||
"general_btn_on" : "An",
|
||||
"general_btn_next" : "Weiter",
|
||||
"general_btn_back" : "Zurück",
|
||||
"general_btn_iswitch" : "Switch",
|
||||
"general_wiki_moreto" : "Mehr Informationen zu \"$1\" findest du in unserem Wiki",
|
||||
"dashboard_label_intro" : "Das Dashboard zeigt dir Informationen zum Systemstatus, ob Updates verfügbar sind, den Komponentenstatus sowie die letzten Blog-Posts vom Hyperion Team.",
|
||||
"dashboard_infobox_label_title" : "Information",
|
||||
"dashboard_infobox_label_currenthyp" : "Deine Hyperion Version:",
|
||||
"dashboard_infobox_label_latesthyp" : "Aktuellste Hyperion Version:",
|
||||
"dashboard_infobox_label_device" : "Systeminformation:",
|
||||
"dashboard_infobox_label_platform" : "Plattform:",
|
||||
"dashboard_infobox_label_instance" : "Instanz:",
|
||||
"dashboard_infobox_label_ports" : "Ports (json|proto):",
|
||||
"dashboard_infobox_message_updatewarning" : "Eine aktuellere Version von Hyperion ist verfügbar! (V$1)",
|
||||
"dashboard_infobox_message_updatesuccess" : "Du nutzt die aktuellste Version von Hyperion.",
|
||||
"dashboard_infobox_label_statush" : "Hyperion Status:",
|
||||
"dashboard_infobox_label_smartacc" : "Schnellzugriff",
|
||||
"dashboard_infobox_label_enableh" : "Aktiviere Hyperion",
|
||||
"dashboard_infobox_label_disableh" : "Deaktiviere Hyperion",
|
||||
"dashboard_componentbox_label_title" : "Komponenten Status",
|
||||
"dashboard_componentbox_label_comp" : "Komponente",
|
||||
"dashboard_componentbox_label_status" : "Status",
|
||||
"dashboard_newsbox_label_title" : "Die letzten Blogposts",
|
||||
"dashboard_newsbox_label_title" : "Hyperion-Blog",
|
||||
"dashboard_newsbox_visitblog" : "Besuche den Hyperion-Blog",
|
||||
"dashboard_newsbox_noconn" : "Fehler bei dem Versuch die letzten Blog-Posts zu laden, funtkioniert dein Internet?",
|
||||
"dashboard_newsbox_readmore" : "Weiterlesen",
|
||||
"dashboard_alert_message_confedit_t" : "Konfiguration geändert",
|
||||
"dashboard_alert_message_confedit" : "Deine Hyperion Konfiguration wurde verändert. Um die Änderungen anzuwenden, starte Hyperion neu.",
|
||||
"dashboard_alert_message_disabled_t" : "Hyperion deaktiviert",
|
||||
"dashboard_alert_message_disabled" : "Hyperion ist momentan deaktiviert! Um Hyperion zu nutzen, musst du es zuerst wieder im Dashboard aktivieren.",
|
||||
"main_menu_dashboard_token" : "Dashboard",
|
||||
"main_menu_configuration_token" : "Konfiguration",
|
||||
"main_menu_general_conf_token" : "Allgemein",
|
||||
@ -91,7 +97,7 @@
|
||||
"conf_helptable_expl" : "Erklärung",
|
||||
"conf_effect_path_intro" : "Definiere weitere Effekt-Pfade, wenn nötig.",
|
||||
"conf_effect_fgeff_intro" : "Definiere einen Start Effekt/Farbe, dieser wird angezeigt, wenn Hyperion startet für die angegebene Dauer.",
|
||||
"conf_effect_bgeff_intro" : "Definiere einen Hintergrund Effekt/Farbe, dieser wird aktiv, wenn Hyperion sich im Leerlauf befindet. (Das gilt ebenfalls für temporäres abschalten mithilfe der Kodi Überwachung).",
|
||||
"conf_effect_bgeff_intro" : "Definiere einen Hintergrund Effekt/Farbe. Dieser wird aktiv, wenn Hyperion sich im Leerlauf befindet. Wird immer mit Priorität 255 gestartet.",
|
||||
"conf_leds_device_intro" : "Wähle eine Methode zur Steuerung deiner LEDs aus, sie sind unterteilt in verschiedene Kategorien. Neben den allgemeinen Optionen die für alle gültig sind, gibt es auch spezfische die sich unterscheiden je nach Wahl.",
|
||||
"conf_leds_layout_intro" : "Du benötigst ebenfalls ein LED Layout, welches deine LED-Positionen wiederspiegelt. Das klassische Layout wird für gewöhnlichen für TVs verwendet, Hyperion unterstützt aber auch LED Wände (Matrix). Die Ansicht des LAYOUTS ist die perspektive VOR dem Fernseher, nicht dahinter.",
|
||||
"conf_leds_nav_label_ledcontroller" : "LED Steuerung",
|
||||
@ -104,10 +110,10 @@
|
||||
"conf_leds_optgroup_usb" : "USB",
|
||||
"conf_leds_optgroup_debug" : "Debug",
|
||||
"conf_leds_layout_btn_checklist" : "Zeige Checkliste",
|
||||
"conf_leds_leyout_checkp1" : "Die schwarze eingefärbte LED ist die erste LED. Das ist der Punkt, an dem die Daten eingespeist werden.",
|
||||
"conf_leds_leyout_checkp2" : "Das Layout ist die Ansicht vor dem Fernseher stehend, nicht dahinter.",
|
||||
"conf_leds_leyout_checkp3" : "Stelle sicher, dass die Richtung richtig eingestellt ist, dazu ist die zweite und dritte LED grau markiert um den Datenfluss anzuzeigen.",
|
||||
"conf_leds_leyout_checkp4" : "Vorgang Lücke: Solltest du eine Lücke benötigen, ignoriere diese bei der LED Angabe Oben/Unten/Rechts/Links und gebe anschließend unter Lückenlänge an, wieviel LEDs du abziehen möchtest. Verändere jetzt die Lückenposition, um die Lücke an die richtige Stelle zu rücken.",
|
||||
"conf_leds_layout_checkp1" : "Die schwarze eingefärbte LED ist die erste LED. Das ist der Punkt, an dem die Daten eingespeist werden.",
|
||||
"conf_leds_layout_checkp2" : "Das Layout ist die Ansicht vor dem Fernseher stehend, nicht dahinter.",
|
||||
"conf_leds_layout_checkp3" : "Stelle sicher, dass die Richtung richtig eingestellt ist, dazu ist die zweite und dritte LED grau markiert um den Datenfluss anzuzeigen.",
|
||||
"conf_leds_layout_checkp4" : "Vorgang Lücke: Solltest du eine Lücke benötigen, ignoriere diese bei der LED Angabe Oben/Unten/Rechts/Links und gebe anschließend unter Lückenlänge an, wieviel LEDs du abziehen möchtest. Verändere jetzt die Lückenposition, um die Lücke an die richtige Stelle zu rücken.",
|
||||
"conf_leds_layout_frame" : "Klassisches Layout (Rahmen)",
|
||||
"conf_leds_layout_matrix" : "Matrix Layout (LED Wand)",
|
||||
"conf_leds_layout_generatedconf" : "Generierte/Aktuelle LED Konfiguration",
|
||||
@ -119,6 +125,7 @@
|
||||
"conf_leds_layout_preview_originTEXT" : "Erstellt von: Textfeld",
|
||||
"conf_leds_layout_preview_originMA" : "Erstellt von: Matrix Layout (LED Wand)",
|
||||
"conf_leds_layout_preview_totalleds" : "LEDs gesamt: $1",
|
||||
"conf_leds_layout_preview_ledpower" : "Max. Stromstärke: $1 A",
|
||||
"conf_leds_layout_preview_l1" : "Das ist die erste LED (Einspeisung)",
|
||||
"conf_leds_layout_preview_l2" : "Das visualisiert die Richtung des Datenstroms (zweite/dritte LED)",
|
||||
"conf_leds_layout_cl_top" : "Oben",
|
||||
@ -148,10 +155,10 @@
|
||||
"conf_leds_layout_ma_opttopright" : "Oben rechts",
|
||||
"conf_leds_layout_ma_optbottomleft" : "Unten links",
|
||||
"conf_leds_layout_ma_optbottomright" : "Unten rechts",
|
||||
"conf_leds_layout_textf1" : "Das Textfeld zeigt dir dein aktuell geladenes Layout, sofern du kein neues Layout mit den Optionen unten erstellt hast. Optional kann man die Werte hier weiter bearbeiten.",
|
||||
"conf_leds_layout_textf1" : "Das Textfeld zeigt dir dein aktuell geladenes Layout, sofern du kein neues Layout mit den Optionen oben erstellt hast. Optional kann man die Werte hier weiter bearbeiten.",
|
||||
"conf_grabber_fg_intro" : "Plattform Aufnahme ist das lokale System auf dem Hyperion installiert wurde, welches als Bildquelle dient.",
|
||||
"conf_grabber_v4l_intro" : "USB Aufnahme ist ein Gerät, welches via USB angeschlossen ist und als Bildquelle dient.",
|
||||
"conf_colors_color_intro" : "Erstelle Kalibrierungsprofile und passe Farben an, Helligkeit, Linearisierung und mehr.",
|
||||
"conf_colors_color_intro" : "Erstelle Kalibrierungsprofile die einzelnen Komponenten zugewisen werden können. Passe dabei Farben, Gamma, Helligkeit, Kompensation und mehr an.",
|
||||
"conf_colors_smoothing_intro" : "Glätte den Farbverlauf und Helligkeitsänderungen um nicht von schnellen Übergängen abgelenkt zu werden.",
|
||||
"conf_colors_blackborder_intro" : "Ignoriere schwarze Balken, jeder Modus nutzt einen anderen Algorithmus um diese zu erkennen. Erhöhe die Schwelle, sollte es nicht funktionieren.",
|
||||
"conf_network_json_intro" : "Der JSON-RPC-Port dieser Hyperion-Instanz, wird genutzt zur Fernsteuerung.",
|
||||
@ -162,12 +169,16 @@
|
||||
"conf_kodi_label_title" : "Kodi Überwachung",
|
||||
"conf_kodi_intro" : "Die Kodi Überwachung ermöglicht es dir abhängig vom Kodi Status dein ambient light an oder abzuschalten. Dies ist nicht limitiert auf das selbe Gerät. Du kannst jedes Kodi in deinem lokalen Netzwerk überwachen lassen.",
|
||||
"conf_logging_label_intro" : "Überprüfe die Meldungen im Prokotoll um zu erfahren was Hyperion gerade beschäftigt. Je nach eingestellter Protokoll-Stufe siehst du mehr oder weniger Informationen.",
|
||||
"conf_logging_btn_pbupload" : "Bericht für Supportanfrage erstellen",
|
||||
"conf_logging_btn_pbupload" : "Bericht für Supportanfrage hochladen",
|
||||
"conf_logging_btn_autoscroll" : "Automatisch scrollen",
|
||||
"conf_logging_nomessage" : "Keine Einträge vorhanden.",
|
||||
"conf_logging_uploading" : "Aufbereitung der Daten...",
|
||||
"conf_logging_yourlink" : "Link zu deinem Bericht",
|
||||
"conf_logging_uplfailed" : "Hochladen fehlgeschlagen! Überprüfe deine Internetverbindung!",
|
||||
"conf_logging_report" : "Bericht",
|
||||
"conf_logging_lastreports" : "Frühere Berichte",
|
||||
"conf_logging_uplpolicy" : "Hiermit akzeptierst du die",
|
||||
"conf_logging_contpolicy" : "Berichts-Datenschutzerklärung",
|
||||
"conf_webconfig_label_intro" : "Einstellungen zur Webkonfiguration. Änderungen können die Erreichbarkeit des Webinterfaces beeinflussen.",
|
||||
"remote_losthint" : "Notiz: Alle Änderungen gehen nach einem Neustart verloren.",
|
||||
"remote_color_label" : "Farbe/Effekt",
|
||||
@ -176,9 +187,9 @@
|
||||
"remote_color_label_color" : "Farbe:",
|
||||
"remote_effects_label_effects" : "Effekt:",
|
||||
"remote_adjustment_label" : "Farbanpassung",
|
||||
"remote_adjustment_intro" : "Verändere live Farbe/Helligkeit/Linearisierung. $1",
|
||||
"remote_adjustment_intro" : "Verändere live Farbe/Helligkeit/Kompensation. $1",
|
||||
"remote_input_label" : "Quellenauswahl",
|
||||
"remote_input_intro" : "Hyperion nutzt ein Prioritätensystem um die Quelle zu wählen. Alles was du setzte hat eine Prioität (Effekte/Farben/Plattform Aufnahme/USB Aufnahme und Netzwerkquellen). Standardmäßig nutzt Hyperion die Quelle mit der niedrigsten Prioität. Hier kannst du aktiv Einfluss darauf nehmen. $1",
|
||||
"remote_input_intro" : "Hyperion nutzt ein Prioritätensystem um die Quelle zu wählen. Alles was du setzt hat eine Priorität (Effekte/Farben/Plattform Aufnahme/USB Aufnahme und Netzwerkquellen). Standardmäßig nutzt Hyperion die Quelle mit der niedrigsten Priorität. Hier kannst du aktiv Einfluss darauf nehmen. $1",
|
||||
"remote_input_label_autoselect" : "Automatische Auswahl",
|
||||
"remote_input_setsource_btn" : "Wähle Quelle",
|
||||
"remote_input_sourceactiv_btn" : "Quelle aktiv",
|
||||
@ -188,12 +199,13 @@
|
||||
"remote_input_status" : "Status/Aktion",
|
||||
"remote_input_duration" : "Dauer:",
|
||||
"remote_input_ip" : "IP:",
|
||||
"remote_input_clearall" : "Lösche alle Effekte/Farben",
|
||||
"remote_components_label" : "Komponentensteuerung",
|
||||
"remote_components_intro" : "Starte und stoppe Komponenten von Hyperion. $1",
|
||||
"remote_optgroup_usreffets" : "Benutzer Effekte",
|
||||
"remote_optgroup_syseffets" : "Mitgelieferte Effekte",
|
||||
"remote_maptype_label" : "LED-Bereich Zuordnung",
|
||||
"remote_maptype_intro" : "Wechsle zwischen verschiedenen Typen um die Auswirkungen besser vergleichen zu können. $1",
|
||||
"remote_maptype_intro" : "Für gewöhnlich entscheidet dein LED Layout welchen Bildbereich welche LED bekommt, dies kann hier geändert werden. $1",
|
||||
"remote_maptype_label_multicolor_mean" : "Mehrfarbig",
|
||||
"remote_maptype_label_unicolor_mean" : "Einfarbig",
|
||||
"effectsconfigurator_label_intro" : "Erstelle auf Grundlage der Basiseffekte neue Effekt die nach deinen Wünschen angepasst sind. Je nach Effekt stehen Optionen wie Farbe, Geschwindigkeit, oder Richtung und vieles mehr zur Auswahl.",
|
||||
@ -206,12 +218,13 @@
|
||||
"effectsconfigurator_label_deleffect" : "Effekt entfernen:",
|
||||
"effectsconfigurator_button_deleffect" : "Effekt entfernen",
|
||||
"support_label_title" : "Unterstütze Hyperion",
|
||||
"support_label_intro" : "Hyperion ist ein kostenloses Open Source Projekt und ein kleines Team arbeitet an seiner Weiterentwicklung. Darum benötigen wir DEINE Unterstützung um den Ball weiter rollen zu lassen und um weiter in bessere Infrastruktur und Weiterentwicklung investieren zu können.",
|
||||
"support_label_intro" : "Hyperion ist ein kostenloses Open Source Projekt und ein kleines Team arbeitet an seiner Weiterentwicklung. Darum benötigen wir DEINE Unterstützung um weiter in bessere Infrastruktur und Weiterentwicklung investieren zu können.",
|
||||
"support_label_spreadtheword" : "Weitersagen!",
|
||||
"support_label_fbtext" : "Teile Inhalte in Facebook und halte dich und andere auf dem Laufenden",
|
||||
"support_label_twtext" : "Nutze die 140 Zeichen und bleibe auf dem Laufenden auch auf Twitter",
|
||||
"support_label_ggtext" : "Platziere uns in deinen Kreisen auf Google+",
|
||||
"support_label_yttext" : "Gelangweilt von Bildern? Werfe einen Blick auf unsere Youtube Videos",
|
||||
"support_label_igtext" : "Schau doch mal bei Instagram vorbei!",
|
||||
"support_label_donate" : "Spende oder nutze unsere Affiliate Links",
|
||||
"support_label_affinstr1" : "Klicke auf den Link deines Landes",
|
||||
"support_label_affinstr2" : "Kaufe wie gewohnt ein, abhängig von deinem Umsatz bekommen wir eine kleine Provision",
|
||||
@ -244,18 +257,18 @@
|
||||
"info_conlost_label_reason1" : "- Schlechte WLAN Verbindung",
|
||||
"info_conlost_label_reason2" : "- Ein Update wird durchgeführt",
|
||||
"info_conlost_label_reason3" : "- Hyperion wird nicht mehr ausgeführt",
|
||||
"info_conlost_label_autorecon" : "Du wirst verbunden, sobald Hyperion wieder verfügbar ist",
|
||||
"info_conlost_label_autorefresh" : "Diese Seite wird automatisch aktualisiert",
|
||||
"info_conlost_label_reload" : "Wenn nicht, klicke hier",
|
||||
"info_conlost_label_autorecon" : "Du wirst verbunden, sobald Hyperion wieder verfügbar ist.",
|
||||
"info_conlost_label_autorefresh" : "Diese Seite wird automatisch aktualisiert.",
|
||||
"info_conlost_label_reload" : "Automatisches verbinden gestoppt - limit überschritten. Lade die Seite neu oder klick mich.",
|
||||
"info_restart_title" : "Startet gerade neu...",
|
||||
"info_restart_rightback" : "Hyperion ist gleich wieder für dich da!",
|
||||
"info_restart_contus" : "Solltest du nach 20 Sekunden immer noch hier sein, ist etwas schief gelaufen. Öffne bitte in unserem Support Forum ein neues Thema...",
|
||||
"info_restart_contusa" : "...mit deinen letztes Schritten. Danke!",
|
||||
"info_404" : "Die angeforderte Seite ist nicht verfügbar!",
|
||||
"infoDialog_general_success_title" : "Erfolg",
|
||||
"infoDialog_general_error_title" : "Fehler",
|
||||
"infoDialog_general_warning_title" : "Warnung",
|
||||
"infoDialog_checklist_title" : "Checkliste!",
|
||||
"InfoDialog_leds_validfail_title" : "JSON Überprüfung fehlgeschlagen!",
|
||||
"infoDialog_effconf_deleted_text" : "Der Effekt \"$1\" wurde erfolgreich entfernt!",
|
||||
"infoDialog_effconf_created_text" : "Der Effekt \"$1\" wurde erfolgreich erstellt!",
|
||||
"InfoDialog_lang_title" : "Spracheinstellung",
|
||||
@ -273,6 +286,10 @@
|
||||
"infoDialog_import_comperror_text" : "Dein Browser unterstützt leider keinen Import. Bitte versuche es mit einem anderen Browser erneut.",
|
||||
"infoDialog_import_confirm_title" : "Bestätige Import",
|
||||
"infoDialog_import_confirm_text" : "Bist du sicher, dass du die Konfigurations-Datei \"$1\" importieren möchtest? Diese Aktion kann nicht rückgängig gemacht werden!",
|
||||
"InfoDialog_iswitch_title" : "Hyperion switcher",
|
||||
"InfoDialog_iswitch_text" : "Sollte in deinem lokalen Netzwerk Hyperion mehr als einmal laufen, kannst du hier zwischen den Web Konfigurationen hin und her schalten. Wähle dazu die Instanz unten aus und switche!",
|
||||
"wiz_wizavail" : "Assistent verfügbar",
|
||||
"wiz_guideyou" : "Der $1 wird dich durch die Konfiguration leiten, drücke dazu einfach den Button!",
|
||||
"wiz_rgb_title" : "RGB Byte Reihenfolge Assistent",
|
||||
"wiz_rgb_intro1" : "Dieser Assisent wird dir dabei helfen die richtige Byte Reihenfolge für deine leds zu finden. Klicke auf Fortfahren um zu beginnen.",
|
||||
"wiz_rgb_intro2" : "Wann benötigt man diesen Assistenten? Zur Erstkonfiguration oder wenn deine LEDs zb rot leuchten sollten, sie aber blau oder grün sind.",
|
||||
@ -281,15 +298,24 @@
|
||||
"wiz_rgb_q" : "Welche Farbe zeigen deine LEDs, wenn der Farbpunkt oben...",
|
||||
"wiz_rgb_qrend" : "...rot ist?",
|
||||
"wiz_rgb_qgend" : "...grün ist?",
|
||||
"wiz_hue_title" : "Hue Bridge Assistent",
|
||||
"wiz_hue_intro1" : "Mit diesem Setupassistenten kannst du einen neuen User auf der Hue Bridge anlegen und deine LightIDs für die Hyperion Konfiguration herausfinden.",
|
||||
"wiz_hue_intro2" : "Beachte: Dies ist nur ein Assistent. Du musst die Daten in die Konfiguration kopieren.",
|
||||
"wiz_hue_title" : "Philips Hue Assistent",
|
||||
"wiz_hue_intro1" : "Dieser Assistent hilft dir bei der Konfiguration von Hyperion für Philips Hue. Zu den Funktionen zählen ein automatisches finden der Hue Bridge, einen neuen Benutzer erstellen, die einzelnen Lampen unterschiedlichen Bereichen im Bild zuzuordnen und weitere Einstellungen von Hyperion automatisch anzupassen. Kurz gesagt: Komplette Einrichtung mit ein paar Klicks.",
|
||||
"wiz_hue_desc1" : "Es wird automatisch nach der Hue Bridge gesucht, solltest sie nicht gefunden werden, gebe die IP an und drücke den \"neu laden\" Button. Danach benötigst du eine gültige Benutzer ID, diese kann auch erstellt werden.",
|
||||
"wiz_hue_desc2" : "Nun kannst du auswählen, welche der Lampen (IDs) hinzugefügt werden sollen. Mit der Position wählst du aus, wo die jeweilige Lampe \"im Bild\" sitzen soll. Deaktivierte Lampen werden nicht hinzugefügt. Als Hilfe zur Identifizierung kannst du sie mit einem Klick auf den rechten Button kurz aufleuchten lassen.",
|
||||
"wiz_hue_ip" : "Hue Bridge IP:",
|
||||
"wiz_hue_username" : "Benutzername:",
|
||||
"wiz_hue_create_user" : "Benutzer anlegen",
|
||||
"wiz_hue_failure_ip" : "Bitte überprüfe deine IP Adresse.",
|
||||
"wiz_hue_failure_connection" : "Connection Timeout. Bitte drücke die Taste rechtzeitig.",
|
||||
"wiz_hue_username" : "Benutzer ID:",
|
||||
"wiz_hue_create_user" : "Neuen Benutzer erstellen",
|
||||
"wiz_hue_failure_ip" : "Keine Hue Bridge gefunden, bitte überprüfe die IP",
|
||||
"wiz_hue_failure_connection" : "Zeitüberschreitung. Bitte drücke die Taste auf deiner Hue Bridge rechtzeitig",
|
||||
"wiz_hue_failure_user" : "Benutzer ID wurde nicht gefunden, erstelle eine Neue oder gib eine bereits registrierte an.",
|
||||
"wiz_hue_press_link" : "Bitte \"Link\" Taste auf der Hue Bridge drücken.",
|
||||
"wiz_hue_ids_disabled" : "Deaktiviert",
|
||||
"wiz_hue_ids_entire" : "Ganzes Bild",
|
||||
"wiz_hue_noids" : "Diese Hue Bridge hat keine verbundenen Lampen, bitte verbinde diese zuerst mit deiner Hue Bridge (Nutze die Hue Apps dafür)",
|
||||
"wiz_hue_pos": "Position/Status",
|
||||
"wiz_hue_searchb": "Suche nach Hue Bridge...",
|
||||
"wiz_hue_blinkblue": "Lasse ID $1 blau aufleuchten",
|
||||
"wiz_hue_ident" : "Identifiziere",
|
||||
"wiz_cc_title" : "Farbkalibrierungs Assistent",
|
||||
"wiz_cc_intro1" : "Der Assistent wird dich durch die Kalibrierung deiner LEDs leiten. Sofern du Kodi nutzt, können die Bilder und Testvideos direkt an Kodi geschickt werden. Andernfalls musst du das Material selbst herunterladen und anwenden.",
|
||||
"wiz_cc_kwebs" : "Kodi Webserver (IP:Port)",
|
||||
@ -301,8 +327,8 @@
|
||||
"wiz_cc_lettvshow" : "Lass dabei deinen Fernseher folgendes Bild anzeigen: $1",
|
||||
"wiz_cc_lettvshowm" : "Überprüfe dies mithilfe folgender Bildern: $1",
|
||||
"wiz_cc_adjustit" : "Verändere dein \"$1\", bis du zufrieden bist. Beachte: Je mehr du reduzierst bzw von dem Standardwert abweichst, je mehr veränderst du den maximalen Farbraum, was alle Farben die daraus abgeleitet werden ebenfalls betrifft. Je nach TV/LED Farbspektrum sind die Ergebnisse unterschiedlich.",
|
||||
"wiz_cc_adjustgamma" : "Gamma: Was du jetzt tun musst ist, jeden Gamma-Kanal so einstellen, dass der \"Grauverlauf\" auf den LEDs nicht grünlich/rötlich/bläulich aussieht. Beispiel: Sollte dein grau etwas rötlich sein bedeutet dies, dass du dein Gamma für Rot erhöhen musst um den Rot-Anteil zu verringern (Je mehr Gamma, desto weniger Farbe).",
|
||||
"wiz_cc_chooseid" : "Wähle einen Namen für dieses Profil.",
|
||||
"wiz_cc_adjustgamma" : "Gamma: Was du jetzt tun musst ist, jeden Gamma-Kanal so einstellen, dass der \"Grauverlauf\" auf den LEDs nicht grünlich/rötlich/bläulich aussieht. Neutral ist übrigens 1.0. Beispiel: Sollte dein grau etwas rötlich sein bedeutet dies, dass du dein Gamma für Rot erhöhen musst um den Rot-Anteil zu verringern (Je mehr Gamma, desto weniger Farbe).",
|
||||
"wiz_cc_chooseid" : "Wähle einen Namen für dieses Farb-Profil.",
|
||||
"wiz_cc_btn_switchpic" : "Testbild ändern",
|
||||
"wiz_cc_backlight" : "Zusätzlich kannst du eine Hintergrundbeluchtung einstellen, um \"irritierende Farben\" bei fast schwarzem Bild zu vermeiden oder du den Wechsel zwischen Farbe und Aus als zu anstrengend empfindest. Zusätzlich kann bestimmt werden, ob diese farbig oder nur weiß sein soll. Wird automatisch deaktiviert im Zustand \"Aus\" sowie bei \"Farbe\" und \"Effekt\".",
|
||||
"wiz_cc_testintro" : "Nun ist es an der Zeit für einen Testlauf.",
|
||||
@ -344,6 +370,7 @@
|
||||
"edt_dev_spec_lightid_itemtitle" : "ID",
|
||||
"edt_dev_spec_transistionTime_title" : "Übergangszeit",
|
||||
"edt_dev_spec_switchOffOnBlack_title" : "Aus bei schwarz",
|
||||
"edt_dev_spec_brightnessFactor_title" : "Helligkeitsfaktor",
|
||||
"edt_dev_spec_uid_title" : "UID",
|
||||
"edt_dev_spec_intervall_title" : "Intervall",
|
||||
"edt_dev_spec_latchtime_title" : "Sperrzeit",
|
||||
@ -420,18 +447,20 @@
|
||||
"edt_conf_color_magenta_expl" : "Kalibrierter Magentawert.",
|
||||
"edt_conf_color_yellow_title" : "Gelb",
|
||||
"edt_conf_color_yellow_expl" : "Kalibrierter Gelbwert.",
|
||||
"edt_conf_color_gammaRed_title" : "Gamma rot",
|
||||
"edt_conf_color_gammaRed_expl" : "Gamma von rot.",
|
||||
"edt_conf_color_gammaGreen_title" : "Gamma grün",
|
||||
"edt_conf_color_gammaGreen_expl" : "Gamma von grün.",
|
||||
"edt_conf_color_gammaBlue_title" : "Gamma blau",
|
||||
"edt_conf_color_gammaBlue_expl" : "Gamma von blau",
|
||||
"edt_conf_color_gammaRed_title" : "Gamma Rot",
|
||||
"edt_conf_color_gammaRed_expl" : "Gamma von rot. 1.0 ist neutral. Über 1.0 wird rot reduziert, unter 1.0 wird rot erhöht.",
|
||||
"edt_conf_color_gammaGreen_title" : "Gamma Grün",
|
||||
"edt_conf_color_gammaGreen_expl" : "Gamma von grün. 1.0 ist neutral. Über 1.0 wird grün reduziert, unter 1.0 wird grün erhöht.",
|
||||
"edt_conf_color_gammaBlue_title" : "Gamma Blau",
|
||||
"edt_conf_color_gammaBlue_expl" : "Gamma von blau. 1.0 ist neutral. Über 1.0 wird blau reduziert, unter 1.0 wird blau erhöht.",
|
||||
"edt_conf_color_backlightThreshold_title" : "Hintergrund - beleuchtung",
|
||||
"edt_conf_color_backlightThreshold_expl" : "Eine Beleuchtung die dauerhaft aktiv ist. (Automatisch deaktiviert bei Effekten, Farben oder im Zustand \"Aus\")",
|
||||
"edt_conf_color_backlightColored_title" : "Farbige Hintergrund - beleuchtung",
|
||||
"edt_conf_color_backlightColored_expl" : "Die Hintergrundbeleuchtung kann mit oder ohne Farbanteile genutzt werden.",
|
||||
"edt_conf_color_brightness_title" : "Maximale Helligkeit",
|
||||
"edt_conf_color_brightness_expl" : "Zwischen 0.0 und 0.5 ist die Helligkeit linearisiert. Von 0.5 bis 1.0 wird cyan, magenta und gelb bis zu 2x heller und weiß bis zu 3x.",
|
||||
"edt_conf_color_brightness_title" : "Helligkeit",
|
||||
"edt_conf_color_brightness_expl" : "Die gesamte Helligkeit",
|
||||
"edt_conf_color_brightnessComp_title" : "Helligkeits Kompensation",
|
||||
"edt_conf_color_brightnessComp_expl" : "Kompensiert unterschiede in der Helligkeit zwischen Rot Grün Blau, Cyan Magenta Gelb und weiß. 100 ist volle Kompensation, 0 keine Kompensation",
|
||||
"edt_conf_smooth_heading_title" : "Glättung",
|
||||
"edt_conf_smooth_type_title" : "Art",
|
||||
"edt_conf_smooth_type_expl" : "Algorithmus der Glättung.",
|
||||
@ -470,6 +499,8 @@
|
||||
"edt_conf_v4l2_cropTop_expl" : "Anzahl der Pixel auf der oberen Seite die vom Bild entfernt werden.",
|
||||
"edt_conf_v4l2_cropBottom_title" : "Entferne unten",
|
||||
"edt_conf_v4l2_cropBottom_expl" : "Anzahl der Pixel auf der unteren Seite die vom Bild entfernt werden.",
|
||||
"edt_conf_v4l2_signalDetection_title" : "Signal Erkennung",
|
||||
"edt_conf_v4l2_signalDetection_expl" : "Wenn aktiviert, wird die USB Aufnahme temporär bei \"kein Signal\" abgeschalten.",
|
||||
"edt_conf_v4l2_redSignalThreshold_title" : "Rote Signalschwelle",
|
||||
"edt_conf_v4l2_redSignalThreshold_expl" : "Verdunkelt rote Werte. (Wird als schwarz interpretiert)",
|
||||
"edt_conf_v4l2_greenSignalThreshold_title" : "Grüne Signalschwelle",
|
||||
@ -485,6 +516,10 @@
|
||||
"edt_conf_fg_horizontalPixelDecimation_expl" : "Horizontale Pixelreduzierung (Faktor)",
|
||||
"edt_conf_fg_useXGetImage_title" : "Nutze XGetImage",
|
||||
"edt_conf_fg_useXGetImage_expl" : "XGetImage für aktuelle X11 desktops",
|
||||
"edt_conf_fg_width_title" : "Breite",
|
||||
"edt_conf_fg_width_expl" : "Verkleinere Bild auf dieser Breite, da das Rohmaterial viel Leistung benötigen würde.",
|
||||
"edt_conf_fg_height_title" : "Höhe",
|
||||
"edt_conf_fg_height_expl" : "Verkleinere Bild auf dieser Höhe, da das Rohmaterial viel Leistung benötigen würde.",
|
||||
"edt_conf_fg_verticalPixelDecimation_title" : "Vertikale Pixelreduzierung",
|
||||
"edt_conf_fg_verticalPixelDecimation_expl" : "Vertikale Pixelreduzierung (Faktor)",
|
||||
"edt_conf_fg_device_title" : "Device",
|
||||
@ -550,6 +585,7 @@
|
||||
"edt_conf_webc_docroot_expl" : "Lokaler Pfad zum WebUI Wurzelverzeichnis (Nur für WebUI Entwickler)",
|
||||
"edt_conf_effp_heading_title" : "Effekt Pfade",
|
||||
"edt_conf_effp_paths_title" : "Effekt Pfad(e)",
|
||||
"edt_conf_effp_paths_expl" : "Es können mehrere Ordner definiert werden die Effekte enthalten. Der Effekt Konfigurator speichert immer im Ersten Ordner.",
|
||||
"edt_conf_effp_paths_itemtitle" : "Pfad",
|
||||
"edt_conf_effp_disable_title" : "Deaktivierte Effekte",
|
||||
"edt_conf_effp_disable_itemtitle" : "Effekt",
|
||||
@ -571,7 +607,6 @@
|
||||
"edt_eff_systemshutdown_header_title" : "Herunterfahren",
|
||||
"edt_eff_snake_header_title" : "Schlange",
|
||||
"edt_eff_sparks_header_title" : "Funken",
|
||||
"edt_eff_storbe_header_title" : "Stroboskop",
|
||||
"edt_eff_traces_header_title" : "Farbspuren",
|
||||
"edt_eff_x-mas_header_title" : "Weihnachten",
|
||||
"edt_eff_trails_header_title" : "Spuren",
|
||||
@ -587,9 +622,15 @@
|
||||
"edt_eff_rotationtime_title" : "Rotationszeit",
|
||||
"edt_eff_sleeptime_title" : "Schlafzeit",
|
||||
"edt_eff_reversedirection_title" : "Richtung umkehren",
|
||||
"edt_eff_fadetime_title" : "Übergangszeit",
|
||||
"edt_eff_fadeintime_title" : "Zeit für Einblendung",
|
||||
"edt_eff_fadeouttime_title" : "Zeit für Ausblendung",
|
||||
"edt_eff_repeat_title" : "Wiederholung",
|
||||
"edt_eff_colorendtime_title" : "Zeit für Start-Farbe",
|
||||
"edt_eff_colorstarttime_title" : "Zeit für End-Farbe",
|
||||
"edt_eff_colorstart_title" : "Farbe Start",
|
||||
"edt_eff_colorend_title" : "Farbe Ende",
|
||||
"edt_eff_repeatcount_title" : "Anzahl Wiederholung",
|
||||
"edt_eff_maintain_end_color_title" : "Behalte Endfarbe",
|
||||
"edt_eff_colorshift_title" : "Farbverschiebung",
|
||||
"edt_eff_whichleds_title" : "Welche LEDs",
|
||||
"edt_eff_ledlist_title" : "LED Liste",
|
||||
@ -650,7 +691,7 @@
|
||||
"edt_msg_error_minimum_excl" : "Der Wert muss größer als $1 sein",
|
||||
"edt_msg_error_minimum_incl" : "Der Wert muss mindestens $1 sein",
|
||||
"edt_msg_error_maxLength" : "Die Eingabe darf höchstens $1 Zeichen lang sein",
|
||||
"edt_msg_error_minLength" : "Die Eingabe muss mindestens $ Zeichen lang sein",
|
||||
"edt_msg_error_minLength" : "Die Eingabe muss mindestens $1 Zeichen lang sein",
|
||||
"edt_msg_error_pattern" : "Die Eingabe muss dem gegebenen Muster entsprechen",
|
||||
"edt_msg_error_additionalItems" : "In diesem Feld sind keine weiteren Elemente erlaubt",
|
||||
"edt_msg_error_maxItems" : "Das Feld darf höchstens $1 Element(e) beinhalten",
|
||||
|
@ -1,13 +1,4 @@
|
||||
{
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"brindosch"
|
||||
],
|
||||
"project" : "Hyperion WebUI",
|
||||
"locale": "en",
|
||||
"last-updated": "2016-11-30",
|
||||
"message-documentation": "qqq.json"
|
||||
},
|
||||
"general_webui_title" : "Hyperion - Web Configuration",
|
||||
"general_country_de" : "Germany",
|
||||
"general_country_us" : "United States",
|
||||
@ -25,11 +16,12 @@
|
||||
"general_comp_SMOOTHING" : "Smoothing",
|
||||
"general_comp_BLACKBORDER" : "Blackbar Detection",
|
||||
"general_comp_KODICHECKER" : "Kodi Watch",
|
||||
"general_comp_FORWARDER" : "JSON/PROTO Forward",
|
||||
"general_comp_FORWARDER" : "Forwarder",
|
||||
"general_comp_UDPLISTENER" : "UDP Listener",
|
||||
"general_comp_BOBLIGHTSERVER" : "Boblight Server",
|
||||
"general_comp_GRABBER" : "Platform Capture",
|
||||
"general_comp_V4L" : "USB Capture",
|
||||
"general_comp_LEDDEVICE" : "LED device",
|
||||
"general_col_red" : "red",
|
||||
"general_col_green" : "green",
|
||||
"general_col_blue" : "blue",
|
||||
@ -45,18 +37,32 @@
|
||||
"general_btn_on" : "On",
|
||||
"general_btn_next" : "Next",
|
||||
"general_btn_back" : "Back",
|
||||
"general_btn_iswitch" : "Switch",
|
||||
"general_wiki_moreto" : "More informations to \"$1\" at our Wiki",
|
||||
"dashboard_label_intro" : "The dashboard give you a quick overview about the status of Hyperion and show you the latest news of the Hyperion Blog.",
|
||||
"dashboard_infobox_label_title" : "Information",
|
||||
"dashboard_infobox_label_currenthyp" : "Your Hyperion version:",
|
||||
"dashboard_infobox_label_latesthyp" : "Latest Hyperion version:",
|
||||
"dashboard_infobox_label_device" : "System:",
|
||||
"dashboard_infobox_message_updatewarning" : "A newer version of Hyperion is available! (V$1)",
|
||||
"dashboard_infobox_label_platform" : "Platform:",
|
||||
"dashboard_infobox_label_instance" : "Instance:",
|
||||
"dashboard_infobox_label_ports" : "Ports (json|proto):",
|
||||
"dashboard_infobox_message_updatewarning" : "A newer version of Hyperion is available! ($1)",
|
||||
"dashboard_infobox_message_updatesuccess" : "You run the latest version of Hyperion.",
|
||||
"dashboard_infobox_label_statush" : "Hyperion status:",
|
||||
"dashboard_infobox_label_smartacc" : "Smart Access",
|
||||
"dashboard_infobox_label_enableh" : "Enable Hyperion",
|
||||
"dashboard_infobox_label_disableh" : "Disable Hyperion",
|
||||
"dashboard_componentbox_label_title" : "Components status",
|
||||
"dashboard_componentbox_label_comp" : "Component",
|
||||
"dashboard_componentbox_label_status" : "Status",
|
||||
"dashboard_newsbox_label_title" : "Latest Blog posts",
|
||||
"dashboard_newsbox_label_title" : "Hyperion-Blog",
|
||||
"dashboard_newsbox_visitblog" : "Visit Hyperion-Blog",
|
||||
"dashboard_newsbox_noconn" : "Can't connect to Hyperion Server to retrieve latest posts, does your internet connection work?",
|
||||
"dashboard_newsbox_readmore" : "Read more",
|
||||
"dashboard_alert_message_confedit_t" : "Configuration modified",
|
||||
"dashboard_alert_message_confedit" : "Your Hyperion configuration has been modified. To apply it, restart Hyperion.",
|
||||
"dashboard_alert_message_disabled_t" : "Hyperion disabled",
|
||||
"dashboard_alert_message_disabled" : "Hyperion is currently disabled! To use it again, enable it at the dashboard.",
|
||||
"main_menu_dashboard_token" : "Dashboard",
|
||||
"main_menu_configuration_token" : "Configuration",
|
||||
"main_menu_general_conf_token" : "General",
|
||||
@ -91,7 +97,7 @@
|
||||
"conf_helptable_expl" : "Explanation",
|
||||
"conf_effect_path_intro" : "Define more effect paths if necessary.",
|
||||
"conf_effect_fgeff_intro" : "Define a booteffect or color, which is shown during Hyperion startup for the defined duration.",
|
||||
"conf_effect_bgeff_intro" : "Define a background effect, which us shown during \"idle\". (also temporarily via Kodi Watch)",
|
||||
"conf_effect_bgeff_intro" : "Define a background effect/color, which is shown during Hyperion \"idle\". Sarts always with priority channel 255.",
|
||||
"conf_leds_device_intro" : "Hyperion supports a lot of controllers to transmit data to your target device. Select a LED controller out of the sorted list and configure it. We have chosen the best default settings for each device.",
|
||||
"conf_leds_layout_intro" : "You need also a led layout, which reflects your led positions. The classic layout is the usual used tv frame, but we also support led matrix (led walls) creation. The view on this layout is ALWAYS of the FRONT of your TV.",
|
||||
"conf_leds_nav_label_ledcontroller" : "LED Controller",
|
||||
@ -104,10 +110,10 @@
|
||||
"conf_leds_optgroup_usb" : "USB",
|
||||
"conf_leds_optgroup_debug" : "Debug",
|
||||
"conf_leds_layout_btn_checklist" : "Show checklist",
|
||||
"conf_leds_leyout_checkp1" : "The black led is your first led, the first led is the point where you input your data signal.",
|
||||
"conf_leds_leyout_checkp2" : "The layout is always the front view of your TV, never the back view.",
|
||||
"conf_leds_leyout_checkp3" : "Make sure the direction is right. The grey leds indicate led number 2 and 3 to visualize the data direction.",
|
||||
"conf_leds_leyout_checkp4" : "Case Gap: To create a gap, ignore it first when you define Top/Bottom/Left/Right and set afterwards your gap length to remove a amount of leds. Modify the gap position until it matches.",
|
||||
"conf_leds_layout_checkp1" : "The black led is your first led, the first led is the point where you input your data signal.",
|
||||
"conf_leds_layout_checkp2" : "The layout is always the front view of your TV, never the back view.",
|
||||
"conf_leds_layout_checkp3" : "Make sure the direction is right. The grey leds indicate led number 2 and 3 to visualize the data direction.",
|
||||
"conf_leds_layout_checkp4" : "Case Gap: To create a gap, ignore it first when you define Top/Bottom/Left/Right and set afterwards your gap length to remove a amount of leds. Modify the gap position until it matches.",
|
||||
"conf_leds_layout_frame" : "Classic Layout (LED Frame)",
|
||||
"conf_leds_layout_matrix" : "Matrix Layout (LED Wall)",
|
||||
"conf_leds_layout_generatedconf" : "Generated/Current LED Configuration",
|
||||
@ -119,6 +125,7 @@
|
||||
"conf_leds_layout_preview_originTEXT" : "Created from: Textfield",
|
||||
"conf_leds_layout_preview_originMA" : "Created from: Matrix Layout(LED wall)",
|
||||
"conf_leds_layout_preview_totalleds" : "Totel LEDs: $1",
|
||||
"conf_leds_layout_preview_ledpower" : "Max. power consumption: $1 A",
|
||||
"conf_leds_layout_preview_l1" : "This is your first led (input position)",
|
||||
"conf_leds_layout_preview_l2" : "This visualizes the data direction (second/third led)",
|
||||
"conf_leds_layout_cl_top" : "Top",
|
||||
@ -148,7 +155,7 @@
|
||||
"conf_leds_layout_ma_opttopright" : "Top right",
|
||||
"conf_leds_layout_ma_optbottomleft" : "Bottom left",
|
||||
"conf_leds_layout_ma_optbottomright" : "Bottom right",
|
||||
"conf_leds_layout_textf1" : "This textfield shows by default your current loaded layout and will be overwritten if you generate a new one with the options below. Optional you could perform further edits.",
|
||||
"conf_leds_layout_textf1" : "This textfield shows by default your current loaded layout and will be overwritten if you generate a new one with the options above. Optional you could perform further edits.",
|
||||
"conf_grabber_fg_intro" : "Platforum capture is your local system capture as input source, Hyperion is installed on.",
|
||||
"conf_grabber_v4l_intro" : "USB capture is a (capture)device connected via USB which is used to input source pictures for processing.",
|
||||
"conf_colors_color_intro" : "Create one or more calibration profiles, adjust each color, brightness, linearization and more.",
|
||||
@ -162,12 +169,16 @@
|
||||
"conf_kodi_label_title" : "Kodi Watch",
|
||||
"conf_kodi_intro" : "The Kodi Watcher enables you to enable and disable the screencapture depending on Kodi state. This is not limited to the same machine, you could observe also a Kodi on any other device at your network.",
|
||||
"conf_logging_label_intro" : "Area to check log messages, depending on loglevel setting you see more or less information.",
|
||||
"conf_logging_btn_pbupload" : "Create report for support request",
|
||||
"conf_logging_btn_pbupload" : "Upload report for support request",
|
||||
"conf_logging_btn_autoscroll" : "Auto scrolling",
|
||||
"conf_logging_nomessage" : "No log messages available.",
|
||||
"conf_logging_uploading" : "Prepare data...",
|
||||
"conf_logging_yourlink" : "Link to your report",
|
||||
"conf_logging_uplfailed" : "Upload failed! Please check your internet connection!",
|
||||
"conf_logging_report" : "Report",
|
||||
"conf_logging_lastreports" : "Previous reports",
|
||||
"conf_logging_uplpolicy" : "By clicking this button you accept the",
|
||||
"conf_logging_contpolicy" : "Report Privacy Policy",
|
||||
"conf_webconfig_label_intro" : "Webconfiguration settings. Edit wisely.",
|
||||
"remote_losthint" : "Note: All changes are lost after a restart.",
|
||||
"remote_color_label" : "Colors/Effects",
|
||||
@ -176,24 +187,25 @@
|
||||
"remote_color_label_color" : "Color:",
|
||||
"remote_effects_label_effects" : "Effect:",
|
||||
"remote_adjustment_label" : "Color adjustment",
|
||||
"remote_adjustment_intro" : "Modifiy color/brightness/linearization during runtime. $1",
|
||||
"remote_adjustment_intro" : "Modifiy color/brightness/compensation during runtime. $1",
|
||||
"remote_input_label" : "Source Selection",
|
||||
"remote_input_intro" : "Hyperion uses a priority system to select a source. Everything you set has a priority (Effect/Color/Platform capture/USB capture and network sources). By default, Hyperion select sources depending on priority (lowest number reflects the current active source). Now you have the opportunity to select sources on your own. $1",
|
||||
"remote_input_label_autoselect" : "Auto Selection",
|
||||
"remote_input_setsource_btn" : "Select Input",
|
||||
"remote_input_sourceactiv_btn" : "Input active",
|
||||
"remote_input_setsource_btn" : "Select Source",
|
||||
"remote_input_sourceactiv_btn" : "Source active",
|
||||
"remote_input_origin" : "Origin",
|
||||
"remote_input_owner" : "Type",
|
||||
"remote_input_priority" : "Priority",
|
||||
"remote_input_status" : "Status/Action",
|
||||
"remote_input_duration" : "Duration:",
|
||||
"remote_input_ip" : "IP:",
|
||||
"remote_input_clearall" : "Clear all Effects/Colors",
|
||||
"remote_components_label" : "Components control",
|
||||
"remote_components_intro" : "Enable and disable components of Hyperion during runtime. $1",
|
||||
"remote_optgroup_usreffets" : "User Effects",
|
||||
"remote_optgroup_syseffets" : "Provided Effects",
|
||||
"remote_maptype_label" : "Mapping type",
|
||||
"remote_maptype_intro" : "Change the mapping type during runtime. $1",
|
||||
"remote_maptype_intro" : "Usually the led layout is responsible which led has a specific picture area, you could change it here. $1.",
|
||||
"remote_maptype_label_multicolor_mean" : "Multicolor",
|
||||
"remote_maptype_label_unicolor_mean" : "Unicolor",
|
||||
"effectsconfigurator_label_intro" : "Create out of the base effects new effects that are tuned to your liking. Depending on Effect there are options like color, speed, direction and more available.",
|
||||
@ -212,6 +224,7 @@
|
||||
"support_label_twtext" : "Share and follow on Twitter, be always up to date with latest post about the Hyperion development",
|
||||
"support_label_ggtext" : "Circle us on Google +!",
|
||||
"support_label_yttext" : "Bored from pictures? Checkout our Youtube channel!",
|
||||
"support_label_igtext" : "Visit us on Instagram to watch the latest Hyperion pictures!",
|
||||
"support_label_donate" : "Donate or use our affiliate links",
|
||||
"support_label_affinstr1" : "Click on the appropriate link of your country",
|
||||
"support_label_affinstr2" : "Everything you buy (doesn't matter what) we get a small fee based on your turnover",
|
||||
@ -246,16 +259,16 @@
|
||||
"info_conlost_label_reason3" : "- Hyperion isn't running",
|
||||
"info_conlost_label_autorecon" : "We reconnect again after Hyperion is available.",
|
||||
"info_conlost_label_autorefresh" : "This page will be automatically refreshed.",
|
||||
"info_conlost_label_reload" : "If not, click me or reload the page",
|
||||
"info_conlost_label_reload" : "Auto reconnect stopped - limit exceeded, please refresh page or click me.",
|
||||
"info_restart_title" : "Restarts currently...",
|
||||
"info_restart_rightback" : "Hyperion will be right back immediately!",
|
||||
"info_restart_contus" : "If you still hang around here after 20 seconds and you have no clue why please open a new topic at our support forum...",
|
||||
"info_restart_contusa" : "...with your last steps. Thank you!",
|
||||
"info_404" : "The page you requested is not available!",
|
||||
"infoDialog_general_success_title" : "Success",
|
||||
"infoDialog_general_error_title" : "Error",
|
||||
"infoDialog_general_warning_title" : "Warning",
|
||||
"infoDialog_checklist_title" : "Checklist!",
|
||||
"InfoDialog_leds_validfail_title" : "JSON Validation failed!",
|
||||
"infoDialog_effconf_deleted_text" : "The effect \"$1\" has been deleted successfully!",
|
||||
"infoDialog_effconf_created_text" : "The effect \"$1\" has been created successfully!",
|
||||
"InfoDialog_lang_title" : "Language setting",
|
||||
@ -273,6 +286,10 @@
|
||||
"infoDialog_import_comperror_text" : "Sad! Your browser doesn't support a import. Please try again with another browser.",
|
||||
"infoDialog_import_confirm_title" : "Confirm import",
|
||||
"infoDialog_import_confirm_text" : "Are you sure to import \"$1\"? This process can't be reverted!",
|
||||
"InfoDialog_iswitch_title" : "Hyperion switcher",
|
||||
"InfoDialog_iswitch_text" : "If you run Hyperion more than once in your local network, you could switch between the web configurations. Select the Hyperion instance below and switch!",
|
||||
"wiz_wizavail" : "Wizard available",
|
||||
"wiz_guideyou" : "The $1 will guide you through the settings. Just press the button!",
|
||||
"wiz_rgb_title" : "RGB Byte Order Wizard",
|
||||
"wiz_rgb_intro1" : "This wizard will guide you through the finding process of the correct color order for your leds. Click on continue to begin.",
|
||||
"wiz_rgb_intro2" : "When do you need this wizard? Example: You set the color red, but you get green or blue. You could also use it for first configuration.",
|
||||
@ -281,15 +298,24 @@
|
||||
"wiz_rgb_q" : "Which color show your leds, when the color dot above shows...",
|
||||
"wiz_rgb_qrend" : "...red?",
|
||||
"wiz_rgb_qgend" : "...green?",
|
||||
"wiz_hue_title" : "Hue Bridge Wizard",
|
||||
"wiz_hue_intro1" : "With this Setup Helper you can get a new User for your Hue Bridge and you can see your Lights with the IDs for Hyperion Configuration.",
|
||||
"wiz_hue_intro2" : "Remember: This is only a wizard. You have to copy and paste them in your config.",
|
||||
"wiz_hue_title" : "Philips Hue Wizard",
|
||||
"wiz_hue_intro1" : "This wizards configures Hyperion for the well known Philips Hue system. Features are Hue Bridge auto detection, user creation, set each hue light to a specific position on your picture or disable it and tune the Hyperion settings automatically! So in short: All you need are some clicks and you are done!",
|
||||
"wiz_hue_desc1" : "It searches automatically for a hue bridge, in case it can't find one you need to provide the ip address and push the reload button on the right. Now you need a user id, if you don't have one create a new one.",
|
||||
"wiz_hue_desc2" : "Now choose which lamps should be added. The position assigns the lamp to a specific position on your \"picture\". Disabled lamps won't be added. To identify single lamps press the button on the right.",
|
||||
"wiz_hue_ip" : "Hue Bridge IP:",
|
||||
"wiz_hue_username" : "Username:",
|
||||
"wiz_hue_create_user" : "Create User",
|
||||
"wiz_hue_failure_ip" : "Please check your IP Address.",
|
||||
"wiz_hue_failure_connection" : "Connection Timeout. Please press the button in time.",
|
||||
"wiz_hue_username" : "User ID:",
|
||||
"wiz_hue_create_user" : "Create new User",
|
||||
"wiz_hue_failure_ip" : "No Bridge found, please type in a valid ip",
|
||||
"wiz_hue_failure_connection" : "Timeout: Please press the bridge button within the period 30 seconds",
|
||||
"wiz_hue_failure_user" : "User not found, create a new one below or input a valid user id",
|
||||
"wiz_hue_press_link" : "Please press link button on the Hue Bridge.",
|
||||
"wiz_hue_ids_disabled" : "Deactivated",
|
||||
"wiz_hue_ids_entire" : "Whole picture",
|
||||
"wiz_hue_noids" : "This Hue bridge has no bulbs/stripes, please pair them before with the Hue Apps",
|
||||
"wiz_hue_pos": "Position/State",
|
||||
"wiz_hue_searchb": "Searching for bridge...",
|
||||
"wiz_hue_blinkblue": "Let ID $1 light up blue",
|
||||
"wiz_hue_ident" : "Identify",
|
||||
"wiz_cc_title" : "Color calibration wizard",
|
||||
"wiz_cc_intro1" : "This wizard will guide you through your led calibration. If you are using Kodi, the calibration pictures and videos can be send directly to kodi without further tasks on your side. If not, you need to download these files yourself and apply them, if the wizard wants it.",
|
||||
"wiz_cc_kwebs" : "Kodi webserver (IP:Port)",
|
||||
@ -301,8 +327,8 @@
|
||||
"wiz_cc_lettvshow" : "Let your TV show the following picture: $1",
|
||||
"wiz_cc_lettvshowm" : "Check this with the following pictures: $1",
|
||||
"wiz_cc_adjustit" : "Adjust your \"$1\", until your are fine with it. Take notice: The more you adjust away from the default value the color spectrum will be limited (Also for all colors in between). Depending on TV/LED color spectrum the results will vary.",
|
||||
"wiz_cc_adjustgamma" : "Gamma: What you have to do is, adjust gamma levels of each channel until you have the same perceived amount of each channel. For example, if your Grey is a bit reddish it means that you have to increase red gamma to reduce the amount of red (the more gamma, the less amount of color).",
|
||||
"wiz_cc_chooseid" : "Define a name for this profile.",
|
||||
"wiz_cc_adjustgamma" : "Gamma: What you have to do is, adjust gamma levels of each channel until you have the same perceived amount of each channel. Hint: Neutral is 1.0! For example, if your Grey is a bit reddish it means that you have to increase red gamma to reduce the amount of red (the more gamma, the less amount of color).",
|
||||
"wiz_cc_chooseid" : "Define a name for this color profile.",
|
||||
"wiz_cc_btn_switchpic" : "Switch picture",
|
||||
"wiz_cc_backlight" : "Additional you could define a backlight to sort out \"bad colors\" on nearly dark areas or if you don't like the switch between color and off during watching. Additional you could define if there should be some color in it or just white. This is disabled during the state \"Off\" ,\"Color\" and \"Effect\".",
|
||||
"wiz_cc_testintro" : "Time for a real test!",
|
||||
@ -345,6 +371,7 @@
|
||||
"edt_dev_spec_lightid_itemtitle" : "ID",
|
||||
"edt_dev_spec_transistionTime_title" : "Transistion time",
|
||||
"edt_dev_spec_switchOffOnBlack_title" : "Switch off on black",
|
||||
"edt_dev_spec_brightnessFactor_title" : "Brightness factor",
|
||||
"edt_dev_spec_uid_title" : "UID",
|
||||
"edt_dev_spec_intervall_title" : "Intervall",
|
||||
"edt_dev_spec_latchtime_title" : "Latch time",
|
||||
@ -398,41 +425,43 @@
|
||||
"edt_conf_color_heading_title" : "Color Calibration",
|
||||
"edt_conf_color_channelAdjustment_header_itemtitle" : "Profile",
|
||||
"edt_conf_color_channelAdjustment_header_title" : "Color channel adjustments",
|
||||
"edt_conf_color_channelAdjustment_header_expl": "Adjustments for color, brightness, linearization and more.",
|
||||
"edt_conf_color_channelAdjustment_header_expl": "Create color profiles that could be assigned to a specific component. Adjust color, gamma, brightness, compensation and more.",
|
||||
"edt_conf_color_imageToLedMappingType_title" : "Led area assignment",
|
||||
"edt_conf_color_imageToLedMappingType_expl" : "Overwrites the led area assignment of your led layout if it's not \"multicolor\"",
|
||||
"edt_conf_color_id_title" : "ID",
|
||||
"edt_conf_color_id_expl" : "User given name",
|
||||
"edt_conf_color_leds_title" : "LED index",
|
||||
"edt_conf_color_leds_expl" : "Assign this adjustment to all leds (*) or just some (0-24).",
|
||||
"edt_conf_color_black_title" : "black",
|
||||
"edt_conf_color_black_title" : "Black",
|
||||
"edt_conf_color_black_expl" : "The calibrated black value.",
|
||||
"edt_conf_color_white_title" : "white",
|
||||
"edt_conf_color_white_title" : "White",
|
||||
"edt_conf_color_white_expl" : "The calibrated white value.",
|
||||
"edt_conf_color_red_title" : "red",
|
||||
"edt_conf_color_red_title" : "Red",
|
||||
"edt_conf_color_red_expl" : "The calibrated red value.",
|
||||
"edt_conf_color_green_title" : "green",
|
||||
"edt_conf_color_green_title" : "Green",
|
||||
"edt_conf_color_green_expl" : "The calibrated green value.",
|
||||
"edt_conf_color_blue_title" : "blue",
|
||||
"edt_conf_color_blue_title" : "Blue",
|
||||
"edt_conf_color_blue_expl" : "The calibrated blue value.",
|
||||
"edt_conf_color_cyan_title" : "cyan",
|
||||
"edt_conf_color_cyan_title" : "Cyan",
|
||||
"edt_conf_color_cyan_expl" : "The calibrated cyan value.",
|
||||
"edt_conf_color_magenta_title" : "magenta",
|
||||
"edt_conf_color_magenta_title" : "Magenta",
|
||||
"edt_conf_color_magenta_expl" : "The calibrated magenta value.",
|
||||
"edt_conf_color_yellow_title" : "yellow",
|
||||
"edt_conf_color_yellow_title" : "Yellow",
|
||||
"edt_conf_color_yellow_expl" : "The calibrated yellow value.",
|
||||
"edt_conf_color_gammaRed_title" : "gamma red",
|
||||
"edt_conf_color_gammaRed_expl" : "The gamma of red.",
|
||||
"edt_conf_color_gammaGreen_title" : "gamma green",
|
||||
"edt_conf_color_gammaGreen_expl" : "The gamma of green.",
|
||||
"edt_conf_color_gammaBlue_title" : "gamma blue",
|
||||
"edt_conf_color_gammaBlue_expl" : "The gamma of blue.",
|
||||
"edt_conf_color_gammaRed_title" : "Gamma red",
|
||||
"edt_conf_color_gammaRed_expl" : "The gamma of red. 1.0 is neutral. Over 1.0 it reduces red, lower than 1.0 it adds red.",
|
||||
"edt_conf_color_gammaGreen_title" : "Gamma green",
|
||||
"edt_conf_color_gammaGreen_expl" : "The gamma of green. 1.0 is neutral. Over 1.0 it reduces green, lower than 1.0 it adds green.",
|
||||
"edt_conf_color_gammaBlue_title" : "Gamma blue",
|
||||
"edt_conf_color_gammaBlue_expl" : "The gamma of blue. 1.0 is neutral. Over 1.0 it reduces blue, lower than 1.0 it adds blue.",
|
||||
"edt_conf_color_backlightThreshold_title" : "Backlight threshold",
|
||||
"edt_conf_color_backlightThreshold_expl" : "The minimum amount of brightness (backlight). Disabled during effects, colors and in status \"Off\"",
|
||||
"edt_conf_color_backlightColored_title" : "Colored backlight",
|
||||
"edt_conf_color_backlightColored_expl" : "Add some color to your backlight.",
|
||||
"edt_conf_color_brightness_title" : "maximal brightness",
|
||||
"edt_conf_color_brightness_expl" : "From 0.0 to 0.5 the brightness is linearised, from 0.5 to 1.0 cyan, magenta, yellow is up to 2x brighter and white 3x.",
|
||||
"edt_conf_color_brightness_title" : "Brightness",
|
||||
"edt_conf_color_brightness_expl" : "set overall brightness of leds",
|
||||
"edt_conf_color_brightnessComp_title" : "Brightness compensation",
|
||||
"edt_conf_color_brightnessComp_expl" : "Compensates bightness differences between red green blue, cyan magenta yellow and white. 100 means full compensation, 0 no compensation",
|
||||
"edt_conf_smooth_heading_title" : "Smoothing",
|
||||
"edt_conf_smooth_type_title" : "Type",
|
||||
"edt_conf_smooth_type_expl" : "Type of smoothing.",
|
||||
@ -471,6 +500,8 @@
|
||||
"edt_conf_v4l2_cropTop_expl" : "Count of pixels on the top side that are removed from the picture.",
|
||||
"edt_conf_v4l2_cropBottom_title" : "Crop bottom",
|
||||
"edt_conf_v4l2_cropBottom_expl" : "Count of pixels on the bottom side that are removed from the picture.",
|
||||
"edt_conf_v4l2_signalDetection_title" : "Enable signal detection",
|
||||
"edt_conf_v4l2_signalDetection_expl" : "If enabled, usb capture will be temporarily disabled when no signal was found.",
|
||||
"edt_conf_v4l2_redSignalThreshold_title" : "Red signal threshold",
|
||||
"edt_conf_v4l2_redSignalThreshold_expl" : "Darkens low red values (recognized as black)",
|
||||
"edt_conf_v4l2_greenSignalThreshold_title" : "Green signal threshold",
|
||||
@ -484,6 +515,10 @@
|
||||
"edt_conf_fg_frequency_Hz_expl" : "How fast new pictures are captured",
|
||||
"edt_conf_fg_horizontalPixelDecimation_title" : "Horizontal pixel decimation",
|
||||
"edt_conf_fg_horizontalPixelDecimation_expl" : "Horizontal pixel decimation (factor)",
|
||||
"edt_conf_fg_width_title" : "Width",
|
||||
"edt_conf_fg_width_expl" : "Shrink picture to this width, as raw picture needs a lot of cpu time.",
|
||||
"edt_conf_fg_height_title" : "Height",
|
||||
"edt_conf_fg_height_expl" : "Shrink picture to this height, as raw material needs a lot of cpu time.",
|
||||
"edt_conf_fg_useXGetImage_title" : "Use XGetImage",
|
||||
"edt_conf_fg_useXGetImage_expl" : "XGetImage for newer X11 desktops",
|
||||
"edt_conf_fg_verticalPixelDecimation_title" : "Vertical pixel decimation",
|
||||
@ -551,6 +586,7 @@
|
||||
"edt_conf_webc_docroot_expl" : "Local webinterface root path (just for webui developer)",
|
||||
"edt_conf_effp_heading_title" : "Effekt Paths",
|
||||
"edt_conf_effp_paths_title" : "Effect Path(s)",
|
||||
"edt_conf_effp_paths_expl" : "You could define more folders that contain effects. The effect configurator will always save inside the first folder.",
|
||||
"edt_conf_effp_paths_itemtitle" : "Path",
|
||||
"edt_conf_effp_disable_title" : "Disabed Effects",
|
||||
"edt_conf_effp_disable_itemtitle" : "Effect",
|
||||
@ -572,7 +608,6 @@
|
||||
"edt_eff_systemshutdown_header_title" : "System Shutdown",
|
||||
"edt_eff_snake_header_title" : "Snake",
|
||||
"edt_eff_sparks_header_title" : "Sparks",
|
||||
"edt_eff_storbe_header_title" : "Strobe",
|
||||
"edt_eff_traces_header_title" : "Color Traces",
|
||||
"edt_eff_x-mas_header_title" : "X-Mas",
|
||||
"edt_eff_trails_header_title" : "Trails",
|
||||
@ -588,9 +623,15 @@
|
||||
"edt_eff_rotationtime_title" : "Rotation time",
|
||||
"edt_eff_sleeptime_title" : "Sleep time",
|
||||
"edt_eff_reversedirection_title" : "Reverse direction",
|
||||
"edt_eff_fadetime_title" : "Fade time",
|
||||
"edt_eff_fadeintime_title" : "Fade in time",
|
||||
"edt_eff_fadeouttime_title" : "Fade out time",
|
||||
"edt_eff_repeat_title" : "Repeat",
|
||||
"edt_eff_repeatcount_title" : "Repeat count",
|
||||
"edt_eff_colorendtime_title" : "Time to hold start color",
|
||||
"edt_eff_colorstarttime_title" : "Time to hold end color",
|
||||
"edt_eff_colorstart_title" : "Color start",
|
||||
"edt_eff_colorend_title" : "Color end",
|
||||
"edt_eff_maintain_end_color_title" : "Keep endcolor",
|
||||
"edt_eff_colorshift_title" : "Color Shift",
|
||||
"edt_eff_whichleds_title" : "Which Leds",
|
||||
"edt_eff_ledlist_title" : "Led List",
|
||||
|
@ -39,7 +39,6 @@
|
||||
"dashboard_infobox_label_title": "Información",
|
||||
"dashboard_infobox_label_currenthyp": "Tu versión de Hyperion:",
|
||||
"dashboard_infobox_label_latesthyp": "Última versión de Hyperion:",
|
||||
"dashboard_infobox_label_device": "Sistema:",
|
||||
"dashboard_infobox_message_updatewarning": "¡Una versión más nueva de Hyperion está disponible! (V$1)",
|
||||
"dashboard_infobox_message_updatesuccess": "Ejecutas la última versión de Hyperion.",
|
||||
"dashboard_componentbox_label_title": "Estado de los componentes",
|
||||
@ -94,10 +93,6 @@
|
||||
"conf_leds_optgroup_usb": "USB",
|
||||
"conf_leds_optgroup_debug": "Depurar",
|
||||
"conf_leds_layout_btn_checklist": "Mostrar lista",
|
||||
"conf_leds_leyout_checkp1": "El led negro es tu primer led, el primer led es el punto donde introduces tu señal de datos.",
|
||||
"conf_leds_leyout_checkp2": "La disposición es siempre la vista delantera de tu TV, nunca la visión posterior.",
|
||||
"conf_leds_leyout_checkp3": "Asegúrate de que la dirección es correcta. Los leds grises indican los led números 2 y 3 para visualizar la dirección de los datos.",
|
||||
"conf_leds_leyout_checkp4": "Caso Hueco: Para crear un hueco, ignóralo primero cuando definas Superior/Inferior/Izquieda/Derecha y ajusta después su longitud de hueco para eliminar una cantidad de leds. Modifica la posición del hueco hasta que coincida.",
|
||||
"conf_leds_layout_frame": "Disposición Clásica (Marco LED)",
|
||||
"conf_leds_layout_matrix": "Disposición de Matriz (Pared LED)",
|
||||
"conf_leds_layout_generatedconf": "Configuración LED Generada/Actual",
|
||||
@ -245,7 +240,6 @@
|
||||
"infoDialog_general_error_title": "Error",
|
||||
"infoDialog_general_warning_title": "Advertencia",
|
||||
"infoDialog_checklist_title": "¡Lista!",
|
||||
"InfoDialog_leds_validfail_title": "¡Validación JSON fallida!",
|
||||
"infoDialog_effconf_deleted_text": "¡El efecto \"$1\" ha sido eliminado con éxito!",
|
||||
"infoDialog_effconf_created_text": "¡El efecto \"$1\" ha sido creado con éxito!",
|
||||
"InfoDialog_lang_title": "Configuración de idioma",
|
||||
@ -287,11 +281,11 @@
|
||||
"wiz_cc_kodidisconlink": "Descarga enlaces de imagenes:",
|
||||
"wiz_cc_kodicon": "Servidor web Kodi encontrado, proceder con el soporte de Kodi.",
|
||||
"wiz_cc_kodimsg_start": "Prueba con éxito - ¡tiempo de continuar!",
|
||||
"wiz_cc_kodishould": "Kodi debería la siguiente imagen: $1",
|
||||
"wiz_cc_kodishould": "Kodi debería mostrar la siguiente imagen: $1",
|
||||
"wiz_cc_lettvshow": "Deja que tu TV muestre la siguiente imagen: $1",
|
||||
"wiz_cc_lettvshowm": "Comprueba esto con las siguientes imágenes: $1",
|
||||
"wiz_cc_adjustit": "Ajusta tu \"$1\", hasta que estés agusto con él. Ten en cuenta: Cuanto más lo ajustes fuera del valor predeterminado, el espectro de color será limitado (también para todos los colores intermedios). Dependiendo del espectro de color de TV/LED, los resultados variarán.",
|
||||
"wiz_cc_adjustgamma": "Gamma: What you have to do is, adjust gamma levels of each channel until you have the same perceived amount of each channel. For example, if your Grey is a bit reddish it means that you have to increase red gamma to reduce the amount of red (the more gamma, the less amount of color).",
|
||||
"wiz_cc_adjustgamma": "Gamma: Lo que tienes que hacer es ajustar los niveles gamma de cada canal hasta que tengas la misma cantidad percibida de cada canal. Por ejemplo, si su Gris es un poco rojizo, significa que tiene que aumentar el gamma rojo para reducir la cantidad de rojo (más gamma, menos cantidad de color).",
|
||||
"wiz_cc_chooseid": "Define un nombre para éste perfil.",
|
||||
"wiz_cc_btn_switchpic": "Cambiar imagen",
|
||||
"wiz_cc_backlight": "Adicionalmente podrías definir una retroiluminación para solucionar \"malos colores\" en áreas casi oscuras o si no te gusta el cambio entre color y apagado durante la observación. Adicionalmente se podría definir si debe haber algún color en ella o simplemente blanco. Esto se desactiva durante el estado \"Off\", \"Color\" y \"Efecto\".",
|
||||
@ -577,7 +571,6 @@
|
||||
"edt_eff_rotationtime_title": "Tiempo de rotación",
|
||||
"edt_eff_sleeptime_title": "Hora de dormir",
|
||||
"edt_eff_reversedirection_title": "Dirección inversa",
|
||||
"edt_eff_fadetime_title": "Tiempo de fundido",
|
||||
"edt_eff_colorstart_title": "Color de inicio",
|
||||
"edt_eff_colorend_title": "Color final",
|
||||
"edt_eff_colorshift_title": "Cambio de Color",
|
||||
@ -662,15 +655,44 @@
|
||||
"edt_msg_button_delete_row_title_short": "Eliminar",
|
||||
"edt_msg_button_collapse": "Colapsar",
|
||||
"edt_msg_button_expand": "Expandir",
|
||||
"@metadata": {
|
||||
"authors": [
|
||||
"brindosch"
|
||||
],
|
||||
"project": "WebUI Hyperion",
|
||||
"locale": "en",
|
||||
"last-updated": "2016-11-30",
|
||||
"message-documentation": "qqq.json"
|
||||
},
|
||||
"edt_conf_color_channelAdjustment_header_expl": "Ajustes para color, brillo, linealización y más.",
|
||||
"general_speech_es": "Español"
|
||||
"general_speech_es": "Español",
|
||||
"dashboard_infobox_label_platform": "Plataforma:",
|
||||
"dashboard_infobox_label_instance": "Instancia:",
|
||||
"dashboard_infobox_label_ports": "Puertos (json|proto):",
|
||||
"dashboard_newsbox_visitblog": "Visitar Hyperion-Blog",
|
||||
"dashboard_newsbox_noconn": "No se puede conectar al Servidor Hyperion para recuperar los últimos mensajes, ¿Funciona tu conexión a Internet?",
|
||||
"dashboard_newsbox_readmore": "Leer más",
|
||||
"conf_leds_layout_checkp1": "El led negro es tu primer led, el primer led es el punto donde introduces tu señal de datos.",
|
||||
"conf_leds_layout_checkp2": "La disposición es siempre la vista delantera de tu TV, nunca la visión posterior.",
|
||||
"conf_leds_layout_checkp3": "Asegúrate de que la dirección es correcta. Los leds grises indican los led número 2 y 3 para visualizar la dirección de los datos.",
|
||||
"conf_leds_layout_checkp4": "Hueco: Para crear un hueco, ignóralo primero cuando defina Superior/Inferior/Izquierda/Derecha y ajusta después la longitud del hueco para eliminar una cantidad de leds. Modifica la posición del hueco hasta que coincida.",
|
||||
"conf_leds_layout_preview_ledpower": "Consumo Máx. de energía: $1 A",
|
||||
"info_404": "¡La pagina que buscas no está disponible!",
|
||||
"edt_conf_fg_width_title": "Anchura",
|
||||
"edt_conf_fg_width_expl": "Encoge la imagen a este ancho, como imagen raw necesita un montón de tiempo de CPU.",
|
||||
"edt_conf_fg_height_title": "Altura",
|
||||
"edt_conf_fg_height_expl": "Reducir la imagen a esta altura, como material raw necesita un montón de tiempo de CPU.",
|
||||
"edt_conf_effp_paths_expl": "Puedes definir más carpetas que contengan efectos. El configurador de efectos siempre guardará en la primera carpeta.",
|
||||
"edt_conf_v4l2_signalDetection_title": "Habilitar detección de señal",
|
||||
"general_comp_LEDDEVICE": "Dispositivo LED",
|
||||
"conf_logging_lastreports": "Informes anteriores",
|
||||
"support_label_igtext": "¡Visítanos en Instagram para ver las últimas imágenes de Hyperion!",
|
||||
"edt_conf_v4l2_signalDetection_expl": "Si está habilitado, la captura USB estará temporaalmente deshabilitada cuando no se haya encontrado señal.",
|
||||
"general_btn_iswitch": "Cambiar",
|
||||
"dashboard_infobox_label_statush": "Estado de Hyperion:",
|
||||
"dashboard_infobox_label_smartacc": "Acceso Inteligente",
|
||||
"dashboard_infobox_label_enableh": "Habilitar Hyperion",
|
||||
"dashboard_infobox_label_disableh": "Deshabilitar Hyperion",
|
||||
"remote_input_clearall": "Borrar todos los Efectos/Colores",
|
||||
"InfoDialog_iswitch_title": "Conmutador Hyperion",
|
||||
"InfoDialog_iswitch_text": "Si ejecutas Hyperion más de una vez en tu red local, puedes cambiar entre las configuraciones web. ¡Selecciona la instancia de Hyperion a continuación y cambia!",
|
||||
"edt_eff_fadeintime_title": "Tiempo de fundido",
|
||||
"edt_eff_fadeouttime_title": "Tiempo para desvancer",
|
||||
"edt_eff_repeat_title": "Repetir",
|
||||
"edt_eff_colorendtime_title": "Tiempo para mantener el color de inicio",
|
||||
"edt_eff_colorstarttime_title": "Tiempo para mantener el color de fin",
|
||||
"edt_dev_spec_brightnessFactor_title": "Factor de brillo",
|
||||
"edt_conf_color_brightnessComp_title": "Compensación de brillo",
|
||||
"edt_conf_color_brightnessComp_expl": "Compensa las diferencias de brillo entre RGB, CMY y blanco. 100 significa compensación completa, 0 sin compensación"
|
||||
}
|
@ -2,54 +2,58 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<script>
|
||||
if (/MSIE/.test(navigator.userAgent) || /Trident/.test(navigator.userAgent))
|
||||
{
|
||||
window.location.pathname = '/content/ie_not_supported.html';
|
||||
}
|
||||
</script>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
|
||||
<meta name="description" content="">
|
||||
<meta name="description" content="Hyperion Web Configuration">
|
||||
<meta name="msapplication-TileColor" content="#91989C">
|
||||
<meta name="msapplication-TileImage" content="/mstile-144x144.png">
|
||||
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" href="/favicon.png" sizes="32x32">
|
||||
|
||||
<title data-i18n="general_webui_title">Hyperion - Error</title>
|
||||
<title data-i18n="general_webui_title">Hyperion - Web Configuration</title>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="/js/lib/jquery.min.js"></script>
|
||||
<script src="js/lib/jquery.min.js"></script>
|
||||
|
||||
<!-- Hyperion -->
|
||||
<script src="/js/hyperion.js"></script>
|
||||
<script src="/js/ui_utils.js"></script>
|
||||
|
||||
<!-- textarea -->
|
||||
<script src="/js/lib/jquery-linedtextarea.js"></script>
|
||||
<link href="/css/jquery-linedtextarea.css" type="text/css" rel="stylesheet" />
|
||||
<script src="js/hyperion.js"></script>
|
||||
<script src="js/ui_utils.js"></script>
|
||||
|
||||
<!-- Colorpicker -->
|
||||
<script src="/js/lib/bootstrap-colorpicker.min.js"></script>
|
||||
<link href="/css/bootstrap-colorpicker.min.css" rel="stylesheet">
|
||||
<script src="js/lib/bootstrap-colorpicker.min.js"></script>
|
||||
<link href="css/bootstrap-colorpicker.min.css" rel="stylesheet">
|
||||
|
||||
<!-- JSONEditor -->
|
||||
<script src="/js/lib/jsoneditor.js"></script>
|
||||
<script src="js/lib/jsoneditor.js"></script>
|
||||
|
||||
<!--Language Support -->
|
||||
<script src="/js/lib/jquery.i18n.js"></script>
|
||||
<script src="/js/lib/jquery.i18n.messagestore.js"></script>
|
||||
<script src="/js/lib/jquery.i18n.fallbacks.js"></script>
|
||||
<script src="/js/lib/jquery.i18n.parser.js"></script>
|
||||
<script src="/js/lib/jquery.i18n.emitter.js"></script>
|
||||
<script src="/js/lib/jquery.i18n.language.js"></script>
|
||||
<script src="js/lib/jquery.i18n.js"></script>
|
||||
<script src="js/lib/jquery.i18n.messagestore.js"></script>
|
||||
<script src="js/lib/jquery.i18n.fallbacks.js"></script>
|
||||
<script src="js/lib/jquery.i18n.parser.js"></script>
|
||||
<script src="js/lib/jquery.i18n.emitter.js"></script>
|
||||
<script src="js/lib/jquery.i18n.language.js"></script>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="/css/bootstrap.css" rel="stylesheet">
|
||||
|
||||
<!-- Flags -->
|
||||
<link href="/css/flag-icon.min.css" rel="stylesheet">
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- MetisMenu CSS -->
|
||||
<link href="/css/metisMenu.css" rel="stylesheet">
|
||||
<link href="css/metisMenu.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link href="/css/sb-admin-2.css" rel="stylesheet">
|
||||
<link href="/css/hyperion.css" rel="stylesheet">
|
||||
<link href="css/sb-admin-2.css" rel="stylesheet">
|
||||
<link href="css/hyperion.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<link href="/css/font-awesome.min.css" rel="stylesheet" type="text/css">
|
||||
<link href="css/font-awesome.min.css" rel="stylesheet" type="text/css">
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
@ -87,14 +91,9 @@
|
||||
<!-- /.navbar-header -->
|
||||
|
||||
<ul class="nav navbar-top-links navbar-right">
|
||||
<li class="dropdown" id="btn_setlang">
|
||||
<li class="dropdown" id="btn_instanceswitch" style="display:none">
|
||||
<a>
|
||||
<i class="fa fa-globe fa-fw"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="dropdown" id="btn_setaccess">
|
||||
<a>
|
||||
<i class="fa fa-key fa-fw"></i>
|
||||
<i class="fa fa-exchange fa-fw"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="dropdown" id="btn_open_ledsim">
|
||||
@ -125,19 +124,33 @@
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li id="btn_wizard_philipshue">
|
||||
</ul>
|
||||
</li>
|
||||
<!-- /.dropdown -->
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="fa fa-wrench fa-fw"></i> <i class="fa fa-caret-down"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-alerts">
|
||||
<li id="btn_setlang">
|
||||
<a>
|
||||
<div>
|
||||
<i class="fa fa-magic fa-fw"></i>
|
||||
<span data-i18n="wiz_hue_title"></span>
|
||||
<i class="fa fa-globe fa-fw"></i>
|
||||
<span data-i18n="InfoDialog_lang_title"></span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li id="btn_setaccess">
|
||||
<a>
|
||||
<div>
|
||||
<i class="fa fa-key fa-fw"></i>
|
||||
<span data-i18n="InfoDialog_access_title"></span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- /.dropdown-alerts -->
|
||||
</li>
|
||||
<!-- /.dropdown -->
|
||||
</ul>
|
||||
<!-- /.navbar-top-left -->
|
||||
|
||||
@ -177,11 +190,18 @@
|
||||
</nav>
|
||||
|
||||
<!-- Page Content -->
|
||||
<div id="page-wrapper" style="padding-top:10px">
|
||||
<div id="hyperion_reload_notify" class="alert alert-warning" style="display:none;padding:10px;margin:0">
|
||||
<div class="panel-danger" style="text-align:right">
|
||||
<div style="float:left;line-height:33px;" data-i18n="dashboard_alert_message_confedit">Your Hyperion configuration has been modified. To apply it, restart Hyperion.</div>
|
||||
<button id="btn_hyperion_reload" class="btn btn-danger" data-i18n="general_btn_restarthyperion">Restart Hyperion</button>
|
||||
<div id="page-wrapper" style="padding-top:10px; overflow: hidden;">
|
||||
<div id="hyperion_reload_notify" style="display:none;padding:0 10px;margin:0">
|
||||
<div class="bs-callout bs-callout-warning">
|
||||
<h4 data-i18n="dashboard_alert_message_confedit_t"></h4>
|
||||
<span data-i18n="dashboard_alert_message_confedit"></span>
|
||||
<p><button id="btn_hyperion_reload" class="btn btn-warning btn-sm" style="margin-top:10px" data-i18n="general_btn_restarthyperion"></button></p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="hyperion_disabled_notify" style="display:none;padding:0 10px;margin:0">
|
||||
<div class="bs-callout bs-callout-danger">
|
||||
<h4 data-i18n="dashboard_alert_message_disabled_t"></h4>
|
||||
<span data-i18n="dashboard_alert_message_disabled"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -254,25 +274,29 @@
|
||||
</div>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="/js/lib/bootstrap.min.js"></script>
|
||||
<script src="js/lib/bootstrap.min.js"></script>
|
||||
|
||||
<!-- Metis Menu Plugin JavaScript -->
|
||||
<script src="/js/lib/metisMenu.min.js"></script>
|
||||
<script src="js/lib/metisMenu.min.js"></script>
|
||||
|
||||
<!-- Custom Theme JavaScript -->
|
||||
<script src="/js/lib/sb-admin-2.js"></script>
|
||||
<script src="js/lib/sb-admin-2.js"></script>
|
||||
|
||||
<script src="/js/content_index.js"></script>
|
||||
<script src="/js/settings.js"></script>
|
||||
<script src="/js/wizard.js"></script>
|
||||
<script src="js/content_index.js"></script>
|
||||
<script src="js/settings.js"></script>
|
||||
<script src="js/wizard.js"></script>
|
||||
|
||||
<!--gijgo dialog-->
|
||||
<script src="/js/lib/draggable.min.js"></script>
|
||||
<script src="/js/lib/dialog.min.js"></script>
|
||||
<script src="/js/ledsim.js"></script>
|
||||
<script src="js/lib/draggable.min.js"></script>
|
||||
<script src="js/lib/dialog.min.js"></script>
|
||||
<script src="js/ledsim.js"></script>
|
||||
|
||||
<!--Client-side download-->
|
||||
<script src='/js/lib/download.min.js'></script>
|
||||
<script src='js/lib/download.min.js'></script>
|
||||
|
||||
<!--JsonAceEditor-->
|
||||
<script src='js/lib/jsonaceeditor.min.js'></script>
|
||||
<link href="css/jsonaceeditor.min.css" rel="stylesheet" type="text/css">
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -68,6 +68,9 @@ $(document).ready( function() {
|
||||
requestWriteConfig(editor_blackborder.getValue());
|
||||
});
|
||||
|
||||
//wiki links
|
||||
$('#editor_container_blackborder').append(buildWL("user/moretopics/bbmode","edt_conf_bb_mode_title",true));
|
||||
|
||||
//create introduction
|
||||
if(showOptHelp)
|
||||
{
|
||||
|
@ -1,24 +1,73 @@
|
||||
$(document).ready( function() {
|
||||
performTranslation();
|
||||
|
||||
function newsCont(t,e,l)
|
||||
{
|
||||
var h = '<div style="padding-left:9px;border-left:6px solid #0088cc;">';
|
||||
h += '<h4 style="font-weight:bold;font-size:17px">'+t+'</h4>';
|
||||
h += e;
|
||||
h += '<a href="'+l+'" class="" target="_blank"><i class="fa fa-fw fa-newspaper-o"></i>'+$.i18n('dashboard_newsbox_readmore')+'</a>';
|
||||
h += '</div><hr/>';
|
||||
$('#dash_news').append(h);
|
||||
}
|
||||
|
||||
function createNews(d)
|
||||
{
|
||||
for(var i = 0; i<d.length; i++)
|
||||
{
|
||||
if(i > 5)
|
||||
break;
|
||||
|
||||
title = d[i].title.rendered;
|
||||
excerpt = d[i].excerpt.rendered;
|
||||
link = d[i].link+'?pk_campaign=WebUI&pk_kwd=news_'+d[i].slug;
|
||||
|
||||
newsCont(title,excerpt,link);
|
||||
}
|
||||
}
|
||||
|
||||
function getNews()
|
||||
{
|
||||
var h = '<span style="color:red;font-weight:bold">'+$.i18n('dashboard_newsbox_noconn')+'</span>';
|
||||
$.ajax({
|
||||
url: 'https://hyperion-project.org/wp-json/wp/v2/posts?_embed',
|
||||
dataType: 'json',
|
||||
type: 'GET',
|
||||
timeout: 2000
|
||||
})
|
||||
.done( function( data, textStatus, jqXHR ) {
|
||||
if(jqXHR.status == 200)
|
||||
createNews(data);
|
||||
else
|
||||
$('#dash_news').html(h);
|
||||
})
|
||||
.fail( function( jqXHR, textStatus ) {
|
||||
$('#dash_news').html(h);
|
||||
});
|
||||
}
|
||||
|
||||
//getNews();
|
||||
|
||||
function updateComponents()
|
||||
{
|
||||
var components = serverInfo.info.components;
|
||||
var components = serverInfo.components;
|
||||
components_html = "";
|
||||
for ( idx=0; idx<components.length;idx++)
|
||||
{
|
||||
components_html += '<tr><td>'+$.i18n('general_comp_'+components[idx].name)+'</td><td><i class="fa fa-circle component-'+(components[idx].enabled?"on":"off")+'"></i></td></tr>';
|
||||
}
|
||||
$("#tab_components").html(components_html);
|
||||
|
||||
//info
|
||||
$('#dash_statush').html(serverInfo.hyperion.off? '<span style="color:red">'+$.i18n('general_btn_off')+'</span>':'<span style="color:green">'+$.i18n('general_btn_on')+'</span>');
|
||||
$('#btn_hsc').html(serverInfo.hyperion.off? '<button class="btn btn-sm btn-success" onClick="requestSetComponentState(\'ALL\',true)">'+$.i18n('dashboard_infobox_label_enableh')+'</button>' : '<button class="btn btn-sm btn-danger" onClick="requestSetComponentState(\'ALL\',false)">'+$.i18n('dashboard_infobox_label_disableh')+'</button>');
|
||||
}
|
||||
|
||||
// get active led device
|
||||
var leddevice = serverInfo.info.ledDevices.active;
|
||||
$('#dash_leddevice').html(leddevice);
|
||||
|
||||
// get host
|
||||
var hostname = serverInfo.info.hostname;
|
||||
$('#dash_systeminfo').html(hostname+':'+jsonPort);
|
||||
// add more info
|
||||
$('#dash_leddevice').html(serverInfo.ledDevices.active);
|
||||
$('#dash_currv').html(currentVersion);
|
||||
$('#dash_instance').html(serverConfig.general.name);
|
||||
$('#dash_ports').html(jsonPort+' | '+serverConfig.protoServer.port);
|
||||
|
||||
$.get( "https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/version.json", function( data ) {
|
||||
parsedUpdateJSON = JSON.parse(data);
|
||||
@ -26,15 +75,32 @@ $(document).ready( function() {
|
||||
var cleanLatestVersion = latestVersion.replace(/\./g, '');
|
||||
var cleanCurrentVersion = currentVersion.replace(/\./g, '');
|
||||
|
||||
$('#currentversion').html(currentVersion);
|
||||
$('#latestversion').html(latestVersion);
|
||||
// $('#dash_latev').html(latestVersion);
|
||||
|
||||
if ( cleanCurrentVersion < cleanLatestVersion )
|
||||
$('#versioninforesult').html('<div style="margin:0px;" class="alert alert-warning">'+$.i18n('dashboard_infobox_message_updatewarning', latestVersion)+'</div>');
|
||||
else
|
||||
$('#versioninforesult').html('<div style="margin:0px;" class="alert alert-success">'+$.i18n('dashboard_infobox_message_updatesuccess')+'</div>');
|
||||
// if ( cleanCurrentVersion < cleanLatestVersion )
|
||||
// $('#versioninforesult').html('<div class="bs-callout bs-callout-warning" style="margin:0px">'+$.i18n('dashboard_infobox_message_updatewarning', latestVersion)+'</div>');
|
||||
// else
|
||||
$('#versioninforesult').html('<div class="bs-callout bs-callout-success" style="margin:0px">'+$.i18n('dashboard_infobox_message_updatesuccess')+'</div>');
|
||||
});
|
||||
|
||||
//determine platform
|
||||
var grabbers = serverInfo.grabbers.available;
|
||||
var html = "";
|
||||
|
||||
if(grabbers.indexOf('dispmanx') > -1)
|
||||
html += 'Raspberry Pi';
|
||||
else if(grabbers.indexOf('x11') > -1)
|
||||
html += 'X86';
|
||||
else if(grabbers.indexOf('osx') > -1)
|
||||
html += 'OSX';
|
||||
else if(grabbers.indexOf('amlogic') > -1)
|
||||
html += 'Amlogic';
|
||||
else
|
||||
html += 'Framebuffer';
|
||||
|
||||
$('#dash_platform').html(html);
|
||||
|
||||
|
||||
//interval update
|
||||
updateComponents();
|
||||
$(hyperion).on("cmd-serverinfo",updateComponents);
|
||||
|
@ -99,13 +99,17 @@ $(document).ready( function() {
|
||||
});
|
||||
|
||||
$('#btn_submit_foregroundEffect').off().on('click',function() {
|
||||
//requestWriteConfig(foregroundEffect_editor.getValue());
|
||||
console.log(foregroundEffect_editor.getValue());
|
||||
var value = foregroundEffect_editor.getValue();
|
||||
if(typeof value.foregroundEffect.effect == 'undefined')
|
||||
value.foregroundEffect.effect = serverConfig.foregroundEffect.effect;
|
||||
requestWriteConfig(value);
|
||||
});
|
||||
|
||||
$('#btn_submit_backgroundEffect').off().on('click',function() {
|
||||
//requestWriteConfig(backgroundEffect_editor.getValue());
|
||||
console.log(backgroundEffect_editor.getValue());
|
||||
var value = backgroundEffect_editor.getValue();
|
||||
if(typeof value.backgroundEffect.effect == 'undefined')
|
||||
value.backgroundEffect.effect = serverConfig.backgroundEffect.effect;
|
||||
requestWriteConfig(value);
|
||||
});
|
||||
|
||||
//create introduction
|
||||
@ -119,7 +123,7 @@ $(document).ready( function() {
|
||||
function updateEffectlist(){
|
||||
if(editorReady)
|
||||
{
|
||||
var newEffects = serverInfo.info.effects;
|
||||
var newEffects = serverInfo.effects;
|
||||
if (newEffects.length != oldEffects.length)
|
||||
{
|
||||
$('#root_foregroundEffect_effect').html('');
|
||||
|
@ -10,7 +10,7 @@ $(document).ready( function() {
|
||||
createHintH("intro", $.i18n('effectsconfigurator_label_intro'), "intro_effc");
|
||||
|
||||
function updateDelEffectlist(){
|
||||
var newDelList = serverInfo.info.effects;
|
||||
var newDelList = serverInfo.effects;
|
||||
if(newDelList.length != oldDelList.length)
|
||||
{
|
||||
var EffectHtml = null;
|
||||
|
@ -3,6 +3,14 @@ $(document).ready( function() {
|
||||
var conf_editor_v4l2 = null;
|
||||
var conf_editor_fg = null;
|
||||
|
||||
function hideEl(el)
|
||||
{
|
||||
for(var i = 0; i<el.length; i++)
|
||||
{
|
||||
$('[data-schemapath*="root.framegrabber.'+el[i]+'"]').toggle(false);
|
||||
}
|
||||
}
|
||||
|
||||
if(showOptHelp)
|
||||
{
|
||||
//fg
|
||||
@ -55,6 +63,18 @@ $(document).ready( function() {
|
||||
createHint("intro", $.i18n('conf_grabber_v4l_intro'), "editor_container_v4l2");
|
||||
}
|
||||
|
||||
//hide specific options
|
||||
conf_editor_fg.on('ready',function() {
|
||||
var grabbers = serverInfo.grabbers.available;
|
||||
|
||||
if(grabbers.indexOf('dispmanx') > -1)
|
||||
hideEl(["device","verticalPixelDecimation","horizontalPixelDecimation","useXGetImage"]);
|
||||
else if(grabbers.indexOf('x11') > -1)
|
||||
hideEl(["device","width","height"]);
|
||||
else if(grabbers.indexOf('osx') > -1 || grabbers.indexOf('amlogic') > -1)
|
||||
hideEl(["device","verticalPixelDecimation","horizontalPixelDecimation","useXGetImage","cropLeft","cropBottom","cropTop","cropRight"]);
|
||||
});
|
||||
|
||||
removeOverlay();
|
||||
});
|
||||
|
||||
|
@ -1,20 +1,24 @@
|
||||
$(document).ready( function() {
|
||||
var uiLock = false;
|
||||
var prevSess = 0;
|
||||
|
||||
loadContentTo("#container_connection_lost","connection_lost");
|
||||
loadContentTo("#container_restart","restart");
|
||||
initWebSocket();
|
||||
|
||||
$(hyperion).on("cmd-serverinfo",function(event){
|
||||
serverInfo = event.response;
|
||||
currentVersion = serverInfo.info.hyperion[0].version;
|
||||
serverInfo = event.response.info;
|
||||
$(hyperion).trigger("ready");
|
||||
|
||||
if (serverInfo.info.hyperion[0].config_modified)
|
||||
if (serverInfo.hyperion.config_modified)
|
||||
$("#hyperion_reload_notify").fadeIn("fast");
|
||||
else
|
||||
$("#hyperion_reload_notify").fadeOut("fast");
|
||||
|
||||
if (serverInfo.hyperion.off)
|
||||
$("#hyperion_disabled_notify").fadeIn("fast");
|
||||
else
|
||||
$("#hyperion_disabled_notify").fadeOut("fast");
|
||||
|
||||
if ($("#logmessages").length == 0 && loggingStreamActive)
|
||||
{
|
||||
@ -22,7 +26,7 @@ $(document).ready( function() {
|
||||
loggingStreamActive = false;
|
||||
}
|
||||
|
||||
if (!serverInfo.info.hyperion[0].config_writeable)
|
||||
if (!serverInfo.hyperion.config_writeable)
|
||||
{
|
||||
showInfoDialog('uilock',$.i18n('InfoDialog_nowrite_title'),$.i18n('InfoDialog_nowrite_text'));
|
||||
$('#wrapper').toggle(false);
|
||||
@ -35,8 +39,34 @@ $(document).ready( function() {
|
||||
uiLock = false;
|
||||
}
|
||||
|
||||
var sess = serverInfo.hyperion.sessions;
|
||||
if (sess.length != prevSess)
|
||||
{
|
||||
wSess = [];
|
||||
prevSess = sess.length;
|
||||
for(var i = 0; i<sess.length; i++)
|
||||
{
|
||||
if(sess[i].type == "_hyperiond-http._tcp.")
|
||||
{
|
||||
wSess.push(sess[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (wSess.length > 1)
|
||||
$('#btn_instanceswitch').toggle(true);
|
||||
else
|
||||
$('#btn_instanceswitch').toggle(false);
|
||||
}
|
||||
|
||||
}); // end cmd-serverinfo
|
||||
|
||||
$(hyperion).one("cmd-sysinfo", function(event) {
|
||||
requestServerInfo();
|
||||
sysInfo = event.response.info;
|
||||
|
||||
currentVersion = sysInfo.hyperion.version;
|
||||
});
|
||||
|
||||
$(hyperion).one("cmd-config-getschema", function(event) {
|
||||
serverSchema = event.response.result;
|
||||
requestServerConfig();
|
||||
@ -46,7 +76,7 @@ $(document).ready( function() {
|
||||
|
||||
$(hyperion).one("cmd-config-getconfig", function(event) {
|
||||
serverConfig = event.response.result;
|
||||
requestServerInfo();
|
||||
requestSysInfo();
|
||||
|
||||
showOptHelp = serverConfig.general.showOptHelp;
|
||||
});
|
||||
@ -67,8 +97,9 @@ $(document).ready( function() {
|
||||
initRestart();
|
||||
});
|
||||
|
||||
$(".mnava").on('click', function(e){
|
||||
$(".mnava").bind('click.menu', function(e){
|
||||
loadContent(e);
|
||||
window.scrollTo(0, 0);
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -1,16 +1,7 @@
|
||||
|
||||
var ledsCustomCfgInitialized = false;
|
||||
var finalLedArray = [];
|
||||
|
||||
function validateText(){
|
||||
e = isJsonString($("#ledconfig").val());
|
||||
|
||||
if (e.length != 0){
|
||||
showInfoDialog("error", $.i18n('InfoDialog_leds_validfail_title'), e);
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
var conf_editor = null;
|
||||
|
||||
function round(number) {
|
||||
var factor = Math.pow(10, 4);
|
||||
@ -35,6 +26,7 @@ function createLedPreview(leds, origin){
|
||||
}
|
||||
|
||||
$('#previewledcount').html($.i18n('conf_leds_layout_preview_totalleds', leds.length));
|
||||
$('#previewledpower').html($.i18n('conf_leds_layout_preview_ledpower', ((leds.length * 0.06)*1.1).toFixed(1)));
|
||||
|
||||
$('.st_helper').css("border", "8px solid grey");
|
||||
|
||||
@ -105,7 +97,7 @@ function createClassicLeds(){
|
||||
}
|
||||
|
||||
function rotateArray(array, times){
|
||||
if (times > "0"){
|
||||
if (times > 0){
|
||||
while( times-- ){
|
||||
array.push(array.shift())
|
||||
}
|
||||
@ -363,39 +355,76 @@ $(document).ready(function() {
|
||||
$('#btn_cl_save').toggle(false);
|
||||
}
|
||||
|
||||
//Wiki link
|
||||
$('#leds_wl').append('<p style="font-weight:bold">'+$.i18n('general_wiki_moreto',$.i18n('conf_leds_nav_label_ledlayout'))+buildWL("user/moretopics/ledarea","Wiki")+'</p>');
|
||||
|
||||
// bind change event to all inputs
|
||||
$('.ledCLconstr').bind("change", function() {
|
||||
valValue(this.id,this.value,this.min,this.max);
|
||||
createClassicLeds();
|
||||
});
|
||||
|
||||
$('.ledMAconstr').bind("change", function() {
|
||||
valValue(this.id,this.value,this.min,this.max);
|
||||
createMatrixLeds();
|
||||
});
|
||||
|
||||
// cl leds push to textfield and save values
|
||||
$('#btn_cl_generate').off().on("click", function() {
|
||||
if (finalLedArray != ""){
|
||||
$("#ledconfig").text(JSON.stringify(finalLedArray, null, "\t"));
|
||||
$('#collapse1').collapse('hide');
|
||||
$('#collapse4').collapse('show');
|
||||
// v4 of json schema with diff required assignment - remove when hyperion schema moved to v4
|
||||
var ledschema = {"items":{"additionalProperties":false,"required":["hscan","vscan","index"],"properties":{"clone":{"type":"integer"},"colorOrder":{"enum":["rgb","bgr","rbg","brg","gbr","grb"],"type":"string"},"hscan":{"additionalProperties":false,"properties":{"maximum":{"maximum":1,"minimum":0,"type":"number"},"minimum":{"maximum":1,"minimum":0,"type":"number"}},"type":"object"},"index":{"type":"integer"},"vscan":{"additionalProperties":false,"properties":{"maximum":{"maximum":1,"minimum":0,"type":"number"},"minimum":{"maximum":1,"minimum":0,"type":"number"}},"type":"object"}},"type":"object"},"type":"array"}
|
||||
//create jsonace editor
|
||||
var aceEdt = new JSONACEEditor(document.getElementById("aceedit"),{
|
||||
mode: 'code',
|
||||
schema: ledschema,
|
||||
onChange: function(){
|
||||
var success = true;
|
||||
try{
|
||||
aceEdt.get();
|
||||
}
|
||||
});
|
||||
|
||||
// ma leds push to textfield and save values
|
||||
$('#btn_ma_generate').off().on("click", function() {
|
||||
if (finalLedArray != ""){
|
||||
$("#ledconfig").text(JSON.stringify(finalLedArray, null, "\t"));
|
||||
$('#collapse2').collapse('hide');
|
||||
$('#collapse4').collapse('show');
|
||||
catch(err)
|
||||
{
|
||||
success = false;
|
||||
}
|
||||
});
|
||||
|
||||
// fill textfield with current led conf and copy to finalLedArray
|
||||
$("#ledconfig").text(JSON.stringify(serverConfig.leds, null, "\t"));
|
||||
if(success)
|
||||
{
|
||||
$('#leds_custom_updsim').attr("disabled", false);
|
||||
$('#leds_custom_save').attr("disabled", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#leds_custom_updsim').attr("disabled", true);
|
||||
$('#leds_custom_save').attr("disabled", true);
|
||||
}
|
||||
}
|
||||
}, serverConfig.leds);
|
||||
|
||||
//TODO: HACK! No callback for schema validation - Add it!
|
||||
setInterval(function(){
|
||||
if($('#aceedit table').hasClass('jsoneditor-text-errors'))
|
||||
{
|
||||
$('#leds_custom_updsim').attr("disabled", true);
|
||||
$('#leds_custom_save').attr("disabled", true);
|
||||
}
|
||||
},1000)
|
||||
|
||||
$('.jsoneditor-menu').toggle();
|
||||
|
||||
// leds to finalLedArray
|
||||
finalLedArray = serverConfig.leds;
|
||||
|
||||
// cl/ma leds push to textfield
|
||||
$('#btn_cl_generate, #btn_ma_generate').off().on("click", function(e) {
|
||||
if(e.currentTarget.id == "btn_cl_generate")
|
||||
$('#collapse1').collapse('hide');
|
||||
else
|
||||
$('#collapse2').collapse('hide');
|
||||
|
||||
aceEdt.set(finalLedArray);
|
||||
$('#collapse4').collapse('show');
|
||||
|
||||
});
|
||||
|
||||
// create and update editor
|
||||
var conf_editor = null;
|
||||
$("#leddevices").off().on("change", function() {
|
||||
generalOptions = serverSchema.properties.device;
|
||||
specificOptions = serverSchema.properties.alldevices[$(this).val()];
|
||||
@ -406,7 +435,7 @@ $(document).ready(function() {
|
||||
|
||||
values_general = {};
|
||||
values_specific = {};
|
||||
isCurrentDevice = (serverInfo.info.ledDevices.active == $(this).val());
|
||||
isCurrentDevice = (serverInfo.ledDevices.active == $(this).val());
|
||||
|
||||
for(var key in serverConfig.device){
|
||||
if (key != "type" && key in generalOptions.properties)
|
||||
@ -426,10 +455,22 @@ $(document).ready(function() {
|
||||
|
||||
// change save button state based on validation result
|
||||
conf_editor.validate().length ? $('#btn_submit_controller').attr('disabled', true) : $('#btn_submit_controller').attr('disabled', false);
|
||||
|
||||
// led controller sepecific wizards
|
||||
if($(this).val() == "philipshue")
|
||||
{
|
||||
createHint("wizard", $.i18n('wiz_hue_title'), "btn_wiz_holder","btn_led_device_wiz");
|
||||
$('#btn_led_device_wiz').off().on('click',startWizardPhilipsHue);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#btn_wiz_holder').html("")
|
||||
$('#btn_led_device_wiz').off();
|
||||
}
|
||||
});
|
||||
|
||||
// create led device selection
|
||||
ledDevices = serverInfo.info.ledDevices.available
|
||||
ledDevices = serverInfo.ledDevices.available
|
||||
devRPiSPI = ['apa102', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'sk6822spi', 'ws2812spi'];
|
||||
devRPiPWM = ['ws281x'];
|
||||
devRPiGPIO = ['piblaster'];
|
||||
@ -465,14 +506,12 @@ $(document).ready(function() {
|
||||
$("#leddevices").append(createSel(optArr[3], $.i18n('conf_leds_optgroup_network')));
|
||||
$("#leddevices").append(createSel(optArr[4], $.i18n('conf_leds_optgroup_usb')));
|
||||
$("#leddevices").append(createSel(optArr[5], $.i18n('conf_leds_optgroup_debug')));
|
||||
$("#leddevices").val(serverInfo.info.ledDevices.active);
|
||||
$("#leddevices").val(serverInfo.ledDevices.active);
|
||||
$("#leddevices").trigger("change");
|
||||
|
||||
// validate textfield and update preview
|
||||
$("#leds_custom_updsim").off().on("click", function() {
|
||||
if (validateText()){
|
||||
createLedPreview(JSON.parse($("#ledconfig").val()), 'text');
|
||||
}
|
||||
createLedPreview(aceEdt.get(), 'text');
|
||||
});
|
||||
|
||||
// save led config and saveValues - passing textfield
|
||||
@ -481,13 +520,10 @@ $(document).ready(function() {
|
||||
saveValues();
|
||||
});
|
||||
|
||||
// validate and save led config from textfield
|
||||
// save led config from textfield
|
||||
$("#leds_custom_save").off().on("click", function() {
|
||||
if (validateText())
|
||||
{
|
||||
requestWriteConfig(JSON.parse('{"leds" :'+$("#ledconfig").val()+'}'));
|
||||
requestWriteConfig(JSON.parse('{"leds" :'+aceEdt.getText()+'}'));
|
||||
saveValues();
|
||||
}
|
||||
});
|
||||
|
||||
// toggle led numbers
|
||||
@ -498,7 +534,7 @@ $(document).ready(function() {
|
||||
|
||||
// open checklist
|
||||
$('#leds_prev_checklist').off().on("click", function() {
|
||||
var liList = [$.i18n('conf_leds_leyout_checkp1'),$.i18n('conf_leds_leyout_checkp3'),$.i18n('conf_leds_leyout_checkp2'),$.i18n('conf_leds_leyout_checkp4')];
|
||||
var liList = [$.i18n('conf_leds_layout_checkp1'),$.i18n('conf_leds_layout_checkp3'),$.i18n('conf_leds_layout_checkp2'),$.i18n('conf_leds_layout_checkp4')];
|
||||
var ul = document.createElement("ul");
|
||||
ul.className = "checklist"
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
$(document).ready(function() {
|
||||
|
||||
var messages;
|
||||
var reportUrl = 'https://report.hyperion-project.org/#';
|
||||
|
||||
$('#conf_cont').append(createOptPanel('fa-reorder', $.i18n("edt_conf_log_heading_title"), 'editor_container', 'btn_submit'));
|
||||
if(showOptHelp)
|
||||
@ -13,6 +14,7 @@ $(document).ready(function() {
|
||||
$('#conf_cont').append(createHelpTable(schema.logger.properties, $.i18n("edt_conf_log_heading_title")));
|
||||
createHintH("intro", $.i18n('conf_logging_label_intro'), "log_head");
|
||||
}
|
||||
$("#log_upl_pol").append('<span style="color:grey;font-size:80%">'+$.i18n("conf_logging_uplpolicy")+' '+buildWL("user/support#report_privacy_policy",$.i18n("conf_logging_contpolicy")));
|
||||
|
||||
conf_editor = createJsonEditor('editor_container', {
|
||||
logger : schema.logger
|
||||
@ -26,15 +28,48 @@ $(document).ready(function() {
|
||||
requestWriteConfig(conf_editor.getValue());
|
||||
});
|
||||
|
||||
$('#btn_logupload').off().on('click',function() {
|
||||
uploadLog();
|
||||
$(this).attr("disabled", true);
|
||||
$('#upl_link').html($.i18n('conf_logging_uploading'))
|
||||
});
|
||||
|
||||
//show prev uploads
|
||||
var ent;
|
||||
|
||||
if(getStorage("prev_reports"))
|
||||
{
|
||||
ent = JSON.parse(getStorage("prev_reports"));
|
||||
$('#prev_reports').append('<h4 style="margin-top:30px">'+$.i18n('conf_logging_lastreports')+'</h4>');
|
||||
for(var i = 0; i<ent.length; i++)
|
||||
{
|
||||
$('#prev_reports').append('<p><a href="'+reportUrl+ent[i].id+'" target="_blank">'+ent[i].title+'('+ent[i].time+')</a></p>');
|
||||
}
|
||||
}
|
||||
else
|
||||
ent = [];
|
||||
|
||||
function updateLastReports(id,time,title)
|
||||
{
|
||||
if(ent.length > 4)
|
||||
ent.pop();
|
||||
ent.unshift({"id": id ,"time": time,"title": title})
|
||||
setStorage("prev_reports",JSON.stringify(ent));
|
||||
}
|
||||
|
||||
function uploadLog()
|
||||
{
|
||||
var reportUrl = 'https://glot.io/snippets/';
|
||||
var log = "";
|
||||
var config = JSON.stringify(serverConfig, null, "\t").replace(/"/g, '\\"');
|
||||
var prios = serverInfo.info.priorities;
|
||||
var comps = serverInfo.info.components;
|
||||
var config = JSON.stringify(serverConfig, null).replace(/"/g, '\"');
|
||||
var prios = serverInfo.priorities;
|
||||
var comps = serverInfo.components;
|
||||
var sys = sysInfo.system;
|
||||
var shy = sysInfo.hyperion;
|
||||
var info;
|
||||
|
||||
//create log
|
||||
if(messages)
|
||||
{
|
||||
for(var i = 0; i<messages.length; i++)
|
||||
{
|
||||
app_name = messages[i].appName;
|
||||
@ -52,9 +87,26 @@ $(document).ready(function() {
|
||||
|
||||
log += "["+app_name+" "+logger_name+"] <"+level_string+"> "+debug+msg+"\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
log = "Log was empty!";
|
||||
|
||||
//create general info
|
||||
info = "### GENERAL ### \n";
|
||||
info += 'Build: '+shy.build+'\n';
|
||||
info += 'Build time: '+shy.time+'\n';
|
||||
info += 'Version: '+shy.version+'\n';
|
||||
info += 'UI Lang: '+storedLang+' (BrowserL: '+navigator.language+')\n';
|
||||
info += 'UI Access: '+storedAccess+'\n';
|
||||
info += 'Log lvl: '+serverConfig.logger.level+'\n';
|
||||
info += 'Avail Capt: '+serverInfo.grabbers.available+'\n\n';
|
||||
info += 'Distribution:'+sys.prettyName+'\n';
|
||||
info += 'Arch: '+sys.architecture+'\n';
|
||||
info += 'Kernel: '+sys.kernelType+' ('+sys.kernelVersion+' (WS: '+sys.wordSize+'))\n';
|
||||
info += 'Browser/OS: '+navigator.userAgent+'\n\n';
|
||||
|
||||
//create prios
|
||||
var info = "######## PRIORITIES ######## \n";
|
||||
info += "### PRIORITIES ### \n";
|
||||
for(var i = 0; i<prios.length; i++)
|
||||
{
|
||||
info += prios[i].priority;
|
||||
@ -64,23 +116,28 @@ $(document).ready(function() {
|
||||
info += ' ';
|
||||
info += ' ('+prios[i].component+') Owner: '+prios[i].owner+'\n';
|
||||
}
|
||||
info += '\npriorities_autoselect: '+serverInfo.info.priorities_autoselect+'\n\n';
|
||||
info += '\npriorities_autoselect: '+serverInfo.priorities_autoselect+'\n\n';
|
||||
|
||||
//create comps
|
||||
info += '######## COMPONENTS ######## \n'
|
||||
info += '### COMPONENTS ### \n'
|
||||
for(var i = 0; i<comps.length; i++)
|
||||
{
|
||||
info += comps[i].enabled+' - '+comps[i].name+'\n';
|
||||
}
|
||||
|
||||
//escape data
|
||||
info = JSON.stringify(info);
|
||||
log = JSON.stringify(log);
|
||||
config = JSON.stringify(config);
|
||||
var title = 'Hyperion '+currentVersion+' Report ('+serverConfig.general.name+' ('+serverInfo.ledDevices.active+'))';
|
||||
|
||||
$.ajax({
|
||||
url: 'https://snippets.glot.io/snippets',
|
||||
// headers: { "Authorization": "Token 9ed92d37-36ca-4430-858f-47b6a3d4d535", "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET,HEAD,OPTIONS,POST,PUT", "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Authorization" },
|
||||
url: 'https://api.hyperion-project.org/report.php',
|
||||
crossDomain: true,
|
||||
contentType: 'application/json',
|
||||
type: 'POST',
|
||||
timeout: 7000,
|
||||
data: '{"language":"plaintext","title":"Hyperion '+currentVersion+' Report ('+serverConfig.general.name+' ('+serverInfo.info.ledDevices.active+'))","public":false,"files":[{"name":"Info","content":"'+info+'"},{"name":"Hyperion Log","content":"'+log+'"},{"name":"Hyperion Config","content":"'+config+'"}]}'
|
||||
data: '{"title":"'+title+'","info":'+info+',"log":'+log+',"config":'+config+'}'
|
||||
})
|
||||
.done( function( data, textStatus, jqXHR ) {
|
||||
reportUrl += data.id;
|
||||
@ -88,6 +145,7 @@ $(document).ready(function() {
|
||||
{
|
||||
$('#upl_link').html($.i18n('conf_logging_yourlink')+': <a href="'+reportUrl+'" target="_blank">'+reportUrl+'</a>');
|
||||
$("html, body").animate({ scrollTop: 9999 }, "fast");
|
||||
updateLastReports(data.id,data.time,title);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -96,7 +154,9 @@ $(document).ready(function() {
|
||||
}
|
||||
})
|
||||
.fail( function( jqXHR, textStatus ) {
|
||||
//console.log(jqXHR, textStatus)
|
||||
console.log(jqXHR,textStatus);
|
||||
$('#btn_logupload').attr("disabled", false);
|
||||
$('#upl_link').html('<span style="color:red">'+$.i18n('conf_logging_uplfailed')+'<span>');
|
||||
});
|
||||
}
|
||||
|
||||
@ -107,17 +167,12 @@ $(document).ready(function() {
|
||||
messages = (event.response.result.messages);
|
||||
if(messages.length != 0 && !createdCont)
|
||||
{
|
||||
$('#log_content').html('<pre><div id="logmessages" style="overflow:scroll;max-height:400px"></div></pre><button class="btn btn-primary" id="btn_logupload">'+$.i18n('conf_logging_btn_pbupload')+'</button><button class="btn btn-success" id="btn_autoscroll" style="margin-left:10px;">'+$.i18n('conf_logging_btn_autoscroll')+'</button><div id="upl_link" style="margin-top:10px;font-weight:bold;"></div>');
|
||||
$('#log_content').html('<pre><div id="logmessages" style="overflow:scroll;max-height:400px"></div></pre><button class="btn btn-success" id="btn_autoscroll"><i class="fa fa-long-arrow-down fa-fw"></i>'+$.i18n('conf_logging_btn_autoscroll')+'</button>');
|
||||
createdCont = true;
|
||||
|
||||
$('#btn_autoscroll').off().on('click',function() {
|
||||
toggleClass('#btn_autoscroll', "btn-success", "btn-danger");
|
||||
});
|
||||
$('#btn_logupload').off().on('click',function() {
|
||||
uploadLog();
|
||||
$(this).attr("disabled", true);
|
||||
$('#upl_link').html($.i18n('conf_logging_uploading'))
|
||||
});
|
||||
}
|
||||
for(var idx=0; idx<messages.length; idx++)
|
||||
{
|
||||
|
@ -4,6 +4,8 @@ $(document).ready(function() {
|
||||
var oldEffects = [];
|
||||
var cpcolor = '#B500FF';
|
||||
var mappingList = serverSchema.properties.color.properties.imageToLedMappingType.enum;
|
||||
var duration = 0;
|
||||
var rgb = {r:255,g:0,b:0};
|
||||
|
||||
//create html
|
||||
createTable('ssthead', 'sstbody', 'sstcont');
|
||||
@ -23,7 +25,7 @@ $(document).ready(function() {
|
||||
|
||||
//color adjustment
|
||||
var sColor = sortProperties(serverSchema.properties.color.properties.channelAdjustment.items.properties)
|
||||
var values = serverInfo.info.adjustment[0]
|
||||
var values = serverInfo.adjustment[0]
|
||||
|
||||
for(key in sColor)
|
||||
{
|
||||
@ -52,19 +54,37 @@ $(document).ready(function() {
|
||||
}
|
||||
else
|
||||
{
|
||||
if(sColor[key].key == "brightness" || sColor[key].key == "backlightThreshold")
|
||||
property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.0" max="1.0" step="0.05" value="'+value+'"/>';
|
||||
if(sColor[key].key == "brightness" || sColor[key].key == "brightnessCompensation" || sColor[key].key == "backlightThreshold")
|
||||
property = '<div class="input-group"><input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0" max="100" step="10" value="'+value+'"/><span class="input-group-addon">'+$.i18n("edt_append_percent")+'</span></div>';
|
||||
else
|
||||
property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.0" max="4.0" step="0.1" value="'+value+'"/>';
|
||||
property = '<input id="cr_'+sColor[key].key+'" type="number" class="form-control" min="0.1" max="4.0" step="0.1" value="'+value+'"/>';
|
||||
|
||||
$('.crtbody').append(createTableRow([title, property], false, true));
|
||||
$('#cr_'+sColor[key].key).off().on('change', function(e){
|
||||
valValue(this.id,this.value,this.min,this.max);
|
||||
requestAdjustment(e.target.id.substr(e.target.id.indexOf("_") + 1), e.currentTarget.value);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function sendEffect()
|
||||
{
|
||||
efx = $("#effect_select").val();
|
||||
if(efx != "__none__")
|
||||
{
|
||||
requestPriorityClear();
|
||||
$(hyperion).one("cmd-clear", function(event) {
|
||||
setTimeout(function() {requestPlayEffect(efx,duration)}, 100);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function sendColor()
|
||||
{
|
||||
requestSetColor(rgb.r, rgb.g, rgb.b,duration);
|
||||
}
|
||||
|
||||
function updateRemote()
|
||||
{
|
||||
if ($('#componentsbutton').length == 0)
|
||||
@ -84,12 +104,17 @@ $(document).ready(function() {
|
||||
{
|
||||
$('.sstbody').html("");
|
||||
var data = "";
|
||||
var prios = serverInfo.info.priorities
|
||||
var prios = serverInfo.priorities
|
||||
var i;
|
||||
var clearAll = false;
|
||||
|
||||
for(i = 0; i < prios.length; i++)
|
||||
{
|
||||
var origin = "not impl";
|
||||
var ip = "xxx.xxx.xxx.xxx";
|
||||
var origin = prios[i].origin ? prios[i].origin : "System";
|
||||
origin = origin.split("@");
|
||||
var ip = origin[1];
|
||||
origin = origin[0];
|
||||
|
||||
var owner = prios[i].owner;
|
||||
var active = prios[i].active;
|
||||
var visible = prios[i].visible;
|
||||
@ -99,44 +124,64 @@ $(document).ready(function() {
|
||||
var btn_type = "default";
|
||||
var btn_text = $.i18n('remote_input_setsource_btn');
|
||||
var btn_state = "enabled";
|
||||
if (active) btn_type = "warning";
|
||||
|
||||
if (active)
|
||||
btn_type = "primary";
|
||||
|
||||
if(priority > 254)
|
||||
continue;
|
||||
if(priority < 254 && (compId == "EFFECT" || compId == "COLOR") )
|
||||
clearAll = true;
|
||||
|
||||
if (visible)
|
||||
{
|
||||
btn_state = "disabled";
|
||||
btn_type = "success";
|
||||
btn_text = $.i18n('remote_input_sourceactiv_btn');
|
||||
}
|
||||
|
||||
if(ip)
|
||||
origin += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_ip')+' '+ip+'</span>';
|
||||
if(compId == "10")
|
||||
|
||||
switch (compId)
|
||||
{
|
||||
case "EFFECT":
|
||||
owner = $.i18n('remote_effects_label_effects')+' '+owner;
|
||||
if(compId == "9")
|
||||
break;
|
||||
case "COLOR":
|
||||
owner = $.i18n('remote_color_label_color')+' '+'<div style="width:18px; height:18px; border-radius:20px; margin-bottom:-4px; border:1px grey solid; background-color: rgb('+prios[i].value.RGB+'); display:inline-block" title="RGB: ('+prios[i].value.RGB+')"></div>';
|
||||
if(compId == "7")
|
||||
break;
|
||||
case "GRABBER":
|
||||
owner = $.i18n('general_comp_GRABBER')+': ('+owner+')';
|
||||
if(compId == "8")
|
||||
break;
|
||||
case "V4L":
|
||||
owner = $.i18n('general_comp_V4L')+': ('+owner+')';
|
||||
if(compId == "6")
|
||||
break;
|
||||
case "BOBLIGHTSERVER":
|
||||
owner = $.i18n('general_comp_BOBLIGHTSERVER');
|
||||
if(compId == "5")
|
||||
break;
|
||||
case "UDPLISTENER":
|
||||
owner = $.i18n('general_comp_UDPLISTENER');
|
||||
if(owner == "Off")
|
||||
owner = $.i18n('general_btn_off');
|
||||
if(duration)
|
||||
break;
|
||||
}
|
||||
|
||||
if(duration && compId != "GRABBER" && compId != "PROTOSERVER")
|
||||
owner += '<br/><span style="font-size:80%; color:grey;">'+$.i18n('remote_input_duration')+' '+duration.toFixed(0)+$.i18n('edt_append_s')+'</span>';
|
||||
|
||||
var btn = '<button id="srcBtn'+i+'" type="button" '+btn_state+' class="btn btn-'+btn_type+' btn_input_selection" onclick="requestSetSource('+priority+');">'+btn_text+'</button>';
|
||||
|
||||
if((compId == "10" || compId == "9") && priority != 254)
|
||||
if((compId == "EFFECT" || compId == "COLOR") && priority < 254)
|
||||
btn += '<button type="button" class="btn btn-sm btn-danger" style="margin-left:10px;" onclick="requestPriorityClear('+priority+');"><i class="fa fa-close"></button>';
|
||||
|
||||
if(btn_type != 'default')
|
||||
$('.sstbody').append(createTableRow([origin, owner, priority, btn], false, true));
|
||||
}
|
||||
var btn_auto_color = (serverInfo.info.priorities_autoselect? "btn-success" : "btn-danger");
|
||||
var btn_auto_state = (serverInfo.info.priorities_autoselect? "disabled" : "enabled");
|
||||
var btn_auto_text = (serverInfo.info.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off'));
|
||||
$('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin:10px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>');
|
||||
var btn_auto_color = (serverInfo.priorities_autoselect? "btn-success" : "btn-danger");
|
||||
var btn_auto_state = (serverInfo.priorities_autoselect? "disabled" : "enabled");
|
||||
var btn_auto_text = (serverInfo.priorities_autoselect? $.i18n('general_btn_on') : $.i18n('general_btn_off'));
|
||||
var btn_call_state = (clearAll? "enabled" : "disabled");
|
||||
$('#auto_btn').html('<button id="srcBtn'+i+'" type="button" '+btn_auto_state+' class="btn '+btn_auto_color+'" style="margin-right:5px;display:inline-block;" onclick="requestSetSource(\'auto\');">'+$.i18n('remote_input_label_autoselect')+' ('+btn_auto_text+')</button>');
|
||||
$('#auto_btn').append('<button type="button" '+btn_call_state+' class="btn btn-danger" style="display:inline-block;" onclick="requestClearAll();">'+$.i18n('remote_input_clearall')+'</button>');
|
||||
|
||||
var max_width=100;
|
||||
$('.btn_input_selection').each(function() {
|
||||
@ -148,7 +193,7 @@ $(document).ready(function() {
|
||||
|
||||
function updateLedMapping()
|
||||
{
|
||||
mapping = serverInfo.info.ledMAppingType;
|
||||
mapping = serverInfo.ledMAppingType;
|
||||
|
||||
$('#mappingsbutton').html("");
|
||||
for(var ix = 0; ix < mappingList.length; ix++)
|
||||
@ -156,15 +201,15 @@ $(document).ready(function() {
|
||||
if(mapping == mappingList[ix])
|
||||
btn_style = 'btn-success';
|
||||
else
|
||||
btn_style = 'btn-warning';
|
||||
btn_style = 'btn-primary';
|
||||
|
||||
$('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:10px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>');
|
||||
$('#mappingsbutton').append('<button type="button" id="lmBtn_'+mappingList[ix]+'" class="btn '+btn_style+'" style="margin:3px;min-width:200px" onclick="requestMappingType(\''+mappingList[ix]+'\');">'+$.i18n('remote_maptype_label_'+mappingList[ix])+'</button><br/>');
|
||||
}
|
||||
}
|
||||
|
||||
function updateComponents()
|
||||
{
|
||||
components = serverInfo.info.components;
|
||||
components = serverInfo.components;
|
||||
// create buttons
|
||||
$('#componentsbutton').html("");
|
||||
for ( idx=0; idx<components.length;idx++)
|
||||
@ -173,27 +218,28 @@ $(document).ready(function() {
|
||||
enable_icon = (components[idx].enabled? "fa-play" : "fa-stop");
|
||||
comp_name = components[idx].name;
|
||||
comp_btn_id = "comp_btn_"+comp_name;
|
||||
comp_goff = serverInfo.hyperion.off? "disabled" : "enabled";
|
||||
|
||||
// create btn if not there
|
||||
if ($("#"+comp_btn_id).length == 0)
|
||||
{
|
||||
d='<p><button type="button" id="'+comp_btn_id+'" class="btn '+enable_style
|
||||
d='<span style="display:block;margin:3px"><button type="button" '+comp_goff+' id="'+comp_btn_id+'" class="btn '+enable_style
|
||||
+'" onclick="requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)
|
||||
+')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</p>';
|
||||
+')"><i id="'+comp_btn_id+'_icon" class="fa '+enable_icon+'"></i></button> '+$.i18n('general_comp_'+components[idx].name)+'</span>';
|
||||
$('#componentsbutton').append(d);
|
||||
}
|
||||
else // already create, update state
|
||||
{
|
||||
setClassByBool( $('#'+comp_btn_id) , components[idx].enabled, "btn-danger", "btn-success" );
|
||||
setClassByBool( $('#'+comp_btn_id+"_icon"), components[idx].enabled, "fa-stop" , "fa-play" );
|
||||
$('#'+comp_btn_id).attr("onclick",'requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)+')');
|
||||
$('#'+comp_btn_id).attr("onclick",'requestSetComponentState(\''+comp_name+'\','+(!components[idx].enabled)+')').attr(comp_goff);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateEffectlist()
|
||||
{
|
||||
var newEffects = serverInfo.info.effects;
|
||||
var newEffects = serverInfo.effects;
|
||||
if (newEffects.length != oldEffects.length)
|
||||
{
|
||||
$('#effect_select').html('<option value="__none__"></option>');
|
||||
@ -217,10 +263,20 @@ $(document).ready(function() {
|
||||
|
||||
// colorpicker and effect
|
||||
if (getStorage('rmcpcolor') != null)
|
||||
{
|
||||
cpcolor = getStorage('rmcpcolor');
|
||||
rgb = hexToRgb(cpcolor);
|
||||
}
|
||||
|
||||
createCP('cp2', cpcolor, function(rgb,hex){
|
||||
requestSetColor(rgb.r, rgb.g, rgb.b);
|
||||
if (getStorage('rmduration') != null)
|
||||
{
|
||||
$("#remote_duration").val(getStorage('rmduration'));
|
||||
duration = getStorage('rmduration');
|
||||
}
|
||||
|
||||
createCP('cp2', cpcolor, function(rgbT,hex){
|
||||
rgb = rgbT;
|
||||
sendColor()
|
||||
$("#effect_select").val("__none__");
|
||||
setStorage('rmcpcolor', hex);
|
||||
});
|
||||
@ -230,15 +286,27 @@ $(document).ready(function() {
|
||||
$("#effect_select").val("__none__");
|
||||
});
|
||||
|
||||
$("#effect_select").off().on("change", function(event) {
|
||||
efx = $(this).val();
|
||||
if(efx != "__none__")
|
||||
{
|
||||
requestPriorityClear();
|
||||
$(hyperion).one("cmd-clear", function(event) {
|
||||
setTimeout(function() {requestPlayEffect(efx)}, 100);
|
||||
$("#remote_duration").off().on("change", function(){
|
||||
duration = valValue(this.id,this.value,this.min,this.max);
|
||||
setStorage('rmduration', duration);
|
||||
});
|
||||
|
||||
$("#effect_select").off().on("change", function(event) {
|
||||
sendEffect();
|
||||
});
|
||||
|
||||
$("#remote_input_reseff, #remote_input_rescol").off().on("click", function(){
|
||||
if(this.id == "remote_input_rescol")
|
||||
sendColor();
|
||||
else
|
||||
sendEffect();
|
||||
});
|
||||
|
||||
$("#remote_input_img").change(function(){
|
||||
readImg(this, function(src,width,height){
|
||||
console.log(src,width,height)
|
||||
requestSetImage(src,width,height,duration)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//force first update
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
// global vars
|
||||
var webPrio = 1;
|
||||
var webOrigin = "Web Configuration";
|
||||
var showOptHelp;
|
||||
var currentVersion;
|
||||
var latestVersion;
|
||||
@ -9,6 +10,7 @@ var parsedUpdateJSON = {};
|
||||
var serverSchema = {};
|
||||
var serverConfig = {};
|
||||
var schema;
|
||||
var sysInfo = {};
|
||||
var jsonPort = 19444;
|
||||
var websocket = null;
|
||||
var hyperion = {};
|
||||
@ -20,6 +22,7 @@ var loggingStreamActive = false;
|
||||
var loggingHandlerInstalled = false;
|
||||
var watchdog = 0;
|
||||
var debugMessagesActive = true;
|
||||
var wSess = [];
|
||||
|
||||
function initRestart()
|
||||
{
|
||||
@ -38,7 +41,7 @@ function cron()
|
||||
|
||||
function connectionLostDetection(type)
|
||||
{
|
||||
if ( watchdog > 1 )
|
||||
if ( watchdog > 2 )
|
||||
{
|
||||
var interval_id = window.setInterval("", 9999); // Get a reference to the last
|
||||
for (var i = 1; i < interval_id; i++)
|
||||
@ -170,6 +173,11 @@ function requestServerInfo()
|
||||
sendToHyperion("serverinfo");
|
||||
}
|
||||
|
||||
function requestSysInfo()
|
||||
{
|
||||
sendToHyperion("sysinfo");
|
||||
}
|
||||
|
||||
function requestServerConfigSchema()
|
||||
{
|
||||
sendToHyperion("config","getschema");
|
||||
@ -217,14 +225,24 @@ function requestPriorityClear(prio)
|
||||
sendToHyperion("clear", "", '"priority":'+prio+'');
|
||||
}
|
||||
|
||||
function requestPlayEffect(effectName)
|
||||
function requestClearAll()
|
||||
{
|
||||
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'"},"priority":'+webPrio+'');
|
||||
sendToHyperion("clearall");
|
||||
}
|
||||
|
||||
function requestSetColor(r,g,b)
|
||||
function requestPlayEffect(effectName, duration)
|
||||
{
|
||||
sendToHyperion("color", "", '"color":['+r+','+g+','+b+'], "priority":'+webPrio+'');
|
||||
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'"},"priority":'+webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+webOrigin+'"');
|
||||
}
|
||||
|
||||
function requestSetColor(r,g,b,duration)
|
||||
{
|
||||
sendToHyperion("color", "", '"color":['+r+','+g+','+b+'], "priority":'+webPrio+',"duration":'+validateDuration(duration)+',"origin":"'+webOrigin+'"');
|
||||
}
|
||||
|
||||
function requestSetImage(data,width,height,duration)
|
||||
{
|
||||
sendToHyperion("image", "", '"imagedata":"'+data+'", "imagewidth":'+width+',"imageheight":'+height+', "priority":'+webPrio+',"duration":'+validateDuration(duration)+'');
|
||||
}
|
||||
|
||||
function requestSetComponentState(comp, state)
|
||||
@ -271,7 +289,7 @@ function requestWriteEffect(effectName,effectPy,effectArgs)
|
||||
|
||||
function requestTestEffect(effectName,effectPy,effectArgs)
|
||||
{
|
||||
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'", "args":'+effectArgs+'},"priority":'+webPrio+', "pythonScript":"'+effectPy+'"}');
|
||||
sendToHyperion("effect", "", '"effect":{"name":"'+effectName+'", "args":'+effectArgs+'}, "priority":'+webPrio+', "origin":"'+webOrigin+'", "pythonScript":"'+effectPy+'"}');
|
||||
}
|
||||
|
||||
function requestDeleteEffect(effectName)
|
||||
|
12
assets/webconfig/js/lib/bootstrap.min.js
vendored
126
assets/webconfig/js/lib/jquery-linedtextarea.js
vendored
@ -1,126 +0,0 @@
|
||||
/**
|
||||
* jQuery Lined Textarea Plugin
|
||||
* http://alan.blog-city.com/jquerylinedtextarea.htm
|
||||
*
|
||||
* Copyright (c) 2010 Alan Williamson
|
||||
*
|
||||
* Version:
|
||||
* $Id: jquery-linedtextarea.js 464 2010-01-08 10:36:33Z alan $
|
||||
*
|
||||
* Released under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* Usage:
|
||||
* Displays a line number count column to the left of the textarea
|
||||
*
|
||||
* Class up your textarea with a given class, or target it directly
|
||||
* with JQuery Selectors
|
||||
*
|
||||
* $(".lined").linedtextarea({
|
||||
* selectedLine: 10,
|
||||
* selectedClass: 'lineselect'
|
||||
* });
|
||||
*
|
||||
* History:
|
||||
* - 2010.01.08: Fixed a Google Chrome layout problem
|
||||
* - 2010.01.07: Refactored code for speed/readability; Fixed horizontal sizing
|
||||
* - 2010.01.06: Initial Release
|
||||
*
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
$.fn.linedtextarea = function(options) {
|
||||
|
||||
// Get the Options
|
||||
var opts = $.extend({}, $.fn.linedtextarea.defaults, options);
|
||||
|
||||
|
||||
/*
|
||||
* Helper function to make sure the line numbers are always
|
||||
* kept up to the current system
|
||||
*/
|
||||
var fillOutLines = function(codeLines, h, lineNo){
|
||||
while ( (codeLines.height() - h ) <= 0 ){
|
||||
if ( lineNo == opts.selectedLine )
|
||||
codeLines.append("<div class='lineno lineselect'>" + lineNo + "</div>");
|
||||
else
|
||||
codeLines.append("<div class='lineno'>" + lineNo + "</div>");
|
||||
|
||||
lineNo++;
|
||||
}
|
||||
return lineNo;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Iterate through each of the elements are to be applied to
|
||||
*/
|
||||
return this.each(function() {
|
||||
var lineNo = 1;
|
||||
var textarea = $(this);
|
||||
|
||||
/* Turn off the wrapping of as we don't want to screw up the line numbers */
|
||||
textarea.attr("wrap", "off");
|
||||
textarea.css({resize:'none'});
|
||||
var originalTextAreaWidth = textarea.outerWidth();
|
||||
|
||||
/* Wrap the text area in the elements we need */
|
||||
textarea.wrap("<div class='linedtextarea'></div>");
|
||||
var linedTextAreaDiv = textarea.parent().wrap("<div class='linedwrap' style='width:" + originalTextAreaWidth + "px'></div>");
|
||||
var linedWrapDiv = linedTextAreaDiv.parent();
|
||||
|
||||
linedWrapDiv.prepend("<div class='lines' style='width:50px'></div>");
|
||||
|
||||
var linesDiv = linedWrapDiv.find(".lines");
|
||||
linesDiv.height( textarea.height() + 6 );
|
||||
|
||||
|
||||
/* Draw the number bar; filling it out where necessary */
|
||||
linesDiv.append( "<div class='codelines'></div>" );
|
||||
var codeLinesDiv = linesDiv.find(".codelines");
|
||||
lineNo = fillOutLines( codeLinesDiv, linesDiv.height(), 1 );
|
||||
|
||||
/* Move the textarea to the selected line */
|
||||
if ( opts.selectedLine != -1 && !isNaN(opts.selectedLine) ){
|
||||
var fontSize = parseInt( textarea.height() / (lineNo-2) );
|
||||
var position = parseInt( fontSize * opts.selectedLine ) - (textarea.height()/2);
|
||||
textarea[0].scrollTop = position;
|
||||
}
|
||||
|
||||
|
||||
/* Set the width */
|
||||
var sidebarWidth = linesDiv.outerWidth();
|
||||
var paddingHorizontal = parseInt( linedWrapDiv.css("border-left-width") ) + parseInt( linedWrapDiv.css("border-right-width") ) + parseInt( linedWrapDiv.css("padding-left") ) + parseInt( linedWrapDiv.css("padding-right") );
|
||||
var linedWrapDivNewWidth = originalTextAreaWidth - paddingHorizontal;
|
||||
var textareaNewWidth = originalTextAreaWidth - sidebarWidth - paddingHorizontal - 20;
|
||||
|
||||
textarea.width( textareaNewWidth );
|
||||
linedWrapDiv.width( linedWrapDivNewWidth );
|
||||
|
||||
|
||||
|
||||
/* React to the scroll event */
|
||||
textarea.scroll( function(tn){
|
||||
var domTextArea = $(this)[0];
|
||||
var scrollTop = domTextArea.scrollTop;
|
||||
var clientHeight = domTextArea.clientHeight;
|
||||
codeLinesDiv.css( {'margin-top': (-1*scrollTop) + "px"} );
|
||||
lineNo = fillOutLines( codeLinesDiv, scrollTop + clientHeight, lineNo );
|
||||
});
|
||||
|
||||
|
||||
/* Should the textarea get resized outside of our control */
|
||||
textarea.resize( function(tn){
|
||||
var domTextArea = $(this)[0];
|
||||
linesDiv.height( domTextArea.clientHeight + 6 );
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
// default options
|
||||
$.fn.linedtextarea.defaults = {
|
||||
selectedLine: -1,
|
||||
selectedClass: 'lineselect'
|
||||
};
|
||||
})(jQuery);
|
49
assets/webconfig/js/lib/jsonaceeditor.min.js
vendored
Normal file
@ -6690,6 +6690,9 @@ JSONEditor.defaults.themes.bootstrap3 = JSONEditor.AbstractTheme.extend({
|
||||
},
|
||||
getButton: function(text, icon, title) {
|
||||
var el = this._super(text, icon, title);
|
||||
if(icon.className.includes("fa-times"))
|
||||
el.className += 'btn btn-sm btn-danger';
|
||||
else
|
||||
el.className += 'btn btn-sm btn-primary';
|
||||
return el;
|
||||
},
|
||||
|
@ -5,7 +5,8 @@ $(function() {
|
||||
|
||||
});
|
||||
|
||||
var oldWidth;
|
||||
var mInit = false;
|
||||
|
||||
//Loads the correct sidebar on window load,
|
||||
//collapses the sidebar on window resize.
|
||||
// Sets the min-height of #page-wrapper to window size
|
||||
@ -13,21 +14,26 @@ $(function() {
|
||||
$(window).bind("load resize", function() {
|
||||
var topOffset = 50;
|
||||
var width = (this.window.innerWidth > 0) ? this.window.innerWidth : this.screen.width;
|
||||
if(oldWidth != width)
|
||||
{
|
||||
if (width < 768)
|
||||
{
|
||||
if(!mInit)
|
||||
{
|
||||
mInit = true;
|
||||
$('#main-nav').css({"position":"fixed","right":"-235px","top":"45px","width":"230px","border":"1px solid rgba(0, 0, 0, .2)","box-shadow":"0 3px 9px rgba(0, 0, 0, .5)"});
|
||||
topOffset = 100; // 2-row-menu
|
||||
$('.mnava').on('click', function(){
|
||||
$("html, body").animate({ scrollTop: 0 }, "fast");
|
||||
|
||||
$('.mnava').bind('click.smnav', function(){
|
||||
$( "#main-nav" ).animate({right: "-235px",}, 300 );
|
||||
$(".navbar-toggle").addClass("closed");
|
||||
});
|
||||
}
|
||||
}
|
||||
else
|
||||
$( "#main-nav" ).removeAttr("style").css({"position":"absolute"});
|
||||
|
||||
{
|
||||
$( "#main-nav" ).removeAttr('style').css({"position":"fixed"});
|
||||
$( ".mnava" ).unbind('click.smnav');
|
||||
mInit = false;
|
||||
}
|
||||
|
||||
var height = ((this.window.innerHeight > 0) ? this.window.innerHeight : this.screen.height) - 1;
|
||||
height = height - topOffset;
|
||||
@ -35,7 +41,6 @@ $(function() {
|
||||
if (height > topOffset) {
|
||||
$("#page-wrapper").css("min-height", (height-11) + "px");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var url = window.location;
|
||||
@ -55,7 +60,7 @@ $(function() {
|
||||
}
|
||||
});
|
||||
|
||||
$('.navbar-toggle').off().on('click', function(){
|
||||
$('.navbar-toggle').on('click', function(){
|
||||
if($('#main-nav').css("right") != "-2px")
|
||||
{
|
||||
$('#main-nav').animate({right: "-2px",}, 300 );
|
||||
|
@ -115,4 +115,24 @@ $(document).ready( function() {
|
||||
//hide menu elements
|
||||
if (storedAccess != 'expert')
|
||||
$('#load_webconfig').toggle(false);
|
||||
|
||||
|
||||
// instance switcher
|
||||
$('#btn_instanceswitch').off().on('click',function() {
|
||||
var lsys = sysInfo.system.hostName+':'+serverConfig.webConfig.port;
|
||||
showInfoDialog('iswitch', $.i18n('InfoDialog_iswitch_title'), $.i18n('InfoDialog_iswitch_text'));
|
||||
|
||||
for (var i = 0; i<wSess.length; i++)
|
||||
{
|
||||
|
||||
if(lsys != wSess[i].host+':'+wSess[i].port)
|
||||
$('#id_select').append(createSelOpt('http://'+wSess[i].address+':'+wSess[i].port, wSess[i].name))
|
||||
}
|
||||
|
||||
$('#id_btn_saveset').off().on('click',function() {
|
||||
$("#loading_overlay").addClass("overlay");
|
||||
window.location.href = $('#id_select').val()
|
||||
});
|
||||
|
||||
});
|
||||
});
|
@ -48,6 +48,14 @@ function debugMessage(msg)
|
||||
}
|
||||
}
|
||||
|
||||
function validateDuration(d)
|
||||
{
|
||||
if(typeof d === "undefined" || d < 0)
|
||||
return d = 0;
|
||||
else
|
||||
return d *= 1000;
|
||||
}
|
||||
|
||||
function getHashtag()
|
||||
{
|
||||
if(getStorage('lasthashtag', true) != null)
|
||||
@ -81,7 +89,7 @@ function loadContent(event)
|
||||
$("#page-content").off();
|
||||
$("#page-content").load("/content/"+tag+".html", function(response,status,xhr){
|
||||
if(status == "error")
|
||||
$("#page-content").html('<h3>The page you requested is no longer available, click on another menu item!</h3>');
|
||||
$("#page-content").html('<h3>'+$.i18n('info_404')+'</h3>');
|
||||
removeOverlay();
|
||||
});
|
||||
}
|
||||
@ -146,6 +154,11 @@ function showInfoDialog(type,header,message)
|
||||
$('#id_footer').html('<button type="button" id="id_btn_saveset" class="btn btn-primary" data-dismiss="modal"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saveandreload')+'</button>');
|
||||
$('#id_footer').append('<button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||
}
|
||||
else if (type == "iswitch"){
|
||||
$('#id_body').html('<img style="margin-bottom:20px" src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!">');
|
||||
$('#id_footer').html('<button type="button" id="id_btn_saveset" class="btn btn-primary" data-dismiss="modal"><i class="fa fa-fw fa-exchange"></i>'+$.i18n('general_btn_iswitch')+'</button>');
|
||||
$('#id_footer').append('<button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||
}
|
||||
else if (type == "uilock"){
|
||||
$('#id_body').html('<img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!">');
|
||||
$('#id_footer').html('<b>'+$.i18n('InfoDialog_nowrite_foottext')+'</b>');
|
||||
@ -166,7 +179,7 @@ function showInfoDialog(type,header,message)
|
||||
$('#id_body').append('<h4 style="font-weight:bold;text-transform:uppercase;">'+header+'</h4>');
|
||||
$('#id_body').append(message);
|
||||
|
||||
if(type == "select")
|
||||
if(type == "select" || type == "iswitch")
|
||||
$('#id_body').append('<select id="id_select" class="form-control" style="margin-top:10px;width:auto;"></select>');
|
||||
|
||||
$("#modal_dialog").modal({
|
||||
@ -184,7 +197,7 @@ function createHintH(type, text, container)
|
||||
$('#'+container).prepend('<div class="'+tclass+'"><h4 style="font-size:16px">'+text+'</h4><hr/></div>');
|
||||
}
|
||||
|
||||
function createHint(type, text, container)
|
||||
function createHint(type, text, container, buttonid, buttontxt)
|
||||
{
|
||||
var fe, tclass;
|
||||
|
||||
@ -209,8 +222,15 @@ function createHint(type, text, container)
|
||||
tclass = "warning-hint";
|
||||
}
|
||||
|
||||
if(fe == "")
|
||||
$('#'+container).prepend('<div class="'+tclass+'">'+text+'</div>');
|
||||
if(buttonid)
|
||||
buttonid = '<p><button id="'+buttonid+'" class="btn btn-wizard" style="margin-top:15px;">'+text+'</button></p>';
|
||||
else
|
||||
buttonid = "";
|
||||
|
||||
if(type == "intro")
|
||||
$('#'+container).prepend('<div class="bs-callout bs-callout-primary" style="margin-top:0px"><h4>'+$.i18n("conf_helptable_expl")+'</h4>'+text+'</div>');
|
||||
else if(type == "wizard")
|
||||
$('#'+container).prepend('<div class="bs-callout bs-callout-wizard" style="margin-top:0px"><h4>'+$.i18n("wiz_wizavail")+'</h4>'+$.i18n('wiz_guideyou',text)+buttonid+'</div>');
|
||||
else
|
||||
{
|
||||
createTable('','htb',container, true, tclass);
|
||||
@ -218,6 +238,40 @@ function createHint(type, text, container)
|
||||
}
|
||||
}
|
||||
|
||||
function valValue(id,value,min,max)
|
||||
{
|
||||
if(typeof max === 'undefined' || max == "")
|
||||
max = 999999;
|
||||
|
||||
if(Number(value) > Number(max))
|
||||
{
|
||||
$('#'+id).val(max);
|
||||
showInfoDialog("warning","",$.i18n('edt_msg_error_maximum_incl',max));
|
||||
return max;
|
||||
}
|
||||
else if(Number(value) < Number(min))
|
||||
{
|
||||
$('#'+id).val(min);
|
||||
showInfoDialog("warning","",$.i18n('edt_msg_error_minimum_incl',min));
|
||||
return min;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
function readImg(input,cb)
|
||||
{
|
||||
if (input.files && input.files[0]) {
|
||||
var reader = new FileReader();
|
||||
|
||||
reader.onload = function (e) {
|
||||
var i = new Image();
|
||||
i.src = e.target.result;
|
||||
cb(i.src,i.width,i.height);
|
||||
}
|
||||
reader.readAsDataURL(input.files[0]);
|
||||
}
|
||||
}
|
||||
|
||||
function isJsonString(str)
|
||||
{
|
||||
try
|
||||
@ -273,6 +327,28 @@ function createJsonEditor(container,schema,setconfig,usePanel)
|
||||
return editor;
|
||||
}
|
||||
|
||||
function buildWL(link,linkt,cl)
|
||||
{
|
||||
var baseLink = "https://docs.hyperion-project.org/";
|
||||
var lang;
|
||||
|
||||
if(typeof linkt == "undefined")
|
||||
linkt = "Placeholder";
|
||||
|
||||
if(storedLang == "de" || navigator.locale == "de")
|
||||
lang = "de";
|
||||
else
|
||||
lang = "en";
|
||||
|
||||
if(cl === true)
|
||||
{
|
||||
linkt = $.i18n(linkt);
|
||||
return '<div class="bs-callout bs-callout-primary"><h4>'+linkt+'</h4>'+$.i18n('general_wiki_moreto',linkt)+': <a href="'+baseLink+lang+'/'+link+'" target="_blank">'+linkt+'<a></div>'
|
||||
}
|
||||
else
|
||||
return ': <a href="'+baseLink+lang+'/'+link+'" target="_blank">'+linkt+'<a>';
|
||||
}
|
||||
|
||||
function rgbToHex(rgb)
|
||||
{
|
||||
if(rgb.length == 3)
|
||||
@ -286,6 +362,16 @@ function rgbToHex(rgb)
|
||||
debugMessage('rgbToHex: Given rgb is no array or has wrong length');
|
||||
}
|
||||
|
||||
function hexToRgb(hex) {
|
||||
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
||||
return result ? {
|
||||
r: parseInt(result[1], 16),
|
||||
g: parseInt(result[2], 16),
|
||||
b: parseInt(result[3], 16)
|
||||
} : null;
|
||||
}
|
||||
|
||||
|
||||
function createCP(id, color, cb)
|
||||
{
|
||||
if(Array.isArray(color))
|
||||
|
@ -1,4 +1,4 @@
|
||||
$(document).ready( function() {
|
||||
|
||||
//clear priority and other tasks if people reload the page or lost connection while a wizard was active
|
||||
$(hyperion).one("ready", function(event) {
|
||||
if(getStorage("wizardactive") === 'true')
|
||||
@ -517,21 +517,29 @@ $(document).ready( function() {
|
||||
$('#btn_wizard_colorcalibration').off().on('click', startWizardCC);
|
||||
|
||||
//hue wizard
|
||||
var hueIPs = [];
|
||||
var hueIPsinc = 0;
|
||||
var lightIDs = null;
|
||||
var huePosTop = {hscan: {maximum: 0.85,minimum: 0.15},index: 0,vscan: {maximum: 0.2,minimum: 0}};
|
||||
var huePosBottom = {hscan: {maximum: 0.85,minimum: 0.15},index: 2,vscan: {maximum: 1,minimum: 0.8}};
|
||||
var huePosLeft = {hscan: {maximum: 0.15,minimum: 0},index: 1,vscan: {maximum: 0.85,minimum: 0.15}};
|
||||
var huePosRight = {hscan: {maximum: 1,minimum: 0.85},index: 3,vscan: {maximum: 0.85,minimum: 0.15}};
|
||||
var huePosEntire = {hscan: {maximum: 1.0,minimum: 0.0},index: 0,vscan: {maximum: 1.0,minimum: 0.0}};
|
||||
|
||||
function startWizardPhilipsHue()
|
||||
{
|
||||
//create html
|
||||
$('#wiz_header').html('<i class="fa fa-magic fa-fw"></i>'+$.i18n('wiz_hue_title'));
|
||||
$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_hue_title')+'</h4><p>'+$.i18n('wiz_hue_intro1')+'</p><p style="font-weight:bold;">'+$.i18n('wiz_hue_intro2')+'</p>');
|
||||
$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_hue_title')+'</h4><p>'+$.i18n('wiz_hue_intro1')+'</p>');
|
||||
$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||
$('#wizp2_body').append('<span id="ip_alert" style="display:none; color:red; font-weight: bold;">'+$.i18n('wiz_hue_failure_ip')+'</span>');
|
||||
$('#wizp2_body').append('<span id="abortConnection" style="display:none; color:red; font-weight: bold;">'+$.i18n('wiz_hue_failure_connection')+'</span><br />');
|
||||
$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_hue_ip')+'</label><div class="input-group" style="width:150px"><input type="text" class="input-group" id="ip"></div></div>');
|
||||
$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_hue_username')+'</label<div class="input-group" style="width:150px"><input type="text" class="input-group" id="user" readonly="readonly"></div></div>');
|
||||
$('#wizp2_body').append('<div id="hue_lights" class="row"><table></table></div>');
|
||||
$('#wizp2_footer').html('<button type="button" class="btn btn-success" id="wiz_hue_create_user"> <i class="fa fa-floppy-o"></i>'+$.i18n('wiz_hue_create_user')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||
$('#wizp3_body').html('<span>'+$.i18n('wiz_hue_press_link')+'</span> <br /><br /><center><span id="connectionTime"></span><br /><img src="/img/hyperion/ring-alt.svg" /><center>');
|
||||
|
||||
|
||||
$('#wizp2_body').html('<div id="wh_topcontainer"></div>');
|
||||
$('#wh_topcontainer').append('<p style="font-weight:bold">'+$.i18n('wiz_hue_desc1')+'</p><div class="form-group"><label>'+$.i18n('wiz_hue_ip')+'</label><div class="input-group" style="width:175px"><input type="text" class="input-group form-control" id="ip"><span class="input-group-addon" id="retry_bridge" style="cursor:pointer"><i class="fa fa-refresh"></i></span></div></div><span style="font-weight:bold;color:red" id="wiz_hue_ipstate"></span>');
|
||||
$('#wh_topcontainer').append('<div class="form-group" id="usrcont" style="display:none"><label>'+$.i18n('wiz_hue_username')+'</label><div class="input-group" style="width:250px"><input type="text" class="form-control" id="user"><span class="input-group-addon" id="retry_usr" style="cursor:pointer"><i class="fa fa-refresh"></i></span></div><span style="font-weight:bold;color:red" id="wiz_hue_usrstate"></span><br><button type="button" class="btn btn-primary" style="display:none" id="wiz_hue_create_user"> <i class="fa fa-fw fa-plus"></i>'+$.i18n('wiz_hue_create_user')+'</button></div>');
|
||||
$('#wizp2_body').append('<div id="hue_ids_t" style="display:none"><p style="font-weight:bold">'+$.i18n('wiz_hue_desc2')+'</p></div>');
|
||||
createTable("lidsh", "lidsb", "hue_ids_t");
|
||||
$('.lidsh').append(createTableRow([$.i18n('edt_dev_spec_lightid_title'),$.i18n('wiz_hue_pos'),$.i18n('wiz_hue_ident')], true));
|
||||
$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_save" style="display:none"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_saverestart')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
|
||||
$('#wizp3_body').html('<span>'+$.i18n('wiz_hue_press_link')+'</span> <br /><br /><center><span id="connectionTime"></span><br /><i class="fa fa-cog fa-spin" style="font-size:100px"></i></center>');
|
||||
|
||||
//open modal
|
||||
$("#wizard_modal").modal({
|
||||
@ -548,17 +556,207 @@ $(document).ready( function() {
|
||||
});
|
||||
}
|
||||
|
||||
function beginWizardHue()
|
||||
{
|
||||
//listen for continue
|
||||
$('#wiz_hue_create_user').off().on('click',function() {
|
||||
doWizardHue();
|
||||
function checkHueBridge(cb,hueUser){
|
||||
var usr = "";
|
||||
|
||||
if(typeof hueUser != "undefined")
|
||||
usr = hueUser;
|
||||
|
||||
$.ajax({
|
||||
url: 'http://'+hueIPs[hueIPsinc].internalipaddress+'/api/'+usr,
|
||||
contentType: 'application/json',
|
||||
type: 'GET',
|
||||
timeout: 2000
|
||||
})
|
||||
.done( function( data, textStatus, jqXHR ) {
|
||||
if(Array.isArray(data) && data[0].error && data[0].error.type == 4)
|
||||
cb(true);
|
||||
else if(Array.isArray(data) && data[0].error)
|
||||
cb(false);
|
||||
else
|
||||
cb(true);
|
||||
})
|
||||
.fail( function( jqXHR, textStatus ) {
|
||||
cb(false);
|
||||
});
|
||||
}
|
||||
|
||||
function doWizardHue()
|
||||
function checkUserResult(reply){
|
||||
if(reply)
|
||||
{
|
||||
var connectionRetries = 15;
|
||||
$('#wiz_hue_usrstate').html("");
|
||||
$('#wiz_hue_create_user').toggle(false);
|
||||
get_hue_lights();
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#wiz_hue_usrstate').html($.i18n('wiz_hue_failure_user'));
|
||||
$('#wiz_hue_create_user').toggle(true);
|
||||
}
|
||||
};
|
||||
|
||||
function checkBridgeResult(reply){
|
||||
if(reply)
|
||||
{
|
||||
//abort checking, first reachable result is used
|
||||
$('#wiz_hue_ipstate').html("");
|
||||
$('#ip').val(hueIPs[hueIPsinc].internalipaddress)
|
||||
|
||||
//now check hue user on this bridge
|
||||
$('#usrcont').toggle(true);
|
||||
checkHueBridge(checkUserResult,$('#user').val() ? $('#user').val() : "newdeveloper");
|
||||
}
|
||||
else
|
||||
{
|
||||
//increment and check again
|
||||
if(hueIPs.length-1 > hueIPsinc)
|
||||
{
|
||||
hueIPsinc++;
|
||||
checkHueBridge(checkBridgeResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#usrcont').toggle(false);
|
||||
$('#wiz_hue_ipstate').html($.i18n('wiz_hue_failure_ip'));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function assignHuePos(id, pos, inc)
|
||||
{
|
||||
var i = null;
|
||||
|
||||
if(pos == "top")
|
||||
i = huePosTop;
|
||||
else if(pos == "bottom")
|
||||
i = huePosBottom;
|
||||
else if(pos == "left")
|
||||
i = huePosLeft;
|
||||
else if(pos == "right")
|
||||
i = huePosRight;
|
||||
else
|
||||
i = huePosEntire;
|
||||
|
||||
i.index = inc;
|
||||
return i;
|
||||
}
|
||||
|
||||
function identHueId(id, off)
|
||||
{
|
||||
var on = true;
|
||||
if(off !== true)
|
||||
setTimeout(identHueId,1500,id,true);
|
||||
else
|
||||
on = false;
|
||||
|
||||
$.ajax({
|
||||
url: 'http://'+$('#ip').val()+'/api/'+$('#user').val()+'/lights/'+id+'/state',
|
||||
type: 'PUT',
|
||||
timeout: 2000,
|
||||
data: ' {"on":'+on+', "sat":254, "bri":254,"hue":47000}'
|
||||
})
|
||||
}
|
||||
|
||||
function getHueIPs(){
|
||||
$('#wiz_hue_ipstate').html($.i18n('wiz_hue_searchb'));
|
||||
$.ajax({
|
||||
url: 'https://www.meethue.com/api/nupnp',
|
||||
crossDomain: true,
|
||||
type: 'GET',
|
||||
timeout: 3000
|
||||
})
|
||||
.done( function( data, textStatus, jqXHR ) {
|
||||
if(data.length == 0)
|
||||
$('#wiz_hue_ipstate').html($.i18n('wiz_hue_failure_ip'));
|
||||
else
|
||||
{
|
||||
hueIPs = data;
|
||||
checkHueBridge(checkBridgeResult);
|
||||
}
|
||||
})
|
||||
.fail( function( jqXHR, textStatus ) {
|
||||
$('#wiz_hue_ipstate').html($.i18n('wiz_hue_failure_ip'));
|
||||
});
|
||||
};
|
||||
|
||||
function beginWizardHue()
|
||||
{
|
||||
//check if ip is empty/reachable/search for bridge
|
||||
if(conf_editor.getEditor("root.specificOptions.output").getValue() == "")
|
||||
getHueIPs();
|
||||
else
|
||||
{
|
||||
var ip = conf_editor.getEditor("root.specificOptions.output").getValue();
|
||||
$('#ip').val(ip);
|
||||
hueIPs.push({internalipaddress : ip});
|
||||
checkHueBridge(checkBridgeResult);
|
||||
|
||||
var usr = conf_editor.getEditor("root.specificOptions.username").getValue();
|
||||
$('#user').val(usr);
|
||||
}
|
||||
|
||||
$('#retry_bridge').off().on('click', function(){
|
||||
hueIPs[0].internalipaddress = $('#ip').val();
|
||||
hueIPsinc = 0;
|
||||
checkHueBridge(checkBridgeResult);
|
||||
});
|
||||
|
||||
$('#retry_usr').off().on('click', function(){
|
||||
checkHueBridge(checkUserResult,$('#user').val() ? $('#user').val() : "newdeveloper");
|
||||
});
|
||||
|
||||
$('#wiz_hue_create_user').off().on('click',function() {
|
||||
createHueUser();
|
||||
});
|
||||
|
||||
$('#btn_wiz_save').off().on("click", function(){
|
||||
var hueLedConfig = [];
|
||||
var finalLightIds = [];
|
||||
|
||||
//create hue led config
|
||||
var incC = 0;
|
||||
for(key in lightIDs)
|
||||
{
|
||||
if($('#hue_'+key).val() != "disabled")
|
||||
{
|
||||
hueLedConfig.push(assignHuePos(key, $('#hue_'+key).val(), incC));
|
||||
finalLightIds.push(parseInt(key));
|
||||
incC++;
|
||||
}
|
||||
}
|
||||
|
||||
serverConfig.leds = hueLedConfig;
|
||||
|
||||
//Adjust gamma, brightness and compensation
|
||||
var c = serverConfig.color.channelAdjustment[0];
|
||||
c.gammaBlue = 1.0;
|
||||
c.gammaRed = 1.0;
|
||||
c.gammaGreen = 1.0;
|
||||
c.brightness = 100;
|
||||
c.brightnessCompensation = 0;
|
||||
|
||||
//device config
|
||||
var d = serverConfig.device;
|
||||
d.output = $('#ip').val();
|
||||
d.lightIds = finalLightIds;
|
||||
d.username = $('#user').val();
|
||||
d.type = "philipshue";
|
||||
d.transitiontime = 1;
|
||||
d.switchOffOnBlack = true;
|
||||
|
||||
//smoothing off
|
||||
serverConfig.smoothing.enable = false;
|
||||
|
||||
requestWriteConfig(serverConfig, true);
|
||||
setTimeout(initRestart,200);
|
||||
});
|
||||
|
||||
$('#btn_wiz_abort').off().on('click', resetWizard);
|
||||
}
|
||||
|
||||
function createHueUser()
|
||||
{
|
||||
var connectionRetries = 30;
|
||||
var data = {"devicetype":"hyperion#"+Date.now()};
|
||||
var UserInterval = setInterval(function(){
|
||||
$.ajax({
|
||||
@ -580,8 +778,6 @@ $(document).ready( function() {
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#abortConnection").hide();
|
||||
$("#ip_alert").hide();
|
||||
if (typeof r[0].error != 'undefined') {
|
||||
console.log(connectionRetries+": link not pressed");
|
||||
}
|
||||
@ -590,9 +786,7 @@ $(document).ready( function() {
|
||||
$('#wizp2').toggle(true);
|
||||
$('#wizp3').toggle(false);
|
||||
$('#user').val(r[0].success.username);
|
||||
|
||||
$( "#hue_lights" ).empty();
|
||||
get_hue_lights();
|
||||
checkHueBridge(checkUserResult,r[0].success.username);
|
||||
clearInterval(UserInterval);
|
||||
}
|
||||
}
|
||||
@ -601,7 +795,6 @@ $(document).ready( function() {
|
||||
$('#wizp1').toggle(false);
|
||||
$('#wizp2').toggle(true);
|
||||
$('#wizp3').toggle(false);
|
||||
$("#ip_alert").show();
|
||||
clearInterval(UserInterval);
|
||||
}
|
||||
});
|
||||
@ -615,8 +808,34 @@ $(document).ready( function() {
|
||||
processData: false,
|
||||
contentType: 'application/json',
|
||||
success: function(r) {
|
||||
for(var lightid in r){
|
||||
$('#hue_lights').append('<tr><td>ID: '+lightid+'</td><td>Name: '+r[lightid].name+'</td></tr>');
|
||||
if(Object.keys(r).length > 0)
|
||||
{
|
||||
$('#wh_topcontainer').toggle(false);
|
||||
$('#hue_ids_t, #btn_wiz_save').toggle(true);
|
||||
lightIDs = r;
|
||||
|
||||
for(var lightid in r)
|
||||
{
|
||||
$('.lidsb').append(createTableRow([lightid+' ('+r[lightid].name+')', '<select id="hue_'+lightid+'" class="hue_sel_watch form-control"><option value="disabled">'+$.i18n('wiz_hue_ids_disabled')+'</option><option value="top">'+$.i18n('conf_leds_layout_cl_top')+'</option><option value="bottom">'+$.i18n('conf_leds_layout_cl_bottom')+'</option><option value="left">'+$.i18n('conf_leds_layout_cl_left')+'</option><option value="right">'+$.i18n('conf_leds_layout_cl_right')+'</option><option value="entire">'+$.i18n('wiz_hue_ids_entire')+'</option></select>','<button class="btn btn-sm btn-primary" onClick=identHueId('+lightid+')>'+$.i18n('wiz_hue_blinkblue',lightid)+'</button>']));
|
||||
}
|
||||
|
||||
$('.hue_sel_watch').bind("change", function(){
|
||||
var cC = 0;
|
||||
for(key in lightIDs)
|
||||
{
|
||||
if($('#hue_'+key).val() != "disabled")
|
||||
{
|
||||
cC++;
|
||||
}
|
||||
}
|
||||
cC == 0 ? $('#btn_wiz_save').attr("disabled",true) : $('#btn_wiz_save').attr("disabled",false);
|
||||
});
|
||||
|
||||
$('.hue_sel_watch').trigger('change');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#wizp2_body').html('<h4>'+$.i18n('wiz_hue_noids')+'</h4>')
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -627,9 +846,5 @@ $(document).ready( function() {
|
||||
$('#wizp1').toggle(false);
|
||||
$('#wizp2').toggle(true);
|
||||
$('#wizp3').toggle(false);
|
||||
$("#abortConnection").show();
|
||||
|
||||
$("#wiz_hue_usrstate").html($.i18n('wiz_hue_failure_connection'));
|
||||
}
|
||||
|
||||
$('#btn_wizard_philipshue').off().on('click',startWizardPhilipsHue);
|
||||
});
|
BIN
assets/webconfig/mstile-144x144.png
Normal file
After Width: | Height: | Size: 24 KiB |
@ -27,13 +27,15 @@
|
||||
/// * [device type specific configuration]
|
||||
/// * 'colorOrder' : The order of the color bytes ('rgb', 'rbg', 'bgr', etc.).
|
||||
/// * 'rewriteTime': in ms. Data is resend to leds, if no new data is available in thistime. 0 means no refresh
|
||||
/// * 'latchTime' : minimum time between led writes. 0 means no limit. default 10 means a rate of max 100Hz write time
|
||||
"device" :
|
||||
{
|
||||
"type" : "file",
|
||||
"output" : "/dev/null",
|
||||
"rate" : 1000000,
|
||||
"colorOrder" : "rgb",
|
||||
"rewriteTime": 0
|
||||
"rewriteTime": 0,
|
||||
"latchTime" : 10
|
||||
},
|
||||
|
||||
/// Color manipulation configuration used to tune the output colors to specific surroundings.
|
||||
@ -51,8 +53,9 @@
|
||||
/// * 'id' : The unique identifier of the channel adjustments (eg 'device_1')
|
||||
/// * 'backlightThreshold' : Minimum brightness (backlight)
|
||||
/// * 'backlightColored' : backlight with color, instead of white
|
||||
/// * 'brightness' : Between 0.0-0.5 the brightness is linearized (white is as bright as red, is as bright as yellow).
|
||||
/// Between 0.5-1.0 the linearization reduces slowly until it's gone with 1.0 (white is 3x brighter than red, yellow is 2x brighter than red)
|
||||
/// * 'brightness' : overall brightness
|
||||
/// * 'brightnessCompensation' : 100 means brightness differences are compensated (white is as bright as red, is as bright as yellow.
|
||||
/// 0 means white is 3x brighter than red, yellow is 2x brighter than red
|
||||
"color" :
|
||||
{
|
||||
"imageToLedMappingType" : "multicolor_mean",
|
||||
@ -72,9 +75,10 @@
|
||||
"gammaRed" : 1.5,
|
||||
"gammaGreen" : 1.5,
|
||||
"gammaBlue" : 1.5,
|
||||
"backlightThreshold" : 0.0,
|
||||
"backlightThreshold" : 0,
|
||||
"backlightColored" : false,
|
||||
"brightness" : 0.5
|
||||
"brightness" : 100,
|
||||
"brightnessCompensation" : 80
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -114,6 +118,7 @@
|
||||
/// * cropRight : Cropping from the right [default=0]
|
||||
/// * cropTop : Cropping from the top [default=0]
|
||||
/// * cropBottom : Cropping from the bottom [default=0]
|
||||
/// * signalDetection : enable/disable signal detection [default=true]
|
||||
/// * redSignalThreshold : Signal threshold for the red channel between 0.0 and 1.0 [default=0.0]
|
||||
/// * greenSignalThreshold : Signal threshold for the green channel between 0.0 and 1.0 [default=0.0]
|
||||
/// * blueSignalThreshold : Signal threshold for the blue channel between 0.0 and 1.0 [default=0.0]
|
||||
@ -142,6 +147,7 @@
|
||||
"redSignalThreshold" : 0.0,
|
||||
"greenSignalThreshold" : 0.0,
|
||||
"blueSignalThreshold" : 0.0,
|
||||
"signalDetection" : true,
|
||||
"signalDetectionVerticalOffsetMin" : 0.25,
|
||||
"signalDetectionHorizontalOffsetMin" : 0.25,
|
||||
"signalDetectionVerticalOffsetMax" : 0.75,
|
||||
@ -186,7 +192,7 @@
|
||||
|
||||
/// The black border configuration, contains the following items:
|
||||
/// * enable : true if the detector should be activated
|
||||
/// * threshold : Value below which a pixel is regarded as black (value between 0.0 and 1.0)
|
||||
/// * threshold : Value below which a pixel is regarded as black (value between 0 and 100 [%])
|
||||
/// * unknownFrameCnt : Number of frames without any detection before the border is set to 0 (default 600)
|
||||
/// * borderFrameCnt : Number of frames before a consistent detected border gets set (default 50)
|
||||
/// * maxInconsistentCnt : Number of inconsistent frames that are ignored before a new border gets a chance to proof consistency
|
||||
@ -195,7 +201,7 @@
|
||||
"blackborderdetector" :
|
||||
{
|
||||
"enable" : true,
|
||||
"threshold" : 0.05,
|
||||
"threshold" : 5,
|
||||
"unknownFrameCnt" : 600,
|
||||
"borderFrameCnt" : 50,
|
||||
"maxInconsistentCnt" : 10,
|
||||
@ -288,19 +294,19 @@
|
||||
/// The configuration of the boblight server which enables the boblight remote interface
|
||||
/// * enable : Enable or disable the boblight server (true/false)
|
||||
/// * port : Port at which the boblight server is started
|
||||
/// * priority : Priority of the boblight server (Default=200) HINT: lower value result in HIGHER priority!
|
||||
/// * priority : Priority of the boblight server (Default=201) HINT: lower value result in HIGHER priority!
|
||||
"boblightServer" :
|
||||
{
|
||||
"enable" : false,
|
||||
"port" : 19333,
|
||||
"priority" : 200
|
||||
"priority" : 201
|
||||
},
|
||||
|
||||
/// The configuration of the udp listener
|
||||
/// * enable : Enable or disable the udp listener (true/false)
|
||||
/// * address : The listener address, pre configured is multicast which listen also to unicast ip addresses at the same time. If emtpy, multicast is disabled and it also accepts unicast from all IPs
|
||||
/// * port : Port at which the udp listener starts
|
||||
/// * priority : Priority of the udp listener server (Default=190)
|
||||
/// * priority : Priority of the udp listener server (Default=200)
|
||||
/// * timeout : The timeout sets the timelimit for a "soft" off of the udp listener, if no packages are received (for example to switch to a gabber or InitialEffect - background-effect)
|
||||
/// * shared : If true, the udp listener is shared across all hyperion instances (if using more than one (forwarder))
|
||||
"udpListener" :
|
||||
@ -308,7 +314,7 @@
|
||||
"enable" : false,
|
||||
"address" : "239.255.28.01",
|
||||
"port" : 2801,
|
||||
"priority" : 190,
|
||||
"priority" : 200,
|
||||
"timeout" : 10000,
|
||||
"shared" : false
|
||||
},
|
||||
|
@ -16,7 +16,8 @@
|
||||
"output" : "/dev/null",
|
||||
"rate" : 1000000,
|
||||
"colorOrder" : "rgb",
|
||||
"rewriteTime": 5000
|
||||
"rewriteTime": 5000,
|
||||
"latchTime" : 10
|
||||
},
|
||||
|
||||
"color" :
|
||||
@ -38,9 +39,10 @@
|
||||
"gammaRed" : 1.5,
|
||||
"gammaGreen" : 1.5,
|
||||
"gammaBlue" : 1.5,
|
||||
"backlightThreshold" : 0.0,
|
||||
"backlightThreshold" : 0,
|
||||
"backlightColored" : false,
|
||||
"brightness" : 0.75
|
||||
"brightness" : 100,
|
||||
"brightnessCompensation" : 100
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -76,6 +78,7 @@
|
||||
"redSignalThreshold" : 0.0,
|
||||
"greenSignalThreshold" : 0.0,
|
||||
"blueSignalThreshold" : 0.0,
|
||||
"signalDetection" : true,
|
||||
"signalDetectionVerticalOffsetMin" : 0.25,
|
||||
"signalDetectionHorizontalOffsetMin" : 0.25,
|
||||
"signalDetectionVerticalOffsetMax" : 0.75,
|
||||
@ -104,7 +107,7 @@
|
||||
"blackborderdetector" :
|
||||
{
|
||||
"enable" : true,
|
||||
"threshold" : 0.05,
|
||||
"threshold" : 5,
|
||||
"unknownFrameCnt" : 600,
|
||||
"borderFrameCnt" : 50,
|
||||
"maxInconsistentCnt" : 10,
|
||||
@ -164,7 +167,7 @@
|
||||
{
|
||||
"enable" : false,
|
||||
"port" : 19333,
|
||||
"priority" : 200
|
||||
"priority" : 201
|
||||
},
|
||||
|
||||
"udpListener" :
|
||||
@ -172,7 +175,7 @@
|
||||
"enable" : false,
|
||||
"address" : "239.255.28.01",
|
||||
"port" : 2801,
|
||||
"priority" : 190,
|
||||
"priority" : 200,
|
||||
"timeout" : 10000,
|
||||
"shared" : false
|
||||
},
|
||||
|
15
effects/breath.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name" : "Breath",
|
||||
"script" : "fade.py",
|
||||
"args" :
|
||||
{
|
||||
"color-end": [ 255, 255, 255 ],
|
||||
"color-start": [ 50, 50, 50 ],
|
||||
"fade-in-time" : 3000,
|
||||
"fade-out-time" : 1000,
|
||||
"color-start-time" : 50,
|
||||
"color-end-time" : 250,
|
||||
"repeat-count" : 0,
|
||||
"maintain-end-color" : true
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
"script" : "candle.py",
|
||||
"args" :
|
||||
{
|
||||
"sleepTime" : 0.15,
|
||||
"sleepTime" : 0.20,
|
||||
"brightness" : 100,
|
||||
"color" : [ 255, 138, 0 ],
|
||||
"candles" : "all"
|
||||
|
@ -3,8 +3,13 @@
|
||||
"script" : "fade.py",
|
||||
"args" :
|
||||
{
|
||||
"fade-time" : 5.0,
|
||||
"color-start" : [ 136, 97, 7 ],
|
||||
"color-end" : [ 238, 173, 47 ]
|
||||
"color-end" : [ 238, 173, 47 ],
|
||||
"fade-in-time" : 5000,
|
||||
"fade-out-time" : 0,
|
||||
"color-start-time" : 0,
|
||||
"color-end-time" : 0,
|
||||
"repeat-count" : 1,
|
||||
"maintain-end-color" : true
|
||||
}
|
||||
}
|
||||
|
@ -3,8 +3,13 @@
|
||||
"script" : "fade.py",
|
||||
"args" :
|
||||
{
|
||||
"fade-time" : 5.0,
|
||||
"color-start" : [ 238, 173, 47 ],
|
||||
"color-end" : [ 136, 97, 7 ]
|
||||
"color-start" : [ 136, 97, 7 ],
|
||||
"color-end" : [ 238, 173, 47 ],
|
||||
"fade-in-time" : 0,
|
||||
"fade-out-time" : 5000,
|
||||
"color-start-time" : 0,
|
||||
"color-end-time" : 0,
|
||||
"repeat-count" : 1,
|
||||
"maintain-end-color" : true
|
||||
}
|
||||
}
|
||||
|
@ -1,27 +1,92 @@
|
||||
import hyperion, time
|
||||
|
||||
# Get the parameters
|
||||
fadeTime = float(hyperion.args.get('fade-time', 5.0))
|
||||
fadeInTime = float(hyperion.args.get('fade-in-time', 2000)) / 1000.0
|
||||
fadeOutTime = float(hyperion.args.get('fade-out-time', 2000)) / 1000.0
|
||||
colorStart = hyperion.args.get('color-start', (255,174,11))
|
||||
colorEnd = hyperion.args.get('color-end', (100,100,100))
|
||||
colorEnd = hyperion.args.get('color-end', (0,0,0))
|
||||
colorStartTime = float(hyperion.args.get('color-start-time', 1000)) / 1000
|
||||
colorEndTime = float(hyperion.args.get('color-end-time', 1000)) / 1000
|
||||
repeat = hyperion.args.get('repeat-count', 0)
|
||||
maintainEndCol = hyperion.args.get('maintain-end-color', True)
|
||||
minStepTime = float(hyperion.latchTime)/1000.0
|
||||
currentR = currentG = currentB = 0
|
||||
|
||||
# create color table for fading from start to end color
|
||||
steps = float(abs(max((colorEnd[0] - colorStart[0]),max((colorEnd[1] - colorStart[1]),(colorEnd[2] - colorStart[2])))))
|
||||
color_step = (
|
||||
(colorEnd[0] - colorStart[0]) / 256.0,
|
||||
(colorEnd[1] - colorStart[1]) / 256.0,
|
||||
(colorEnd[2] - colorStart[2]) / 256.0
|
||||
(colorEnd[0] - colorStart[0]) / steps,
|
||||
(colorEnd[1] - colorStart[1]) / steps,
|
||||
(colorEnd[2] - colorStart[2]) / steps
|
||||
)
|
||||
|
||||
# fade color
|
||||
calcChannel = lambda i: min(max(int(colorStart[i] + color_step[i]*step),0),255)
|
||||
for step in range(256):
|
||||
if hyperion.abort():
|
||||
break
|
||||
calcChannel = lambda i: min(max(int(round(colorStart[i] + color_step[i]*step)),0), colorEnd[i] if colorStart[i] < colorEnd[i] else colorStart[i])
|
||||
colors = []
|
||||
for step in range(int(steps)+1):
|
||||
colors.append( (calcChannel(0),calcChannel(1),calcChannel(2)) )
|
||||
|
||||
hyperion.setColor( calcChannel(0),calcChannel(1),calcChannel(2) )
|
||||
time.sleep( fadeTime / 256 )
|
||||
# calculate timings
|
||||
if fadeInTime>0:
|
||||
incrementIn = max(1,int(round(steps / (fadeInTime / minStepTime) )))
|
||||
sleepTimeIn = fadeInTime / (steps / incrementIn)
|
||||
else:
|
||||
incrementIn = sleepTimeIn = 1
|
||||
|
||||
# maintain color until effect end
|
||||
hyperion.setColor(colorEnd[0],colorEnd[1],colorEnd[2])
|
||||
if fadeOutTime>0:
|
||||
incrementOut = max(1,int(round(steps / (fadeOutTime / minStepTime) )))
|
||||
sleepTimeOut = fadeOutTime / (steps / incrementOut)
|
||||
else:
|
||||
incrementOut = sleepTimeOut = 1
|
||||
|
||||
def setColor(r,g,b):
|
||||
global currentR,currentG,currentB
|
||||
|
||||
currentR = r
|
||||
currentG = g
|
||||
currentB = b
|
||||
hyperion.setColor(r,g,b)
|
||||
|
||||
# loop
|
||||
repeatCounter = 1
|
||||
while not hyperion.abort():
|
||||
# fade in
|
||||
if fadeInTime > 0:
|
||||
setColor( colors[0][0],colors[0][1],colors[0][2] )
|
||||
for step in range(0,int(steps)+1,incrementIn):
|
||||
if hyperion.abort(): break
|
||||
setColor( colors[step][0],colors[step][1],colors[step][2] )
|
||||
time.sleep(sleepTimeIn)
|
||||
|
||||
# end color
|
||||
t = 0.0
|
||||
while t<colorStartTime and not hyperion.abort():
|
||||
setColor( colors[int(steps)][0],colors[int(steps)][1],colors[int(steps)][2] )
|
||||
time.sleep(minStepTime)
|
||||
t += minStepTime
|
||||
|
||||
# fade out
|
||||
if fadeOutTime > 0:
|
||||
setColor( colors[int(steps)][0],colors[int(steps)][1],colors[int(steps)][2] )
|
||||
for step in range(int(steps),-1,-incrementOut):
|
||||
if hyperion.abort(): break
|
||||
setColor( colors[step][0],colors[step][1],colors[step][2] )
|
||||
time.sleep(sleepTimeOut)
|
||||
|
||||
# start color
|
||||
t = 0.0
|
||||
while t<colorEndTime and not hyperion.abort():
|
||||
setColor( colors[0][0],colors[0][1],colors[0][2] )
|
||||
time.sleep(minStepTime)
|
||||
t += minStepTime
|
||||
|
||||
# repeat
|
||||
if repeat > 0 and repeatCounter >= repeat : break
|
||||
repeatCounter += 1
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
# maintain end color until effect end
|
||||
while not hyperion.abort() and maintainEndCol:
|
||||
hyperion.setColor( currentR, currentG, currentB )
|
||||
time.sleep(1)
|
||||
|
||||
|
@ -51,4 +51,4 @@ while not hyperion.abort():
|
||||
hyperion.imageCanonicalGradient(centerX, centerY, angleS, colorsSecond)
|
||||
|
||||
hyperion.imageShow()
|
||||
time.sleep(0.01 )
|
||||
time.sleep(0.5 )
|
||||
|
16
effects/notify-blue.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name" : "Notify blue",
|
||||
"script" : "fade.py",
|
||||
"args" :
|
||||
{
|
||||
"color-start": [ 0, 0, 50 ],
|
||||
"color-end": [ 0, 0, 255 ],
|
||||
"fade-in-time" : 200,
|
||||
"fade-out-time" : 100,
|
||||
"color-start-time" : 40,
|
||||
"color-end-time" : 150,
|
||||
"repeat-count" : 3,
|
||||
"maintain-end-color" : false
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,6 @@
|
||||
"args" :
|
||||
{
|
||||
"margin-pos" : 2.0,
|
||||
"rotationTime" : 8
|
||||
"rotationTime" : 4
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
import hyperion
|
||||
import time
|
||||
import colorsys
|
||||
import hyperion, time, colorsys
|
||||
from random import randint
|
||||
|
||||
#get args
|
||||
rotationTime = int(hyperion.args.get('rotationTime', 8))
|
||||
marginPos = float(hyperion.args.get('margin-pos', 1.5))
|
||||
rotationTime = float(hyperion.args.get('rotationTime', 4))
|
||||
marginPos = float(hyperion.args.get('margin-pos', 2))
|
||||
|
||||
# define pacman
|
||||
pacman = bytearray((255, 255, 0))
|
||||
@ -23,7 +21,7 @@ background = bytearray((0, 0, 0))
|
||||
posPac = 1
|
||||
diffPac = 6*marginPos
|
||||
diffGuys = 3*marginPos
|
||||
sleepTime = rotationTime/ledCount
|
||||
sleepTime = max(0.02,rotationTime/hyperion.ledCount)
|
||||
|
||||
posPinkGuy = posPac + diffPac
|
||||
posBlueGuy = posPinkGuy + diffGuys
|
||||
@ -92,4 +90,5 @@ while not hyperion.abort():
|
||||
shift = 3*(hyperion.ledCount - random)
|
||||
ledData = ledDataChase[shift:]+ledDataChase[:shift]
|
||||
shiftLED(ledData, -increment, 2*hyperion.ledCount-random)
|
||||
time.sleep(sleepTime)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import hyperion, time
|
||||
import hyperion, time, math
|
||||
|
||||
# Get the parameters
|
||||
rotationTime = float(hyperion.args.get('rotation-time', 3.0))
|
||||
@ -6,12 +6,18 @@ reverse = bool(hyperion.args.get('reverse', False))
|
||||
centerX = float(hyperion.args.get('center_x', 0.5))
|
||||
centerY = float(hyperion.args.get('center_y', 0.5))
|
||||
|
||||
minStepTime = float(hyperion.latchTime)/1000.0
|
||||
sleepTime = max(0.1, rotationTime) / 360
|
||||
angle = 0
|
||||
centerX = int(round(float(hyperion.imageWidth)*centerX))
|
||||
centerY = int(round(float(hyperion.imageHeight)*centerY))
|
||||
increment = -1 if reverse else 1
|
||||
|
||||
# adapt sleeptime to hardware
|
||||
if minStepTime > sleepTime:
|
||||
increment *= int(math.ceil(minStepTime / sleepTime))
|
||||
sleepTime = minStepTime
|
||||
|
||||
# table of stop colors for rainbow gradient, first is the position, next rgb, all values 0-255
|
||||
rainbowColors = bytearray([
|
||||
0 ,255,0 ,0, 255,
|
||||
|
@ -3,7 +3,7 @@
|
||||
"script" : "random.py",
|
||||
"args" :
|
||||
{
|
||||
"speed" : 1.0,
|
||||
"speed" : 750,
|
||||
"saturation" : 1.0
|
||||
}
|
||||
}
|
||||
|
@ -1,21 +1,46 @@
|
||||
import hyperion, time, colorsys, random
|
||||
import hyperion, time, colorsys, random, math
|
||||
|
||||
# get args
|
||||
sleepTime = float(hyperion.args.get('speed', 1.0))
|
||||
sleepTime = float(hyperion.args.get('speed', 1.0))/1000.0
|
||||
saturation = float(hyperion.args.get('saturation', 1.0))
|
||||
ledData = bytearray()
|
||||
ledDataBuf = bytearray()
|
||||
color_step = []
|
||||
minStepTime= float(hyperion.latchTime)/1000.0
|
||||
fadeSteps = min(256.0, math.floor(sleepTime/minStepTime))
|
||||
|
||||
# Initialize the led data
|
||||
for i in range(hyperion.ledCount):
|
||||
ledData += bytearray((0,0,0))
|
||||
ledDataBuf += bytearray((0,0,0))
|
||||
color_step.append((0.0,0.0,0.0))
|
||||
|
||||
# Start the write data loop
|
||||
while not hyperion.abort():
|
||||
hyperion.setColor(ledData)
|
||||
for i in range(len(ledData)):
|
||||
ledDataBuf[i] = ledData[i]
|
||||
|
||||
for i in range(hyperion.ledCount):
|
||||
if random.randrange(10) == 1:
|
||||
rgb = colorsys.hsv_to_rgb(random.random(), saturation, random.random())
|
||||
ledData[i*3 ] = int(255*rgb[0])
|
||||
ledData[i*3+1] = int(255*rgb[1])
|
||||
ledData[i*3+2] = int(255*rgb[2])
|
||||
time.sleep(sleepTime)
|
||||
|
||||
color_step[i] = (
|
||||
(ledData[i*3 ]-ledDataBuf[i*3 ])/fadeSteps,
|
||||
(ledData[i*3+1]-ledDataBuf[i*3+1])/fadeSteps,
|
||||
(ledData[i*3+2]-ledDataBuf[i*3+2])/fadeSteps)
|
||||
else:
|
||||
color_step[i] = (0.0,0.0,0.0)
|
||||
|
||||
for step in range(int(fadeSteps)):
|
||||
for i in range(hyperion.ledCount):
|
||||
ledDataBuf[i*3 ] = min(max(int(ledDataBuf[i*3 ] + color_step[i][0]*float(step)),0),ledData[i*3 ])
|
||||
ledDataBuf[i*3+1] = min(max(int(ledDataBuf[i*3+1] + color_step[i][1]*float(step)),0),ledData[i*3+1])
|
||||
ledDataBuf[i*3+2] = min(max(int(ledDataBuf[i*3+2] + color_step[i][2]*float(step)),0),ledData[i*3+2])
|
||||
|
||||
hyperion.setColor(ledDataBuf)
|
||||
time.sleep(sleepTime/fadeSteps)
|
||||
hyperion.setColor(ledData)
|
||||
|
||||
|
@ -4,14 +4,6 @@
|
||||
"title":"edt_eff_fade_header_title",
|
||||
"required":true,
|
||||
"properties":{
|
||||
"fade-time": {
|
||||
"type": "number",
|
||||
"title":"edt_eff_fadetime_title",
|
||||
"default": 5.0,
|
||||
"minimum" : 0.1,
|
||||
"append" : "edt_append_s",
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"color-start": {
|
||||
"type": "array",
|
||||
"title":"edt_eff_colorstart_title",
|
||||
@ -25,8 +17,24 @@
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3,
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"color-start-time": {
|
||||
"type": "integer",
|
||||
"title":"edt_eff_colorstarttime_title",
|
||||
"default": 1000,
|
||||
"minimum" : 0,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 2
|
||||
},
|
||||
"fade-in-time": {
|
||||
"type": "integer",
|
||||
"title":"edt_eff_fadeintime_title",
|
||||
"default": 2000,
|
||||
"minimum" : 0,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 3
|
||||
},
|
||||
"color-end": {
|
||||
"type": "array",
|
||||
"title":"edt_eff_colorend_title",
|
||||
@ -39,7 +47,35 @@
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3,
|
||||
"propertyOrder" : 3
|
||||
"propertyOrder" : 4
|
||||
},
|
||||
"color-end-time": {
|
||||
"type": "integer",
|
||||
"title":"edt_eff_colorendtime_title",
|
||||
"default": 1000,
|
||||
"minimum" : 0,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 5
|
||||
},
|
||||
"fade-out-time": {
|
||||
"type": "integer",
|
||||
"title":"edt_eff_fadeouttime_title",
|
||||
"default": 2000,
|
||||
"minimum" : 0,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 6
|
||||
},
|
||||
"repeat-count": {
|
||||
"type": "integer",
|
||||
"title":"edt_eff_repeatcount_title",
|
||||
"default": 0,
|
||||
"propertyOrder" : 7
|
||||
},
|
||||
"maintain-end-color": {
|
||||
"type": "boolean",
|
||||
"title":"edt_eff_maintain_end_color_title",
|
||||
"default": true,
|
||||
"propertyOrder" : 8
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
@ -7,8 +7,9 @@
|
||||
"speed": {
|
||||
"type": "number",
|
||||
"title":"edt_eff_speed_title",
|
||||
"default": 1.0,
|
||||
"minimum" : 0.0,
|
||||
"default": 1000,
|
||||
"minimum" : 10,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"saturation": {
|
||||
|
@ -1,31 +0,0 @@
|
||||
{
|
||||
"type":"object",
|
||||
"script" : "strobe.py",
|
||||
"title":"edt_eff_storbe_header_title",
|
||||
"required":true,
|
||||
"properties":{
|
||||
"color": {
|
||||
"type": "array",
|
||||
"title":"edt_eff_color_title",
|
||||
"format":"colorpicker",
|
||||
"default": [255,0,0],
|
||||
"items" : {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 255
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3,
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"frequency": {
|
||||
"type": "number",
|
||||
"title":"edt_eff_frequency_title",
|
||||
"default": 10.0,
|
||||
"minimum" : 0.1,
|
||||
"append" : "edt_append_hz",
|
||||
"propertyOrder" : 2
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
@ -33,10 +33,11 @@
|
||||
"propertyOrder" : 4
|
||||
},
|
||||
"speed": {
|
||||
"type": "number",
|
||||
"type": "integer",
|
||||
"title":"edt_eff_speed_title",
|
||||
"default": 1.0,
|
||||
"minimum" : 0.1,
|
||||
"default": 100,
|
||||
"minimum" : 10,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 5
|
||||
},
|
||||
"random": {
|
||||
|
@ -5,11 +5,47 @@
|
||||
"required":true,
|
||||
"properties":{
|
||||
"sleepTime": {
|
||||
"type": "number",
|
||||
"type": "integer",
|
||||
"title":"edt_eff_sleeptime_title",
|
||||
"default": 1.0,
|
||||
"minimum" : 0.1,
|
||||
"default": 1000,
|
||||
"minimum" : 100,
|
||||
"append" : "edt_append_ms",
|
||||
"propertyOrder" : 1
|
||||
},
|
||||
"length": {
|
||||
"type": "integer",
|
||||
"title":"edt_eff_length_title",
|
||||
"default": 1,
|
||||
"minimum" : 1,
|
||||
"propertyOrder" : 2
|
||||
},
|
||||
"color1": {
|
||||
"type": "array",
|
||||
"title":"edt_eff_color_title",
|
||||
"format":"colorpicker",
|
||||
"default": [255,255,255],
|
||||
"items" : {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 255
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3,
|
||||
"propertyOrder" : 3
|
||||
},
|
||||
"color2": {
|
||||
"type": "array",
|
||||
"title":"edt_eff_color_title",
|
||||
"format":"colorpicker",
|
||||
"default": [255,0,0],
|
||||
"items" : {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 255
|
||||
},
|
||||
"minItems": 3,
|
||||
"maxItems": 3,
|
||||
"propertyOrder" : 4
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"name" : "Strobe blue",
|
||||
"script" : "strobe.py",
|
||||
"args" :
|
||||
{
|
||||
"color" : [ 0, 0, 255 ],
|
||||
"frequency" : 5.0
|
||||
}
|
||||
}
|
15
effects/strobe-red.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name" : "Strobe red",
|
||||
"script" : "fade.py",
|
||||
"args" :
|
||||
{
|
||||
"color-start": [ 255, 0, 0 ],
|
||||
"color-end": [ 0, 0, 0 ],
|
||||
"fade-in-time" : 100,
|
||||
"fade-out-time" : 100,
|
||||
"color-start-time" : 100,
|
||||
"color-end-time" : 100,
|
||||
"repeat-count" : 0,
|
||||
"maintain-end-color" : true
|
||||
}
|
||||
}
|
@ -1,9 +1,15 @@
|
||||
{
|
||||
"name" : "Strobe white",
|
||||
"script" : "strobe.py",
|
||||
"script" : "fade.py",
|
||||
"args" :
|
||||
{
|
||||
"color" : [ 255, 255, 255 ],
|
||||
"frequency" : 5.0
|
||||
"color-start": [ 255, 255, 255 ],
|
||||
"color-end": [ 0, 0, 0 ],
|
||||
"fade-in-time" : 0,
|
||||
"fade-out-time" : 100,
|
||||
"color-start-time" : 50,
|
||||
"color-end-time" : 10,
|
||||
"repeat-count" : 0,
|
||||
"maintain-end-color" : true
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
import hyperion, time
|
||||
|
||||
# Get the rotation time
|
||||
color = hyperion.args.get('color', (255,255,255))
|
||||
frequency = float(hyperion.args.get('frequency', 10.0))
|
||||
|
||||
# Check parameters
|
||||
frequency = min(100.0, frequency)
|
||||
|
||||
# Compute the strobe interval
|
||||
sleepTime = 0.5 / frequency
|
||||
|
||||
# Start the write data loop
|
||||
while not hyperion.abort():
|
||||
hyperion.setColor(0, 0, 0)
|
||||
time.sleep(sleepTime)
|
||||
hyperion.setColor(color[0], color[1], color[2])
|
||||
time.sleep(sleepTime)
|
@ -1,7 +1,4 @@
|
||||
import hyperion
|
||||
import time
|
||||
import colorsys
|
||||
import random
|
||||
import hyperion, time, random, math
|
||||
|
||||
# Initialize the led data
|
||||
ledData = bytearray()
|
||||
@ -9,6 +6,8 @@ for i in range(hyperion.ledCount):
|
||||
ledData += bytearray((0,0,0))
|
||||
|
||||
sleepTime = float(hyperion.args.get('speed', 1.0)) * 0.004
|
||||
minStepTime = float(hyperion.latchTime)/1000.0
|
||||
factor = 1 if sleepTime > minStepTime else int(math.ceil(minStepTime/sleepTime))
|
||||
|
||||
runners = [
|
||||
{ "i":0, "pos":0, "c":0, "step":9, "lvl":255},
|
||||
@ -20,6 +19,7 @@ runners = [
|
||||
]
|
||||
|
||||
# Start the write data loop
|
||||
i = 0
|
||||
while not hyperion.abort():
|
||||
for r in runners:
|
||||
if r["c"] == 0:
|
||||
@ -30,5 +30,9 @@ while not hyperion.abort():
|
||||
else:
|
||||
r["c"] -= 1
|
||||
|
||||
i += 1
|
||||
if i % factor == 0:
|
||||
hyperion.setColor(ledData)
|
||||
i = 0
|
||||
|
||||
time.sleep(sleepTime)
|
||||
|
@ -7,7 +7,7 @@
|
||||
"max_len" : 7,
|
||||
"height" : 8,
|
||||
"trails": 3,
|
||||
"speed" : 1.0,
|
||||
"speed" : 30,
|
||||
"random" : false,
|
||||
"color" : [255, 255, 255]
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ min_len = int(hyperion.args.get('min_len', 3))
|
||||
max_len = int(hyperion.args.get('max_len', 3))
|
||||
height = int(hyperion.args.get('height', 8))
|
||||
trails = int(hyperion.args.get('int', 8))
|
||||
sleepTime = float(hyperion.args.get('speed', 1.0)) * 0.01
|
||||
sleepTime = float(hyperion.args.get('speed', 1)) / 1000.0
|
||||
color = list(hyperion.args.get('color', (255,255,255)))
|
||||
randomise = bool(hyperion.args.get('random', False))
|
||||
whidth = hyperion.ledCount / height
|
||||
@ -45,9 +45,7 @@ class trail:
|
||||
tr = []
|
||||
|
||||
for i in range(trails):
|
||||
r = {
|
||||
'exec': trail()
|
||||
}
|
||||
r = {'exec': trail()}
|
||||
|
||||
if randomise:
|
||||
col = (random.uniform(0.1, 1.0), random.uniform(0.1, 1.0), random.uniform(0.1, 1.0))
|
||||
|
@ -7,7 +7,7 @@
|
||||
"max_len" : 6,
|
||||
"height" : 8,
|
||||
"trails": 16,
|
||||
"speed" : 8.0,
|
||||
"speed" : 50,
|
||||
"random" : true,
|
||||
"color" : [255, 255, 255]
|
||||
}
|
||||
|
@ -3,6 +3,9 @@
|
||||
"script" : "x-mas.py",
|
||||
"args" :
|
||||
{
|
||||
"sleepTime" : 0.75
|
||||
"sleepTime" : 750,
|
||||
"color1" : [255,255,255],
|
||||
"color2" : [255,0,0],
|
||||
"length" : 1
|
||||
}
|
||||
}
|
||||
|
@ -1,22 +1,26 @@
|
||||
import hyperion, time, colorsys
|
||||
|
||||
# Get the parameters
|
||||
sleepTime = float(hyperion.args.get('sleepTime', 1.0))
|
||||
sleepTime = float(hyperion.args.get('sleepTime', 1000))/1000.0
|
||||
length = hyperion.args.get('length', 1)
|
||||
color1 = hyperion.args.get('color1', (255,255,255))
|
||||
color2 = hyperion.args.get('color2', (255,0,0))
|
||||
|
||||
# Initialize the led data
|
||||
i = 0
|
||||
ledDataOdd = bytearray()
|
||||
for i in range(hyperion.ledCount):
|
||||
if i%2 == 0:
|
||||
ledDataOdd += bytearray((int(255), int(0), int(0)))
|
||||
else:
|
||||
ledDataOdd += bytearray((int(255), int(255), int(255)))
|
||||
while i < hyperion.ledCount:
|
||||
for l in range(length):
|
||||
if i<hyperion.ledCount:
|
||||
ledDataOdd += bytearray((int(color1[0]), int(color1[1]), int(color1[2])))
|
||||
i += 1
|
||||
|
||||
ledDataEven = bytearray()
|
||||
for i in range(hyperion.ledCount):
|
||||
if i%2 == 0:
|
||||
ledDataEven += bytearray((int(255), int(255), int(255)))
|
||||
else:
|
||||
ledDataEven += bytearray((int(255), int(0), int(0)))
|
||||
for l in range(length):
|
||||
if i<hyperion.ledCount:
|
||||
ledDataOdd += bytearray((int(color2[0]), int(color2[1]), int(color2[2])))
|
||||
i += 1
|
||||
|
||||
ledDataEven = ledDataOdd[3*length:] + ledDataOdd[0:3*length]
|
||||
|
||||
# Start the write data loop
|
||||
while not hyperion.abort():
|
||||
|
@ -116,7 +116,7 @@ namespace hyperion
|
||||
unsigned _blurRemoveCnt;
|
||||
|
||||
/// The border detection mode
|
||||
const std::string _detectionMode;
|
||||
const QString _detectionMode;
|
||||
|
||||
/// The blackborder detector
|
||||
BlackBorderDetector _detector;
|
||||
|
@ -35,20 +35,31 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
class BonjourRecord
|
||||
{
|
||||
public:
|
||||
BonjourRecord() {}
|
||||
BonjourRecord() : port(-1) {}
|
||||
BonjourRecord(const QString &name, const QString ®Type, const QString &domain)
|
||||
: serviceName(name), registeredType(regType), replyDomain(domain)
|
||||
: serviceName(name)
|
||||
, registeredType(regType)
|
||||
, replyDomain(domain)
|
||||
, port(-1)
|
||||
{}
|
||||
|
||||
BonjourRecord(const char *name, const char *regType, const char *domain)
|
||||
: serviceName(QString::fromUtf8(name))
|
||||
, registeredType(QString::fromUtf8(regType))
|
||||
, replyDomain(QString::fromUtf8(domain))
|
||||
, port(-1)
|
||||
{
|
||||
serviceName = QString::fromUtf8(name);
|
||||
registeredType = QString::fromUtf8(regType);
|
||||
replyDomain = QString::fromUtf8(domain);
|
||||
}
|
||||
|
||||
QString serviceName;
|
||||
QString registeredType;
|
||||
QString replyDomain;
|
||||
bool operator==(const BonjourRecord &other) const {
|
||||
QString hostName;
|
||||
QString address;
|
||||
int port;
|
||||
|
||||
bool operator==(const BonjourRecord &other) const
|
||||
{
|
||||
return serviceName == other.serviceName
|
||||
&& registeredType == other.registeredType
|
||||
&& replyDomain == other.replyDomain;
|
||||
|
65
include/bonjour/bonjourservicebrowser.h
Normal file
@ -0,0 +1,65 @@
|
||||
/*
|
||||
Copyright (c) 2007, Trenton Schulz
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. 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.
|
||||
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*/
|
||||
|
||||
#ifndef BONJOURSERVICEBROWSER_H
|
||||
#define BONJOURSERVICEBROWSER_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <dns_sd.h>
|
||||
#include "bonjour/bonjourrecord.h"
|
||||
|
||||
|
||||
class QSocketNotifier;
|
||||
class BonjourServiceBrowser : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
BonjourServiceBrowser(QObject *parent = 0);
|
||||
~BonjourServiceBrowser();
|
||||
void browseForServiceType(const QString &serviceType);
|
||||
inline QList<BonjourRecord> currentRecords() const { return bonjourRecords; }
|
||||
inline QString serviceType() const { return browsingType; }
|
||||
|
||||
signals:
|
||||
void currentBonjourRecordsChanged(const QList<BonjourRecord> &list);
|
||||
void error(DNSServiceErrorType err);
|
||||
|
||||
private slots:
|
||||
void bonjourSocketReadyRead();
|
||||
|
||||
private:
|
||||
static void DNSSD_API bonjourBrowseReply(DNSServiceRef , DNSServiceFlags flags, quint32,
|
||||
DNSServiceErrorType errorCode, const char *serviceName,
|
||||
const char *regType, const char *replyDomain, void *context);
|
||||
DNSServiceRef dnssref;
|
||||
QSocketNotifier *bonjourSocket;
|
||||
QList<BonjourRecord> bonjourRecords;
|
||||
QString browsingType;
|
||||
};
|
||||
|
||||
#endif // BONJOURSERVICEBROWSER_H
|
69
include/bonjour/bonjourserviceresolver.h
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
Copyright (c) 2007, Trenton Schulz
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
2. 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.
|
||||
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*/
|
||||
|
||||
#ifndef BONJOURSERVICERESOLVER_H
|
||||
#define BONJOURSERVICERESOLVER_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
|
||||
|
||||
#include <dns_sd.h>
|
||||
|
||||
class QSocketNotifier;
|
||||
class QHostInfo;
|
||||
class BonjourRecord;
|
||||
|
||||
class BonjourServiceResolver : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
BonjourServiceResolver(QObject *parent);
|
||||
~BonjourServiceResolver();
|
||||
|
||||
bool resolveBonjourRecord(const BonjourRecord &record);
|
||||
|
||||
signals:
|
||||
void bonjourRecordResolved(const QHostInfo &hostInfo, int port);
|
||||
void error(DNSServiceErrorType error);
|
||||
|
||||
private slots:
|
||||
void bonjourSocketReadyRead();
|
||||
void cleanupResolve();
|
||||
void finishConnect(const QHostInfo &hostInfo);
|
||||
|
||||
private:
|
||||
static void DNSSD_API bonjourResolveReply(DNSServiceRef sdRef, DNSServiceFlags flags,
|
||||
quint32 interfaceIndex, DNSServiceErrorType errorCode,
|
||||
const char *fullName, const char *hosttarget, quint16 port,
|
||||
quint16 txtLen, const char *txtRecord, void *context);
|
||||
DNSServiceRef dnssref;
|
||||
QSocketNotifier *bonjourSocket;
|
||||
int bonjourPort;
|
||||
};
|
||||
|
||||
#endif // BONJOURSERVICERESOLVER_H
|
@ -1,5 +1,4 @@
|
||||
#ifndef HYPERION_OPTION_H
|
||||
#define HYPERION_OPTION_H
|
||||
#pragma once
|
||||
|
||||
#include <QCommandLineOption>
|
||||
#include <QCommandLineParser>
|
||||
@ -13,38 +12,30 @@ class Parser;
|
||||
* regular QCommandLineOption it is _not_ idempotent! */
|
||||
class Option: public QCommandLineOption
|
||||
{
|
||||
protected:
|
||||
QString _error;
|
||||
public:
|
||||
Option(const QString &name,
|
||||
const QString &description = QString(),
|
||||
const QString &valueName = QString::null,
|
||||
const QString &defaultValue = QString()
|
||||
)
|
||||
: QCommandLineOption(name, description, valueName, defaultValue)
|
||||
{}
|
||||
);
|
||||
|
||||
Option(const QStringList &names,
|
||||
const QString &description = QString(),
|
||||
const QString &valueName = QString::null,
|
||||
const QString &defaultValue = QString()
|
||||
)
|
||||
: QCommandLineOption(names, description, valueName, defaultValue)
|
||||
{}
|
||||
Option(const QCommandLineOption &other)
|
||||
: QCommandLineOption(other)
|
||||
{}
|
||||
);
|
||||
|
||||
Option(const QCommandLineOption &other);
|
||||
|
||||
virtual bool validate(Parser &parser, QString &value);
|
||||
QString name()
|
||||
{ return this->names().last();}
|
||||
QString getError()
|
||||
{ return this->_error; }
|
||||
QString name();
|
||||
QString getError();
|
||||
QString value(Parser &parser);
|
||||
std::string getStdString(Parser &parser);
|
||||
std::wstring getStdWString(Parser &parser);
|
||||
const char* getCString(Parser &parser);
|
||||
|
||||
protected:
|
||||
QString _error;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //HYPERION_OPTION_H
|
||||
|
@ -45,13 +45,10 @@ public:
|
||||
|
||||
public slots:
|
||||
/// Run the specified effect on the given priority channel and optionally specify a timeout
|
||||
int runEffect(const QString &effectName, int priority, int timeout = -1)
|
||||
{
|
||||
return runEffect(effectName, QJsonObject(), priority, timeout);
|
||||
};
|
||||
int runEffect(const QString &effectName, int priority, int timeout = -1, const QString &origin="System");
|
||||
|
||||
/// Run the specified effect on the given priority channel and optionally specify a timeout
|
||||
int runEffect(const QString &effectName, const QJsonObject & args, int priority, int timeout = -1, QString pythonScript = "");
|
||||
int runEffect(const QString &effectName, const QJsonObject & args, int priority, int timeout = -1, const QString &pythonScript = "", const QString &origin = "System");
|
||||
|
||||
/// Clear any effect running on the provided channel
|
||||
void channelCleared(int priority);
|
||||
@ -68,7 +65,7 @@ private:
|
||||
bool loadEffectSchema(const QString & path, const QString & effectSchemaFile, EffectSchema &effectSchema);
|
||||
|
||||
/// Run the specified effect on the given priority channel and optionally specify a timeout
|
||||
int runEffectScript(const QString &script, const QString &name, const QJsonObject & args, int priority, int timeout = -1);
|
||||
int runEffectScript(const QString &script, const QString &name, const QJsonObject & args, int priority, int timeout = -1, const QString & origin="System");
|
||||
|
||||
private:
|
||||
Hyperion * _hyperion;
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
/// @param[in] width The width of the captured screenshot
|
||||
/// @param[in] height The heigth of the captured screenshot
|
||||
///
|
||||
FramebufferFrameGrabber(const std::string & device, const unsigned width, const unsigned height);
|
||||
FramebufferFrameGrabber(const QString & device, const unsigned width, const unsigned height);
|
||||
~FramebufferFrameGrabber();
|
||||
|
||||
///
|
||||
@ -47,7 +47,7 @@ private:
|
||||
unsigned char * _fbp;
|
||||
|
||||
/// Framebuffer device e.g. /dev/fb0
|
||||
const std::string _fbDevice;
|
||||
const QString _fbDevice;
|
||||
|
||||
/// With of the captured snapshot [pixels]
|
||||
const unsigned _width;
|
||||
|
@ -28,7 +28,7 @@ public:
|
||||
/// @param[in] grabHeight The height of the grabbed images [pixels]
|
||||
/// @param[in] updateRate_Hz The image grab rate [Hz]
|
||||
///
|
||||
FramebufferWrapper(const std::string & device, const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz, const int priority);
|
||||
FramebufferWrapper(const QString & device, const unsigned grabWidth, const unsigned grabHeight, const unsigned updateRate_Hz, const int priority);
|
||||
|
||||
///
|
||||
/// Destructor of this framebuffer frame grabber. Releases any claimed resources.
|
||||
|
@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
// stl includes
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
@ -29,7 +28,7 @@ class V4L2Grabber : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
V4L2Grabber(const std::string & device,
|
||||
V4L2Grabber(const QString & device,
|
||||
int input,
|
||||
VideoStandard videoStandard, PixelFormat pixelFormat,
|
||||
int width,
|
||||
@ -41,6 +40,7 @@ public:
|
||||
virtual ~V4L2Grabber();
|
||||
|
||||
QRectF getSignalDetectionOffset();
|
||||
bool getSignalDetectionEnabled();
|
||||
|
||||
public slots:
|
||||
void setCropping(int cropLeft,
|
||||
@ -62,6 +62,8 @@ public slots:
|
||||
double verticalMax,
|
||||
double horizontalMax);
|
||||
|
||||
void setSignalDetectionEnable(bool enable);
|
||||
|
||||
bool start();
|
||||
|
||||
void stop();
|
||||
@ -103,9 +105,9 @@ private:
|
||||
|
||||
int xioctl(int request, void *arg);
|
||||
|
||||
void throw_exception(const std::string &error);
|
||||
void throw_exception(const QString &error);
|
||||
|
||||
void throw_errno_exception(const std::string &error);
|
||||
void throw_errno_exception(const QString &error);
|
||||
|
||||
private:
|
||||
enum io_method {
|
||||
@ -120,8 +122,8 @@ private:
|
||||
};
|
||||
|
||||
private:
|
||||
std::string _deviceName;
|
||||
std::map<std::string,std::string> _v4lDevices;
|
||||
QString _deviceName;
|
||||
std::map<QString,QString> _v4lDevices;
|
||||
int _input;
|
||||
VideoStandard _videoStandard;
|
||||
io_method _ioMethod;
|
||||
@ -134,13 +136,19 @@ private:
|
||||
int _lineLength;
|
||||
int _frameByteSize;
|
||||
int _frameDecimation;
|
||||
int _noSignalCounterThreshold;
|
||||
|
||||
// signal detection
|
||||
int _noSignalCounterThreshold;
|
||||
ColorRgb _noSignalThresholdColor;
|
||||
bool _signalDetectionEnabled;
|
||||
bool _noSignalDetected;
|
||||
int _noSignalCounter;
|
||||
double _x_frac_min;
|
||||
double _y_frac_min;
|
||||
double _x_frac_max;
|
||||
double _y_frac_max;
|
||||
|
||||
int _currentFrame;
|
||||
int _noSignalCounter;
|
||||
|
||||
QSocketNotifier * _streamNotifier;
|
||||
|
||||
ImageResampler _imageResampler;
|
||||
@ -149,10 +157,5 @@ private:
|
||||
bool _initialized;
|
||||
bool _deviceAutoDiscoverEnabled;
|
||||
|
||||
bool _noSignalDetected;
|
||||
double _x_frac_min;
|
||||
double _y_frac_min;
|
||||
double _x_frac_max;
|
||||
double _y_frac_max;
|
||||
|
||||
};
|
||||
|
@ -13,7 +13,7 @@ class V4L2Wrapper : public GrabberWrapper
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
V4L2Wrapper(const std::string & device,
|
||||
V4L2Wrapper(const QString & device,
|
||||
int input,
|
||||
VideoStandard videoStandard,
|
||||
PixelFormat pixelFormat,
|
||||
@ -27,6 +27,8 @@ public:
|
||||
const int priority);
|
||||
virtual ~V4L2Wrapper();
|
||||
|
||||
bool getSignalDetectionEnable();
|
||||
|
||||
public slots:
|
||||
bool start();
|
||||
void stop();
|
||||
@ -34,6 +36,7 @@ public slots:
|
||||
void setCropping(int cropLeft, int cropRight, int cropTop, int cropBottom);
|
||||
void setSignalDetectionOffset(double verticalMin, double horizontalMin, double verticalMax, double horizontalMax);
|
||||
void set3D(VideoMode mode);
|
||||
void setSignalDetectionEnable(bool enable);
|
||||
|
||||
// signals:
|
||||
// void emitColors(int priority, const std::vector<ColorRgb> &ledColors, const int timeout_ms);
|
||||
|
@ -1,8 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
|
||||
/**
|
||||
* Enumeration of the possible video standards the grabber can be set to
|
||||
*/
|
||||
@ -12,10 +9,10 @@ enum VideoStandard {
|
||||
VIDEOSTANDARD_NO_CHANGE
|
||||
};
|
||||
|
||||
inline VideoStandard parseVideoStandard(std::string videoStandard)
|
||||
inline VideoStandard parseVideoStandard(QString videoStandard)
|
||||
{
|
||||
// convert to lower case
|
||||
std::transform(videoStandard.begin(), videoStandard.end(), videoStandard.begin(), ::tolower);
|
||||
videoStandard = videoStandard.toLower();
|
||||
|
||||
if (videoStandard == "pal")
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
// STL includes
|
||||
#include <string>
|
||||
#include <QString>
|
||||
|
||||
// Utils includes
|
||||
#include <utils/RgbChannelAdjustment.h>
|
||||
@ -12,7 +12,7 @@ class ColorAdjustment
|
||||
public:
|
||||
|
||||
/// Unique identifier for this color transform
|
||||
std::string _id;
|
||||
QString _id;
|
||||
|
||||
/// The BLACK (RGB-Channel) adjustment
|
||||
RgbChannelAdjustment _rgbBlackAdjustment;
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
#include <QObject>
|
||||
#include <QTimer>
|
||||
#include <string>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
|
@ -2,11 +2,12 @@
|
||||
|
||||
// stl includes
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <QMap>
|
||||
|
||||
// QT includes
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QTimer>
|
||||
#include <QSize>
|
||||
#include <QJsonObject>
|
||||
@ -33,6 +34,8 @@
|
||||
|
||||
// KodiVideoChecker includes
|
||||
#include <kodivideochecker/KODIVideoChecker.h>
|
||||
#include <bonjour/bonjourservicebrowser.h>
|
||||
#include <bonjour/bonjourserviceresolver.h>
|
||||
|
||||
// Forward class declaration
|
||||
class LedDevice;
|
||||
@ -52,8 +55,8 @@ class Hyperion : public QObject
|
||||
public:
|
||||
/// Type definition of the info structure used by the priority muxer
|
||||
typedef PriorityMuxer::InputInfo InputInfo;
|
||||
typedef std::map<std::string,int> PriorityRegister;
|
||||
|
||||
typedef QMap<QString,int> PriorityRegister;
|
||||
typedef QMap<QString,BonjourRecord> BonjourRegister;
|
||||
///
|
||||
/// RGB-Color channel enumeration
|
||||
///
|
||||
@ -128,16 +131,17 @@ public:
|
||||
|
||||
/// get filename of configfile
|
||||
/// @return the current config filename
|
||||
std::string getConfigFileName() { return _configFile.toStdString(); };
|
||||
QString getConfigFileName() { return _configFile; };
|
||||
|
||||
/// register a input source to a priority channel
|
||||
/// @param name uniq name of input source
|
||||
/// @param origin External setter
|
||||
/// @param priority priority channel
|
||||
void registerPriority(const std::string name, const int priority);
|
||||
void registerPriority(const QString &name, const int priority);
|
||||
|
||||
/// unregister a input source to a priority channel
|
||||
/// @param name uniq name of input source
|
||||
void unRegisterPriority(const std::string name);
|
||||
void unRegisterPriority(const QString &name);
|
||||
|
||||
/// gets current priority register
|
||||
/// @return the priority register
|
||||
@ -175,6 +179,8 @@ public:
|
||||
|
||||
int getConfigVersionId() { return _configVersionId; };
|
||||
|
||||
int getLatchTime() const;
|
||||
|
||||
public slots:
|
||||
///
|
||||
/// Writes a single color to all the leds for the given time and priority
|
||||
@ -191,8 +197,10 @@ public slots:
|
||||
/// @param[in] priority The priority of the written colors
|
||||
/// @param[in] ledColors The colors to write to the leds
|
||||
/// @param[in] timeout_ms The time the leds are set to the given colors [ms]
|
||||
/// @param[in] component The current component
|
||||
/// @param[in] origin Who set it
|
||||
///
|
||||
void setColors(int priority, const std::vector<ColorRgb> &ledColors, const int timeout_ms, bool clearEffects = true, hyperion::Components component=hyperion::COMP_INVALID);
|
||||
void setColors(int priority, const std::vector<ColorRgb> &ledColors, const int timeout_ms, bool clearEffects = true, hyperion::Components component=hyperion::COMP_INVALID, const QString origin="System");
|
||||
|
||||
///
|
||||
/// Writes the given colors to all leds for the given time and priority
|
||||
@ -207,13 +215,13 @@ public slots:
|
||||
/// Returns the list with unique adjustment identifiers
|
||||
/// @return The list with adjustment identifiers
|
||||
///
|
||||
const std::vector<std::string> & getAdjustmentIds() const;
|
||||
const QStringList & getAdjustmentIds() const;
|
||||
|
||||
///
|
||||
/// Returns the ColorAdjustment with the given identifier
|
||||
/// @return The adjustment with the given identifier (or nullptr if the identifier does not exist)
|
||||
///
|
||||
ColorAdjustment * getAdjustment(const std::string& id);
|
||||
ColorAdjustment * getAdjustment(const QString& id);
|
||||
|
||||
///
|
||||
/// Returns MessageForwarder Object
|
||||
@ -241,18 +249,22 @@ public slots:
|
||||
/// @param effectName Name of the effec to run
|
||||
/// @param priority The priority channel of the effect
|
||||
/// @param timeout The timeout of the effect (after the timout, the effect will be cleared)
|
||||
int setEffect(const QString & effectName, int priority, int timeout = -1);
|
||||
int setEffect(const QString & effectName, int priority, int timeout = -1, const QString & origin="System");
|
||||
|
||||
/// Run the specified effect on the given priority channel and optionally specify a timeout
|
||||
/// @param effectName Name of the effec to run
|
||||
/// @param args arguments of the effect script
|
||||
/// @param priority The priority channel of the effect
|
||||
/// @param timeout The timeout of the effect (after the timout, the effect will be cleared)
|
||||
int setEffect(const QString & effectName, const QJsonObject & args, int priority, int timeout = -1, QString pythonScript = "");
|
||||
int setEffect(const QString & effectName, const QJsonObject & args, int priority,
|
||||
int timeout = -1, const QString & pythonScript = "", const QString & origin="System");
|
||||
|
||||
/// sets the methode how image is maped to leds
|
||||
void setLedMappingType(int mappingType);
|
||||
|
||||
///
|
||||
Hyperion::BonjourRegister getHyperionSessions();
|
||||
|
||||
public:
|
||||
static Hyperion *_hyperion;
|
||||
|
||||
@ -298,6 +310,10 @@ private slots:
|
||||
///
|
||||
void update();
|
||||
|
||||
void currentBonjourRecordsChanged(const QList<BonjourRecord> &list);
|
||||
void bonjourRecordResolved(const QHostInfo &hostInfo, int port);
|
||||
void bonjourResolve();
|
||||
|
||||
private:
|
||||
|
||||
///
|
||||
@ -340,6 +356,7 @@ private:
|
||||
|
||||
/// The timer for handling priority channel timeouts
|
||||
QTimer _timer;
|
||||
QTimer _timerBonjourResolver;
|
||||
|
||||
/// buffer for leds
|
||||
std::vector<ColorRgb> _ledBuffer;
|
||||
@ -370,4 +387,8 @@ private:
|
||||
int _configVersionId;
|
||||
|
||||
hyperion::Components _prevCompId;
|
||||
BonjourServiceBrowser _bonjourBrowser;
|
||||
BonjourServiceResolver _bonjourResolver;
|
||||
BonjourRegister _hyperionSessions;
|
||||
QString _bonjourCurrentServiceToResolve;
|
||||
};
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
// STL includes
|
||||
#include <ctime>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Local includes
|
||||
|
@ -25,8 +25,8 @@ public:
|
||||
MessageForwarder();
|
||||
~MessageForwarder();
|
||||
|
||||
void addJsonSlave(std::string slave);
|
||||
void addProtoSlave(std::string slave);
|
||||
void addJsonSlave(QString slave);
|
||||
void addProtoSlave(QString slave);
|
||||
|
||||
bool protoForwardingEnabled();
|
||||
bool jsonForwardingEnabled();
|
||||
|
@ -33,7 +33,10 @@ public:
|
||||
int64_t timeoutTime_ms;
|
||||
/// The colors for each led of the channel
|
||||
std::vector<ColorRgb> ledColors;
|
||||
/// The component
|
||||
hyperion::Components componentId;
|
||||
/// Who set it
|
||||
QString origin;
|
||||
};
|
||||
|
||||
/// The lowest possible priority, which is used when no priority channels are active
|
||||
@ -90,8 +93,10 @@ public:
|
||||
/// @param[in] priority The priority of the channel
|
||||
/// @param[in] ledColors The led colors of the priority channel
|
||||
/// @param[in] timeoutTime_ms The absolute timeout time of the channel
|
||||
/// @param[in] component The component of the channel
|
||||
/// @param[in] origin Who set the channel
|
||||
///
|
||||
void setInput(const int priority, const std::vector<ColorRgb>& ledColors, const int64_t timeoutTime_ms=-1, hyperion::Components component=hyperion::COMP_INVALID);
|
||||
void setInput(const int priority, const std::vector<ColorRgb>& ledColors, const int64_t timeoutTime_ms=-1, hyperion::Components component=hyperion::COMP_INVALID, const QString origin="System");
|
||||
|
||||
///
|
||||
/// Clears the specified priority channel
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
// system includes
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
// QT includes
|
||||
#include <QTimer>
|
||||
|
@ -8,7 +8,6 @@
|
||||
|
||||
// STL incldues
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
|
||||
@ -20,11 +19,12 @@
|
||||
#include <utils/RgbToRgbw.h>
|
||||
#include <utils/Logger.h>
|
||||
#include <functional>
|
||||
#include <utils/Components.h>
|
||||
|
||||
class LedDevice;
|
||||
|
||||
typedef LedDevice* ( *LedDeviceCreateFuncType ) ( const QJsonObject& );
|
||||
typedef std::map<std::string,LedDeviceCreateFuncType> LedDeviceRegistry;
|
||||
typedef std::map<QString,LedDeviceCreateFuncType> LedDeviceRegistry;
|
||||
|
||||
///
|
||||
/// Interface (pure virtual base class) for LedDevices.
|
||||
@ -52,13 +52,20 @@ public:
|
||||
///
|
||||
virtual int open();
|
||||
|
||||
static int addToDeviceMap(std::string name, LedDeviceCreateFuncType funcPtr);
|
||||
static int addToDeviceMap(QString name, LedDeviceCreateFuncType funcPtr);
|
||||
static const LedDeviceRegistry& getDeviceMap();
|
||||
static void setActiveDevice(std::string dev);
|
||||
static std::string activeDevice() { return _activeDevice; }
|
||||
static void setActiveDevice(QString dev);
|
||||
static QString activeDevice() { return _activeDevice; }
|
||||
static QJsonObject getLedDeviceSchemas();
|
||||
static void setLedCount(int ledCount);
|
||||
static int getLedCount() { return _ledCount; }
|
||||
|
||||
void setEnable(bool enable);
|
||||
bool enabled() { return _enabled; };
|
||||
int getLatchTime() { return _latchTime_ms; };
|
||||
|
||||
inline bool componentState() { return enabled(); };
|
||||
|
||||
protected:
|
||||
///
|
||||
/// Writes the RGB-Color values to the leds.
|
||||
@ -78,7 +85,7 @@ protected:
|
||||
|
||||
bool _deviceReady;
|
||||
|
||||
static std::string _activeDevice;
|
||||
static QString _activeDevice;
|
||||
static LedDeviceRegistry _ledDeviceMap;
|
||||
|
||||
static int _ledCount;
|
||||
@ -89,11 +96,14 @@ protected:
|
||||
/// e.g. Adalight device will switch off when it does not receive data at least every 15 seconds
|
||||
QTimer _refresh_timer;
|
||||
unsigned int _refresh_timer_interval;
|
||||
|
||||
qint64 _last_write_time;
|
||||
unsigned int _latchTime_ms;
|
||||
protected slots:
|
||||
/// Write the last data to the leds again
|
||||
int rewriteLeds();
|
||||
|
||||
private:
|
||||
std::vector<ColorRgb> _ledValues;
|
||||
bool _componentRegistered;
|
||||
bool _enabled;
|
||||
};
|
||||
|