Expand effect engine & ui update (#445)

* update

* update

* update

* .

* .

* .

* update

* .

* .

* .

* .

* update

* .

* update

* .

* update

* update

* update

* update

* update

* update

* .

* update

* update

* update

* .

* .

* .

* Revert "."

This reverts commit 4dd6404b32.

* update

* .

* .

* .

* .

* .

* .

* .

* .

* .

* .

* .

* ...

* .

* .

* .

* .

* .

* .

* .

* .

* .

* update

* update

* update

* remove svg and pic

* colorpicker imgs to base64 to prevent delayed load if not cached

* fix json2python func

* update swirl with rgba

* add double swirl, tune default val in schema, update explanation

* adjust swirl.py

* FileObserver for config checks with timer as fallback (#4)
This commit is contained in:
brindosch 2017-07-30 14:36:23 +02:00 committed by GitHub
parent 5bd020a570
commit 8a794039cf
74 changed files with 3472 additions and 864 deletions

View File

@ -27,7 +27,7 @@ cd build
# Compile hyperion for cron - take default settings # Compile hyperion for cron - take default settings
# Compile for PR (no tag and no cron) # Compile for PR (no tag and no cron)
[ "${TRAVIS_EVENT_TYPE:-}" != 'cron' -a -z "${TRAVIS_TAG:-}" ] && PLATFORM=${PLATFORM}-dev [ "${TRAVIS_EVENT_TYPE:-}" != 'cron' -a -z "${TRAVIS_TAG:-}" ] && PLATFORM=${PLATFORM}
cmake -DPLATFORM=$PLATFORM -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=/usr .. || exit 2 cmake -DPLATFORM=$PLATFORM -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=/usr .. || exit 2

View File

@ -140,23 +140,23 @@ SET( JSON_FILES
config/hyperion.config.json.default config/hyperion.config.json.default
${HYPERION_SCHEMAS} ${HYPERION_SCHEMAS}
) )
EXECUTE_PROCESS ( #EXECUTE_PROCESS (
COMMAND python test/jsonchecks/checkjson.py ${JSON_FILES} # COMMAND python test/jsonchecks/checkjson.py ${JSON_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} # WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_JSON_FAILED # RESULT_VARIABLE CHECK_JSON_FAILED
) #)
IF ( ${CHECK_JSON_FAILED} ) #IF ( ${CHECK_JSON_FAILED} )
MESSAGE (FATAL_ERROR "check of json files failed" ) # MESSAGE (FATAL_ERROR "check of json files failed" )
ENDIF () #ENDIF ()
EXECUTE_PROCESS ( #EXECUTE_PROCESS (
COMMAND python test/jsonchecks/checkeffects.py effects effects/schema # COMMAND python test/jsonchecks/checkeffects.py effects effects/schema
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} # WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_EFFECTS_FAILED # RESULT_VARIABLE CHECK_EFFECTS_FAILED
) #)
IF ( ${CHECK_EFFECTS_FAILED} ) #IF ( ${CHECK_EFFECTS_FAILED} )
MESSAGE (FATAL_ERROR "check of json effect files failed" ) # MESSAGE (FATAL_ERROR "check of json effect files failed" )
ENDIF () #ENDIF ()
EXECUTE_PROCESS ( EXECUTE_PROCESS (
COMMAND python test/jsonchecks/checkschema.py config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json COMMAND python test/jsonchecks/checkschema.py config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json

File diff suppressed because one or more lines are too long

View File

@ -12,7 +12,8 @@
<select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" /> <select id="effectslist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table style="margin-bottom:8px"> <div id="eff_desc"></div>
<table style="margin-bottom:8px" id="effc_nametable">
<tbody> <tbody>
<tr> <tr>
<td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td> <td class="ltd"><label for="name-input" data-i18n="effectsconfigurator_label_effectname">Effect name:</label></td>
@ -33,9 +34,12 @@
<div class="col-lg-6"> <div class="col-lg-6">
<div class="panel panel-default" > <div class="panel panel-default" >
<div class="panel-heading"> <div class="panel-heading">
<label for="effectsdellist" data-i18n="effectsconfigurator_label_deleffect">Delete Effect:</label> <label for="effectsdellist" data-i18n="effectsconfigurator_editdeleff"></label>
<select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" /> <select id="effectsdellist" class="form-control" style="color:black;width:auto;margin-left:10px;display:inline-block" />
</div>
<div class="panel-body">
<button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button> <button class="btn btn-primary" id='btn_delete' data-i18n="effectsconfigurator_button_deleffect">Delete Effect</button>
<button class="btn btn-primary" id='btn_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
</div> </div>
</div> </div>
</div> </div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -482,9 +482,15 @@ li a:active:after {
} }
/* drag and resizable modal http://gijgo.com/ */ /* drag and resizable modal http://gijgo.com/ */
.gj-draggable { .gj-button {
cursor: move; background-color: #f5f5f5;
border: 1px solid #ddd;
color: #000;
border-radius: 3px;
padding: 6px 10px;
cursor: pointer;
} }
.gj-unselectable { .gj-unselectable {
-webkit-touch-callout: none; -webkit-touch-callout: none;
-webkit-user-select: none; -webkit-user-select: none;
@ -493,6 +499,46 @@ li a:active:after {
-ms-user-select: none; -ms-user-select: none;
user-select: none; user-select: none;
} }
.gj-margin-left-5 {
margin-left: 5px;
}
.gj-margin-left-10 {
margin-left: 10px;
}
.gj-width-full {
width: 100%;
}
.gj-cursor-pointer {
cursor: pointer;
}
.gj-text-align-center {
text-align: center;
}
.gj-font-size-16 {
font-size: 16px;
}
.gj-hidden {
display: none;
}
.gj-mdl-icon-plus::after {
content: "\E145";
}
.gj-mdl-icon-minus::after {
content: "\E15B";
}
.gj-draggable {
cursor: move;
}
.gj-resizable-handle { .gj-resizable-handle {
position: absolute; position: absolute;
font-size: 0.1px; font-size: 0.1px;
@ -563,6 +609,7 @@ li a:active:after {
position: absolute; position: absolute;
bottom: 0px; bottom: 0px;
width: 100%; width: 100%;
margin-top: 0px;
} }
.gj-modal { .gj-modal {
@ -591,6 +638,15 @@ li a:active:after {
border-bottom: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5;
} }
.gj-footer {
min-height: 16.43px;
padding: 15px;
border-top: 1px solid #e5e5e5;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.gj-title { .gj-title {
margin: 2px; margin: 2px;
} }
@ -611,6 +667,7 @@ li a:active:after {
padding: 15px; padding: 15px;
} }
/*https://github.com/flatlogic/awesome-bootstrap-checkbox slighty edited for our purposes*/ /*https://github.com/flatlogic/awesome-bootstrap-checkbox slighty edited for our purposes*/
.checkbox { .checkbox {
height:34px; height:34px;

View File

@ -209,14 +209,15 @@
"remote_maptype_label_multicolor_mean" : "Mehrfarbig", "remote_maptype_label_multicolor_mean" : "Mehrfarbig",
"remote_maptype_label_unicolor_mean" : "Einfarbig", "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.", "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.",
"effectsconfigurator_label_chooseeff" : "Basis-Effekt auswählen:", "effectsconfigurator_label_chooseeff" : "Template auswählen",
"effectsconfigurator_editdeleff" : "Entferne/Lade Effekt",
"effectsconfigurator_button_saveeffect" : "Effekt speichern", "effectsconfigurator_button_saveeffect" : "Effekt speichern",
"effectsconfigurator_label_effectname" : "Effektname", "effectsconfigurator_label_effectname" : "Effektname",
"effectsconfigurator_button_starttest" : "Starte Test", "effectsconfigurator_button_starttest" : "Starte Test",
"effectsconfigurator_button_stoptest" : "Stoppe Test", "effectsconfigurator_button_stoptest" : "Stoppe Test",
"effectsconfigurator_button_conttest" : "Fortlaufender Test", "effectsconfigurator_button_conttest" : "Fortlaufender Test",
"effectsconfigurator_label_deleffect" : "Effekt entfernen:",
"effectsconfigurator_button_deleffect" : "Effekt entfernen", "effectsconfigurator_button_deleffect" : "Effekt entfernen",
"effectsconfigurator_button_editeffect" : "Effekt laden",
"support_label_title" : "Unterstütze Hyperion", "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 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_spreadtheword" : "Weitersagen!",
@ -385,13 +386,13 @@
"edt_dev_spec_useRgbwProtocol_title" : "Nutze RGBW Protokoll", "edt_dev_spec_useRgbwProtocol_title" : "Nutze RGBW Protokoll",
"edt_dev_spec_maximumLedCount_title" : "Maximale Anzahl LEDs", "edt_dev_spec_maximumLedCount_title" : "Maximale Anzahl LEDs",
"edt_dev_spec_gpioNumber_title" : "GPIO Nummer", "edt_dev_spec_gpioNumber_title" : "GPIO Nummer",
"edt_dev_spec_dmaNumber_title" : "DMA Kanal",
"edt_dev_spec_gpioMap_title" : "GPIO Zuweisung", "edt_dev_spec_gpioMap_title" : "GPIO Zuweisung",
"edt_dev_spec_PBFiFo_title" : "Pi-Blaster FiFo", "edt_dev_spec_PBFiFo_title" : "Pi-Blaster FiFo",
"edt_dev_spec_gpioBcm_title" : "GPIO Pin", "edt_dev_spec_gpioBcm_title" : "GPIO Pin",
"edt_dev_spec_ledIndex_title" : "LED index", "edt_dev_spec_ledIndex_title" : "LED index",
"edt_dev_spec_colorComponent_title" : "Farbkomponente", "edt_dev_spec_colorComponent_title" : "Farbkomponente",
"edt_dev_spec_ledType_title" : "LED typ", "edt_dev_spec_ledType_title" : "LED typ",
"edt_dev_spec_dmaNumber_title" : "DMA Kanal",
"edt_conf_general_enable_title" : "Aktiviert", "edt_conf_general_enable_title" : "Aktiviert",
"edt_conf_general_enable_expl" : "Wenn aktiviert, ist die Komponente aktiv.", "edt_conf_general_enable_expl" : "Wenn aktiviert, ist die Komponente aktiv.",
"edt_conf_general_priority_title" : "Priorität", "edt_conf_general_priority_title" : "Priorität",
@ -504,11 +505,19 @@
"edt_conf_v4l2_signalDetection_title" : "Signal Erkennung", "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_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_title" : "Rote Signalschwelle",
"edt_conf_v4l2_redSignalThreshold_expl" : "Verdunkelt rote Werte. (Wird als schwarz interpretiert)", "edt_conf_v4l2_redSignalThreshold_expl" : "Je höher die rote Schwelle je eher wird abgeschalten bei entsprechendem rot-Anteil.",
"edt_conf_v4l2_greenSignalThreshold_title" : "Grüne Signalschwelle", "edt_conf_v4l2_greenSignalThreshold_title" : "Grüne Signalschwelle",
"edt_conf_v4l2_greenSignalThreshold_expl" : "Verdunkelt grüne Werte. (Wird als schwarz interpretiert)", "edt_conf_v4l2_greenSignalThreshold_expl" : "Je höher die grüne Schwelle je eher wird abgeschalten bei entsprechendem grün-Anteil.",
"edt_conf_v4l2_blueSignalThreshold_title" : "Blaue Signalschwelle", "edt_conf_v4l2_blueSignalThreshold_title" : "Blaue Signalschwelle",
"edt_conf_v4l2_blueSignalThreshold_expl" : "Verdunkelt blaue Werte. (Wird als schwarz interpretiert))", "edt_conf_v4l2_blueSignalThreshold_expl" : "Je höher die blaue Schwelle je eher wird abgeschalten bei entsprechendem blau-Anteil.",
"edt_conf_v4l2_sDVOffsetMin_title" : "Signal Erkennung VMin",
"edt_conf_v4l2_sDVOffsetMin_expl" : "Signal Erkennungs-Bereich vertikal minimum (0.0-1.0)",
"edt_conf_v4l2_sDHOffsetMin_title" : "Signal Erkennung HMin",
"edt_conf_v4l2_sDHOffsetMin_expl" : "Signal Erkennungs-Bereich horizontal minimum (0.0-1.0)",
"edt_conf_v4l2_sDVOffsetMax_title" : "Signal Erkennung VMax",
"edt_conf_v4l2_sDVOffsetMax_expl" : "Signal Erkennungs-Bereich vertikal maximum (0.0-1.0)",
"edt_conf_v4l2_sDHOffsetMax_title" : "Signal Erkennung HMax",
"edt_conf_v4l2_sDHOffsetMax_expl" : "Signal Erkennungs-Bereich horizontal maximum (0.0-1.0)",
"edt_conf_fg_heading_title" : "Plattform Aufnahme", "edt_conf_fg_heading_title" : "Plattform Aufnahme",
"edt_conf_fg_type_title" : "Typ", "edt_conf_fg_type_title" : "Typ",
"edt_conf_fg_type_expl" : "Art der Plattform Aufnahme, standard ist 'auto'", "edt_conf_fg_type_expl" : "Art der Plattform Aufnahme, standard ist 'auto'",
@ -594,80 +603,92 @@
"edt_conf_log_heading_title" : "Protokoll", "edt_conf_log_heading_title" : "Protokoll",
"edt_conf_log_level_title" : "Protokollstufe", "edt_conf_log_level_title" : "Protokollstufe",
"edt_conf_log_level_expl" : "Abhängig der Stufe sind weniger oder mehr Meldungen sichtbar.", "edt_conf_log_level_expl" : "Abhängig der Stufe sind weniger oder mehr Meldungen sichtbar.",
"edt_eff_candle_header_title" : "Kerze", "edt_eff_candle_header" : "Kerze",
"edt_eff_police_header_title" : "Polizei", "edt_eff_police_header" : "Polizei",
"edt_eff_fade_header_title" : "Farbübergang", "edt_eff_fade_header" : "Farbübergang",
"edt_eff_rainbowmood_header_title" : "Regenbogen", "edt_eff_rainbowmood_header" : "Regenbogen",
"edt_eff_knightrider_header_title" : "Knight Rider", "edt_eff_rainbowmood_header_desc" : "Alle LEDs Regenbogen Farbübergang",
"edt_eff_lightclock_header_title" : "Uhr 1", "edt_eff_knightrider_header" : "Knight Rider",
"edt_eff_clock_header_title" : "Uhr 2", "edt_eff_knightrider_header_desc" : "K.I.T.T ist zurück! Der Front-Scanner des bekannten Autos, diesmal nicht nur in rot.",
"edt_eff_pacman_header_title" : "Pac-Man", "edt_eff_lightclock_header" : "Lichtuhr",
"edt_eff_moodblobs_header_title" : "Stimmungskugeln", "edt_eff_lightclock_header_desc" : "Eine echte Uhr als Licht! Passe die Farben von Stunden, Minuten, Sekunden deinen Vorstellungen an. Optional können 3/6/9/12 Uhr Markierungen aktiviert werden. Sollte die Uhr eine falsche Zeit anzeigen, überprüfe die Uhrzeit deines Systems.",
"edt_eff_rainbowswirl_header_title" : "Regenbogenwirbel", "edt_eff_pacman_header" : "Pac-Man",
"edt_eff_random_header_title" : "Zufällig", "edt_eff_moodblobs_header" : "Stimmungskugeln",
"edt_eff_runningdots_header_title" : "Rennende Punkte", "edt_eff_swirl_header" : "Farbwirbel",
"edt_eff_systemshutdown_header_title" : "Herunterfahren", "edt_eff_swirl_header_desc" : "Ein Wirbel mit frei wählbaren Farben. Die Farben werden gleichmäßig auf 360° aufgeteilt, dazwischen werden Farbübergänge berechnet. Zusätzlich kann ein zweiter Wirbel über den Ersten gelegt werden (Transparenz beachten!). Tipp: Eine Widerholung der selben Farbe erhöht deren \"größe\" und verringert den Bereich des Farbübergangs zu benachbarten Farben.",
"edt_eff_snake_header_title" : "Schlange", "edt_eff_random_header" : "Zufällig",
"edt_eff_sparks_header_title" : "Funken", "edt_eff_runningdots_header" : "Rennende Punkte",
"edt_eff_traces_header_title" : "Farbspuren", "edt_eff_systemshutdown_header" : "Herunterfahren",
"edt_eff_x-mas_header_title" : "Weihnachten", "edt_eff_snake_header" : "Schlange",
"edt_eff_trails_header_title" : "Spuren", "edt_eff_sparks_header" : "Funken",
"edt_eff_sparks_header_desc" : "Ein Sternenfunkeln, wahlweise in festgelegter Farbe oder zufällig. Passe Helligkeit, Sättigung und Geschwindigkeit an.",
"edt_eff_traces_header" : "Farbspuren",
"edt_eff_x-mas_header" : "Weihnachten",
"edt_eff_trails_header" : "Spuren",
"edt_eff_flag_header" : "Flaggen",
"edt_eff_flag_header_desc" : "Verpasse deinen LEDs die Farben deines Landes. Du kannst mehr als eine Flagge auswählen, je nach Intervall werden diese dann abwechselnd angezeigt.",
"edt_eff_enum_all" : "Alle", "edt_eff_enum_all" : "Alle",
"edt_eff_enum_all-together" : "Alle zusammen", "edt_eff_enum_all-together" : "Alle zusammen",
"edt_eff_enum_list" : "LED Liste", "edt_eff_enum_list" : "LED Liste",
"edt_eff_count_title" : "Anzahl", "edt_eff_count" : "Anzahl",
"edt_eff_color_title" : "Farbe", "edt_eff_color" : "Farbe",
"edt_eff_colorrandom_title" : "Zufällige Farbe", "edt_eff_colorrandom" : "Zufällige Farbe",
"edt_eff_colorone_title" : "Farbe eins", "edt_eff_colorone" : "Farbe eins",
"edt_eff_colortwo_title" : "Farbe zwei", "edt_eff_colortwo" : "Farbe zwei",
"edt_eff_colorcount_title" : "Farblänge", "edt_eff_colorcount" : "Farblänge",
"edt_eff_rotationtime_title" : "Rotationszeit", "edt_eff_rotationtime" : "Rotationszeit",
"edt_eff_sleeptime_title" : "Schlafzeit", "edt_eff_sleeptime" : "Schlafzeit",
"edt_eff_reversedirection_title" : "Richtung umkehren", "edt_eff_reversedirection" : "Richtung umkehren",
"edt_eff_fadeintime_title" : "Zeit für Einblendung", "edt_eff_fadeintime" : "Zeit für Einblendung",
"edt_eff_fadeouttime_title" : "Zeit für Ausblendung", "edt_eff_fadeouttime" : "Zeit für Ausblendung",
"edt_eff_repeat_title" : "Wiederholung", "edt_eff_repeat" : "Wiederholung",
"edt_eff_colorendtime_title" : "Zeit für Start-Farbe", "edt_eff_colorendtime" : "Zeit für Start-Farbe",
"edt_eff_colorstarttime_title" : "Zeit für End-Farbe", "edt_eff_colorstarttime" : "Zeit für End-Farbe",
"edt_eff_colorstart_title" : "Farbe Start", "edt_eff_colorstart" : "Farbe Start",
"edt_eff_colorend_title" : "Farbe Ende", "edt_eff_colorend" : "Farbe Ende",
"edt_eff_repeatcount_title" : "Anzahl Wiederholung", "edt_eff_repeatcount" : "Anzahl Wiederholung",
"edt_eff_maintain_end_color_title" : "Behalte Endfarbe", "edt_eff_maintain_end_color" : "Behalte Endfarbe",
"edt_eff_colorshift_title" : "Farbverschiebung", "edt_eff_colorshift" : "Farbverschiebung",
"edt_eff_whichleds_title" : "Welche LEDs", "edt_eff_whichleds" : "Welche LEDs",
"edt_eff_ledlist_title" : "LED Liste", "edt_eff_ledlist" : "LED Liste",
"edt_eff_speed_title" : "Geschwindigkeit", "edt_eff_speed" : "Geschwindigkeit",
"edt_eff_fadefactor_title" : "Verblass Faktor", "edt_eff_fadefactor" : "Verblass Faktor",
"edt_eff_showseconds_title" : "Zeige Sekunden", "edt_eff_showseconds" : "Zeige Sekunden",
"edt_eff_blobcount_title" : "Kugelanzahl", "edt_eff_blobcount" : "Kugelanzahl",
"edt_eff_huechange_title" : "Farbänderung", "edt_eff_huechange" : "Farbänderung",
"edt_eff_basecolorchange_title" : "Basisfarben verändern", "edt_eff_basecolorchange" : "Basisfarben verändern",
"edt_eff_basecolorchangerate_title" : "BF Geschwindigkeit", "edt_eff_basecolorchangerate" : "BF Geschwindigkeit",
"edt_eff_basecolorrangeleft_title" : "BF Bereich links", "edt_eff_basecolorrangeleft" : "BF Bereich links",
"edt_eff_basecolorrangeright_title" : "BF Bereich rechts", "edt_eff_basecolorrangeright" : "BF Bereich rechts",
"edt_eff_brightness_title" : "Helligkeit", "edt_eff_brightness" : "Helligkeit",
"edt_eff_centerx_title" : "Mittelpunkt X-Achse", "edt_eff_centerx" : "Mittelpunkt X-Achse",
"edt_eff_centery_title" : "Mittelpunkt Y-Achse", "edt_eff_centery" : "Mittelpunkt Y-Achse",
"edt_eff_saturation_title" : "Sättigung", "edt_eff_saturation" : "Sättigung",
"edt_eff_colorevel_title" : "Farbstufe", "edt_eff_colorevel" : "Farbstufe",
"edt_eff_whitelevel_title" : "Weißstufe", "edt_eff_whitelevel" : "Weißstufe",
"edt_eff_alarmcolor_title" : "Alarm Farbe", "edt_eff_alarmcolor" : "Alarm Farbe",
"edt_eff_postcolor_title" : "Startfarbe", "edt_eff_postcolor" : "Startfarbe",
"edt_eff_enableshutdown_title" : "Echtes herunterfahren", "edt_eff_enableshutdown" : "Echtes herunterfahren",
"edt_eff_length_title" : "Länge", "edt_eff_length" : "Länge",
"edt_eff_frequency_title" : "Frequenz", "edt_eff_frequency" : "Frequenz",
"edt_eff_min_len_title" : "Minimale Länge", "edt_eff_min_len" : "Minimale Länge",
"edt_eff_max_len_title" : "Maximale Länge", "edt_eff_max_len" : "Maximale Länge",
"edt_eff_height_title" : "Höhe", "edt_eff_height" : "Höhe",
"edt_eff_offset_title" : "Verschiebung", "edt_eff_offset" : "Verschiebung",
"edt_eff_colorHour_title" : "Farbe Stunde", "edt_eff_colorHour" : "Farbe Stunde",
"edt_eff_colorMinute_title" : "Farbe Minute", "edt_eff_colorMinute" : "Farbe Minute",
"edt_eff_colorSecond_title" : "Farbe Sekunde", "edt_eff_colorSecond" : "Farbe Sekunde",
"edt_eff_hourMargin_title" : "Länge Stunde", "edt_eff_colorMarker" : "Marker Farbe",
"edt_eff_minuteMargin_title" : "Länge Minute", "edt_eff_markerDepth" : "Marker Tiefe",
"edt_eff_secondMargin_title" : "Länge Sekunde", "edt_eff_markerWidth" : "Marker Breite",
"edt_eff_margin_title" : "Abstand", "edt_eff_markerEnable" : "Zeige Marker",
"edt_eff_colorMarker_title" : "Farbe Markierung", "edt_eff_backgroundColor" : "Hintergrundfarbe",
"edt_eff_countries" : "Länder",
"edt_eff_interval" : "Intervall",
"edt_eff_margin" : "Abstand",
"edt_eff_customColor" : "Benutzerdefinierte Farbe",
"edt_eff_randomCenter" : "Zufälliger Mittelpunkt",
"edt_eff_enableSecondSwirl":"Zweiter Wirbel",
"edt_append_ns" : "ns", "edt_append_ns" : "ns",
"edt_append_ms" : "ms", "edt_append_ms" : "ms",
"edt_append_s" : "s", "edt_append_s" : "s",

View File

@ -209,14 +209,15 @@
"remote_maptype_label_multicolor_mean" : "Multicolor", "remote_maptype_label_multicolor_mean" : "Multicolor",
"remote_maptype_label_unicolor_mean" : "Unicolor", "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.", "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.",
"effectsconfigurator_label_chooseeff" : "Choose Base-Effect:", "effectsconfigurator_label_chooseeff" : "Choose Template",
"effectsconfigurator_editdeleff" : "Delete/Load Effect",
"effectsconfigurator_button_saveeffect" : "Save Effect", "effectsconfigurator_button_saveeffect" : "Save Effect",
"effectsconfigurator_label_effectname" : "Effect name", "effectsconfigurator_label_effectname" : "Effect name",
"effectsconfigurator_button_starttest" : "Start test", "effectsconfigurator_button_starttest" : "Start test",
"effectsconfigurator_button_stoptest" : "Stop test", "effectsconfigurator_button_stoptest" : "Stop test",
"effectsconfigurator_button_conttest" : "Continuous test", "effectsconfigurator_button_conttest" : "Continuous test",
"effectsconfigurator_label_deleffect" : "Delete Effect:",
"effectsconfigurator_button_deleffect" : "Delete Effect", "effectsconfigurator_button_deleffect" : "Delete Effect",
"effectsconfigurator_button_editeffect" : "Load Effect",
"support_label_title" : "Support Hyperion", "support_label_title" : "Support Hyperion",
"support_label_intro" : "Hyperion is a free non-profit software. A small team is working on it and this is why we need your steady support.", "support_label_intro" : "Hyperion is a free non-profit software. A small team is working on it and this is why we need your steady support.",
"support_label_spreadtheword" : "Spread the word", "support_label_spreadtheword" : "Spread the word",
@ -306,7 +307,7 @@
"wiz_hue_username" : "User ID:", "wiz_hue_username" : "User ID:",
"wiz_hue_create_user" : "Create new User", "wiz_hue_create_user" : "Create new User",
"wiz_hue_failure_ip" : "No Bridge found, please type in a valid ip", "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_connection" : "Timeout: Please press the bridge button within the period of 30 seconds",
"wiz_hue_failure_user" : "User not found, create a new one below or input a valid user id", "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_press_link" : "Please press link button on the Hue Bridge.",
"wiz_hue_ids_disabled" : "Deactivated", "wiz_hue_ids_disabled" : "Deactivated",
@ -502,7 +503,7 @@
"edt_conf_v4l2_cropTop_expl" : "Count of pixels on the top side that are removed from the picture.", "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_title" : "Crop bottom",
"edt_conf_v4l2_cropBottom_expl" : "Count of pixels on the bottom side that are removed from the picture.", "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_title" : "Signal detection",
"edt_conf_v4l2_signalDetection_expl" : "If enabled, usb capture will be temporarily disabled when no signal was found.", "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_title" : "Red signal threshold",
"edt_conf_v4l2_redSignalThreshold_expl" : "Darkens low red values (recognized as black)", "edt_conf_v4l2_redSignalThreshold_expl" : "Darkens low red values (recognized as black)",
@ -510,6 +511,14 @@
"edt_conf_v4l2_greenSignalThreshold_expl" : "Darkens low green values (recognized as black)", "edt_conf_v4l2_greenSignalThreshold_expl" : "Darkens low green values (recognized as black)",
"edt_conf_v4l2_blueSignalThreshold_title" : "Blue signal threshold", "edt_conf_v4l2_blueSignalThreshold_title" : "Blue signal threshold",
"edt_conf_v4l2_blueSignalThreshold_expl" : "Darkens low blue values (recognized as black)", "edt_conf_v4l2_blueSignalThreshold_expl" : "Darkens low blue values (recognized as black)",
"edt_conf_v4l2_sDVOffsetMin_title" : "Signal Detection VMin",
"edt_conf_v4l2_sDVOffsetMin_expl" : "Signal detection area vertical minimum (0.0-1.0)",
"edt_conf_v4l2_sDHOffsetMin_title" : "Signal Detection HMin",
"edt_conf_v4l2_sDHOffsetMin_expl" : "Signal detection area horizontal minimum (0.0-1.0)",
"edt_conf_v4l2_sDVOffsetMax_title" : "Signal Detection VMax",
"edt_conf_v4l2_sDVOffsetMax_expl" : "Signal detection area vertical maximum (0.0-1.0)",
"edt_conf_v4l2_sDHOffsetMax_title" : "Signal Detection HMax",
"edt_conf_v4l2_sDHOffsetMax_expl" : "Signal detection area horizontal maximum (0.0-1.0)",
"edt_conf_fg_heading_title" : "Platform Capture", "edt_conf_fg_heading_title" : "Platform Capture",
"edt_conf_fg_type_title" : "Type", "edt_conf_fg_type_title" : "Type",
"edt_conf_fg_type_expl" : "Type of platform capture, default is 'auto'", "edt_conf_fg_type_expl" : "Type of platform capture, default is 'auto'",
@ -595,80 +604,92 @@
"edt_conf_log_heading_title" : "Logging", "edt_conf_log_heading_title" : "Logging",
"edt_conf_log_level_title" : "Log-Level", "edt_conf_log_level_title" : "Log-Level",
"edt_conf_log_level_expl" : "Depending on loglevel you see less or more messages in your log.", "edt_conf_log_level_expl" : "Depending on loglevel you see less or more messages in your log.",
"edt_eff_candle_header_title" : "Candle", "edt_eff_candle_header" : "Candle",
"edt_eff_police_header_title" : "Police", "edt_eff_police_header" : "Police",
"edt_eff_fade_header_title" : "Fade", "edt_eff_fade_header" : "Fade",
"edt_eff_rainbowmood_header_title" : "Rainbow Mood", "edt_eff_rainbowmood_header" : "Rainbow Mood",
"edt_eff_knightrider_header_title" : "Knight Rider", "edt_eff_rainbowmood_header_desc" : "All leds rainbow mood",
"edt_eff_lightclock_header_title" : "Clock 1", "edt_eff_knightrider_header" : "Knight Rider",
"edt_eff_clock_header_title" : "Clock 2", "edt_eff_knightrider_header_desc" : "K.I.T.T is back! The front-scanner of the well known car, this time not just in red.",
"edt_eff_pacman_header_title" : "Pac-Man", "edt_eff_lightclock_header" : "Light Clock",
"edt_eff_moodblobs_header_title" : "Mood Blobs", "edt_eff_lightclock_header_desc" : "A real clock as light! Adjsut the colors of hours, minute, seconds. A optional 3/6/9/12 o'clock marker is also available. In case the clock is wrong, you need to check your system clock.",
"edt_eff_rainbowswirl_header_title" : "Rainbow Swirl", "edt_eff_pacman_header" : "Pac-Man",
"edt_eff_random_header_title" : "Random", "edt_eff_moodblobs_header" : "Mood Blobs",
"edt_eff_runningdots_header_title" : "Running Dots", "edt_eff_swirl_header" : "Color Swirl",
"edt_eff_systemshutdown_header_title" : "System Shutdown", "edt_eff_swirl_header_desc" : "A swirl with custom colors. Colors are even spread to 360°, in between colors shifts will be calcualted. Additional you can add a second swirl on top, be aware that you need partly transparency! Hint: A reapeat of the same color results in a \"hugher\" color area and a reduced color shift area.",
"edt_eff_snake_header_title" : "Snake", "edt_eff_random_header" : "Random",
"edt_eff_sparks_header_title" : "Sparks", "edt_eff_runningdots_header" : "Running Dots",
"edt_eff_traces_header_title" : "Color Traces", "edt_eff_systemshutdown_header" : "System Shutdown",
"edt_eff_x-mas_header_title" : "X-Mas", "edt_eff_snake_header" : "Snake",
"edt_eff_trails_header_title" : "Trails", "edt_eff_sparks_header" : "Sparks",
"edt_eff_sparks_header_desc" : "Star-Sparking, choose between a static color or random. You could also adjust brightness, staturation and speed.",
"edt_eff_traces_header" : "Color Traces",
"edt_eff_x-mas_header" : "X-Mas",
"edt_eff_trails_header" : "Trails",
"edt_eff_flag_header" : "Flags",
"edt_eff_flag_header_desc" : "Let your leds shine bright in the colors of your country. You could select more then one flag, they will change based on interval time.",
"edt_eff_enum_all" : "All", "edt_eff_enum_all" : "All",
"edt_eff_enum_all-together" : "All together", "edt_eff_enum_all-together" : "All together",
"edt_eff_enum_list" : "LED List", "edt_eff_enum_list" : "LED List",
"edt_eff_count_title" : "Count", "edt_eff_count" : "Count",
"edt_eff_color_title" : "Color", "edt_eff_color" : "Color",
"edt_eff_colorrandom_title" : "Random color", "edt_eff_colorrandom" : "Random color",
"edt_eff_colorone_title" : "Color one", "edt_eff_colorone" : "Color one",
"edt_eff_colortwo_title" : "Color two", "edt_eff_colortwo" : "Color two",
"edt_eff_colorcount_title" : "Color length", "edt_eff_colorcount" : "Color length",
"edt_eff_rotationtime_title" : "Rotation time", "edt_eff_rotationtime" : "Rotation time",
"edt_eff_sleeptime_title" : "Sleep time", "edt_eff_sleeptime" : "Sleep time",
"edt_eff_reversedirection_title" : "Reverse direction", "edt_eff_reversedirection" : "Reverse direction",
"edt_eff_fadeintime_title" : "Fade in time", "edt_eff_fadeintime" : "Fade in time",
"edt_eff_fadeouttime_title" : "Fade out time", "edt_eff_fadeouttime" : "Fade out time",
"edt_eff_repeat_title" : "Repeat", "edt_eff_repeat" : "Repeat",
"edt_eff_repeatcount_title" : "Repeat count", "edt_eff_repeatcount" : "Repeat count",
"edt_eff_colorendtime_title" : "Time to hold start color", "edt_eff_colorendtime" : "Time to hold start color",
"edt_eff_colorstarttime_title" : "Time to hold end color", "edt_eff_colorstarttime" : "Time to hold end color",
"edt_eff_colorstart_title" : "Color start", "edt_eff_colorstart" : "Color start",
"edt_eff_colorend_title" : "Color end", "edt_eff_colorend" : "Color end",
"edt_eff_maintain_end_color_title" : "Keep endcolor", "edt_eff_maintain_end_color" : "Keep endcolor",
"edt_eff_colorshift_title" : "Color Shift", "edt_eff_colorshift" : "Color Shift",
"edt_eff_whichleds_title" : "Which Leds", "edt_eff_whichleds" : "Which Leds",
"edt_eff_ledlist_title" : "Led List", "edt_eff_ledlist" : "Led List",
"edt_eff_speed_title" : "Speed", "edt_eff_speed" : "Speed",
"edt_eff_fadefactor_title" : "Fade factor", "edt_eff_fadefactor" : "Fade factor",
"edt_eff_showseconds_title" : "Show seconds", "edt_eff_showseconds" : "Show seconds",
"edt_eff_blobcount_title" : "Blob count", "edt_eff_blobcount" : "Blob count",
"edt_eff_huechange_title" : "Color change", "edt_eff_huechange" : "Color change",
"edt_eff_basecolorchange_title" : "Base color change", "edt_eff_basecolorchange" : "Base color change",
"edt_eff_basecolorchangerate_title" : "BC change rate", "edt_eff_basecolorchangerate" : "BC change rate",
"edt_eff_basecolorrangeleft_title" : "BC range left", "edt_eff_basecolorrangeleft" : "BC range left",
"edt_eff_basecolorrangeright_title" : "BC range right", "edt_eff_basecolorrangeright" : "BC range right",
"edt_eff_brightness_title" : "Brightness", "edt_eff_brightness" : "Brightness",
"edt_eff_centerx_title" : "Center X-Axis", "edt_eff_centerx" : "Center X-Axis",
"edt_eff_centery_title" : "Center Y-Axis", "edt_eff_centery" : "Center Y-Axis",
"edt_eff_saturation_title" : "Saturation", "edt_eff_saturation" : "Saturation",
"edt_eff_colorevel_title" : "Color level", "edt_eff_colorevel" : "Color level",
"edt_eff_whitelevel_title" : "White level", "edt_eff_whitelevel" : "White level",
"edt_eff_alarmcolor_title" : "Alarm color", "edt_eff_alarmcolor" : "Alarm color",
"edt_eff_postcolor_title" : "Post color", "edt_eff_postcolor" : "Post color",
"edt_eff_enableshutdown_title" : "Real shutdown", "edt_eff_enableshutdown" : "Real shutdown",
"edt_eff_length_title" : "Length", "edt_eff_length" : "Length",
"edt_eff_frequency_title" : "Frequency", "edt_eff_frequency" : "Frequency",
"edt_eff_min_len_title" : "Minimal length", "edt_eff_min_len" : "Minimal length",
"edt_eff_max_len_title" : "Maximal length", "edt_eff_max_len" : "Maximal length",
"edt_eff_height_title" : "Height", "edt_eff_height" : "Height",
"edt_eff_offset_title" : "Offset", "edt_eff_offset" : "Offset",
"edt_eff_colorHour_title" : "Color hour", "edt_eff_colorHour" : "Color hour",
"edt_eff_colorMinute_title" : "Color minute", "edt_eff_colorMinute" : "Color minute",
"edt_eff_colorSecond_title" : "Color second", "edt_eff_colorSecond" : "Color second",
"edt_eff_hourMargin_title" : "Margin hour", "edt_eff_colorMarker" : "Marker color",
"edt_eff_minuteMargin_title" : "Margin minute", "edt_eff_markerWidth" : "Marker width",
"edt_eff_secondMargin_title" : "Margin second", "edt_eff_markerDepth" : "Marker depth",
"edt_eff_margin_title" : "Margin", "edt_eff_markerEnable" : "Show Marker",
"edt_eff_colorMarker_title" : "Color marker", "edt_eff_backgroundColor" : "Background Color",
"edt_eff_countries" : "Countries",
"edt_eff_interval" : "Interval",
"edt_eff_margin" : "Margin",
"edt_eff_customColor" : "Custom Color",
"edt_eff_randomCenter" : "Random Center",
"edt_eff_enableSecondSwirl":"Second Swirl",
"edt_append_ns" : "ns", "edt_append_ns" : "ns",
"edt_append_ms" : "ms", "edt_append_ms" : "ms",
"edt_append_s" : "s", "edt_append_s" : "s",

View File

@ -539,73 +539,72 @@
"edt_conf_log_heading_title": "Registrando", "edt_conf_log_heading_title": "Registrando",
"edt_conf_log_level_title": "Nivel de registro", "edt_conf_log_level_title": "Nivel de registro",
"edt_conf_log_level_expl": "Dependiendo del nivel de registro verás menos o más mensajes en tu registro.", "edt_conf_log_level_expl": "Dependiendo del nivel de registro verás menos o más mensajes en tu registro.",
"edt_eff_candle_header_title": "Vela", "edt_eff_candle_header": "Vela",
"edt_eff_police_header_title": "Policía", "edt_eff_police_header": "Policía",
"edt_eff_fade_header_title": "Fundido", "edt_eff_fade_header": "Fundido",
"edt_eff_rainbowmood_header_title": "Ánimo Arcoiris", "edt_eff_rainbowmood_header": "Ánimo Arcoiris",
"edt_eff_knightrider_header_title": "Coche Fantástico", "edt_eff_knightrider_header": "Coche Fantástico",
"edt_eff_lightclock_header_title": "Reloj 1", "edt_eff_lightclock_header": "Reloj",
"edt_eff_clock_header_title": "Reloj 2", "edt_eff_pacman_header": "Come-Cocos",
"edt_eff_pacman_header_title": "Come-Cocos", "edt_eff_moodblobs_header": "Ánimo Gotas",
"edt_eff_moodblobs_header_title": "Ánimo Gotas", "edt_eff_rainbowswirl_header": "Remolino Arcoiris",
"edt_eff_rainbowswirl_header_title": "Remolino Arcoiris", "edt_eff_random_header": "Aleatorio",
"edt_eff_random_header_title": "Aleatorio", "edt_eff_runningdots_header": "Puntos Corriendo",
"edt_eff_runningdots_header_title": "Puntos Corriendo", "edt_eff_systemshutdown_header": "Apagado del Sistema",
"edt_eff_systemshutdown_header_title": "Apagado del Sistema", "edt_eff_snake_header": "Serpiente",
"edt_eff_snake_header_title": "Serpiente", "edt_eff_sparks_header": "Chispas",
"edt_eff_sparks_header_title": "Chispas", "edt_eff_traces_header": "Rastros de Color",
"edt_eff_traces_header_title": "Rastros de Color", "edt_eff_x-mas_header": "Navidad",
"edt_eff_x-mas_header_title": "Navidad", "edt_eff_trails_header": "Caminos",
"edt_eff_trails_header_title": "Caminos",
"edt_eff_enum_all": "Todo", "edt_eff_enum_all": "Todo",
"edt_eff_enum_all-together": "Todo junto", "edt_eff_enum_all-together": "Todo junto",
"edt_eff_enum_list": "Lista LED", "edt_eff_enum_list": "Lista LED",
"edt_eff_count_title": "Cuenta", "edt_eff_count": "Cuenta",
"edt_eff_color_title": "Color", "edt_eff_color": "Color",
"edt_eff_colorrandom_title": "Color aleatório", "edt_eff_colorrandom": "Color aleatório",
"edt_eff_colorone_title": "Color uno", "edt_eff_colorone": "Color uno",
"edt_eff_colortwo_title": "Color dos", "edt_eff_colortwo": "Color dos",
"edt_eff_colorcount_title": "Longitud de color", "edt_eff_colorcount": "Longitud de color",
"edt_eff_rotationtime_title": "Tiempo de rotación", "edt_eff_rotationtime": "Tiempo de rotación",
"edt_eff_sleeptime_title": "Hora de dormir", "edt_eff_sleeptime": "Hora de dormir",
"edt_eff_reversedirection_title": "Dirección inversa", "edt_eff_reversedirection": "Dirección inversa",
"edt_eff_colorstart_title": "Color de inicio", "edt_eff_colorstart": "Color de inicio",
"edt_eff_colorend_title": "Color final", "edt_eff_colorend": "Color final",
"edt_eff_colorshift_title": "Cambio de Color", "edt_eff_colorshift": "Cambio de Color",
"edt_eff_whichleds_title": "Qué Leds", "edt_eff_whichleds": "Qué Leds",
"edt_eff_ledlist_title": "Lista Led", "edt_eff_ledlist": "Lista Led",
"edt_eff_speed_title": "Velocidad", "edt_eff_speed": "Velocidad",
"edt_eff_fadefactor_title": "Factor de fundido", "edt_eff_fadefactor": "Factor de fundido",
"edt_eff_showseconds_title": "Mostrar segundos", "edt_eff_showseconds": "Mostrar segundos",
"edt_eff_blobcount_title": "Contador de gotas", "edt_eff_blobcount": "Contador de gotas",
"edt_eff_huechange_title": "Cambio de color", "edt_eff_huechange": "Cambio de color",
"edt_eff_basecolorchange_title": "Cambio de color base", "edt_eff_basecolorchange": "Cambio de color base",
"edt_eff_basecolorchangerate_title": "Proporción de cambio de BC", "edt_eff_basecolorchangerate": "Proporción de cambio de BC",
"edt_eff_basecolorrangeleft_title": "Gama BC izquierda", "edt_eff_basecolorrangeleft": "Gama BC izquierda",
"edt_eff_basecolorrangeright_title": "Gama BC derecha", "edt_eff_basecolorrangeright": "Gama BC derecha",
"edt_eff_brightness_title": "Brillo", "edt_eff_brightness": "Brillo",
"edt_eff_centerx_title": "Centrar Eje-X", "edt_eff_centerx": "Centrar Eje-X",
"edt_eff_centery_title": "Centrar Eje-Y", "edt_eff_centery": "Centrar Eje-Y",
"edt_eff_saturation_title": "Saturación", "edt_eff_saturation": "Saturación",
"edt_eff_colorevel_title": "Nivel de color", "edt_eff_colorevel": "Nivel de color",
"edt_eff_whitelevel_title": "Nivel de blanco", "edt_eff_whitelevel": "Nivel de blanco",
"edt_eff_alarmcolor_title": "Color de alarma", "edt_eff_alarmcolor": "Color de alarma",
"edt_eff_postcolor_title": "Post color", "edt_eff_postcolor": "Post color",
"edt_eff_enableshutdown_title": "Apagado real", "edt_eff_enableshutdown": "Apagado real",
"edt_eff_length_title": "Longitud", "edt_eff_length": "Longitud",
"edt_eff_frequency_title": "Frecuencia", "edt_eff_frequency": "Frecuencia",
"edt_eff_min_len_title": "Longitud mínima", "edt_eff_min_len": "Longitud mínima",
"edt_eff_max_len_title": "Longitud máxima", "edt_eff_max_len": "Longitud máxima",
"edt_eff_height_title": "Altura", "edt_eff_height": "Altura",
"edt_eff_offset_title": "Compensación", "edt_eff_offset": "Compensación",
"edt_eff_colorHour_title": "Color de hora", "edt_eff_colorHour": "Color de hora",
"edt_eff_colorMinute_title": "Color de minuto", "edt_eff_colorMinute": "Color de minuto",
"edt_eff_colorSecond_title": "Color de segundo", "edt_eff_colorSecond": "Color de segundo",
"edt_eff_hourMargin_title": "Hora de margen", "edt_eff_hourMargin": "Hora de margen",
"edt_eff_minuteMargin_title": "Minuto de margen", "edt_eff_minuteMargin": "Minuto de margen",
"edt_eff_secondMargin_title": "Segundo de margen", "edt_eff_secondMargin": "Segundo de margen",
"edt_eff_margin_title": "Margen", "edt_eff_margin": "Margen",
"edt_eff_colorMarker_title": "Marcador de color", "edt_eff_colorMarker": "Marcador de color",
"edt_append_ns": "ns", "edt_append_ns": "ns",
"edt_append_ms": "ms", "edt_append_ms": "ms",
"edt_append_s": "s", "edt_append_s": "s",
@ -712,8 +711,8 @@
"wiz_hue_searchb": "Buscando el puente...", "wiz_hue_searchb": "Buscando el puente...",
"wiz_hue_blinkblue": "Permite a ID $1 encender el azul", "wiz_hue_blinkblue": "Permite a ID $1 encender el azul",
"wiz_hue_ident": "Identificar", "wiz_hue_ident": "Identificar",
"edt_eff_repeatcount_title": "Repetir cuenta", "edt_eff_repeatcount": "Repetir cuenta",
"edt_eff_maintain_end_color_title": "Mantener color de fin", "edt_eff_maintain_end_color": "Mantener color de fin",
"edt_dev_spec_ledType_title": "Tipo de LED", "edt_dev_spec_ledType": "Tipo de LED",
"edt_dev_spec_dmaNumber_title": "Canal DMA" "edt_dev_spec_dmaNumber": "Canal DMA"
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><svg width='120px' height='120px' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-ring-alt"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><circle cx="50" cy="50" r="40" stroke="#afafb7" fill="none" stroke-width="10" stroke-linecap="round"></circle><circle cx="50" cy="50" r="40" stroke="#5cffd6" fill="none" stroke-width="6" stroke-linecap="round"><animate attributeName="stroke-dashoffset" dur="2s" repeatCount="indefinite" from="0" to="502"></animate><animate attributeName="stroke-dasharray" dur="2s" repeatCount="indefinite" values="150.6 100.4;1 250;150.6 100.4"></animate></circle></svg>

Before

Width:  |  Height:  |  Size: 709 B

View File

@ -85,7 +85,6 @@
<span class="icon-bar bottom-bar"></span> <span class="icon-bar bottom-bar"></span>
</button> </button>
<a class="navbar-brand" href="https://www.hyperion-project.org?pk_campaign=WebUI&pk_kwd=mainlogo" target="_blank"><img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" height="55"></a> <a class="navbar-brand" href="https://www.hyperion-project.org?pk_campaign=WebUI&pk_kwd=mainlogo" target="_blank"><img src="img/hyperion/hyperionlogo.png" alt="Redefine ambient light!" height="55"></a>
<a class="navbar-brand" href="/"><img src="img/hyperion/hyperionlostconnection.png" alt="Redefine ambient light!" style="display:none;"></a>
</div> </div>
<!-- /.navbar-header --> <!-- /.navbar-header -->

View File

@ -9,15 +9,7 @@ $(document).ready( function() {
var backgroundEffect_editor = null; var backgroundEffect_editor = null;
if(showOptHelp) if(showOptHelp)
{ {
//effect path
if(storedAccess != 'default')
{
$('#conf_cont').append(createRow('conf_cont_ef'))
$('#conf_cont_ef').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
$('#conf_cont_ef').append(createHelpTable(schema.effects.properties, $.i18n("edt_conf_effp_heading_title")));
}
//foreground effect //foreground effect
$('#conf_cont').append(createRow('conf_cont_fge')) $('#conf_cont').append(createRow('conf_cont_fge'))
$('#conf_cont_fge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect')); $('#conf_cont_fge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
@ -27,15 +19,22 @@ $(document).ready( function() {
$('#conf_cont').append(createRow('conf_cont_bge')) $('#conf_cont').append(createRow('conf_cont_bge'))
$('#conf_cont_bge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect')); $('#conf_cont_bge').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
$('#conf_cont_bge').append(createHelpTable(schema.backgroundEffect.properties, $.i18n("edt_conf_bge_heading_title"))); $('#conf_cont_bge').append(createHelpTable(schema.backgroundEffect.properties, $.i18n("edt_conf_bge_heading_title")));
//effect path
if(storedAccess != 'default')
{
$('#conf_cont').append(createRow('conf_cont_ef'))
$('#conf_cont_ef').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
$('#conf_cont_ef').append(createHelpTable(schema.effects.properties, $.i18n("edt_conf_effp_heading_title")));
}
} }
else else
{ {
if(storedAccess != 'default')
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
$('#conf_cont').addClass('row'); $('#conf_cont').addClass('row');
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect')); $('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_fge_heading_title"), 'editor_container_foregroundEffect', 'btn_submit_foregroundEffect'));
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect')); $('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_bge_heading_title"), 'editor_container_backgroundEffect', 'btn_submit_backgroundEffect'));
if(storedAccess != 'default')
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
} }
if(storedAccess != 'default') if(storedAccess != 'default')
@ -68,34 +67,10 @@ $(document).ready( function() {
foregroundEffect_editor.on('change',function() { foregroundEffect_editor.on('change',function() {
foregroundEffect_editor.validate().length ? $('#btn_submit_foregroundEffect').attr('disabled', true) : $('#btn_submit_foregroundEffect').attr('disabled', false); foregroundEffect_editor.validate().length ? $('#btn_submit_foregroundEffect').attr('disabled', true) : $('#btn_submit_foregroundEffect').attr('disabled', false);
var type = foregroundEffect_editor.getEditor('root.foregroundEffect.type');
if(type.value == "color")
{
foregroundEffect_editor.getEditor('root.foregroundEffect.effect').disable();
foregroundEffect_editor.getEditor('root.foregroundEffect.color').enable();
}
else
{
foregroundEffect_editor.getEditor('root.foregroundEffect.effect').enable();
foregroundEffect_editor.getEditor('root.foregroundEffect.color').disable();
}
}); });
backgroundEffect_editor.on('change',function() { backgroundEffect_editor.on('change',function() {
backgroundEffect_editor.validate().length ? $('#btn_submit_backgroundEffect').attr('disabled', true) : $('#btn_submit_backgroundEffect').attr('disabled', false); backgroundEffect_editor.validate().length ? $('#btn_submit_backgroundEffect').attr('disabled', true) : $('#btn_submit_backgroundEffect').attr('disabled', false);
var type = backgroundEffect_editor.getEditor('root.backgroundEffect.type');
if(type.value == "color")
{
backgroundEffect_editor.getEditor('root.backgroundEffect.effect').disable();
backgroundEffect_editor.getEditor('root.backgroundEffect.color').enable();
}
else
{
backgroundEffect_editor.getEditor('root.backgroundEffect.effect').enable();
backgroundEffect_editor.getEditor('root.backgroundEffect.color').disable();
}
}); });
$('#btn_submit_foregroundEffect').off().on('click',function() { $('#btn_submit_foregroundEffect').off().on('click',function() {
@ -143,12 +118,8 @@ $(document).ready( function() {
$('#root_backgroundEffect_effect').html($('#root_foregroundEffect_effect').html()); $('#root_backgroundEffect_effect').html($('#root_foregroundEffect_effect').html());
oldEffects = newEffects; oldEffects = newEffects;
$('#root_foregroundEffect_effect').val(confFgEff).change(); $('#root_foregroundEffect_effect').val(confFgEff);
//$('select').trigger('change'); $('#root_backgroundEffect_effect').val(confBgEff);
//var fgeff = foregroundEffect_editor.getEditor('root.foregroundEffect.effect').setValue(confFgEff);
//console.log(fgeff);
$('#root_backgroundEffect_effect').val(confBgEff).change();
} }
} }
} }

View File

@ -13,17 +13,18 @@ $(document).ready( function() {
var newDelList = serverInfo.effects; var newDelList = serverInfo.effects;
if(newDelList.length != oldDelList.length) if(newDelList.length != oldDelList.length)
{ {
var EffectHtml = null; $('#effectsdellist').html("");
var usrEffArr = [];
var sysEffArr = [];
for(var idx=0; idx<newDelList.length; idx++) for(var idx=0; idx<newDelList.length; idx++)
{ {
if(!/^\:/.test(newDelList[idx].file)) if(!/^\:/.test(newDelList[idx].file))
{ usrEffArr.push('ext_'+newDelList[idx].name+':'+newDelList[idx].name);
EffectHtml += '<option value="'+newDelList[idx].name+'">'+newDelList[idx].name+'</option>'; else
} sysEffArr.push('int_'+newDelList[idx].name+':'+newDelList[idx].name);
} }
$("#effectsdellist").html(EffectHtml); $('#effectsdellist').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets'), true)).append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets'), true)).trigger('change');
oldDelList = newDelList; oldDelList = newDelList;
$('#effectsdellist').trigger('change');
} }
} }
@ -35,15 +36,23 @@ $(document).ready( function() {
$("#effectslist").off().on("change", function(event) { $("#effectslist").off().on("change", function(event) {
if(effects_editor != null)
effects_editor.destroy();
for(var idx=0; idx<effects.length; idx++){ for(var idx=0; idx<effects.length; idx++){
if (effects[idx].schemaContent.script == this.value){ if (effects[idx].schemaContent.script == this.value)
{
effects_editor = createJsonEditor('editor_container', { effects_editor = createJsonEditor('editor_container', {
args : effects[idx].schemaContent, args : effects[idx].schemaContent,
},false, true); },false, true, false);
effectPy = ':';
effectPy += effects[idx].schemaContent.script; effectPy = ':';
effectPy += effects[idx].schemaContent.script;
$("#name-input").trigger("change");
$("#eff_desc").html(createEffHint($.i18n(effects[idx].schemaContent.title),$.i18n(effects[idx].schemaContent.title+'_desc')));
break;
} }
$("#name-input").trigger("change");
} }
effects_editor.on('change',function() { effects_editor.on('change',function() {
if ($("#btn_cont_test").hasClass("btn-success") && effects_editor.validate().length == 0 && effectName != "") if ($("#btn_cont_test").hasClass("btn-success") && effects_editor.validate().length == 0 && effectName != "")
@ -52,13 +61,11 @@ $(document).ready( function() {
} }
if( effects_editor.validate().length == 0 && effectName != "") if( effects_editor.validate().length == 0 && effectName != "")
{ {
$('#btn_start_test').attr('disabled', false); $('#btn_start_test, #btn_write').attr('disabled', false);
$('#btn_write').attr('disabled', false);
} }
else else
{ {
$('#btn_start_test').attr('disabled', true); $('#btn_start_test, #btn_write').attr('disabled', true);
$('#btn_write').attr('disabled', true);
} }
}); });
}); });
@ -109,11 +116,40 @@ $(document).ready( function() {
}); });
$('#effectsdellist').off().on('change', function(){ $('#effectsdellist').off().on('change', function(){
if ($(this).val() == null) { $(this).val() == null ? $('#btn_edit, #btn_delete').prop('disabled',true) : "";
$('#btn_delete').prop('disabled',true); $(this).val().startsWith("int_") ? $('#btn_delete').prop('disabled',true) : $('#btn_delete').prop('disabled',false);
} else { });
$('#btn_delete').prop('disabled',false);
} $('#btn_edit').off().on('click', function(){
var name = $("#effectsdellist").val();
if(name.startsWith("int_"))
{ name = name.split("_").pop();
$("#name-input").val("My Modded Effect");
}
else
{
name = name.split("_").pop();
$("#name-input").val(name);
}
var efx = serverInfo.effects;
for(var i = 0; i<efx.length; i++)
{
if(efx[i].name == name)
{
var py = efx[i].script.split("/").pop()
$("#effectslist").val(py).trigger("change");
for(key in efx[i].args)
{
var ed = effects_editor.getEditor('root.args.'+[key]);
if(ed)
ed.setValue(efx[i].args[key]);
}
break;
}
}
}); });
//create basic effect list //create basic effect list

View File

@ -6,6 +6,7 @@
$(document).ready(function() { $(document).ready(function() {
var messages; var messages;
var loguplmess = "";
var reportUrl = 'https://report.hyperion-project.org/#'; var reportUrl = 'https://report.hyperion-project.org/#';
$('#conf_cont').append(createOptPanel('fa-reorder', $.i18n("edt_conf_log_heading_title"), 'editor_container', 'btn_submit')); $('#conf_cont').append(createOptPanel('fa-reorder', $.i18n("edt_conf_log_heading_title"), 'editor_container', 'btn_submit'));
@ -68,28 +69,7 @@ $(document).ready(function() {
var info; var info;
//create log //create log
if(messages) log = (messages ? loguplmess : "Log was empty!");
{
for(var i = 0; i<messages.length; i++)
{
app_name = messages[i].appName;
logger_name = messages[i].loggerName;
function_ = messages[i].function;
line = messages[i].line;
file_name = messages[i].fileName;
msg = messages[i].message;
level_string = messages[i].levelString;
debug = "";
if(level_string == "DEBUG") {
debug = "<"+file_name+":"+line+":"+function_+"()> ";
}
log += "["+app_name+" "+logger_name+"] <"+level_string+"> "+debug+msg+"\n";
}
}
else
log = "Log was empty!";
//create general info //create general info
info = "### GENERAL ### \n"; info = "### GENERAL ### \n";
@ -187,10 +167,11 @@ $(document).ready(function() {
var debug = ""; var debug = "";
if(level_string == "DEBUG") { if(level_string == "DEBUG") {
debug = "&lt;"+file_name+":"+line+":"+function_+"()&gt; "; debug = "("+file_name+":"+line+":"+function_+"()) ";
} }
$("#logmessages").html($("#logmessages").html()+"\n <code>"+"["+app_name+" "+logger_name+"] &lt;"+level_string+"&gt; "+debug+msg+"</code>"); $("#logmessages").append("\n <code>"+"["+app_name+" "+logger_name+"] ("+level_string+") "+debug+msg+"</code>");
loguplmess += "["+app_name+" "+logger_name+"] ("+level_string+") "+debug+msg+"\n";
} }
if($("#btn_autoscroll").hasClass('btn-success')){ if($("#btn_autoscroll").hasClass('btn-success')){
$('#logmessages').stop().animate({ $('#logmessages').stop().animate({

View File

@ -277,7 +277,6 @@ $(document).ready(function() {
createCP('cp2', cpcolor, function(rgbT,hex){ createCP('cp2', cpcolor, function(rgbT,hex){
rgb = rgbT; rgb = rgbT;
sendColor() sendColor()
$("#effect_select").val("__none__");
setStorage('rmcpcolor', hex); setStorage('rmcpcolor', hex);
}); });

View File

@ -13,7 +13,7 @@ $(document).ready(function() {
{ {
createHint('intro', $.i18n('main_ledsim_text'), 'ledsim_text'); createHint('intro', $.i18n('main_ledsim_text'), 'ledsim_text');
$('#ledsim_text').css({'margin':'10px 15px 0px 15px'}); $('#ledsim_text').css({'margin':'10px 15px 0px 15px'});
$('#ledsim_text .intro-hint').css("margin","0px") $('#ledsim_text .bs-callout').css("margin","0px")
} }
if(getStorage('ledsim_width') != null) if(getStorage('ledsim_width') != null)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1439,6 +1439,81 @@ JSONEditor.AbstractEditor = Class.extend({
this.link_watchers = []; this.link_watchers = [];
if(options.container) this.setContainer(options.container); if(options.container) this.setContainer(options.container);
this.registerDependencies();
},
registerDependencies: function() {
this.dependenciesFulfilled = true;
var deps = this.options.dependencies;
if (!deps) {
return;
}
var self = this;
Object.keys(deps).forEach(function(dependency) {
var path = self.path.split('.');
path[path.length - 1] = dependency;
path = path.join('.');
var choices = deps[dependency];
self.jsoneditor.watch(path, function() {
self.checkDependency(path, choices);
});
});
},
checkDependency: function(path, choices) {
var wrapper = this.control || this.container;
if (this.path === path || !wrapper) {
return;
}
var self = this;
var editor = this.jsoneditor.getEditor(path);
var value = editor ? editor.getValue() : undefined;
var previousStatus = this.dependenciesFulfilled;
this.dependenciesFulfilled = false;
if (!editor || !editor.dependenciesFulfilled) {
this.dependenciesFulfilled = false;
} else if (Array.isArray(choices)) {
choices.some(function(choice) {
if (value === choice) {
self.dependenciesFulfilled = true;
return true;
}
});
} else if (typeof choices === 'object') {
if (typeof value !== 'object') {
this.dependenciesFulfilled = choices === value;
} else {
Object.keys(choices).some(function(key) {
if (!choices.hasOwnProperty(key)) {
return false;
}
if (!value.hasOwnProperty(key) || choices[key] !== value[key]) {
self.dependenciesFulfilled = false;
return true;
}
self.dependenciesFulfilled = true;
});
}
} else if (typeof choices === 'string' || typeof choices === 'number') {
this.dependenciesFulfilled = value === choices;
} else if (typeof choices === 'boolean') {
if (choices) {
this.dependenciesFulfilled = value;
} else {
this.dependenciesFulfilled = !value;
}
}
if (this.dependenciesFulfilled !== previousStatus) {
this.notify();
}
if (this.dependenciesFulfilled) {
wrapper.style.display = 'block';
} else {
wrapper.style.display = 'none';
}
}, },
setContainer: function(container) { setContainer: function(container) {
this.container = container; this.container = container;
@ -6205,7 +6280,67 @@ JSONEditor.defaults.editors.colorPicker = JSONEditor.defaults.editors.string.ext
$(this.input).colorpicker().on('changeColor', function(e) { $(this.input).colorpicker().on('changeColor', function(e) {
$(myinput).val(e.color.toRGB()).change(); $(myinput).val(e.color.toRGB()).change();
}); });
} },
destroy: function() {
$(this.input).colorpicker('destroy');
}
});
// colorpickerRGBA creation and handling, build on top of strings editor
JSONEditor.defaults.editors.colorPickerRGBA = JSONEditor.defaults.editors.string.extend({
getValue: function() {
if ($(this.input).data("colorpicker") !== undefined) {
var color = $(this.input).data('colorpicker').color.toRGB();
return [color.r,color.g, color.b, color.a];
}
else {
return [0,0,0,1];
}
},
setValue: function(val) {
$(this.input).colorpicker('updateInput', 'rgba('+val+')');
$(this.input).colorpicker('updateData', val);
// $(this.input).colorpicker('updatePicker', rgb2hex(val));
$(this.input).colorpicker('updateComponent', 'rgba('+val+')');
},
build: function() {
this._super();
var myinput = this;
$(myinput.input).parent().attr("class", $(myinput.input).parent().attr('class') + " colorpicker-element input-group");
$(myinput.input).append("<span class='input-group-addon' id='event_catcher'><i></i></span>");
$(myinput.input).colorpicker({
format: 'rgba',
customClass: 'colorpicker-2x',
sliders: {
saturation: {
maxLeft: 200,
maxTop: 200
},
hue: {
maxTop: 200
},
alpha: {
maxTop: 200
}
},
})
$("#event_catcher").detach().insertAfter(myinput.input);
$("#event_catcher").attr("id", "selector");
$(this.input).colorpicker().on('changeColor', function(e) {
$(myinput).val(e.color.toRGB()).change();
});
},
destroy: function() {
$(this.input).colorpicker('destroy');
}
}); });
var matchKey = (function () { var matchKey = (function () {
@ -7083,6 +7218,12 @@ JSONEditor.defaults.resolvers.unshift(function(schema) {
return "colorPicker"; return "colorPicker";
} }
}); });
// colorpickerRGBA extend for strings
JSONEditor.defaults.resolvers.unshift(function(schema) {
if(schema.type === "array" && schema.format === "colorpickerRGBA") {
return "colorPickerRGBA";
}
});
/** /**
* This is a small wrapper for using JSON Editor like a typical jQuery plugin. * This is a small wrapper for using JSON Editor like a typical jQuery plugin.

View File

@ -238,6 +238,11 @@ function createHint(type, text, container, buttonid, buttontxt)
} }
} }
function createEffHint(title, text)
{
return '<div class="bs-callout bs-callout-primary" style="margin-top:0px"><h4>'+title+'</h4>'+text+'</div>';
}
function valValue(id,value,min,max) function valValue(id,value,min,max)
{ {
if(typeof max === 'undefined' || max == "") if(typeof max === 'undefined' || max == "")
@ -285,34 +290,39 @@ function isJsonString(str)
return ""; return "";
} }
function createJsonEditor(container,schema,setconfig,usePanel) function createJsonEditor(container,schema,setconfig,usePanel,arrayre)
{ {
$('#'+container).off(); $('#'+container).off();
$('#'+container).html(""); $('#'+container).html("");
//JSONEditor.plugins.selectize.enable = true;
if (typeof arrayre === 'undefined')
arrayre = true;
var editor = new JSONEditor(document.getElementById(container), var editor = new JSONEditor(document.getElementById(container),
{ {
theme: 'bootstrap3', theme: 'bootstrap3',
iconlib: "fontawesome4", iconlib: "fontawesome4",
disable_collapse: 'true', disable_collapse: 'true',
form_name_root: 'sa', form_name_root: 'sa',
disable_edit_json: 'true', disable_edit_json: true,
disable_properties: 'true', disable_properties: true,
disable_array_reorder: 'true', disable_array_reorder: arrayre,
no_additional_properties: 'true', no_additional_properties: true,
disable_array_delete_all_rows: 'true', disable_array_delete_all_rows: true,
disable_array_delete_last_row: 'true', disable_array_delete_last_row: true,
access: storedAccess, access: storedAccess,
schema: { schema: {
title:'', title:'',
properties: schema properties: schema
} }
}); });
if(usePanel) if(usePanel)
{ {
$('#'+container+' .well').first().removeClass('well well-sm'); $('#'+container+' .well').first().removeClass('well well-sm');
$('#'+container+' h4').remove(); $('#'+container+' h4').first().remove();
$('#'+container+' .well').first().removeClass('well well-sm'); $('#'+container+' .well').first().removeClass('well well-sm');
} }
@ -591,14 +601,21 @@ function createSelOpt(opt, title)
return el; return el;
} }
function createSel(array, group) function createSel(array, group, split)
{ {
if (array.length != "0") if (array.length != 0)
{ {
var el = createSelGroup(group); var el = createSelGroup(group);
for(var i=0; i<array.length; i++) for(var i=0; i<array.length; i++)
{ {
var opt = createSelOpt(array[i]) var opt;
if(split)
{
opt = array[i].split(":")
opt = createSelOpt(opt[0],opt[1])
}
else
opt = createSelOpt(array[i])
el.appendChild(opt); el.appendChild(opt);
} }
return el; return el;

View File

@ -119,13 +119,13 @@
/// * cropTop : Cropping from the top [default=0] /// * cropTop : Cropping from the top [default=0]
/// * cropBottom : Cropping from the bottom [default=0] /// * cropBottom : Cropping from the bottom [default=0]
/// * signalDetection : enable/disable signal detection [default=true] /// * signalDetection : enable/disable signal detection [default=true]
/// * redSignalThreshold : Signal threshold for the red channel between 0.0 and 1.0 [default=0.0] /// * redSignalThreshold : Signal threshold for the red channel between 0 and 100 [default=5]
/// * greenSignalThreshold : Signal threshold for the green channel between 0.0 and 1.0 [default=0.0] /// * greenSignalThreshold : Signal threshold for the green channel between 0 and 100 [default=5]
/// * blueSignalThreshold : Signal threshold for the blue channel between 0.0 and 1.0 [default=0.0] /// * blueSignalThreshold : Signal threshold for the blue channel between 0 and 100 [default=5]
/// * signalDetectionVerticalOffsetMin : area for signal detection - horizontal minimum offset value. Values between 0.0 and 1.0 /// * sDHOffsetMin : area for signal detection - horizontal minimum offset value. Values between 0.0 and 1.0
/// * signalDetectionHorizontalOffsetMin : area for signal detection - vertical minimum offset value. Values between 0.0 and 1.0 /// * sDVOffsetMin : area for signal detection - vertical minimum offset value. Values between 0.0 and 1.0
/// * signalDetectionVerticalOffsetMax : area for signal detection - horizontal maximum offset value. Values between 0.0 and 1.0 /// * sDHOffsetMax : area for signal detection - horizontal maximum offset value. Values between 0.0 and 1.0
/// * signalDetectionHorizontalOffsetMax : area for signal detection - vertical maximum offset value. Values between 0.0 and 1.0 /// * sDVOffsetMax : area for signal detection - vertical maximum offset value. Values between 0.0 and 1.0
"grabberV4L2" : "grabberV4L2" :
[ [
{ {
@ -144,14 +144,14 @@
"cropRight" : 0, "cropRight" : 0,
"cropTop" : 0, "cropTop" : 0,
"cropBottom" : 0, "cropBottom" : 0,
"redSignalThreshold" : 0.0, "redSignalThreshold" : 5,
"greenSignalThreshold" : 0.0, "greenSignalThreshold" : 5,
"blueSignalThreshold" : 0.0, "blueSignalThreshold" : 5,
"signalDetection" : true, "signalDetection" : false,
"signalDetectionVerticalOffsetMin" : 0.25, "sDVOffsetMin" : 0.25,
"signalDetectionHorizontalOffsetMin" : 0.25, "sDHOffsetMin" : 0.25,
"signalDetectionVerticalOffsetMax" : 0.75, "sDVOffsetMax" : 0.75,
"signalDetectionHorizontalOffsetMax" : 0.75 "sDHOffsetMax" : 0.75
} }
], ],

View File

@ -75,14 +75,14 @@
"cropRight" : 0, "cropRight" : 0,
"cropTop" : 0, "cropTop" : 0,
"cropBottom" : 0, "cropBottom" : 0,
"redSignalThreshold" : 0.0, "redSignalThreshold" : 5,
"greenSignalThreshold" : 0.0, "greenSignalThreshold" : 5,
"blueSignalThreshold" : 0.0, "blueSignalThreshold" : 5,
"signalDetection" : true, "signalDetection" : false,
"signalDetectionVerticalOffsetMin" : 0.25, "sDVOffsetMin" : 0.25,
"signalDetectionHorizontalOffsetMin" : 0.25, "sDHOffsetMin" : 0.25,
"signalDetectionVerticalOffsetMax" : 0.75, "sDVOffsetMax" : 0.75,
"signalDetectionHorizontalOffsetMax" : 0.75 "sDHOffsetMax" : 0.75
} }
], ],

15
effects/atomic.json Normal file
View File

@ -0,0 +1,15 @@
{
"name" : "Atomic swirl",
"script" : "swirl.py",
"args" :
{
"rotation-time" : 25.0,
"center_x" : 0.5,
"center_y" : 0.5,
"reverse" : false,
"custom-colors":[[0,0,0],[0,0,0],[255,255,0],[0,0,0],[0,0,0],[255,255,0],[0,0,0],[0,0,0],[255,255,0]],
"random-center":false,
"custom-colors2":[],
"enable-second":false
}
}

View File

@ -1,80 +0,0 @@
import hyperion
import time
from datetime import datetime
def myRange(index, margin):
return [i % hyperion.ledCount for i in range(index-margin, index+margin+1)]
""" Define some variables """
sleepTime = 1
ledCount = hyperion.ledCount
offset = hyperion.args.get('offset', 0)
direction = bool(hyperion.args.get('direction', False))
hourMargin = hyperion.args.get('hour-margin', 2)
minuteMargin = hyperion.args.get('minute-margin', 1)
secondMargin = hyperion.args.get('second-margin', 0)
hourColor = hyperion.args.get('hour-color', (255,0,0))
minuteColor = hyperion.args.get('minute-color', (0,255,0))
secondColor = hyperion.args.get('second-color', (0,0,255))
markerColor = hyperion.args.get('marker-color', (255,255,255))
marker = ledCount/4
markers = (0+offset, int(marker + offset) % ledCount, int(2*marker + offset) % ledCount, int(3*marker + offset) % ledCount)
""" The effect loop """
while not hyperion.abort():
""" The algorithm to calculate the change in color """
led_data = bytearray()
now = datetime.now()
h = now.hour
m = now.minute
s = now.second
hmin = float(h+(1/60*m))
if hmin > 12:
hmin -= 12
hour = float(hmin/12 * ledCount)
led_hour = int(hour + offset) % ledCount
minute = m/60. * ledCount
led_minute = int(minute + offset) % ledCount
second = s/60. * ledCount
led_second = int(second + offset) % ledCount
hourRange = myRange(led_hour, hourMargin)
minuteRange = myRange(led_minute, minuteMargin)
secondRange = myRange(led_second, secondMargin)
for i in range(ledCount):
blend = [0, 0, 0]
if i in markers:
blend = markerColor
if i in hourRange:
blend = hourColor
if i in minuteRange:
blend = minuteColor
if i in secondRange:
blend = secondColor
led_data += bytearray((int(blend[0]), int(blend[1]), int(blend[2])))
""" send the data to hyperion """
hyperion.setColor(led_data)
""" sleep for a while """
timediff = (datetime.now()-now).microseconds/1000000.
time.sleep(sleepTime-timediff)

78
effects/double-swirl.json Normal file
View File

@ -0,0 +1,78 @@
{
"args": {
"center_x": 0.5,
"center_x2": 0.5,
"center_y": 0.5,
"center_y2": 0.5,
"custom-colors": [
[
255,
0,
0
],
[
20,
0,
255
]
],
"custom-colors2": [
[
255,
0,
0,
0
],
[
255,
0,
0,
0
],
[
255,
0,
0,
0
],
[
0,
0,
0,
1
],
[
0,
0,
0,
0
],
[
255,
0,
0,
0
],
[
255,
0,
0,
0
],
[
0,
0,
0,
1
]
],
"enable-second": true,
"random-center": false,
"random-center2": false,
"reverse": false,
"reverse2": true,
"rotation-time": 25
},
"name": "Double swirl",
"script": "swirl.py"
}

8
effects/flag.json Normal file
View File

@ -0,0 +1,8 @@
{
"name": "Flags Germany/Sweden",
"script": "flag.py",
"args": {
"countries":["de","se"],
"switch-time": 2
}
}

183
effects/flag.py Normal file
View File

@ -0,0 +1,183 @@
import hyperion, time
hyperion.imageMinSize(10,10)
iW = hyperion.imageWidth()
iH = hyperion.imageHeight()
countries = hyperion.args.get('countries', ("de","at"))
duration = int(hyperion.args.get('switch-time', 5))
imgIds = []
nr = 0
def switchImage():
global nr
if nr >= len(imgIds):
nr = 0
hyperion.imageShow(imgIds[nr])
nr += 1
def printFlag(country):
# official country codes
#############
# EU flags -> missing: cyprus, UK
#############
# de flag (Germany)
if country == "de":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 0, 0, 0)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 221, 0, 0)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 255, 206, 0)
# at flag (Austria)
if country == "at":
hyperion.imageSolidFill(237, 41, 57)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 255, 255, 255)
# fr flag (France)
if country == "fr":
hyperion.imageSolidFill(0, 0, int(iW*0.33), iH, 0, 35, 149)
hyperion.imageSolidFill(int(iW*0.33), 0, int(iW*0.33), iH, 255, 255, 255)
hyperion.imageSolidFill(int(iW*0.66), 0, iW, iH, 237, 41, 57)
# be flag (Belgium)
if country == "be":
hyperion.imageSolidFill(0, 0, int(iW*0.33), iH, 0, 0, 0)
hyperion.imageSolidFill(int(iW*0.33), 0, int(iW*0.33), iH, 255, 224, 66)
hyperion.imageSolidFill(int(iW*0.66), 0, iW, iH, 237, 41, 57)
# it flag (Italy)
if country == "it":
hyperion.imageSolidFill(0, 0, int(iW*0.33), iH, 0, 146, 70)
hyperion.imageSolidFill(int(iW*0.33), 0, int(iW*0.33), iH, 255, 255, 255)
hyperion.imageSolidFill(int(iW*0.66), 0, iW, iH, 206, 43, 55)
# es flag (Spain)
if country == "es":
hyperion.imageSolidFill(198, 11, 30)
hyperion.imageSolidFill(0, int(iH*0.25), iW, int(iH*0.55), 255, 196, 0)
# bg flag (Bulgaria)
if country == "bg":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 255, 255, 255)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 0, 150, 110)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 214, 38, 18)
# ee flag (Estonia)
if country == "ee":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 72, 145, 217)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 0, 0, 0)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 255, 255, 255)
# dk flag (Denmark)
if country == "dk":
hyperion.imageSolidFill(198, 12, 48)
hyperion.imageDrawLine(int(iW*0.35), 0, int(iW*0.35), iH, int(iW*0.13), 255, 255, 255)
hyperion.imageDrawLine(0, int(iH*0.5), iW, int(iH*0.5), int(iW*0.13), 255, 255, 255)
# fi flag (Finland)
if country == "fi":
hyperion.imageSolidFill(255, 255, 255)
hyperion.imageDrawLine(int(iW*0.35), 0, int(iW*0.35), iH, int(iW*0.18), 0, 53, 128)
hyperion.imageDrawLine(0, int(iH*0.5), iW, int(iH*0.5), int(iW*0.18), 0, 53, 128)
# hu flag (Hungary)
if country == "hu":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 205, 42, 62)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 255, 255, 255)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 67, 111, 77)
# ie flag (Ireland)
if country == "ie":
hyperion.imageSolidFill(0, 0, int(iW*0.33), iH, 0, 155, 72)
hyperion.imageSolidFill(int(iW*0.33), 0, int(iW*0.33), iH, 255, 255, 255)
hyperion.imageSolidFill(int(iW*0.66), 0, iW, iH, 255, 121, 0)
# lv flag (Latvia)
if country == "lv":
hyperion.imageSolidFill(158, 48, 57)
hyperion.imageDrawLine(0, int(iH*0.5), iW, int(iH*0.5), int(iH*0.2), 255, 255, 255)
# lt flag (Lithuanian)
if country == "lt":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 253, 185, 19)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 0, 106, 68)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 193, 39, 45)
# lu flag (Luxembourg)
if country == "lu":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 237, 41, 57)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 255, 255, 255)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 0, 161, 222)
# mt flag (Malta)
if country == "mt":
hyperion.imageSolidFill(0, 0, int(iW*0.5), iH, 255, 255, 255)
hyperion.imageSolidFill(int(iW*0.5), 0, int(iW*0.5), iH, 207, 20, 43)
# nl flag (Netherlands)
if country == "nl":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 174, 28, 40)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 255, 255, 255)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 33, 70, 139)
# pl flag (Poland)
if country == "pl":
hyperion.imageSolidFill(255, 255, 255)
hyperion.imageSolidFill(0, int(iH*0.5), iW, iH, 220, 20, 60)
# pt flag (Portugal)
if country == "pt":
hyperion.imageSolidFill(0, 102, 0)
hyperion.imageSolidFill(int(iW*0.4), 0, iW, iH, 255, 0, 0)
# ro flag (Romania)
if country == "ro":
hyperion.imageSolidFill(0, 0, int(iW*0.33), iH, 0, 43, 127)
hyperion.imageSolidFill(int(iW*0.33), 0, int(iW*0.33), iH, 252, 209, 22)
hyperion.imageSolidFill(int(iW*0.66), 0, iW, iH, 206, 17, 38)
# sl flag (Slovakia/Slovenia)
if country == "sl":
hyperion.imageSolidFill(0, 0, iW, int(iH*0.33), 255, 255, 255)
hyperion.imageSolidFill(0, int(iH*0.33), iW, int(iH*0.33), 11, 78, 162)
hyperion.imageSolidFill(0, int(iH*0.66), iW, iH, 238, 28, 37)
# se flag (Sweden)
if country == "se":
hyperion.imageSolidFill(0, 106, 167)
hyperion.imageDrawLine(int(iW*0.35), 0, int(iW*0.35), iH, int(iW*0.14), 254, 204, 0)
hyperion.imageDrawLine(0, int(iH*0.5), iW, int(iH*0.5), int(iW*0.14), 254, 204, 0)
# cz flag (Czech Republic)
if country == "cz":
hyperion.imageSolidFill(255, 255, 255)
hyperion.imageSolidFill(0, int(iH*0.5), iW, iH, 215, 20, 26)
hyperion.imageDrawPolygon(bytearray([0,0,int(iH*0.5),int(iH*0.5),0,iH]),17, 69, 126)
# gr flag (Greece)
if country == "gr":
hyperion.imageSolidFill(13, 94, 175)
hyperion.imageDrawLine(int(iW*0.35), int(iH*0.15), iW, int(iH*0.15),int(0.1*iH), 255, 255, 255)
hyperion.imageDrawLine(int(iW*0.35), int(iH*0.35), iW, int(iH*0.35),int(0.1*iH), 255, 255, 255)
hyperion.imageDrawLine(0, int(iH*0.55), iW, int(iH*0.55),int(0.1*iH), 255, 255, 255)
hyperion.imageDrawLine(0, int(iH*0.75), iW, int(iH*0.75),int(0.1*iH), 255, 255, 255)
hyperion.imageDrawLine(int(0.175*iW), 0, int(0.175*iW), int(iH*0.35),int(0.1*iH), 255, 255, 255)
hyperion.imageDrawLine(0, int(0.175*iW), int(iH*0.35), int(0.175*iW),int(0.1*iH), 255, 255, 255)
#############
# other flags
#############
# ch flag (Swiss)
if country == "ch":
hyperion.imageSolidFill(255, 0, 0)
hyperion.imageDrawLine(int(iW*0.5), int(iH*0.25), int(iW*0.5), int(iH*0.75), int(iH*0.15), 255, 255, 255)
hyperion.imageDrawLine(int(iW*0.26), int(iH*0.5), int(iW*0.75), int(iH*0.5), int(iH*0.15), 255, 255, 255)
#prepare wanted flags
for cf in countries:
printFlag(cf)
imgIds.append(hyperion.imageSave())
hyperion.imageSolidFill(0, 0, 0)
while not hyperion.abort():
switchImage()
time.sleep(duration)

View File

@ -3,6 +3,14 @@
"script" : "light-clock.py", "script" : "light-clock.py",
"args" : "args" :
{ {
"show_seconds" : true "show_seconds" : true,
"marker-enabled" : false,
"hour-color" : [0,0,255],
"minute-color" : [0,255,0],
"second-color" : [255,0,0],
"background-color" : [0,0,0],
"marker-depth" : 0,
"marker-width" : 5,
"marker-color" : [255,255,255]
} }
} }

View File

@ -1,35 +1,46 @@
import hyperion, time, datetime import hyperion, time, datetime
hyperion.imageMinSize(32,32)
# Get the parameters # Get the parameters
showSeconds = bool(hyperion.args.get('show_seconds', True)) showSec = bool(hyperion.args.get('show_seconds', True))
centerX = int(round(hyperion.imageWidth())/2) hC = hyperion.args.get('hour-color', (0,0,255))
centerY = int(round(float(hyperion.imageHeight())/2)) mC = hyperion.args.get('minute-color', (0,255,0))
sC = hyperion.args.get('second-color', (255,0,0))
bgC = hyperion.args.get('background-color', (0,0,0))
markEnable = hyperion.args.get('marker-enabled', False)
markD = int(hyperion.args.get('marker-depth', 5))/100.0
markW = int(hyperion.args.get('marker-width', 5))/100.0
markC = hyperion.args.get('marker-color', (255,255,255))
#calculate some stuff
centerX = int(round(hyperion.imageWidth())/2)
centerY = int(round(float(hyperion.imageHeight())/2))
markDepthX = int(round(hyperion.imageWidth()*markD))
markDepthY = int(round(hyperion.imageHeight()*markD))
markThick = int(round(hyperion.imageHeight()*markW))
colorsSecond = bytearray([ colorsSecond = bytearray([
0, 255,255,0,255, 0, sC[0],sC[1],sC[2],255,
5, 255,255,0,255, 8, sC[0],sC[1],sC[2],255,
30, 0,0,0,0, 10, 0,0,0,0,
]) ])
colorsMinute = bytearray([ colorsMinute = bytearray([
0, 0,255,0,255, 0, mC[0],mC[1],mC[2],255,
5, 0,255,0,250, 35, mC[0],mC[1],mC[2],255,
50, mC[0],mC[1],mC[2],127,
90, 0,0,0,0, 90, 0,0,0,0,
]) ])
colorsHour = bytearray([ colorsHour = bytearray([
0, 0,0,255,255, 0, hC[0],hC[1],hC[2],255,
10, 0,0,255,255, 90, hC[0],hC[1],hC[2],255,
127, 0,0,196,127, 150, hC[0],hC[1],hC[2],127,
255, 0,0,196,5, 191, 0,0,0,0,
]) ])
colorsHourTop = bytearray([
0, 0,0,255,250,
10, 0,0,255,128,
20, 0,0,0,0,
])
# effect loop # effect loop
while not hyperion.abort(): while not hyperion.abort():
@ -38,17 +49,30 @@ while not hyperion.abort():
angleH = 449 - 30*(now.hour if now.hour<12 else now.hour-12) angleH = 449 - 30*(now.hour if now.hour<12 else now.hour-12)
angleM = 449 - 6*now.minute angleM = 449 - 6*now.minute
angleS = 449 - 6*now.second angleS = 449 - 6*now.second
angleH -= 0 if angleH<360 else 360 angleH -= 0 if angleH<360 else 360
angleM -= 0 if angleM<360 else 360 angleM -= 0 if angleM<360 else 360
angleS -= 0 if angleS<360 else 360 angleS -= 0 if angleS<360 else 360
hyperion.imageSolidFill(127,127,127); #reset image
hyperion.imageCanonicalGradient(centerX, centerY, angleH, colorsHour) hyperion.imageSolidFill(bgC[0],bgC[1],bgC[2])
hyperion.imageCanonicalGradient(centerX, centerY, angleM, colorsMinute)
hyperion.imageCanonicalGradient(centerX, centerY, angleH, colorsHourTop) #paint clock
if showSeconds: if angleH-angleM < 90 and angleH-angleM > 0:
hyperion.imageCanonicalGradient(centerX, centerY, angleS, colorsSecond) hyperion.imageConicalGradient(centerX, centerY, angleM, colorsMinute)
hyperion.imageConicalGradient(centerX, centerY, angleH, colorsHour)
else:
hyperion.imageConicalGradient(centerX, centerY, angleH, colorsHour)
hyperion.imageConicalGradient(centerX, centerY, angleM, colorsMinute)
if showSec:
hyperion.imageConicalGradient(centerX, centerY, angleS, colorsSecond)
if markEnable:
#marker left, right, top, bottom
hyperion.imageDrawLine(0, centerY, 0+markDepthX, centerY, markThick, markC[0], markC[1], markC[2])
hyperion.imageDrawLine(int(hyperion.imageWidth()), centerY, int(hyperion.imageWidth())-markDepthX, centerY, markThick, markC[0], markC[1], markC[2])
hyperion.imageDrawLine(centerX, 0, centerX, 0+markDepthY, markThick, markC[0], markC[1], markC[2])
hyperion.imageDrawLine(centerX, int(hyperion.imageHeight()), centerX, int(hyperion.imageHeight())-markDepthY, markThick, markC[0], markC[1], markC[2])
hyperion.imageShow() hyperion.imageShow()
time.sleep(0.5 ) time.sleep(0.5)

View File

@ -1,11 +1,15 @@
{ {
"name" : "Rainbow swirl fast", "name" : "Rainbow swirl fast",
"script" : "rainbow-swirl.py", "script" : "swirl.py",
"args" : "args" :
{ {
"rotation-time" : 4.0, "rotation-time" : 7.0,
"center_x" : 0.5, "center_x" : 0.5,
"center_y" : 0.5, "center_y" : 0.5,
"reverse" : false "reverse" : false,
"custom-colors":[],
"random-center":false,
"custom-colors2":[],
"enable-second":false
} }
} }

View File

@ -1,11 +1,15 @@
{ {
"name" : "Rainbow swirl", "name" : "Rainbow swirl",
"script" : "rainbow-swirl.py", "script" : "swirl.py",
"args" : "args" :
{ {
"rotation-time" : 20.0, "rotation-time" : 20.0,
"center_x" : 0.5, "center_x" : 0.5,
"center_y" : 0.5, "center_y" : 0.5,
"reverse" : false "reverse" : false,
"custom-colors":[],
"random-center":false,
"custom-colors2":[],
"enable-second":false
} }
} }

View File

@ -1,53 +0,0 @@
import hyperion, time, math
# set minimum image size - must be done asap
hyperion.imageMinSize(32,32)
# Get the parameters
rotationTime = float(hyperion.args.get('rotation-time', 3.0))
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,
25 ,255,230,0, 255,
63 ,255,255,0, 255,
100,0 ,255,0, 255,
127,0 ,255,200, 255,
159,0 ,255,255, 255,
191,0 ,0 ,255, 255,
224,255,0 ,255, 255,
255,255,0 ,127, 255,
#0, 255, 0, 0, 255,
#42, 255, 255, 0, 255,
#85, 0, 255, 0, 255,
#128, 0, 255, 255, 255,
#170, 0, 0, 255, 255,
#212, 255, 0, 255, 255,
#255, 255, 0, 0, 255,
])
# effect loop
while not hyperion.abort():
angle += increment
if angle > 360: angle=0
if angle < 0: angle=360
hyperion.imageCanonicalGradient(centerX, centerY, angle, rainbowColors)
hyperion.imageShow()
time.sleep(sleepTime)

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "candle.py", "script" : "candle.py",
"title":"edt_eff_candle_header_title", "title":"edt_eff_candle_header",
"required":true, "required":true,
"properties":{ "properties":{
"candles": { "candles": {
"type": "string", "type": "string",
"title":"edt_eff_whichleds_title", "title":"edt_eff_whichleds",
"enum" : ["all","all-together","list"], "enum" : ["all","all-together","list"],
"default" : "all", "default" : "all",
"options" : { "options" : {
@ -16,13 +16,18 @@
}, },
"ledlist": { "ledlist": {
"type": "string", "type": "string",
"title":"edt_eff_ledlist_title", "title":"edt_eff_ledlist",
"default" : "1,11,21", "default" : "1,11,21",
"options": {
"dependencies": {
"candles": "list"
}
},
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"color": { "color": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,138,0], "default": [255,138,0],
"items" : { "items" : {
@ -35,8 +40,8 @@
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"colorShift": { "colorShift": {
"type": "number", "type": "integer",
"title":"edt_eff_colorshift_title", "title":"edt_eff_colorshift",
"default": 1, "default": 1,
"minimum" : 0, "minimum" : 0,
"maximum": 30, "maximum": 30,
@ -44,8 +49,8 @@
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"brightness": { "brightness": {
"type": "number", "type": "integer",
"title":"edt_eff_brightness_title", "title":"edt_eff_brightness",
"default": 100, "default": 100,
"minimum" : 1, "minimum" : 1,
"maximum": 100, "maximum": 100,
@ -55,7 +60,7 @@
}, },
"sleepTime": { "sleepTime": {
"type": "number", "type": "number",
"title":"edt_eff_sleeptime_title", "title":"edt_eff_sleeptime",
"default": 0.15, "default": 0.15,
"minimum" : 0.01, "minimum" : 0.01,
"maximum": 1, "maximum": 1,

View File

@ -1,90 +0,0 @@
{
"type": "object",
"script": "clock.py",
"title": "edt_eff_clock_header_title",
"required": true,
"properties": {
"offset": {
"type": "integer",
"title": "edt_eff_offset_title",
"default": 0,
"append": "edt_append_leds",
"propertyOrder": 1
},
"hour-color": {
"type": "array",
"title": "edt_eff_colorHour_title",
"format": "colorpicker",
"default": [255, 0, 0],
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder": 2
},
"minute-color": {
"type": "array",
"title": "edt_eff_colorMinute_title",
"format": "colorpicker",
"default": [0, 255, 0],
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder": 3
},
"second-color": {
"type": "array",
"title": "edt_eff_colorSecond_title",
"format": "colorpicker",
"default": [0, 0, 255],
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder": 4
},
"hour-margin": {
"type": "integer",
"title": "edt_eff_hourMargin_title",
"default": 2,
"propertyOrder" : 5
},
"minute-margin": {
"type": "integer",
"title": "edt_eff_minuteMargin_title",
"default": 1,
"propertyOrder" : 6
},
"second-margin": {
"type": "integer",
"title": "edt_eff_secondMargin_title",
"default": 0,
"propertyOrder" : 7
},
"marker-color": {
"type": "array",
"title":"edt_eff_colorMarker_title",
"format":"colorpicker",
"default": [255,255,255],
"items" : {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder" : 8
}
},
"additionalProperties": false
}

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "fade.py", "script" : "fade.py",
"title":"edt_eff_fade_header_title", "title":"edt_eff_fade_header",
"required":true, "required":true,
"properties":{ "properties":{
"color-start": { "color-start": {
"type": "array", "type": "array",
"title":"edt_eff_colorstart_title", "title":"edt_eff_colorstart",
"format":"colorpicker", "format":"colorpicker",
"default": [255,174,11], "default": [255,174,11],
"items" : { "items" : {
@ -21,7 +21,7 @@
}, },
"color-start-time": { "color-start-time": {
"type": "integer", "type": "integer",
"title":"edt_eff_colorstarttime_title", "title":"edt_eff_colorstarttime",
"default": 1000, "default": 1000,
"minimum" : 0, "minimum" : 0,
"append" : "edt_append_ms", "append" : "edt_append_ms",
@ -29,7 +29,7 @@
}, },
"fade-in-time": { "fade-in-time": {
"type": "integer", "type": "integer",
"title":"edt_eff_fadeintime_title", "title":"edt_eff_fadeintime",
"default": 2000, "default": 2000,
"minimum" : 0, "minimum" : 0,
"append" : "edt_append_ms", "append" : "edt_append_ms",
@ -37,7 +37,7 @@
}, },
"color-end": { "color-end": {
"type": "array", "type": "array",
"title":"edt_eff_colorend_title", "title":"edt_eff_colorend",
"format":"colorpicker", "format":"colorpicker",
"default": [100,100,100], "default": [100,100,100],
"items" : { "items" : {
@ -51,7 +51,7 @@
}, },
"color-end-time": { "color-end-time": {
"type": "integer", "type": "integer",
"title":"edt_eff_colorendtime_title", "title":"edt_eff_colorendtime",
"default": 1000, "default": 1000,
"minimum" : 0, "minimum" : 0,
"append" : "edt_append_ms", "append" : "edt_append_ms",
@ -59,7 +59,7 @@
}, },
"fade-out-time": { "fade-out-time": {
"type": "integer", "type": "integer",
"title":"edt_eff_fadeouttime_title", "title":"edt_eff_fadeouttime",
"default": 2000, "default": 2000,
"minimum" : 0, "minimum" : 0,
"append" : "edt_append_ms", "append" : "edt_append_ms",
@ -67,13 +67,13 @@
}, },
"repeat-count": { "repeat-count": {
"type": "integer", "type": "integer",
"title":"edt_eff_repeatcount_title", "title":"edt_eff_repeatcount",
"default": 0, "default": 0,
"propertyOrder" : 7 "propertyOrder" : 7
}, },
"maintain-end-color": { "maintain-end-color": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_maintain_end_color_title", "title":"edt_eff_maintain_end_color",
"default": true, "default": true,
"propertyOrder" : 8 "propertyOrder" : 8
} }

View File

@ -0,0 +1,27 @@
{
"type":"object",
"script" : "flag.py",
"title":"edt_eff_flag_header",
"required":true,
"properties":{
"countries": {
"type": "array",
"title" : "edt_eff_countries",
"uniqueItems": true,
"items": {
"type": "string",
"enum": ["de","at","fr","be","it","es","bg","ee","dk","fi","hu","ie","lv","lt","lu","mt","nl","pl","pt","ro","sl","se","ch"]
},
"propertyOrder" : 1
},
"switch-time": {
"type": "integer",
"title":"edt_eff_interval",
"default": 5,
"minimum" : 1,
"append" : "edt_append_s",
"propertyOrder" : 2
}
},
"additionalProperties": false
}

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "knight-rider.py", "script" : "knight-rider.py",
"title":"edt_eff_knightrider_header_title", "title":"edt_eff_knightrider_header",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,7 +20,7 @@
}, },
"speed": { "speed": {
"type": "number", "type": "number",
"title":"edt_eff_speed_title", "title":"edt_eff_speed",
"default": 1.0, "default": 1.0,
"minimum": 0.1, "minimum": 0.1,
"step" : 0.1, "step" : 0.1,
@ -28,7 +28,7 @@
}, },
"fadeFactor": { "fadeFactor": {
"type": "number", "type": "number",
"title":"edt_eff_fadefactor_title", "title":"edt_eff_fadefactor",
"default": 0.7, "default": 0.7,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 0.9, "maximum" : 0.9,

View File

@ -1,14 +1,123 @@
{ {
"type":"object", "type":"object",
"script" : "light-clock.py", "script" : "light-clock.py",
"title":"edt_eff_lightclock_header_title", "title":"edt_eff_lightclock_header",
"required":true, "required":true,
"properties":{ "properties":{
"hour-color": {
"type": "array",
"title": "edt_eff_colorHour",
"format": "colorpicker",
"default": [0, 0, 255],
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder": 1
},
"minute-color": {
"type": "array",
"title": "edt_eff_colorMinute",
"format": "colorpicker",
"default": [0, 255, 0],
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder": 2
},
"second-color": {
"type": "array",
"title": "edt_eff_colorSecond",
"format": "colorpicker",
"default": [255, 0, 0],
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder": 3
},
"background-color": {
"type": "array",
"title": "edt_eff_backgroundColor",
"format": "colorpicker",
"default": [0, 0, 0],
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"propertyOrder": 4
},
"show_seconds": { "show_seconds": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_showseconds_title", "title":"edt_eff_showseconds",
"default": true, "default": true,
"propertyOrder" : 1 "propertyOrder" : 5
},
"marker-enabled": {
"type": "boolean",
"title": "edt_eff_markerEnable",
"default": false,
"propertyOrder" : 6
},
"marker-depth": {
"type": "integer",
"title": "edt_eff_markerDepth",
"default": 5,
"minimum" : 1,
"maximum" : 50,
"append" : "edt_append_percent",
"options": {
"dependencies": {
"marker-enabled": true
}
},
"propertyOrder" : 7
},
"marker-width": {
"type": "integer",
"title": "edt_eff_markerWidth",
"default": 5,
"minimum" : 1,
"maximum" : 25,
"append" : "edt_append_percent",
"options": {
"dependencies": {
"marker-enabled": true
}
},
"propertyOrder" : 8
},
"marker-color": {
"type": "array",
"title":"edt_eff_colorMarker",
"format":"colorpicker",
"default": [255,255,255],
"items" : {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3,
"options": {
"dependencies": {
"marker-enabled": true
}
},
"propertyOrder" : 9
} }
}, },
"additionalProperties": false "additionalProperties": false

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "mood-blobs.py", "script" : "mood-blobs.py",
"title":"edt_eff_moodblobs_header_title", "title":"edt_eff_moodblobs_header",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,14 +20,14 @@
}, },
"blobs": { "blobs": {
"type": "integer", "type": "integer",
"title":"edt_eff_blobcount_title", "title":"edt_eff_blobcount",
"default": 5, "default": 5,
"minimum" : 1, "minimum" : 1,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"rotationTime": { "rotationTime": {
"type": "number", "type": "number",
"title":"edt_eff_rotationtime_title", "title":"edt_eff_rotationtime",
"default": 20.0, "default": 20.0,
"minimum" : 1.0, "minimum" : 1.0,
"append" : "edt_append_s", "append" : "edt_append_s",
@ -35,53 +35,68 @@
}, },
"hueChange": { "hueChange": {
"type": "number", "type": "number",
"title":"edt_eff_huechange_title", "title":"edt_eff_huechange",
"default": 60.0, "default": 60.0,
"minimum" : 1.0, "minimum" : 1.0,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_reversedirection_title", "title":"edt_eff_reversedirection",
"default": false, "default": false,
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"colorRandom": { "colorRandom": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_colorrandom_title", "title":"edt_eff_colorrandom",
"default": false, "default": false,
"propertyOrder" : 6 "propertyOrder" : 6
}, },
"baseChange": { "baseChange": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_basecolorchange_title", "title":"edt_eff_basecolorchange",
"default": false, "default": false,
"propertyOrder" : 7 "propertyOrder" : 7
}, },
"baseColorRangeLeft": { "baseColorRangeLeft": {
"type": "number", "type": "number",
"title":"edt_eff_basecolorrangeleft_title", "title":"edt_eff_basecolorrangeleft",
"default": 0.0, "default": 0.0,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 360.0, "maximum" : 360.0,
"append" : "edt_append_degree", "append" : "edt_append_degree",
"options": {
"dependencies": {
"baseChange": true
}
},
"propertyOrder" : 9 "propertyOrder" : 9
}, },
"baseColorRangeRight": { "baseColorRangeRight": {
"type": "number", "type": "number",
"title":"edt_eff_basecolorrangeright_title", "title":"edt_eff_basecolorrangeright",
"default": 360.0, "default": 360.0,
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 360.0, "maximum" : 360.0,
"append" : "edt_append_degree", "append" : "edt_append_degree",
"options": {
"dependencies": {
"baseChange": true
}
},
"propertyOrder" : 10 "propertyOrder" : 10
}, },
"baseColorChangeRate": { "baseColorChangeRate": {
"type": "number", "type": "number",
"title":"edt_eff_basecolorchangerate_title", "title":"edt_eff_basecolorchangerate",
"default": 2.0, "default": 2.0,
"minimum" : 0.0, "minimum" : 0.0,
"append" : "edt_append_sdegree", "append" : "edt_append_sdegree",
"options": {
"dependencies": {
"baseChange": true
}
},
"propertyOrder" : 8 "propertyOrder" : 8
} }
}, },

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "pacman.py", "script" : "pacman.py",
"title":"edt_eff_pacman_header_title", "title":"edt_eff_pacman_header",
"required":true, "required":true,
"properties":{ "properties":{
"rotationTime": { "rotationTime": {
"type": "integer", "type": "integer",
"title":"edt_eff_rotationtime_title", "title":"edt_eff_rotationtime",
"default": 5, "default": 5,
"step" : 0.1, "step" : 0.1,
"minimum": 1, "minimum": 1,
@ -15,7 +15,7 @@
}, },
"margin-pos": { "margin-pos": {
"type": "number", "type": "number",
"title":"edt_eff_margin_title", "title":"edt_eff_margin",
"default": 1.0, "default": 1.0,
"step" : 0.1, "step" : 0.1,
"minimum": 1.0, "minimum": 1.0,

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "police.py", "script" : "police.py",
"title":"edt_eff_police_header_title", "title":"edt_eff_police_header",
"required":true, "required":true,
"properties":{ "properties":{
"color_one": { "color_one": {
"type": "array", "type": "array",
"title":"edt_eff_colorone_title", "title":"edt_eff_colorone",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,7 +20,7 @@
}, },
"color_two": { "color_two": {
"type": "array", "type": "array",
"title":"edt_eff_colortwo_title", "title":"edt_eff_colortwo",
"format":"colorpicker", "format":"colorpicker",
"default": [0,0,255], "default": [0,0,255],
"items" : { "items" : {
@ -34,14 +34,14 @@
}, },
"colors_count": { "colors_count": {
"type": "integer", "type": "integer",
"title":"edt_eff_colorcount_title", "title":"edt_eff_colorcount",
"default": 10, "default": 10,
"minimum" : 0, "minimum" : 0,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"edt_eff_rotationtime_title", "title":"edt_eff_rotationtime",
"default": 2.0, "default": 2.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "edt_append_s", "append" : "edt_append_s",
@ -49,7 +49,7 @@
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_reversedirection_title", "title":"edt_eff_reversedirection",
"default": false, "default": false,
"propertyOrder" : 5 "propertyOrder" : 5
} }

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "rainbow-mood.py", "script" : "rainbow-mood.py",
"title":"edt_eff_rainbowmood_header_title", "title":"edt_eff_rainbowmood_header",
"required":true, "required":true,
"properties":{ "properties":{
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"edt_eff_rotationtime_title", "title":"edt_eff_rotationtime",
"default": 60.0, "default": 60.0,
"minimum" : 1.0, "minimum" : 1.0,
"append" : "edt_append_s", "append" : "edt_append_s",
@ -14,7 +14,7 @@
}, },
"brightness": { "brightness": {
"type": "number", "type": "number",
"title":"edt_eff_brightness_title", "title":"edt_eff_brightness",
"default": 100, "default": 100,
"minimum" : 1, "minimum" : 1,
"maximum" : 100, "maximum" : 100,
@ -24,7 +24,7 @@
}, },
"saturation": { "saturation": {
"type": "number", "type": "number",
"title":"edt_eff_saturation_title", "title":"edt_eff_saturation",
"default": 100, "default": 100,
"minimum" : 1, "minimum" : 1,
"maximum" : 100, "maximum" : 100,
@ -34,7 +34,7 @@
}, },
"reverse": { "reverse": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_reversedirection_title", "title":"edt_eff_reversedirection",
"default": false, "default": false,
"propertyOrder" : 4 "propertyOrder" : 4
} }

View File

@ -1,41 +0,0 @@
{
"type":"object",
"script" : "rainbow-swirl.py",
"title":"edt_eff_rainbowswirl_header_title",
"required":true,
"properties":{
"rotation-time": {
"type": "number",
"title":"edt_eff_rotationtime_title",
"default": 10.0,
"minimum" : 0.1,
"append" : "edt_append_s",
"propertyOrder" : 1
},
"center_x": {
"type": "number",
"title":"edt_eff_centerx_title",
"default": 0.5,
"minimum" : 0.0,
"maximum" : 2.0,
"step" : 0.1,
"propertyOrder" : 2
},
"center_y": {
"type": "number",
"title":"edt_eff_centery_title",
"default": 0.5,
"minimum" : 0.0,
"maximum" : 2.0,
"step" : 0.1,
"propertyOrder" : 3
},
"reverse": {
"type": "boolean",
"title":"edt_eff_reversedirection_title",
"default": false,
"propertyOrder" : 4
}
},
"additionalProperties": false
}

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "random.py", "script" : "random.py",
"title":"edt_eff_random_header_title", "title":"edt_eff_random_header",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"edt_eff_speed_title", "title":"edt_eff_speed",
"default": 1000, "default": 1000,
"minimum" : 10, "minimum" : 10,
"append" : "edt_append_ms", "append" : "edt_append_ms",
@ -14,7 +14,7 @@
}, },
"saturation": { "saturation": {
"type": "number", "type": "number",
"title":"edt_eff_saturation_title", "title":"edt_eff_saturation",
"default": 1.0, "default": 1.0,
"minimum" : 0.1, "minimum" : 0.1,
"maximum" : 1.0, "maximum" : 1.0,

View File

@ -1,19 +1,19 @@
{ {
"type":"object", "type":"object",
"script" : "running_dots.py", "script" : "running_dots.py",
"title":"edt_eff_runningdots_header_title", "title":"edt_eff_runningdots_header",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"edt_eff_speed_title", "title":"edt_eff_speed",
"default": 1.5, "default": 1.5,
"minimum" : 0.1, "minimum" : 0.1,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"colorLevel": { "colorLevel": {
"type": "integer", "type": "integer",
"title":"edt_eff_colorevel_title", "title":"edt_eff_colorevel",
"default": 220, "default": 220,
"minimium" : 0, "minimium" : 0,
"maximum" : 255, "maximum" : 255,
@ -21,7 +21,7 @@
}, },
"whiteLevel": { "whiteLevel": {
"type": "integer", "type": "integer",
"title":"edt_eff_whitelevel_title", "title":"edt_eff_whitelevel",
"default": 0, "default": 0,
"minimium" : 0, "minimium" : 0,
"maximum" : 254, "maximum" : 254,

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "shutdown.py", "script" : "shutdown.py",
"title":"edt_eff_systemshutdown_header_title", "title":"edt_eff_systemshutdown_header",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"edt_eff_speed_title", "title":"edt_eff_speed",
"default": 1.0, "default": 1.0,
"minimum" : 0.3, "minimum" : 0.3,
"step" : 0.1, "step" : 0.1,
@ -14,7 +14,7 @@
}, },
"alarm-color": { "alarm-color": {
"type": "array", "type": "array",
"title":"edt_eff_alarmcolor_title", "title":"edt_eff_alarmcolor",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -28,7 +28,7 @@
}, },
"post-color": { "post-color": {
"type": "array", "type": "array",
"title":"edt_eff_postcolor_title", "title":"edt_eff_postcolor",
"format" : "colorpicker", "format" : "colorpicker",
"default": [255,174,11], "default": [255,174,11],
"items" : { "items" : {
@ -42,19 +42,19 @@
}, },
"initial-blink": { "initial-blink": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_initial_blink_title", "title":"edt_eff_initial_blink",
"default": true, "default": true,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"set-post-color": { "set-post-color": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_set_post_color_title", "title":"edt_eff_set_post_color",
"default": true, "default": true,
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"shutdown-enabled": { "shutdown-enabled": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_enableshutdown_title", "title":"edt_eff_enableshutdown",
"default": false, "default": false,
"propertyOrder" : 6 "propertyOrder" : 6
} }

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "snake.py", "script" : "snake.py",
"title":"edt_eff_snake_header_title", "title":"edt_eff_snake_header",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -20,7 +20,7 @@
}, },
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"edt_eff_rotationtime_title", "title":"edt_eff_rotationtime",
"default": 12.0, "default": 12.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "edt_append_s", "append" : "edt_append_s",
@ -28,7 +28,7 @@
}, },
"percentage": { "percentage": {
"type": "integer", "type": "integer",
"title":"edt_eff_length_title", "title":"edt_eff_length",
"default": 10, "default": 10,
"append" : "edt_append_percent", "append" : "edt_append_percent",
"propertyOrder" : 3 "propertyOrder" : 3

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "sparks.py", "script" : "sparks.py",
"title":"edt_eff_sparks_header_title", "title":"edt_eff_sparks_header",
"required":true, "required":true,
"properties":{ "properties":{
"color": { "color": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {
@ -16,11 +16,16 @@
}, },
"minItems": 3, "minItems": 3,
"maxItems": 3, "maxItems": 3,
"options": {
"dependencies": {
"random-color": false
}
},
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"rotation-time": { "rotation-time": {
"type": "number", "type": "number",
"title":"edt_eff_rotationtime_title", "title":"edt_eff_rotationtime",
"default": 2.0, "default": 2.0,
"minimum" : 0.1, "minimum" : 0.1,
"append" : "edt_append_s", "append" : "edt_append_s",
@ -28,40 +33,36 @@
}, },
"sleep-time": { "sleep-time": {
"type": "number", "type": "number",
"title":"edt_eff_sleeptime_title", "title":"edt_eff_sleeptime",
"default": 0.05, "default": 0.05,
"minimum" : 0.01, "minimum" : 0.01,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"brightness": { "brightness": {
"type": "number", "type": "integer",
"title":"edt_eff_brightness_title", "title":"edt_eff_brightness",
"default": 100, "default": 100,
"minimum" : 1, "minimum" : 0,
"maximum" : 100,
"step" : 10, "step" : 10,
"append" : "edt_append_percent", "append" : "edt_append_percent",
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"saturation": { "saturation": {
"type": "number", "type": "integer",
"title":"edt_eff_saturation_title", "title":"edt_eff_saturation",
"default": 100, "default": 100,
"minimum" : 1, "minimum" : 0,
"maximum" : 100,
"step" : 10, "step" : 10,
"append" : "edt_append_percent", "append" : "edt_append_percent",
"propertyOrder" : 5 "propertyOrder" : 5
}, },
"reverse": {
"type": "boolean",
"title":"edt_eff_reversedirection_title",
"default": false,
"propertyOrder" : 6
},
"random-color": { "random-color": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_colorrandom_title", "title":"edt_eff_colorrandom",
"default": false, "default": false,
"propertyOrder" : 7 "propertyOrder" : 6
} }
}, },
"additionalProperties": false "additionalProperties": false

View File

@ -0,0 +1,151 @@
{
"type":"object",
"script" : "swirl.py",
"title":"edt_eff_swirl_header",
"required":true,
"properties":{
"rotation-time": {
"type": "number",
"title":"edt_eff_rotationtime",
"default": 10.0,
"minimum" : 0.1,
"append" : "edt_append_s",
"propertyOrder" : 1
},
"random-center": {
"type": "boolean",
"title":"edt_eff_randomCenter",
"default": false,
"propertyOrder" : 2
},
"center_x": {
"type": "number",
"title":"edt_eff_centerx",
"default": 0.5,
"minimum" : 0.0,
"maximum" : 2.0,
"step" : 0.1,
"options": {
"dependencies": {
"random-center": false
}
},
"propertyOrder" : 3
},
"center_y": {
"type": "number",
"title":"edt_eff_centery",
"default": 0.5,
"minimum" : 0.0,
"maximum" : 2.0,
"step" : 0.1,
"options": {
"dependencies": {
"random-center": false
}
},
"propertyOrder" : 4
},
"reverse": {
"type": "boolean",
"title":"edt_eff_reversedirection",
"default": false,
"propertyOrder" : 5
},
"custom-colors": {
"type": "array",
"title":"edt_eff_customColor",
"items" : {
"type": "array",
"title" : "edt_eff_color",
"format":"colorpicker",
"default" : [255,0,0],
"items":{
"type":"integer",
"minimum": 0,
"maximum": 255
},
"minItems": 3,
"maxItems": 3
},
"propertyOrder" : 6
},
"enable-second": {
"type": "boolean",
"title":"edt_eff_enableSecondSwirl",
"default": false,
"propertyOrder" : 7
},
"random-center2": {
"type": "boolean",
"title":"edt_eff_randomCenter",
"default": false,
"options": {
"dependencies": {
"enable-second": true
}
},
"propertyOrder" : 8
},
"center_x2": {
"type": "number",
"title":"edt_eff_centerx",
"default": 0.5,
"minimum" : 0.0,
"maximum" : 2.0,
"step" : 0.1,
"options": {
"dependencies": {
"enable-second": true,
"random-center2": false
}
},
"propertyOrder" : 9
},
"center_y2": {
"type": "number",
"title":"edt_eff_centery",
"default": 0.5,
"minimum" : 0.0,
"maximum" : 2.0,
"step" : 0.1,
"options": {
"dependencies": {
"enable-second": true,
"random-center2": false
}
},
"propertyOrder" : 10
},
"reverse2": {
"type": "boolean",
"title":"edt_eff_reversedirection",
"default": true,
"options": {
"dependencies": {
"enable-second": true
}
},
"propertyOrder" : 11
},
"custom-colors2": {
"type": "array",
"title":"edt_eff_customColor",
"items" : {
"type": "array",
"title" : "edt_eff_color",
"format":"colorpickerRGBA",
"default" : [255,0,0,0.5],
"minItems": 4,
"maxItems": 4
},
"options": {
"dependencies": {
"enable-second": true
}
},
"propertyOrder" : 12
}
},
"additionalProperties": false
}

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "traces.py", "script" : "traces.py",
"title":"edt_eff_traces_header_title", "title":"edt_eff_traces_header",
"required":true, "required":true,
"properties":{ "properties":{
"speed": { "speed": {
"type": "number", "type": "number",
"title":"edt_eff_speed_title", "title":"edt_eff_speed",
"default": 1.0, "default": 1.0,
"minimum" : 0.1, "minimum" : 0.1,
"propertyOrder" : 1 "propertyOrder" : 1

View File

@ -1,40 +1,40 @@
{ {
"type":"object", "type":"object",
"script" : "trails.py", "script" : "trails.py",
"title":"edt_eff_trails_header_title", "title":"edt_eff_trails_header",
"required":true, "required":true,
"properties":{ "properties":{
"min_len": { "min_len": {
"type": "integer", "type": "integer",
"title":"edt_eff_min_len_title", "title":"edt_eff_min_len",
"default": 2, "default": 2,
"minimum" : 1, "minimum" : 1,
"propertyOrder" : 1 "propertyOrder" : 1
}, },
"max_len": { "max_len": {
"type": "integer", "type": "integer",
"title":"edt_eff_max_len_title", "title":"edt_eff_max_len",
"default": 7, "default": 7,
"minimum" : 1, "minimum" : 1,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"height": { "height": {
"type": "integer", "type": "integer",
"title":"edt_eff_height_title", "title":"edt_eff_height",
"default": 8, "default": 8,
"minimum" : 1, "minimum" : 1,
"propertyOrder" : 3 "propertyOrder" : 3
}, },
"trails": { "trails": {
"type": "integer", "type": "integer",
"title":"edt_eff_count_title", "title":"edt_eff_count",
"default": 3, "default": 3,
"minimum" : 1, "minimum" : 1,
"propertyOrder" : 4 "propertyOrder" : 4
}, },
"speed": { "speed": {
"type": "integer", "type": "integer",
"title":"edt_eff_speed_title", "title":"edt_eff_speed",
"default": 100, "default": 100,
"minimum" : 10, "minimum" : 10,
"append" : "edt_append_ms", "append" : "edt_append_ms",
@ -42,13 +42,13 @@
}, },
"random": { "random": {
"type": "boolean", "type": "boolean",
"title":"edt_eff_colorrandom_title", "title":"edt_eff_colorrandom",
"default": false, "default": false,
"propertyOrder" : 6 "propertyOrder" : 6
}, },
"color": { "color": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {

View File

@ -1,12 +1,12 @@
{ {
"type":"object", "type":"object",
"script" : "x-mas.py", "script" : "x-mas.py",
"title":"edt_eff_x-mas_header_title", "title":"edt_eff_x-mas_header",
"required":true, "required":true,
"properties":{ "properties":{
"sleepTime": { "sleepTime": {
"type": "integer", "type": "integer",
"title":"edt_eff_sleeptime_title", "title":"edt_eff_sleeptime",
"default": 1000, "default": 1000,
"minimum" : 100, "minimum" : 100,
"append" : "edt_append_ms", "append" : "edt_append_ms",
@ -14,14 +14,14 @@
}, },
"length": { "length": {
"type": "integer", "type": "integer",
"title":"edt_eff_length_title", "title":"edt_eff_length",
"default": 1, "default": 1,
"minimum" : 1, "minimum" : 1,
"propertyOrder" : 2 "propertyOrder" : 2
}, },
"color1": { "color1": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,255,255], "default": [255,255,255],
"items" : { "items" : {
@ -35,7 +35,7 @@
}, },
"color2": { "color2": {
"type": "array", "type": "array",
"title":"edt_eff_color_title", "title":"edt_eff_color",
"format":"colorpicker", "format":"colorpicker",
"default": [255,0,0], "default": [255,0,0],
"items" : { "items" : {

View File

@ -1,14 +0,0 @@
{
"name" : "Sparks Color",
"script" : "sparks.py",
"args" :
{
"rotation-time" : 3.0,
"sleep-time" : 0.05,
"brightness" : 1.0,
"saturation" : 1.0,
"reverse" : false,
"color" : [255,255,255],
"random-color" : true
}
}

View File

@ -7,7 +7,6 @@
"sleep-time" : 0.05, "sleep-time" : 0.05,
"brightness" : 100, "brightness" : 100,
"saturation" : 100, "saturation" : 100,
"reverse" : false,
"color" : [255,255,255], "color" : [255,255,255],
"random-color" : false "random-color" : false
} }

View File

@ -5,7 +5,6 @@ rotationTime = float(hyperion.args.get('rotation-time', 3.0))
sleepTime = float(hyperion.args.get('sleep-time', 0.05)) sleepTime = float(hyperion.args.get('sleep-time', 0.05))
brightness = float(hyperion.args.get('brightness', 100))/100.0 brightness = float(hyperion.args.get('brightness', 100))/100.0
saturation = float(hyperion.args.get('saturation', 100))/100.0 saturation = float(hyperion.args.get('saturation', 100))/100.0
reverse = bool(hyperion.args.get('reverse', False))
color = list(hyperion.args.get('color', (255,255,255))) color = list(hyperion.args.get('color', (255,255,255)))
randomColor = bool(hyperion.args.get('random-color', False)) randomColor = bool(hyperion.args.get('random-color', False))
@ -24,7 +23,7 @@ while not hyperion.abort():
if random.random() < 0.005: if random.random() < 0.005:
if randomColor: if randomColor:
rgb = colorsys.hsv_to_rgb(random.random(), 1, 1) rgb = colorsys.hsv_to_rgb(random.random(), saturation, brightness)
for n in range(3): for n in range(3):
color[n] = int(rgb[n]*255) color[n] = int(rgb[n]*255)

148
effects/swirl.py Normal file
View File

@ -0,0 +1,148 @@
import hyperion, time, math, random
# Convert x/y (0.0 - 1.0) point to proper int values based on Hyperion image width/height
# Or get a random value
# @param bool rand Randomize point if true
# @param float x Point at the x axis between 0.0-1.0
# @param float y Point at the y axis between 0.0-1.0
# @return Tuple with (x,y) as Integer
def getPoint(rand = True ,x = 0.5, y = 0.5):
if rand:
x = random.uniform(0.0, 1.0)
y = random.uniform(0.0, 1.0)
x = int(round(x*hyperion.imageWidth()))
y = int(round(y*hyperion.imageHeight()))
return (x,y)
# Returns the required sleep time for a interval function based on rotationtime and steps
# Adapts also to led device latchTime if required
# @param float rt RotationTime in seconds (time for one ration, based on steps)
# @param int steps The steps it should calc the rotation time
# @return Tuple with (x,y) as Integer
def getSTime(rt, steps = 360):
rt = float(rt)
sleepTime = max(0.1, rt) / steps
# adapt sleeptime to hardware
minStepTime= float(hyperion.latchTime)/1000.0
if minStepTime > sleepTime:
sleepTime = minStepTime
return sleepTime
# Creates a PRGBA bytearray gradient based on provided colors (RGB or RGBA (0-255, 0-1 for alpha)), the color stop positions are calculated based on color count. Requires at least 2 colors!
# @param tuple cc Colors in a tuple of RGB or RGBA
# @param bool closeCircle If True use last color as first color
# @return bytearray A bytearray of RGBA for hyperion.image*Gradient functions
def buildGradient(cc, closeCircle = True):
if len(cc) > 1:
withAlpha = False
posfac = int(255/len(cc))
ba = bytearray()
pos = 0
if len(cc[0]) == 4:
withAlpha = True
for c in cc:
if withAlpha:
alpha = int(c[3]*255)
else:
alpha = 255
pos += posfac
ba += bytearray([pos,c[0],c[1],c[2],alpha])
if closeCircle:
# last color as first color
lC = cc[-1]
if withAlpha:
alpha = int(lC[3]*255)
else:
alpha = 255
ba += bytearray([0,lC[0],lC[1],lC[2],alpha])
return ba
def rotateAngle( increment = 1):
global angle
angle += increment
if angle > 360: angle=0
if angle < 0: angle=360
return angle
def rotateAngle2( increment = 1):
global angle2
angle2 += increment
if angle2 > 360: angle2=0
if angle2 < 0: angle2=360
return angle2
# set minimum image size - must be done asap
hyperion.imageMinSize(64,64)
iW = hyperion.imageWidth()
iH = hyperion.imageHeight()
# Get the parameters
rotationTime = float(hyperion.args.get('rotation-time', 10.0))
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))
randomCenter = bool(hyperion.args.get('random-center', False))
custColors = hyperion.args.get('custom-colors', ((255,0,0),(0,255,0),(0,0,255)))
enableSecond = bool(hyperion.args.get('enable-second', False))
#rotationTime2 = float(hyperion.args.get('rotation-time2', 5.0))
reverse2 = bool(hyperion.args.get('reverse2', True))
centerX2 = float(hyperion.args.get('center_x2', 0.5))
centerY2 = float(hyperion.args.get('center_y2', 0.5))
randomCenter2 = bool(hyperion.args.get('random-center2', False))
custColors2 = hyperion.args.get('custom-colors2', ((255,255,255,0),(0,255,255,0),(255,255,255,1),(0,255,255,0),(0,255,255,0),(0,255,255,0),(255,255,255,1),(0,255,255,0),(0,255,255,0),(0,255,255,0),(255,255,255,1),(0,255,255,0)))
# process parameters
pointS1 = getPoint(randomCenter ,centerX, centerY)
pointS2 = getPoint(randomCenter2 ,centerX2, centerY2)
sleepTime = getSTime(rotationTime)
#sleepTime2 = getSTime(rotationTime2)
angle = 0
angle2 = 0
S2 = False
increment = -1 if reverse else 1
increment2 = -1 if reverse2 else 1
if len(custColors) > 1:
baS1 = buildGradient(custColors)
else:
baS1 = bytearray([
0 ,255,0 ,0, 255,
25 ,255,230,0, 255,
63 ,255,255,0, 255,
100,0 ,255,0, 255,
127,0 ,255,200, 255,
159,0 ,255,255, 255,
191,0 ,0 ,255, 255,
224,255,0 ,255, 255,
255,255,0 ,127, 255,
])
# check if the second swirl should be build
if enableSecond and len(custColors2) > 1:
S2 = True
baS2 = buildGradient(custColors2)
# effect loop
while not hyperion.abort():
angle += increment
if angle > 360: angle=0
if angle < 0: angle=360
angle2 += increment2
if angle2 > 360: angle2=0
if angle2 < 0: angle2=360
hyperion.imageConicalGradient(pointS1[0], pointS1[1], angle, baS1)
if S2:
hyperion.imageConicalGradient(pointS2[0], pointS2[1], angle2, baS2)
hyperion.imageShow()
time.sleep(sleepTime)

View File

@ -5,12 +5,13 @@ import random
min_len = int(hyperion.args.get('min_len', 3)) min_len = int(hyperion.args.get('min_len', 3))
max_len = int(hyperion.args.get('max_len', 3)) max_len = int(hyperion.args.get('max_len', 3))
height = int(hyperion.args.get('height', 8)) #iHeight = int(hyperion.args.get('iHeight', 8))
trails = int(hyperion.args.get('int', 8)) trails = int(hyperion.args.get('int', 8))
sleepTime = float(hyperion.args.get('speed', 1)) / 1000.0 sleepTime = float(hyperion.args.get('speed', 1)) / 1000.0
color = list(hyperion.args.get('color', (255,255,255))) color = list(hyperion.args.get('color', (255,255,255)))
randomise = bool(hyperion.args.get('random', False)) randomise = bool(hyperion.args.get('random', False))
whidth = hyperion.ledCount / height iWidth = hyperion.imageWidth()
iHeight = hyperion.imageHeight()
class trail: class trail:
def __init__(self): def __init__(self):
@ -48,17 +49,17 @@ for i in range(trails):
r = {'exec': trail()} r = {'exec': trail()}
if randomise: if randomise:
col = (random.uniform(0.1, 1.0), random.uniform(0.1, 1.0), random.uniform(0.1, 1.0)) col = (random.uniform(0.0, 1.0),1,1)
else: else:
col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0) col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0)
r['exec'].start( r['exec'].start(
random.randint(0, whidth), random.randint(0, iWidth),
random.randint(0, height), random.randint(0, iHeight),
random.uniform(0.2, 0.8), random.uniform(0.2, 0.8),
col, col,
random.randint(min_len, max_len), random.randint(min_len, max_len),
height iHeight
) )
tr.append(r) tr.append(r)
@ -70,21 +71,21 @@ while not hyperion.abort():
r['x'], r['data'], c = r['exec'].getdata() r['x'], r['data'], c = r['exec'].getdata()
if c: if c:
if randomise: if randomise:
col = (random.uniform(0.1, 1.0), random.uniform(0.1, 1.0), random.uniform(0.1, 1.0)) col = (random.uniform(0.0, 1.0),1,1)
else: else:
col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0) col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0)
r['exec'].start( r['exec'].start(
random.randint(0, whidth), random.randint(0, iWidth),
random.randint(0, height), random.randint(0, iHeight),
random.uniform(0.2, 0.8), random.uniform(0.2, 0.8),
col, col,
random.randint(min_len, max_len), random.randint(min_len, max_len),
height iHeight
) )
for y in range(0, height): for y in range(0, iHeight):
for x in range(0, whidth): for x in range(0, iWidth):
for r in tr: for r in tr:
if x == r['x']: if x == r['x']:
led = bytearray(r['data'][y]) led = bytearray(r['data'][y])
@ -92,6 +93,6 @@ while not hyperion.abort():
led = bytearray((0,0,0)) led = bytearray((0,0,0))
ledData += led ledData += led
hyperion.setImage(whidth,height,ledData) hyperion.setImage(iWidth,iHeight,ledData)
time.sleep(sleepTime) time.sleep(sleepTime)

View File

@ -14,6 +14,7 @@
#include <QJsonValue> #include <QJsonValue>
#include <QJsonArray> #include <QJsonArray>
#include <QTimer> #include <QTimer>
#include <QFileSystemWatcher>
// hyperion-utils includes // hyperion-utils includes
#include <utils/Image.h> #include <utils/Image.h>
@ -329,8 +330,8 @@ private slots:
void bonjourRecordResolved(const QHostInfo &hostInfo, int port); void bonjourRecordResolved(const QHostInfo &hostInfo, int port);
void bonjourResolve(); void bonjourResolve();
/// check for configWriteable and modified changes, called by _cTimer timeout() /// check for configWriteable and modified changes, called by _fsWatcher or fallback _cTimer
void checkConfigState(); void checkConfigState(QString cfile = NULL);
private: private:
@ -411,7 +412,8 @@ private:
BonjourRegister _hyperionSessions; BonjourRegister _hyperionSessions;
QString _bonjourCurrentServiceToResolve; QString _bonjourCurrentServiceToResolve;
/// Interval timer to check config write and mod /// Observe filesystem changes (_configFile), if failed use Timer
QFileSystemWatcher _fsWatcher;
QTimer _cTimer; QTimer _cTimer;
/// holds the prev states of configWriteable and modified /// holds the prev states of configWriteable and modified

View File

@ -26,17 +26,25 @@ PyMethodDef Effect::effectMethods[] = {
{"setImage" , Effect::wrapSetImage , METH_VARARGS, "Set a new image to process and determine new led colors."}, {"setImage" , Effect::wrapSetImage , METH_VARARGS, "Set a new image to process and determine new led colors."},
{"abort" , Effect::wrapAbort , METH_NOARGS, "Check if the effect should abort execution."}, {"abort" , Effect::wrapAbort , METH_NOARGS, "Check if the effect should abort execution."},
{"imageShow" , Effect::wrapImageShow , METH_VARARGS, "set current effect image to hyperion core."}, {"imageShow" , Effect::wrapImageShow , METH_VARARGS, "set current effect image to hyperion core."},
{"imageCanonicalGradient", Effect::wrapImageCanonicalGradient, METH_VARARGS, ""}, {"imageLinearGradient" , Effect::wrapImageLinearGradient , METH_VARARGS, ""},
{"imageConicalGradient" , Effect::wrapImageConicalGradient , METH_VARARGS, ""},
{"imageRadialGradient" , Effect::wrapImageRadialGradient , METH_VARARGS, ""}, {"imageRadialGradient" , Effect::wrapImageRadialGradient , METH_VARARGS, ""},
{"imageSolidFill" , Effect::wrapImageSolidFill , METH_VARARGS, ""}, {"imageSolidFill" , Effect::wrapImageSolidFill , METH_VARARGS, ""},
{"imageDrawLine" , Effect::wrapImageDrawLine , METH_VARARGS, ""}, {"imageDrawLine" , Effect::wrapImageDrawLine , METH_VARARGS, ""},
{"imageDrawPoint" , Effect::wrapImageDrawPoint , METH_VARARGS, ""},
{"imageDrawRect" , Effect::wrapImageDrawRect , METH_VARARGS, ""}, {"imageDrawRect" , Effect::wrapImageDrawRect , METH_VARARGS, ""},
{"imageDrawPolygon" , Effect::wrapImageDrawPolygon , METH_VARARGS, ""},
{"imageDrawPie" , Effect::wrapImageDrawPie , METH_VARARGS, ""},
{"imageSetPixel" , Effect::wrapImageSetPixel , METH_VARARGS, "set pixel color of image"}, {"imageSetPixel" , Effect::wrapImageSetPixel , METH_VARARGS, "set pixel color of image"},
{"imageGetPixel" , Effect::wrapImageGetPixel , METH_VARARGS, "get pixel color of image"}, {"imageGetPixel" , Effect::wrapImageGetPixel , METH_VARARGS, "get pixel color of image"},
{"imageSave" , Effect::wrapImageSave , METH_NOARGS, "adds a new background image"}, {"imageSave" , Effect::wrapImageSave , METH_NOARGS, "adds a new background image"},
{"imageMinSize" , Effect::wrapImageMinSize , METH_VARARGS, "sets minimal dimension of background image"}, {"imageMinSize" , Effect::wrapImageMinSize , METH_VARARGS, "sets minimal dimension of background image"},
{"imageWidth" , Effect::wrapImageWidth , METH_NOARGS, "gets image width"}, {"imageWidth" , Effect::wrapImageWidth , METH_NOARGS, "gets image width"},
{"imageHeight" , Effect::wrapImageHeight , METH_NOARGS, "gets image height"}, {"imageHeight" , Effect::wrapImageHeight , METH_NOARGS, "gets image height"},
{"imageCRotate" , Effect::wrapImageCRotate , METH_VARARGS, "rotate the coordinate system by given angle"},
{"imageCOffset" , Effect::wrapImageCOffset , METH_VARARGS, "Add offset to the coordinate system"},
{"imageCShear" , Effect::wrapImageCShear , METH_VARARGS, "Shear of coordinate system by the given horizontal/vertical axis"},
{"imageResetT" , Effect::wrapImageResetT , METH_NOARGS, "Resets all coords modifications (rotate,offset,shear)"},
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
@ -224,6 +232,7 @@ PyObject *Effect::json2python(const QJsonValue &jsonData) const
for (QJsonArray::iterator i = arrayData.begin(); i != arrayData.end(); ++i, ++index) for (QJsonArray::iterator i = arrayData.begin(); i != arrayData.end(); ++i, ++index)
{ {
PyObject * obj = json2python(*i); PyObject * obj = json2python(*i);
Py_INCREF(obj);
PyList_SetItem(list, index, obj); PyList_SetItem(list, index, obj);
Py_XDECREF(obj); Py_XDECREF(obj);
} }
@ -452,8 +461,76 @@ PyObject* Effect::wrapImageShow(PyObject *self, PyObject *args)
return Py_BuildValue(""); return Py_BuildValue("");
} }
PyObject* Effect::wrapImageLinearGradient(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
PyObject* Effect::wrapImageCanonicalGradient(PyObject *self, PyObject *args) int argCount = PyTuple_Size(args);
PyObject * bytearray = nullptr;
int startRX = 0;
int startRY = 0;
int startX = 0;
int startY = 0;
int endX, width = effect->_imageSize.width();
int endY, height = effect->_imageSize.height();
int spread = 0;
bool argsOK = false;
if ( argCount == 10 && PyArg_ParseTuple(args, "iiiiiiiiOi", &startRX, &startRY, &width, &height, &startX, &startY, &endX, &endY, &bytearray, &spread) )
{
argsOK = true;
}
if ( argCount == 6 && PyArg_ParseTuple(args, "iiiiOi", &startX, &startY, &endX, &endY, &bytearray, &spread) )
{
argsOK = true;
}
if (argsOK)
{
if (PyByteArray_Check(bytearray))
{
const int length = PyByteArray_Size(bytearray);
const unsigned arrayItemLength = 5;
if (length % arrayItemLength == 0)
{
QRect myQRect(startRX,startRY,width,height);
QLinearGradient gradient(QPoint(startX,startY), QPoint(endX,endY));
char * data = PyByteArray_AS_STRING(bytearray);
for (int idx=0; idx<length; idx+=arrayItemLength)
{
gradient.setColorAt(
((uint8_t)data[idx])/255.0,
QColor(
(uint8_t)(data[idx+1]),
(uint8_t)(data[idx+2]),
(uint8_t)(data[idx+3]),
(uint8_t)(data[idx+4])
));
}
gradient.setSpread(static_cast<QGradient::Spread>(spread));
effect->_painter->fillRect(myQRect, gradient);
return Py_BuildValue("");
}
else
{
PyErr_SetString(PyExc_RuntimeError, "Length of bytearray argument should multiple of 5");
return nullptr;
}
}
else
{
PyErr_SetString(PyExc_RuntimeError, "No bytearray properly defined");
return nullptr;
}
}
return nullptr;
}
PyObject* Effect::wrapImageConicalGradient(PyObject *self, PyObject *args)
{ {
Effect * effect = getEffect(); Effect * effect = getEffect();
@ -527,30 +604,30 @@ PyObject* Effect::wrapImageRadialGradient(PyObject *self, PyObject *args)
int argCount = PyTuple_Size(args); int argCount = PyTuple_Size(args);
PyObject * bytearray = nullptr; PyObject * bytearray = nullptr;
int centerX, centerY, radius, focalX, focalY, focalRadius; int centerX, centerY, radius, focalX, focalY, focalRadius, spread;
int startX = 0; int startX = 0;
int startY = 0; int startY = 0;
int width = effect->_imageSize.width(); int width = effect->_imageSize.width();
int height = effect->_imageSize.height(); int height = effect->_imageSize.height();
bool argsOK = false; bool argsOK = false;
if ( argCount == 11 && PyArg_ParseTuple(args, "iiiiiiiiiiO", &startX, &startY, &width, &height, &centerX, &centerY, &radius, &focalX, &focalY, &focalRadius, &bytearray) ) if ( argCount == 12 && PyArg_ParseTuple(args, "iiiiiiiiiiOi", &startX, &startY, &width, &height, &centerX, &centerY, &radius, &focalX, &focalY, &focalRadius, &bytearray, &spread) )
{ {
argsOK = true; argsOK = true;
} }
if ( argCount == 8 && PyArg_ParseTuple(args, "iiiiiiiO", &startX, &startY, &width, &height, &centerX, &centerY, &radius, &bytearray) ) if ( argCount == 9 && PyArg_ParseTuple(args, "iiiiiiiOi", &startX, &startY, &width, &height, &centerX, &centerY, &radius, &bytearray, &spread) )
{ {
argsOK = true; argsOK = true;
focalX = centerX; focalX = centerX;
focalY = centerY; focalY = centerY;
focalRadius = radius; focalRadius = radius;
} }
if ( argCount == 7 && PyArg_ParseTuple(args, "iiiiiiO", &centerX, &centerY, &radius, &focalX, &focalY, &focalRadius, &bytearray) ) if ( argCount == 8 && PyArg_ParseTuple(args, "iiiiiiOi", &centerX, &centerY, &radius, &focalX, &focalY, &focalRadius, &bytearray, &spread) )
{ {
argsOK = true; argsOK = true;
} }
if ( argCount == 4 && PyArg_ParseTuple(args, "iiiO", &centerX, &centerY, &radius, &bytearray) ) if ( argCount == 5 && PyArg_ParseTuple(args, "iiiOi", &centerX, &centerY, &radius, &bytearray, &spread) )
{ {
argsOK = true; argsOK = true;
focalX = centerX; focalX = centerX;
@ -581,7 +658,7 @@ PyObject* Effect::wrapImageRadialGradient(PyObject *self, PyObject *args)
)); ));
} }
//gradient.setSpread(QGradient::ReflectSpread); gradient.setSpread(static_cast<QGradient::Spread>(spread));
effect->_painter->fillRect(myQRect, gradient); effect->_painter->fillRect(myQRect, gradient);
return Py_BuildValue(""); return Py_BuildValue("");
@ -601,6 +678,160 @@ PyObject* Effect::wrapImageRadialGradient(PyObject *self, PyObject *args)
return nullptr; return nullptr;
} }
PyObject* Effect::wrapImageDrawPolygon(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
PyObject * bytearray = nullptr;
int argCount = PyTuple_Size(args);
int r, g, b;
int a = 255;
bool argsOK = false;
if ( argCount == 5 && PyArg_ParseTuple(args, "Oiiii", &bytearray, &r, &g, &b, &a) )
{
argsOK = true;
}
if ( argCount == 4 && PyArg_ParseTuple(args, "Oiii", &bytearray, &r, &g, &b) )
{
argsOK = true;
}
if (argsOK)
{
if (PyByteArray_Check(bytearray))
{
int length = PyByteArray_Size(bytearray);
if (length % 2 == 0)
{
QVector <QPoint> points;
char * data = PyByteArray_AS_STRING(bytearray);
for (int idx=0; idx<length; idx+=2)
{
points.append(QPoint((int)(data[idx]),(int)(data[idx+1])));
}
QPainter * painter = effect->_painter;
QPen oldPen = painter->pen();
QPen newPen(QColor(r,g,b,a));
painter->setPen(newPen);
painter->setBrush(QBrush(QColor(r,g,b,a), Qt::SolidPattern));
painter->drawPolygon(points);
painter->setPen(oldPen);
return Py_BuildValue("");
}
else
{
PyErr_SetString(PyExc_RuntimeError, "Length of bytearray argument should multiple of 2");
return nullptr;
}
}
else
{
PyErr_SetString(PyExc_RuntimeError, "Argument 1 is not a bytearray");
return nullptr;
}
}
return nullptr;
}
PyObject* Effect::wrapImageDrawPie(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
PyObject * bytearray = nullptr;
QString brush;
int argCount = PyTuple_Size(args);
int radius, centerX, centerY;
int startAngle = 0;
int spanAngle = 360;
int r = 0;
int g = 0;
int b = 0;
int a = 255;
bool argsOK = false;
if ( argCount == 9 && PyArg_ParseTuple(args, "iiiiiiiii", &centerX, &centerY, &radius, &startAngle, &spanAngle, &r, &g, &b, &a) )
{
argsOK = true;
}
if ( argCount == 8 && PyArg_ParseTuple(args, "iiiiiiii", &centerX, &centerY, &radius, &startAngle, &spanAngle, &r, &g, &b) )
{
argsOK = true;
}
if ( argCount == 7 && PyArg_ParseTuple(args, "iiiiisO", &centerX, &centerY, &radius, &startAngle, &spanAngle, &brush, &bytearray) )
{
argsOK = true;
}
if ( argCount == 5 && PyArg_ParseTuple(args, "iiisO", &centerX, &centerY, &radius, &brush, &bytearray) )
{
argsOK = true;
}
if (argsOK)
{
QPainter * painter = effect->_painter;
startAngle = std::max(std::min(startAngle,360),0);
spanAngle = std::max(std::min(spanAngle,360),-360);
if( argCount == 7 || argCount == 5 )
{
a = 0;
if (PyByteArray_Check(bytearray))
{
int length = PyByteArray_Size(bytearray);
if (length % 5 == 0)
{
QConicalGradient gradient(QPoint(centerX,centerY), startAngle);
char * data = PyByteArray_AS_STRING(bytearray);
for (int idx=0; idx<length; idx+=5)
{
gradient.setColorAt(
((uint8_t)data[idx])/255.0,
QColor(
(uint8_t)(data[idx+1]),
(uint8_t)(data[idx+2]),
(uint8_t)(data[idx+3]),
(uint8_t)(data[idx+4])
));
}
painter->setBrush(gradient);
return Py_BuildValue("");
}
else
{
PyErr_SetString(PyExc_RuntimeError, "Length of bytearray argument should multiple of 5");
return nullptr;
}
}
else
{
PyErr_SetString(PyExc_RuntimeError, "Last argument is not a bytearray");
return nullptr;
}
}
else
{
painter->setBrush(QBrush(QColor(r,g,b,a), Qt::SolidPattern));
}
QPen oldPen = painter->pen();
QPen newPen(QColor(r,g,b,a));
painter->setPen(newPen);
painter->drawPie(centerX - radius, centerY - radius, centerX + radius, centerY + radius, startAngle * 16, spanAngle * 16);
painter->setPen(oldPen);
return Py_BuildValue("");
}
return nullptr;
}
PyObject* Effect::wrapImageSolidFill(PyObject *self, PyObject *args) PyObject* Effect::wrapImageSolidFill(PyObject *self, PyObject *args)
{ {
Effect * effect = getEffect(); Effect * effect = getEffect();
@ -682,6 +913,40 @@ PyObject* Effect::wrapImageDrawLine(PyObject *self, PyObject *args)
return nullptr; return nullptr;
} }
PyObject* Effect::wrapImageDrawPoint(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
int argCount = PyTuple_Size(args);
int r, g, b, x, y;
int a = 255;
int thick = 1;
bool argsOK = false;
if ( argCount == 7 && PyArg_ParseTuple(args, "iiiiiii", &x, &y, &thick, &r, &g, &b, &a) )
{
argsOK = true;
}
if ( argCount == 6 && PyArg_ParseTuple(args, "iiiiii", &x, &y, &thick, &r, &g, &b) )
{
argsOK = true;
}
if (argsOK)
{
QPainter * painter = effect->_painter;
QPen oldPen = painter->pen();
QPen newPen(QColor(r,g,b,a));
newPen.setWidth(thick);
painter->setPen(newPen);
painter->drawPoint(x, y);
painter->setPen(oldPen);
return Py_BuildValue("");
}
return nullptr;
}
PyObject* Effect::wrapImageDrawRect(PyObject *self, PyObject *args) PyObject* Effect::wrapImageDrawRect(PyObject *self, PyObject *args)
{ {
@ -801,6 +1066,62 @@ PyObject* Effect::wrapImageHeight(PyObject *self, PyObject *args)
return Py_BuildValue("i", effect->_imageSize.height()); return Py_BuildValue("i", effect->_imageSize.height());
} }
PyObject* Effect::wrapImageCRotate(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
int argCount = PyTuple_Size(args);
int angle;
if ( argCount == 1 && PyArg_ParseTuple(args, "i", &angle ) )
{
angle = std::max(std::min(angle,360),0);
effect->_painter->rotate(angle);
return Py_BuildValue("");
}
return nullptr;
}
PyObject* Effect::wrapImageCOffset(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
int offsetX = 0;
int offsetY = 0;
int argCount = PyTuple_Size(args);
if ( argCount == 2 )
{
PyArg_ParseTuple(args, "ii", &offsetX, &offsetY );
}
effect->_painter->translate(QPoint(offsetX,offsetY));
return Py_BuildValue("");
}
PyObject* Effect::wrapImageCShear(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
int sh,sv;
int argCount = PyTuple_Size(args);
if ( argCount == 2 && PyArg_ParseTuple(args, "ii", &sh, &sv ))
{
effect->_painter->shear(sh,sv);
return Py_BuildValue("");
}
return nullptr;
}
PyObject* Effect::wrapImageResetT(PyObject *self, PyObject *args)
{
Effect * effect = getEffect();
effect->_painter->resetTransform();
return Py_BuildValue("");
}
Effect * Effect::getEffect() Effect * Effect::getEffect()
{ {
// extract the module from the runtime // extract the module from the runtime

View File

@ -58,18 +58,25 @@ private:
static PyObject* wrapSetImage (PyObject *self, PyObject *args); static PyObject* wrapSetImage (PyObject *self, PyObject *args);
static PyObject* wrapAbort (PyObject *self, PyObject *args); static PyObject* wrapAbort (PyObject *self, PyObject *args);
static PyObject* wrapImageShow (PyObject *self, PyObject *args); static PyObject* wrapImageShow (PyObject *self, PyObject *args);
static PyObject* wrapImageCanonicalGradient(PyObject *self, PyObject *args); static PyObject* wrapImageLinearGradient (PyObject *self, PyObject *args);
static PyObject* wrapImageConicalGradient (PyObject *self, PyObject *args);
static PyObject* wrapImageRadialGradient (PyObject *self, PyObject *args); static PyObject* wrapImageRadialGradient (PyObject *self, PyObject *args);
static PyObject* wrapImageSolidFill (PyObject *self, PyObject *args); static PyObject* wrapImageSolidFill (PyObject *self, PyObject *args);
static PyObject* wrapImageDrawLine (PyObject *self, PyObject *args); static PyObject* wrapImageDrawLine (PyObject *self, PyObject *args);
static PyObject* wrapImageDrawPoint (PyObject *self, PyObject *args);
static PyObject* wrapImageDrawRect (PyObject *self, PyObject *args); static PyObject* wrapImageDrawRect (PyObject *self, PyObject *args);
static PyObject* wrapImageDrawPolygon (PyObject *self, PyObject *args);
static PyObject* wrapImageDrawPie (PyObject *self, PyObject *args);
static PyObject* wrapImageSetPixel (PyObject *self, PyObject *args); static PyObject* wrapImageSetPixel (PyObject *self, PyObject *args);
static PyObject* wrapImageGetPixel (PyObject *self, PyObject *args); static PyObject* wrapImageGetPixel (PyObject *self, PyObject *args);
static PyObject* wrapImageSave (PyObject *self, PyObject *args); static PyObject* wrapImageSave (PyObject *self, PyObject *args);
static PyObject* wrapImageMinSize (PyObject *self, PyObject *args); static PyObject* wrapImageMinSize (PyObject *self, PyObject *args);
static PyObject* wrapImageWidth (PyObject *self, PyObject *args); static PyObject* wrapImageWidth (PyObject *self, PyObject *args);
static PyObject* wrapImageHeight (PyObject *self, PyObject *args); static PyObject* wrapImageHeight (PyObject *self, PyObject *args);
static PyObject* wrapImageCRotate (PyObject *self, PyObject *args);
static PyObject* wrapImageCOffset (PyObject *self, PyObject *args);
static PyObject* wrapImageCShear (PyObject *self, PyObject *args);
static PyObject* wrapImageResetT (PyObject *self, PyObject *args);
static Effect * getEffect(); static Effect * getEffect();
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3

View File

@ -445,10 +445,18 @@ Hyperion::Hyperion(const QJsonObject &qjsonConfig, const QString configFile)
Debug(_log,"configured leds: %d hw leds: %d", getLedCount(), _hwLedCount); Debug(_log,"configured leds: %d hw leds: %d", getLedCount(), _hwLedCount);
WarningIf(hwLedCount < getLedCount(), _log, "more leds configured than available. check 'ledCount' in 'device' section"); WarningIf(hwLedCount < getLedCount(), _log, "more leds configured than available. check 'ledCount' in 'device' section");
// setup interval timer for config state checks and initial shot // setup config state checks and initial shot
checkConfigState(); checkConfigState();
QObject::connect(&_cTimer, SIGNAL(timeout()), this, SLOT(checkConfigState())); if(_fsWatcher.addPath(_configFile))
_cTimer.start(2000); {
QObject::connect(&_fsWatcher, &QFileSystemWatcher::fileChanged, this, &Hyperion::checkConfigState);
}
else
{
Warning(_log,"Filesystem Observer failed for file: %s, use fallback timer", _configFile.toStdString().c_str());
QObject::connect(&_cTimer, SIGNAL(timeout()), this, SLOT(checkConfigState()));
_cTimer.start(2000);
}
// pipe muxer signal for effect/color timerunner to hyperionStateChanged slot // pipe muxer signal for effect/color timerunner to hyperionStateChanged slot
QObject::connect(&_muxer, &PriorityMuxer::timerunner, this, &Hyperion::hyperionStateChanged); QObject::connect(&_muxer, &PriorityMuxer::timerunner, this, &Hyperion::hyperionStateChanged);
@ -545,7 +553,7 @@ Hyperion::BonjourRegister Hyperion::getHyperionSessions()
return _hyperionSessions; return _hyperionSessions;
} }
void Hyperion::checkConfigState() void Hyperion::checkConfigState(QString cfile)
{ {
// Check config modifications // Check config modifications
QFile f(_configFile); QFile f(_configFile);

View File

@ -34,14 +34,24 @@
}, },
"minItems" : 3, "minItems" : 3,
"maxItems" : 3, "maxItems" : 3,
"propertyOrder" : 3 "propertyOrder" : 3,
"options": {
"dependencies": {
"type": "color"
}
}
}, },
"effect" : "effect" :
{ {
"type" : "string", "type" : "string",
"format" : "select", "format" : "select",
"title" : "edt_conf_fge_effect_title", "title" : "edt_conf_fge_effect_title",
"propertyOrder" : 4 "propertyOrder" : 4,
"options": {
"dependencies": {
"type": "effect"
}
}
} }
}, },
"additionalProperties" : false "additionalProperties" : false

View File

@ -20,6 +20,7 @@
{ {
"type" : "array", "type" : "array",
"title" : "edt_conf_color_channelAdjustment_header_title", "title" : "edt_conf_color_channelAdjustment_header_title",
"minItems": 1,
"required" : true, "required" : true,
"propertyOrder" : 3, "propertyOrder" : 3,
"items" : "items" :

View File

@ -34,14 +34,24 @@
}, },
"minItems" : 3, "minItems" : 3,
"maxItems" : 3, "maxItems" : 3,
"propertyOrder" : 3 "propertyOrder" : 3,
"options": {
"dependencies": {
"type": "color"
}
}
}, },
"effect" : "effect" :
{ {
"type" : "string", "type" : "string",
"format" : "select", "format" : "select",
"title" : "edt_conf_fge_effect_title", "title" : "edt_conf_fge_effect_title",
"propertyOrder" : 4 "propertyOrder" : 4,
"options": {
"dependencies": {
"type": "effect"
}
}
}, },
"duration_ms" : "duration_ms" :
{ {

View File

@ -140,84 +140,112 @@
{ {
"type" : "boolean", "type" : "boolean",
"title" : "edt_conf_v4l2_signalDetection_title", "title" : "edt_conf_v4l2_signalDetection_title",
"default" : true, "default" : false,
"propertyOrder" : 16 "propertyOrder" : 16
}, },
"redSignalThreshold" : "redSignalThreshold" :
{ {
"type" : "number", "type" : "number",
"title" : "edt_conf_v4l2_redSignalThreshold_title", "title" : "edt_conf_v4l2_redSignalThreshold_title",
"minimum" : 0.0, "minimum" : 0,
"maximum" : 1.0, "maximum" : 100,
"default" : 0.1, "default" : 5,
"step" : 0.005,
"append" : "edt_append_percent", "append" : "edt_append_percent",
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 17 "propertyOrder" : 17
}, },
"greenSignalThreshold" : "greenSignalThreshold" :
{ {
"type" : "number", "type" : "number",
"title" : "edt_conf_v4l2_greenSignalThreshold_title", "title" : "edt_conf_v4l2_greenSignalThreshold_title",
"minimum" : 0.0, "minimum" : 0,
"maximum" : 1.0, "maximum" : 100,
"default" : 0.1, "default" : 5,
"step" : 0.025,
"append" : "edt_append_percent", "append" : "edt_append_percent",
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 18 "propertyOrder" : 18
}, },
"blueSignalThreshold" : "blueSignalThreshold" :
{ {
"type" : "number", "type" : "number",
"title" : "edt_conf_v4l2_blueSignalThreshold_title", "title" : "edt_conf_v4l2_blueSignalThreshold_title",
"minimum" : 0.0, "minimum" : 0,
"maximum" : 1.0, "maximum" : 100,
"default" : 0.1, "default" : 5,
"step" : 0.005,
"append" : "edt_append_percent", "append" : "edt_append_percent",
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 19 "propertyOrder" : 19
}, },
"signalDetectionVerticalOffsetMin" : "sDVOffsetMin" :
{ {
"type" : "number", "type" : "number",
"title" : "edt_conf_v4l2_signalDetectionVerticalOffsetMin_title", "title" : "edt_conf_v4l2_sDVOffsetMin_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.1, "default" : 0.25,
"step" : 0.005, "step" : 0.01,
"append" : "edt_append_percent", "options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 20 "propertyOrder" : 20
}, },
"signalDetectionVerticalOffsetMax" : "sDVOffsetMax" :
{ {
"type" : "number", "type" : "number",
"title" : "edt_conf_v4l2_signalDetectionVerticalOffsetMax_title", "title" : "edt_conf_v4l2_sDVOffsetMax_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.1, "default" : 0.75,
"step" : 0.005, "step" : 0.01,
"append" : "edt_append_percent", "options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 21 "propertyOrder" : 21
}, },
"signalDetectionHorizontalOffsetMin" : "sDHOffsetMin" :
{ {
"type" : "number", "type" : "number",
"title" : "edt_conf_v4l2_signalDetectionHorizontalOffsetMin_title", "title" : "edt_conf_v4l2_sDHOffsetMin_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.1, "default" : 0.25,
"step" : 0.005, "step" : 0.01,
"append" : "edt_append_percent", "options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 22 "propertyOrder" : 22
}, },
"signalDetectionHorizontalOffsetMax" : "sDHOffsetMax" :
{ {
"type" : "number", "type" : "number",
"title" : "edt_conf_v4l2_signalDetectionHorizontalOffsetMax_title", "title" : "edt_conf_v4l2_sDHOffsetMax_title",
"minimum" : 0.0, "minimum" : 0.0,
"maximum" : 1.0, "maximum" : 1.0,
"default" : 0.1, "default" : 0.75,
"step" : 0.005, "step" : 0.01,
"append" : "edt_append_percent", "options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 23 "propertyOrder" : 23
} }
}, },

File diff suppressed because it is too large Load Diff

View File

@ -584,9 +584,9 @@ void HyperionDaemon::createGrabberV4L2()
grabberConfig["height"].toInt(-1), grabberConfig["height"].toInt(-1),
grabberConfig["frameDecimation"].toInt(2), grabberConfig["frameDecimation"].toInt(2),
grabberConfig["sizeDecimation"].toInt(8), grabberConfig["sizeDecimation"].toInt(8),
grabberConfig["redSignalThreshold"].toDouble(0.0), grabberConfig["redSignalThreshold"].toDouble(0.0)/100.0,
grabberConfig["greenSignalThreshold"].toDouble(0.0), grabberConfig["greenSignalThreshold"].toDouble(0.0)/100.0,
grabberConfig["blueSignalThreshold"].toDouble(0.0), grabberConfig["blueSignalThreshold"].toDouble(0.0)/100.0,
grabberConfig["priority"].toInt(890)); grabberConfig["priority"].toInt(890));
grabber->set3D(parse3DMode(grabberConfig["mode"].toString("2D"))); grabber->set3D(parse3DMode(grabberConfig["mode"].toString("2D")));
grabber->setCropping( grabber->setCropping(
@ -596,10 +596,10 @@ void HyperionDaemon::createGrabberV4L2()
grabberConfig["cropBottom"].toInt(0)); grabberConfig["cropBottom"].toInt(0));
grabber->setSignalDetectionEnable(grabberConfig["signalDetection"].toBool(true)); grabber->setSignalDetectionEnable(grabberConfig["signalDetection"].toBool(true));
grabber->setSignalDetectionOffset( grabber->setSignalDetectionOffset(
grabberConfig["signalDetectionHorizontalOffsetMin"].toDouble(0.25), grabberConfig["sDHOffsetMin"].toDouble(0.25),
grabberConfig["signalDetectionVerticalOffsetMin"].toDouble(0.25), grabberConfig["sDVOffsetMin"].toDouble(0.25),
grabberConfig["signalDetectionHorizontalOffsetMax"].toDouble(0.75), grabberConfig["sDHOffsetMax"].toDouble(0.75),
grabberConfig["signalDetectionVerticalOffsetMax"].toDouble(0.75)); grabberConfig["sDVOffsetMax"].toDouble(0.75));
Debug(_log, "V4L2 grabber created"); Debug(_log, "V4L2 grabber created");
QObject::connect(grabber, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _protoServer, SLOT(sendImageToProtoSlaves(int, const Image<ColorRgb>&, const int))); QObject::connect(grabber, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _protoServer, SLOT(sendImageToProtoSlaves(int, const Image<ColorRgb>&, const int)));