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 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

View File

@ -140,23 +140,23 @@ SET( JSON_FILES
config/hyperion.config.json.default
${HYPERION_SCHEMAS}
)
EXECUTE_PROCESS (
COMMAND python test/jsonchecks/checkjson.py ${JSON_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_JSON_FAILED
)
IF ( ${CHECK_JSON_FAILED} )
MESSAGE (FATAL_ERROR "check of json files failed" )
ENDIF ()
#EXECUTE_PROCESS (
# COMMAND python test/jsonchecks/checkjson.py ${JSON_FILES}
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
# RESULT_VARIABLE CHECK_JSON_FAILED
#)
#IF ( ${CHECK_JSON_FAILED} )
# MESSAGE (FATAL_ERROR "check of json files failed" )
#ENDIF ()
EXECUTE_PROCESS (
COMMAND python test/jsonchecks/checkeffects.py effects effects/schema
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_EFFECTS_FAILED
)
IF ( ${CHECK_EFFECTS_FAILED} )
MESSAGE (FATAL_ERROR "check of json effect files failed" )
ENDIF ()
#EXECUTE_PROCESS (
# COMMAND python test/jsonchecks/checkeffects.py effects effects/schema
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
# RESULT_VARIABLE CHECK_EFFECTS_FAILED
#)
#IF ( ${CHECK_EFFECTS_FAILED} )
# MESSAGE (FATAL_ERROR "check of json effect files failed" )
#ENDIF ()
EXECUTE_PROCESS (
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" />
</div>
<div class="panel-body">
<table style="margin-bottom:8px">
<div id="eff_desc"></div>
<table style="margin-bottom:8px" id="effc_nametable">
<tbody>
<tr>
<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="panel panel-default" >
<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" />
</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_edit' data-i18n="effectsconfigurator_button_editeffect"></button>
</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/ */
.gj-draggable {
cursor: move;
.gj-button {
background-color: #f5f5f5;
border: 1px solid #ddd;
color: #000;
border-radius: 3px;
padding: 6px 10px;
cursor: pointer;
}
.gj-unselectable {
-webkit-touch-callout: none;
-webkit-user-select: none;
@ -493,6 +499,46 @@ li a:active:after {
-ms-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 {
position: absolute;
font-size: 0.1px;
@ -563,6 +609,7 @@ li a:active:after {
position: absolute;
bottom: 0px;
width: 100%;
margin-top: 0px;
}
.gj-modal {
@ -591,6 +638,15 @@ li a:active:after {
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 {
margin: 2px;
}
@ -611,6 +667,7 @@ li a:active:after {
padding: 15px;
}
/*https://github.com/flatlogic/awesome-bootstrap-checkbox slighty edited for our purposes*/
.checkbox {
height:34px;

View File

@ -209,14 +209,15 @@
"remote_maptype_label_multicolor_mean" : "Mehrfarbig",
"remote_maptype_label_unicolor_mean" : "Einfarbig",
"effectsconfigurator_label_intro" : "Erstelle auf Grundlage der Basiseffekte neue Effekt die nach deinen Wünschen angepasst sind. Je nach Effekt stehen Optionen wie Farbe, Geschwindigkeit, oder Richtung und vieles mehr zur Auswahl.",
"effectsconfigurator_label_chooseeff" : "Basis-Effekt auswählen:",
"effectsconfigurator_label_chooseeff" : "Template auswählen",
"effectsconfigurator_editdeleff" : "Entferne/Lade Effekt",
"effectsconfigurator_button_saveeffect" : "Effekt speichern",
"effectsconfigurator_label_effectname" : "Effektname",
"effectsconfigurator_button_starttest" : "Starte Test",
"effectsconfigurator_button_stoptest" : "Stoppe Test",
"effectsconfigurator_button_conttest" : "Fortlaufender Test",
"effectsconfigurator_label_deleffect" : "Effekt entfernen:",
"effectsconfigurator_button_deleffect" : "Effekt entfernen",
"effectsconfigurator_button_editeffect" : "Effekt laden",
"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_spreadtheword" : "Weitersagen!",
@ -385,13 +386,13 @@
"edt_dev_spec_useRgbwProtocol_title" : "Nutze RGBW Protokoll",
"edt_dev_spec_maximumLedCount_title" : "Maximale Anzahl LEDs",
"edt_dev_spec_gpioNumber_title" : "GPIO Nummer",
"edt_dev_spec_dmaNumber_title" : "DMA Kanal",
"edt_dev_spec_gpioMap_title" : "GPIO Zuweisung",
"edt_dev_spec_PBFiFo_title" : "Pi-Blaster FiFo",
"edt_dev_spec_gpioBcm_title" : "GPIO Pin",
"edt_dev_spec_ledIndex_title" : "LED index",
"edt_dev_spec_colorComponent_title" : "Farbkomponente",
"edt_dev_spec_ledType_title" : "LED typ",
"edt_dev_spec_dmaNumber_title" : "DMA Kanal",
"edt_conf_general_enable_title" : "Aktiviert",
"edt_conf_general_enable_expl" : "Wenn aktiviert, ist die Komponente aktiv.",
"edt_conf_general_priority_title" : "Priorität",
@ -504,11 +505,19 @@
"edt_conf_v4l2_signalDetection_title" : "Signal Erkennung",
"edt_conf_v4l2_signalDetection_expl" : "Wenn aktiviert, wird die USB Aufnahme temporär bei \"kein Signal\" abgeschalten.",
"edt_conf_v4l2_redSignalThreshold_title" : "Rote Signalschwelle",
"edt_conf_v4l2_redSignalThreshold_expl" : "Verdunkelt rote Werte. (Wird als schwarz interpretiert)",
"edt_conf_v4l2_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_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_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_type_title" : "Typ",
"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_level_title" : "Protokollstufe",
"edt_conf_log_level_expl" : "Abhängig der Stufe sind weniger oder mehr Meldungen sichtbar.",
"edt_eff_candle_header_title" : "Kerze",
"edt_eff_police_header_title" : "Polizei",
"edt_eff_fade_header_title" : "Farbübergang",
"edt_eff_rainbowmood_header_title" : "Regenbogen",
"edt_eff_knightrider_header_title" : "Knight Rider",
"edt_eff_lightclock_header_title" : "Uhr 1",
"edt_eff_clock_header_title" : "Uhr 2",
"edt_eff_pacman_header_title" : "Pac-Man",
"edt_eff_moodblobs_header_title" : "Stimmungskugeln",
"edt_eff_rainbowswirl_header_title" : "Regenbogenwirbel",
"edt_eff_random_header_title" : "Zufällig",
"edt_eff_runningdots_header_title" : "Rennende Punkte",
"edt_eff_systemshutdown_header_title" : "Herunterfahren",
"edt_eff_snake_header_title" : "Schlange",
"edt_eff_sparks_header_title" : "Funken",
"edt_eff_traces_header_title" : "Farbspuren",
"edt_eff_x-mas_header_title" : "Weihnachten",
"edt_eff_trails_header_title" : "Spuren",
"edt_eff_candle_header" : "Kerze",
"edt_eff_police_header" : "Polizei",
"edt_eff_fade_header" : "Farbübergang",
"edt_eff_rainbowmood_header" : "Regenbogen",
"edt_eff_rainbowmood_header_desc" : "Alle LEDs Regenbogen Farbübergang",
"edt_eff_knightrider_header" : "Knight Rider",
"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_lightclock_header" : "Lichtuhr",
"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_pacman_header" : "Pac-Man",
"edt_eff_moodblobs_header" : "Stimmungskugeln",
"edt_eff_swirl_header" : "Farbwirbel",
"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_random_header" : "Zufällig",
"edt_eff_runningdots_header" : "Rennende Punkte",
"edt_eff_systemshutdown_header" : "Herunterfahren",
"edt_eff_snake_header" : "Schlange",
"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-together" : "Alle zusammen",
"edt_eff_enum_list" : "LED Liste",
"edt_eff_count_title" : "Anzahl",
"edt_eff_color_title" : "Farbe",
"edt_eff_colorrandom_title" : "Zufällige Farbe",
"edt_eff_colorone_title" : "Farbe eins",
"edt_eff_colortwo_title" : "Farbe zwei",
"edt_eff_colorcount_title" : "Farblänge",
"edt_eff_rotationtime_title" : "Rotationszeit",
"edt_eff_sleeptime_title" : "Schlafzeit",
"edt_eff_reversedirection_title" : "Richtung umkehren",
"edt_eff_fadeintime_title" : "Zeit für Einblendung",
"edt_eff_fadeouttime_title" : "Zeit für Ausblendung",
"edt_eff_repeat_title" : "Wiederholung",
"edt_eff_colorendtime_title" : "Zeit für Start-Farbe",
"edt_eff_colorstarttime_title" : "Zeit für End-Farbe",
"edt_eff_colorstart_title" : "Farbe Start",
"edt_eff_colorend_title" : "Farbe Ende",
"edt_eff_repeatcount_title" : "Anzahl Wiederholung",
"edt_eff_maintain_end_color_title" : "Behalte Endfarbe",
"edt_eff_colorshift_title" : "Farbverschiebung",
"edt_eff_whichleds_title" : "Welche LEDs",
"edt_eff_ledlist_title" : "LED Liste",
"edt_eff_speed_title" : "Geschwindigkeit",
"edt_eff_fadefactor_title" : "Verblass Faktor",
"edt_eff_showseconds_title" : "Zeige Sekunden",
"edt_eff_blobcount_title" : "Kugelanzahl",
"edt_eff_huechange_title" : "Farbänderung",
"edt_eff_basecolorchange_title" : "Basisfarben verändern",
"edt_eff_basecolorchangerate_title" : "BF Geschwindigkeit",
"edt_eff_basecolorrangeleft_title" : "BF Bereich links",
"edt_eff_basecolorrangeright_title" : "BF Bereich rechts",
"edt_eff_brightness_title" : "Helligkeit",
"edt_eff_centerx_title" : "Mittelpunkt X-Achse",
"edt_eff_centery_title" : "Mittelpunkt Y-Achse",
"edt_eff_saturation_title" : "Sättigung",
"edt_eff_colorevel_title" : "Farbstufe",
"edt_eff_whitelevel_title" : "Weißstufe",
"edt_eff_alarmcolor_title" : "Alarm Farbe",
"edt_eff_postcolor_title" : "Startfarbe",
"edt_eff_enableshutdown_title" : "Echtes herunterfahren",
"edt_eff_length_title" : "Länge",
"edt_eff_frequency_title" : "Frequenz",
"edt_eff_min_len_title" : "Minimale Länge",
"edt_eff_max_len_title" : "Maximale Länge",
"edt_eff_height_title" : "Höhe",
"edt_eff_offset_title" : "Verschiebung",
"edt_eff_colorHour_title" : "Farbe Stunde",
"edt_eff_colorMinute_title" : "Farbe Minute",
"edt_eff_colorSecond_title" : "Farbe Sekunde",
"edt_eff_hourMargin_title" : "Länge Stunde",
"edt_eff_minuteMargin_title" : "Länge Minute",
"edt_eff_secondMargin_title" : "Länge Sekunde",
"edt_eff_margin_title" : "Abstand",
"edt_eff_colorMarker_title" : "Farbe Markierung",
"edt_eff_count" : "Anzahl",
"edt_eff_color" : "Farbe",
"edt_eff_colorrandom" : "Zufällige Farbe",
"edt_eff_colorone" : "Farbe eins",
"edt_eff_colortwo" : "Farbe zwei",
"edt_eff_colorcount" : "Farblänge",
"edt_eff_rotationtime" : "Rotationszeit",
"edt_eff_sleeptime" : "Schlafzeit",
"edt_eff_reversedirection" : "Richtung umkehren",
"edt_eff_fadeintime" : "Zeit für Einblendung",
"edt_eff_fadeouttime" : "Zeit für Ausblendung",
"edt_eff_repeat" : "Wiederholung",
"edt_eff_colorendtime" : "Zeit für Start-Farbe",
"edt_eff_colorstarttime" : "Zeit für End-Farbe",
"edt_eff_colorstart" : "Farbe Start",
"edt_eff_colorend" : "Farbe Ende",
"edt_eff_repeatcount" : "Anzahl Wiederholung",
"edt_eff_maintain_end_color" : "Behalte Endfarbe",
"edt_eff_colorshift" : "Farbverschiebung",
"edt_eff_whichleds" : "Welche LEDs",
"edt_eff_ledlist" : "LED Liste",
"edt_eff_speed" : "Geschwindigkeit",
"edt_eff_fadefactor" : "Verblass Faktor",
"edt_eff_showseconds" : "Zeige Sekunden",
"edt_eff_blobcount" : "Kugelanzahl",
"edt_eff_huechange" : "Farbänderung",
"edt_eff_basecolorchange" : "Basisfarben verändern",
"edt_eff_basecolorchangerate" : "BF Geschwindigkeit",
"edt_eff_basecolorrangeleft" : "BF Bereich links",
"edt_eff_basecolorrangeright" : "BF Bereich rechts",
"edt_eff_brightness" : "Helligkeit",
"edt_eff_centerx" : "Mittelpunkt X-Achse",
"edt_eff_centery" : "Mittelpunkt Y-Achse",
"edt_eff_saturation" : "Sättigung",
"edt_eff_colorevel" : "Farbstufe",
"edt_eff_whitelevel" : "Weißstufe",
"edt_eff_alarmcolor" : "Alarm Farbe",
"edt_eff_postcolor" : "Startfarbe",
"edt_eff_enableshutdown" : "Echtes herunterfahren",
"edt_eff_length" : "Länge",
"edt_eff_frequency" : "Frequenz",
"edt_eff_min_len" : "Minimale Länge",
"edt_eff_max_len" : "Maximale Länge",
"edt_eff_height" : "Höhe",
"edt_eff_offset" : "Verschiebung",
"edt_eff_colorHour" : "Farbe Stunde",
"edt_eff_colorMinute" : "Farbe Minute",
"edt_eff_colorSecond" : "Farbe Sekunde",
"edt_eff_colorMarker" : "Marker Farbe",
"edt_eff_markerDepth" : "Marker Tiefe",
"edt_eff_markerWidth" : "Marker Breite",
"edt_eff_markerEnable" : "Zeige Marker",
"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_ms" : "ms",
"edt_append_s" : "s",

View File

@ -209,14 +209,15 @@
"remote_maptype_label_multicolor_mean" : "Multicolor",
"remote_maptype_label_unicolor_mean" : "Unicolor",
"effectsconfigurator_label_intro" : "Create out of the base effects new effects that are tuned to your liking. Depending on Effect there are options like color, speed, direction and more available.",
"effectsconfigurator_label_chooseeff" : "Choose Base-Effect:",
"effectsconfigurator_label_chooseeff" : "Choose Template",
"effectsconfigurator_editdeleff" : "Delete/Load Effect",
"effectsconfigurator_button_saveeffect" : "Save Effect",
"effectsconfigurator_label_effectname" : "Effect name",
"effectsconfigurator_button_starttest" : "Start test",
"effectsconfigurator_button_stoptest" : "Stop test",
"effectsconfigurator_button_conttest" : "Continuous test",
"effectsconfigurator_label_deleffect" : "Delete Effect:",
"effectsconfigurator_button_deleffect" : "Delete Effect",
"effectsconfigurator_button_editeffect" : "Load Effect",
"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_spreadtheword" : "Spread the word",
@ -306,7 +307,7 @@
"wiz_hue_username" : "User ID:",
"wiz_hue_create_user" : "Create new User",
"wiz_hue_failure_ip" : "No Bridge found, please type in a valid ip",
"wiz_hue_failure_connection" : "Timeout: Please press the bridge button within the period 30 seconds",
"wiz_hue_failure_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_press_link" : "Please press link button on the Hue Bridge.",
"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_cropBottom_title" : "Crop bottom",
"edt_conf_v4l2_cropBottom_expl" : "Count of pixels on the bottom side that are removed from the picture.",
"edt_conf_v4l2_signalDetection_title" : "Enable signal detection",
"edt_conf_v4l2_signalDetection_title" : "Signal detection",
"edt_conf_v4l2_signalDetection_expl" : "If enabled, usb capture will be temporarily disabled when no signal was found.",
"edt_conf_v4l2_redSignalThreshold_title" : "Red signal threshold",
"edt_conf_v4l2_redSignalThreshold_expl" : "Darkens low red values (recognized as black)",
@ -510,6 +511,14 @@
"edt_conf_v4l2_greenSignalThreshold_expl" : "Darkens low green values (recognized as black)",
"edt_conf_v4l2_blueSignalThreshold_title" : "Blue signal threshold",
"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_type_title" : "Type",
"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_level_title" : "Log-Level",
"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_police_header_title" : "Police",
"edt_eff_fade_header_title" : "Fade",
"edt_eff_rainbowmood_header_title" : "Rainbow Mood",
"edt_eff_knightrider_header_title" : "Knight Rider",
"edt_eff_lightclock_header_title" : "Clock 1",
"edt_eff_clock_header_title" : "Clock 2",
"edt_eff_pacman_header_title" : "Pac-Man",
"edt_eff_moodblobs_header_title" : "Mood Blobs",
"edt_eff_rainbowswirl_header_title" : "Rainbow Swirl",
"edt_eff_random_header_title" : "Random",
"edt_eff_runningdots_header_title" : "Running Dots",
"edt_eff_systemshutdown_header_title" : "System Shutdown",
"edt_eff_snake_header_title" : "Snake",
"edt_eff_sparks_header_title" : "Sparks",
"edt_eff_traces_header_title" : "Color Traces",
"edt_eff_x-mas_header_title" : "X-Mas",
"edt_eff_trails_header_title" : "Trails",
"edt_eff_candle_header" : "Candle",
"edt_eff_police_header" : "Police",
"edt_eff_fade_header" : "Fade",
"edt_eff_rainbowmood_header" : "Rainbow Mood",
"edt_eff_rainbowmood_header_desc" : "All leds rainbow mood",
"edt_eff_knightrider_header" : "Knight Rider",
"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_lightclock_header" : "Light Clock",
"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_pacman_header" : "Pac-Man",
"edt_eff_moodblobs_header" : "Mood Blobs",
"edt_eff_swirl_header" : "Color Swirl",
"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_random_header" : "Random",
"edt_eff_runningdots_header" : "Running Dots",
"edt_eff_systemshutdown_header" : "System Shutdown",
"edt_eff_snake_header" : "Snake",
"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-together" : "All together",
"edt_eff_enum_list" : "LED List",
"edt_eff_count_title" : "Count",
"edt_eff_color_title" : "Color",
"edt_eff_colorrandom_title" : "Random color",
"edt_eff_colorone_title" : "Color one",
"edt_eff_colortwo_title" : "Color two",
"edt_eff_colorcount_title" : "Color length",
"edt_eff_rotationtime_title" : "Rotation time",
"edt_eff_sleeptime_title" : "Sleep time",
"edt_eff_reversedirection_title" : "Reverse direction",
"edt_eff_fadeintime_title" : "Fade in time",
"edt_eff_fadeouttime_title" : "Fade out time",
"edt_eff_repeat_title" : "Repeat",
"edt_eff_repeatcount_title" : "Repeat count",
"edt_eff_colorendtime_title" : "Time to hold start color",
"edt_eff_colorstarttime_title" : "Time to hold end color",
"edt_eff_colorstart_title" : "Color start",
"edt_eff_colorend_title" : "Color end",
"edt_eff_maintain_end_color_title" : "Keep endcolor",
"edt_eff_colorshift_title" : "Color Shift",
"edt_eff_whichleds_title" : "Which Leds",
"edt_eff_ledlist_title" : "Led List",
"edt_eff_speed_title" : "Speed",
"edt_eff_fadefactor_title" : "Fade factor",
"edt_eff_showseconds_title" : "Show seconds",
"edt_eff_blobcount_title" : "Blob count",
"edt_eff_huechange_title" : "Color change",
"edt_eff_basecolorchange_title" : "Base color change",
"edt_eff_basecolorchangerate_title" : "BC change rate",
"edt_eff_basecolorrangeleft_title" : "BC range left",
"edt_eff_basecolorrangeright_title" : "BC range right",
"edt_eff_brightness_title" : "Brightness",
"edt_eff_centerx_title" : "Center X-Axis",
"edt_eff_centery_title" : "Center Y-Axis",
"edt_eff_saturation_title" : "Saturation",
"edt_eff_colorevel_title" : "Color level",
"edt_eff_whitelevel_title" : "White level",
"edt_eff_alarmcolor_title" : "Alarm color",
"edt_eff_postcolor_title" : "Post color",
"edt_eff_enableshutdown_title" : "Real shutdown",
"edt_eff_length_title" : "Length",
"edt_eff_frequency_title" : "Frequency",
"edt_eff_min_len_title" : "Minimal length",
"edt_eff_max_len_title" : "Maximal length",
"edt_eff_height_title" : "Height",
"edt_eff_offset_title" : "Offset",
"edt_eff_colorHour_title" : "Color hour",
"edt_eff_colorMinute_title" : "Color minute",
"edt_eff_colorSecond_title" : "Color second",
"edt_eff_hourMargin_title" : "Margin hour",
"edt_eff_minuteMargin_title" : "Margin minute",
"edt_eff_secondMargin_title" : "Margin second",
"edt_eff_margin_title" : "Margin",
"edt_eff_colorMarker_title" : "Color marker",
"edt_eff_count" : "Count",
"edt_eff_color" : "Color",
"edt_eff_colorrandom" : "Random color",
"edt_eff_colorone" : "Color one",
"edt_eff_colortwo" : "Color two",
"edt_eff_colorcount" : "Color length",
"edt_eff_rotationtime" : "Rotation time",
"edt_eff_sleeptime" : "Sleep time",
"edt_eff_reversedirection" : "Reverse direction",
"edt_eff_fadeintime" : "Fade in time",
"edt_eff_fadeouttime" : "Fade out time",
"edt_eff_repeat" : "Repeat",
"edt_eff_repeatcount" : "Repeat count",
"edt_eff_colorendtime" : "Time to hold start color",
"edt_eff_colorstarttime" : "Time to hold end color",
"edt_eff_colorstart" : "Color start",
"edt_eff_colorend" : "Color end",
"edt_eff_maintain_end_color" : "Keep endcolor",
"edt_eff_colorshift" : "Color Shift",
"edt_eff_whichleds" : "Which Leds",
"edt_eff_ledlist" : "Led List",
"edt_eff_speed" : "Speed",
"edt_eff_fadefactor" : "Fade factor",
"edt_eff_showseconds" : "Show seconds",
"edt_eff_blobcount" : "Blob count",
"edt_eff_huechange" : "Color change",
"edt_eff_basecolorchange" : "Base color change",
"edt_eff_basecolorchangerate" : "BC change rate",
"edt_eff_basecolorrangeleft" : "BC range left",
"edt_eff_basecolorrangeright" : "BC range right",
"edt_eff_brightness" : "Brightness",
"edt_eff_centerx" : "Center X-Axis",
"edt_eff_centery" : "Center Y-Axis",
"edt_eff_saturation" : "Saturation",
"edt_eff_colorevel" : "Color level",
"edt_eff_whitelevel" : "White level",
"edt_eff_alarmcolor" : "Alarm color",
"edt_eff_postcolor" : "Post color",
"edt_eff_enableshutdown" : "Real shutdown",
"edt_eff_length" : "Length",
"edt_eff_frequency" : "Frequency",
"edt_eff_min_len" : "Minimal length",
"edt_eff_max_len" : "Maximal length",
"edt_eff_height" : "Height",
"edt_eff_offset" : "Offset",
"edt_eff_colorHour" : "Color hour",
"edt_eff_colorMinute" : "Color minute",
"edt_eff_colorSecond" : "Color second",
"edt_eff_colorMarker" : "Marker color",
"edt_eff_markerWidth" : "Marker width",
"edt_eff_markerDepth" : "Marker depth",
"edt_eff_markerEnable" : "Show 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_ms" : "ms",
"edt_append_s" : "s",

View File

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

View File

@ -9,15 +9,7 @@ $(document).ready( function() {
var backgroundEffect_editor = null;
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
$('#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'));
@ -27,15 +19,22 @@ $(document).ready( function() {
$('#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(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
{
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').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'));
if(storedAccess != 'default')
$('#conf_cont').append(createOptPanel('fa-spinner', $.i18n("edt_conf_effp_heading_title"), 'editor_container_effects', 'btn_submit_effects'));
}
if(storedAccess != 'default')
@ -68,34 +67,10 @@ $(document).ready( function() {
foregroundEffect_editor.on('change',function() {
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.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() {
@ -143,12 +118,8 @@ $(document).ready( function() {
$('#root_backgroundEffect_effect').html($('#root_foregroundEffect_effect').html());
oldEffects = newEffects;
$('#root_foregroundEffect_effect').val(confFgEff).change();
//$('select').trigger('change');
//var fgeff = foregroundEffect_editor.getEditor('root.foregroundEffect.effect').setValue(confFgEff);
//console.log(fgeff);
$('#root_backgroundEffect_effect').val(confBgEff).change();
$('#root_foregroundEffect_effect').val(confFgEff);
$('#root_backgroundEffect_effect').val(confBgEff);
}
}
}

View File

@ -13,17 +13,18 @@ $(document).ready( function() {
var newDelList = serverInfo.effects;
if(newDelList.length != oldDelList.length)
{
var EffectHtml = null;
$('#effectsdellist').html("");
var usrEffArr = [];
var sysEffArr = [];
for(var idx=0; idx<newDelList.length; idx++)
{
if(!/^\:/.test(newDelList[idx].file))
{
EffectHtml += '<option value="'+newDelList[idx].name+'">'+newDelList[idx].name+'</option>';
}
usrEffArr.push('ext_'+newDelList[idx].name+':'+newDelList[idx].name);
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;
$('#effectsdellist').trigger('change');
}
}
@ -35,15 +36,23 @@ $(document).ready( function() {
$("#effectslist").off().on("change", function(event) {
if(effects_editor != null)
effects_editor.destroy();
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', {
args : effects[idx].schemaContent,
},false, true);
effectPy = ':';
effectPy += effects[idx].schemaContent.script;
},false, true, false);
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() {
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 != "")
{
$('#btn_start_test').attr('disabled', false);
$('#btn_write').attr('disabled', false);
$('#btn_start_test, #btn_write').attr('disabled', false);
}
else
{
$('#btn_start_test').attr('disabled', true);
$('#btn_write').attr('disabled', true);
$('#btn_start_test, #btn_write').attr('disabled', true);
}
});
});
@ -109,11 +116,40 @@ $(document).ready( function() {
});
$('#effectsdellist').off().on('change', function(){
if ($(this).val() == null) {
$('#btn_delete').prop('disabled',true);
} else {
$('#btn_delete').prop('disabled',false);
}
$(this).val() == null ? $('#btn_edit, #btn_delete').prop('disabled',true) : "";
$(this).val().startsWith("int_") ? $('#btn_delete').prop('disabled',true) : $('#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

View File

@ -6,6 +6,7 @@
$(document).ready(function() {
var messages;
var loguplmess = "";
var reportUrl = 'https://report.hyperion-project.org/#';
$('#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;
//create log
if(messages)
{
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!";
log = (messages ? loguplmess : "Log was empty!");
//create general info
info = "### GENERAL ### \n";
@ -187,10 +167,11 @@ $(document).ready(function() {
var 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')){
$('#logmessages').stop().animate({

View File

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

View File

@ -13,7 +13,7 @@ $(document).ready(function() {
{
createHint('intro', $.i18n('main_ledsim_text'), 'ledsim_text');
$('#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)

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 = [];
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) {
this.container = container;
@ -6205,7 +6280,67 @@ JSONEditor.defaults.editors.colorPicker = JSONEditor.defaults.editors.string.ext
$(this.input).colorpicker().on('changeColor', function(e) {
$(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 () {
@ -7083,6 +7218,12 @@ JSONEditor.defaults.resolvers.unshift(function(schema) {
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.

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)
{
if(typeof max === 'undefined' || max == "")
@ -285,34 +290,39 @@ function isJsonString(str)
return "";
}
function createJsonEditor(container,schema,setconfig,usePanel)
function createJsonEditor(container,schema,setconfig,usePanel,arrayre)
{
$('#'+container).off();
$('#'+container).html("");
//JSONEditor.plugins.selectize.enable = true;
if (typeof arrayre === 'undefined')
arrayre = true;
var editor = new JSONEditor(document.getElementById(container),
{
theme: 'bootstrap3',
iconlib: "fontawesome4",
disable_collapse: 'true',
form_name_root: 'sa',
disable_edit_json: 'true',
disable_properties: 'true',
disable_array_reorder: 'true',
no_additional_properties: 'true',
disable_array_delete_all_rows: 'true',
disable_array_delete_last_row: 'true',
disable_edit_json: true,
disable_properties: true,
disable_array_reorder: arrayre,
no_additional_properties: true,
disable_array_delete_all_rows: true,
disable_array_delete_last_row: true,
access: storedAccess,
schema: {
title:'',
properties: schema
}
});
if(usePanel)
{
$('#'+container+' .well').first().removeClass('well well-sm');
$('#'+container+' h4').remove();
$('#'+container+' h4').first().remove();
$('#'+container+' .well').first().removeClass('well well-sm');
}
@ -591,14 +601,21 @@ function createSelOpt(opt, title)
return el;
}
function createSel(array, group)
function createSel(array, group, split)
{
if (array.length != "0")
if (array.length != 0)
{
var el = createSelGroup(group);
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);
}
return el;

View File

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

View File

@ -75,14 +75,14 @@
"cropRight" : 0,
"cropTop" : 0,
"cropBottom" : 0,
"redSignalThreshold" : 0.0,
"greenSignalThreshold" : 0.0,
"blueSignalThreshold" : 0.0,
"signalDetection" : true,
"signalDetectionVerticalOffsetMin" : 0.25,
"signalDetectionHorizontalOffsetMin" : 0.25,
"signalDetectionVerticalOffsetMax" : 0.75,
"signalDetectionHorizontalOffsetMax" : 0.75
"redSignalThreshold" : 5,
"greenSignalThreshold" : 5,
"blueSignalThreshold" : 5,
"signalDetection" : false,
"sDVOffsetMin" : 0.25,
"sDHOffsetMin" : 0.25,
"sDVOffsetMax" : 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",
"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
hyperion.imageMinSize(32,32)
# Get the parameters
showSeconds = bool(hyperion.args.get('show_seconds', True))
centerX = int(round(hyperion.imageWidth())/2)
centerY = int(round(float(hyperion.imageHeight())/2))
showSec = bool(hyperion.args.get('show_seconds', True))
hC = hyperion.args.get('hour-color', (0,0,255))
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([
0, 255,255,0,255,
5, 255,255,0,255,
30, 0,0,0,0,
0, sC[0],sC[1],sC[2],255,
8, sC[0],sC[1],sC[2],255,
10, 0,0,0,0,
])
colorsMinute = bytearray([
0, 0,255,0,255,
5, 0,255,0,250,
0, mC[0],mC[1],mC[2],255,
35, mC[0],mC[1],mC[2],255,
50, mC[0],mC[1],mC[2],127,
90, 0,0,0,0,
])
colorsHour = bytearray([
0, 0,0,255,255,
10, 0,0,255,255,
127, 0,0,196,127,
255, 0,0,196,5,
0, hC[0],hC[1],hC[2],255,
90, hC[0],hC[1],hC[2],255,
150, hC[0],hC[1],hC[2],127,
191, 0,0,0,0,
])
colorsHourTop = bytearray([
0, 0,0,255,250,
10, 0,0,255,128,
20, 0,0,0,0,
])
# effect loop
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)
angleM = 449 - 6*now.minute
angleS = 449 - 6*now.second
angleH -= 0 if angleH<360 else 360
angleM -= 0 if angleM<360 else 360
angleS -= 0 if angleS<360 else 360
hyperion.imageSolidFill(127,127,127);
hyperion.imageCanonicalGradient(centerX, centerY, angleH, colorsHour)
hyperion.imageCanonicalGradient(centerX, centerY, angleM, colorsMinute)
hyperion.imageCanonicalGradient(centerX, centerY, angleH, colorsHourTop)
if showSeconds:
hyperion.imageCanonicalGradient(centerX, centerY, angleS, colorsSecond)
#reset image
hyperion.imageSolidFill(bgC[0],bgC[1],bgC[2])
#paint clock
if angleH-angleM < 90 and angleH-angleM > 0:
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()
time.sleep(0.5 )
time.sleep(0.5)

View File

@ -1,11 +1,15 @@
{
"name" : "Rainbow swirl fast",
"script" : "rainbow-swirl.py",
"script" : "swirl.py",
"args" :
{
"rotation-time" : 4.0,
"rotation-time" : 7.0,
"center_x" : 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",
"script" : "rainbow-swirl.py",
"script" : "swirl.py",
"args" :
{
"rotation-time" : 20.0,
"center_x" : 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",
"script" : "candle.py",
"title":"edt_eff_candle_header_title",
"title":"edt_eff_candle_header",
"required":true,
"properties":{
"candles": {
"type": "string",
"title":"edt_eff_whichleds_title",
"title":"edt_eff_whichleds",
"enum" : ["all","all-together","list"],
"default" : "all",
"options" : {
@ -16,13 +16,18 @@
},
"ledlist": {
"type": "string",
"title":"edt_eff_ledlist_title",
"title":"edt_eff_ledlist",
"default" : "1,11,21",
"options": {
"dependencies": {
"candles": "list"
}
},
"propertyOrder" : 2
},
"color": {
"type": "array",
"title":"edt_eff_color_title",
"title":"edt_eff_color",
"format":"colorpicker",
"default": [255,138,0],
"items" : {
@ -35,8 +40,8 @@
"propertyOrder" : 3
},
"colorShift": {
"type": "number",
"title":"edt_eff_colorshift_title",
"type": "integer",
"title":"edt_eff_colorshift",
"default": 1,
"minimum" : 0,
"maximum": 30,
@ -44,8 +49,8 @@
"propertyOrder" : 4
},
"brightness": {
"type": "number",
"title":"edt_eff_brightness_title",
"type": "integer",
"title":"edt_eff_brightness",
"default": 100,
"minimum" : 1,
"maximum": 100,
@ -55,7 +60,7 @@
},
"sleepTime": {
"type": "number",
"title":"edt_eff_sleeptime_title",
"title":"edt_eff_sleeptime",
"default": 0.15,
"minimum" : 0.01,
"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",
"script" : "fade.py",
"title":"edt_eff_fade_header_title",
"title":"edt_eff_fade_header",
"required":true,
"properties":{
"color-start": {
"type": "array",
"title":"edt_eff_colorstart_title",
"title":"edt_eff_colorstart",
"format":"colorpicker",
"default": [255,174,11],
"items" : {
@ -21,7 +21,7 @@
},
"color-start-time": {
"type": "integer",
"title":"edt_eff_colorstarttime_title",
"title":"edt_eff_colorstarttime",
"default": 1000,
"minimum" : 0,
"append" : "edt_append_ms",
@ -29,7 +29,7 @@
},
"fade-in-time": {
"type": "integer",
"title":"edt_eff_fadeintime_title",
"title":"edt_eff_fadeintime",
"default": 2000,
"minimum" : 0,
"append" : "edt_append_ms",
@ -37,7 +37,7 @@
},
"color-end": {
"type": "array",
"title":"edt_eff_colorend_title",
"title":"edt_eff_colorend",
"format":"colorpicker",
"default": [100,100,100],
"items" : {
@ -51,7 +51,7 @@
},
"color-end-time": {
"type": "integer",
"title":"edt_eff_colorendtime_title",
"title":"edt_eff_colorendtime",
"default": 1000,
"minimum" : 0,
"append" : "edt_append_ms",
@ -59,7 +59,7 @@
},
"fade-out-time": {
"type": "integer",
"title":"edt_eff_fadeouttime_title",
"title":"edt_eff_fadeouttime",
"default": 2000,
"minimum" : 0,
"append" : "edt_append_ms",
@ -67,13 +67,13 @@
},
"repeat-count": {
"type": "integer",
"title":"edt_eff_repeatcount_title",
"title":"edt_eff_repeatcount",
"default": 0,
"propertyOrder" : 7
},
"maintain-end-color": {
"type": "boolean",
"title":"edt_eff_maintain_end_color_title",
"title":"edt_eff_maintain_end_color",
"default": true,
"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",
"script" : "knight-rider.py",
"title":"edt_eff_knightrider_header_title",
"title":"edt_eff_knightrider_header",
"required":true,
"properties":{
"color": {
"type": "array",
"title":"edt_eff_color_title",
"title":"edt_eff_color",
"format":"colorpicker",
"default": [255,0,0],
"items" : {
@ -20,7 +20,7 @@
},
"speed": {
"type": "number",
"title":"edt_eff_speed_title",
"title":"edt_eff_speed",
"default": 1.0,
"minimum": 0.1,
"step" : 0.1,
@ -28,7 +28,7 @@
},
"fadeFactor": {
"type": "number",
"title":"edt_eff_fadefactor_title",
"title":"edt_eff_fadefactor",
"default": 0.7,
"minimum" : 0.0,
"maximum" : 0.9,

View File

@ -1,14 +1,123 @@
{
"type":"object",
"script" : "light-clock.py",
"title":"edt_eff_lightclock_header_title",
"title":"edt_eff_lightclock_header",
"required":true,
"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": {
"type": "boolean",
"title":"edt_eff_showseconds_title",
"title":"edt_eff_showseconds",
"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

View File

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

View File

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

View File

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

View File

@ -1,12 +1,12 @@
{
"type":"object",
"script" : "rainbow-mood.py",
"title":"edt_eff_rainbowmood_header_title",
"title":"edt_eff_rainbowmood_header",
"required":true,
"properties":{
"rotation-time": {
"type": "number",
"title":"edt_eff_rotationtime_title",
"title":"edt_eff_rotationtime",
"default": 60.0,
"minimum" : 1.0,
"append" : "edt_append_s",
@ -14,7 +14,7 @@
},
"brightness": {
"type": "number",
"title":"edt_eff_brightness_title",
"title":"edt_eff_brightness",
"default": 100,
"minimum" : 1,
"maximum" : 100,
@ -24,7 +24,7 @@
},
"saturation": {
"type": "number",
"title":"edt_eff_saturation_title",
"title":"edt_eff_saturation",
"default": 100,
"minimum" : 1,
"maximum" : 100,
@ -34,7 +34,7 @@
},
"reverse": {
"type": "boolean",
"title":"edt_eff_reversedirection_title",
"title":"edt_eff_reversedirection",
"default": false,
"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",
"script" : "random.py",
"title":"edt_eff_random_header_title",
"title":"edt_eff_random_header",
"required":true,
"properties":{
"speed": {
"type": "number",
"title":"edt_eff_speed_title",
"title":"edt_eff_speed",
"default": 1000,
"minimum" : 10,
"append" : "edt_append_ms",
@ -14,7 +14,7 @@
},
"saturation": {
"type": "number",
"title":"edt_eff_saturation_title",
"title":"edt_eff_saturation",
"default": 1.0,
"minimum" : 0.1,
"maximum" : 1.0,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,12 +1,12 @@
{
"type":"object",
"script" : "x-mas.py",
"title":"edt_eff_x-mas_header_title",
"title":"edt_eff_x-mas_header",
"required":true,
"properties":{
"sleepTime": {
"type": "integer",
"title":"edt_eff_sleeptime_title",
"title":"edt_eff_sleeptime",
"default": 1000,
"minimum" : 100,
"append" : "edt_append_ms",
@ -14,14 +14,14 @@
},
"length": {
"type": "integer",
"title":"edt_eff_length_title",
"title":"edt_eff_length",
"default": 1,
"minimum" : 1,
"propertyOrder" : 2
},
"color1": {
"type": "array",
"title":"edt_eff_color_title",
"title":"edt_eff_color",
"format":"colorpicker",
"default": [255,255,255],
"items" : {
@ -35,7 +35,7 @@
},
"color2": {
"type": "array",
"title":"edt_eff_color_title",
"title":"edt_eff_color",
"format":"colorpicker",
"default": [255,0,0],
"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,
"brightness" : 100,
"saturation" : 100,
"reverse" : false,
"color" : [255,255,255],
"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))
brightness = float(hyperion.args.get('brightness', 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)))
randomColor = bool(hyperion.args.get('random-color', False))
@ -24,7 +23,7 @@ while not hyperion.abort():
if random.random() < 0.005:
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):
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))
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))
sleepTime = float(hyperion.args.get('speed', 1)) / 1000.0
color = list(hyperion.args.get('color', (255,255,255)))
randomise = bool(hyperion.args.get('random', False))
whidth = hyperion.ledCount / height
iWidth = hyperion.imageWidth()
iHeight = hyperion.imageHeight()
class trail:
def __init__(self):
@ -48,17 +49,17 @@ for i in range(trails):
r = {'exec': trail()}
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:
col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0)
r['exec'].start(
random.randint(0, whidth),
random.randint(0, height),
random.randint(0, iWidth),
random.randint(0, iHeight),
random.uniform(0.2, 0.8),
col,
random.randint(min_len, max_len),
height
iHeight
)
tr.append(r)
@ -70,21 +71,21 @@ while not hyperion.abort():
r['x'], r['data'], c = r['exec'].getdata()
if c:
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:
col = colorsys.rgb_to_hsv(color[0]/255.0, color[1]/255.0, color[2]/255.0)
r['exec'].start(
random.randint(0, whidth),
random.randint(0, height),
random.randint(0, iWidth),
random.randint(0, iHeight),
random.uniform(0.2, 0.8),
col,
random.randint(min_len, max_len),
height
iHeight
)
for y in range(0, height):
for x in range(0, whidth):
for y in range(0, iHeight):
for x in range(0, iWidth):
for r in tr:
if x == r['x']:
led = bytearray(r['data'][y])
@ -92,6 +93,6 @@ while not hyperion.abort():
led = bytearray((0,0,0))
ledData += led
hyperion.setImage(whidth,height,ledData)
hyperion.setImage(iWidth,iHeight,ledData)
time.sleep(sleepTime)

View File

@ -14,6 +14,7 @@
#include <QJsonValue>
#include <QJsonArray>
#include <QTimer>
#include <QFileSystemWatcher>
// hyperion-utils includes
#include <utils/Image.h>
@ -329,8 +330,8 @@ private slots:
void bonjourRecordResolved(const QHostInfo &hostInfo, int port);
void bonjourResolve();
/// check for configWriteable and modified changes, called by _cTimer timeout()
void checkConfigState();
/// check for configWriteable and modified changes, called by _fsWatcher or fallback _cTimer
void checkConfigState(QString cfile = NULL);
private:
@ -411,7 +412,8 @@ private:
BonjourRegister _hyperionSessions;
QString _bonjourCurrentServiceToResolve;
/// Interval timer to check config write and mod
/// Observe filesystem changes (_configFile), if failed use Timer
QFileSystemWatcher _fsWatcher;
QTimer _cTimer;
/// 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."},
{"abort" , Effect::wrapAbort , METH_NOARGS, "Check if the effect should abort execution."},
{"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, ""},
{"imageSolidFill" , Effect::wrapImageSolidFill , METH_VARARGS, ""},
{"imageDrawLine" , Effect::wrapImageDrawLine , METH_VARARGS, ""},
{"imageDrawPoint" , Effect::wrapImageDrawPoint , 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"},
{"imageGetPixel" , Effect::wrapImageGetPixel , METH_VARARGS, "get pixel color of 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"},
{"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}
};
@ -224,6 +232,7 @@ PyObject *Effect::json2python(const QJsonValue &jsonData) const
for (QJsonArray::iterator i = arrayData.begin(); i != arrayData.end(); ++i, ++index)
{
PyObject * obj = json2python(*i);
Py_INCREF(obj);
PyList_SetItem(list, index, obj);
Py_XDECREF(obj);
}
@ -452,8 +461,76 @@ PyObject* Effect::wrapImageShow(PyObject *self, PyObject *args)
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();
@ -527,30 +604,30 @@ PyObject* Effect::wrapImageRadialGradient(PyObject *self, PyObject *args)
int argCount = PyTuple_Size(args);
PyObject * bytearray = nullptr;
int centerX, centerY, radius, focalX, focalY, focalRadius;
int centerX, centerY, radius, focalX, focalY, focalRadius, spread;
int startX = 0;
int startY = 0;
int width = effect->_imageSize.width();
int height = effect->_imageSize.height();
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;
}
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;
focalX = centerX;
focalY = centerY;
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;
}
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;
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);
return Py_BuildValue("");
@ -601,6 +678,160 @@ PyObject* Effect::wrapImageRadialGradient(PyObject *self, PyObject *args)
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)
{
Effect * effect = getEffect();
@ -682,6 +913,40 @@ PyObject* Effect::wrapImageDrawLine(PyObject *self, PyObject *args)
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)
{
@ -801,6 +1066,62 @@ PyObject* Effect::wrapImageHeight(PyObject *self, PyObject *args)
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()
{
// extract the module from the runtime

View File

@ -58,18 +58,25 @@ private:
static PyObject* wrapSetImage (PyObject *self, PyObject *args);
static PyObject* wrapAbort (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* wrapImageSolidFill (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* wrapImageDrawPolygon (PyObject *self, PyObject *args);
static PyObject* wrapImageDrawPie (PyObject *self, PyObject *args);
static PyObject* wrapImageSetPixel (PyObject *self, PyObject *args);
static PyObject* wrapImageGetPixel (PyObject *self, PyObject *args);
static PyObject* wrapImageSave (PyObject *self, PyObject *args);
static PyObject* wrapImageMinSize (PyObject *self, PyObject *args);
static PyObject* wrapImageWidth (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();
#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);
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();
QObject::connect(&_cTimer, SIGNAL(timeout()), this, SLOT(checkConfigState()));
_cTimer.start(2000);
if(_fsWatcher.addPath(_configFile))
{
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
QObject::connect(&_muxer, &PriorityMuxer::timerunner, this, &Hyperion::hyperionStateChanged);
@ -545,7 +553,7 @@ Hyperion::BonjourRegister Hyperion::getHyperionSessions()
return _hyperionSessions;
}
void Hyperion::checkConfigState()
void Hyperion::checkConfigState(QString cfile)
{
// Check config modifications
QFile f(_configFile);

View File

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

View File

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

View File

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

View File

@ -140,84 +140,112 @@
{
"type" : "boolean",
"title" : "edt_conf_v4l2_signalDetection_title",
"default" : true,
"default" : false,
"propertyOrder" : 16
},
"redSignalThreshold" :
{
"type" : "number",
"title" : "edt_conf_v4l2_redSignalThreshold_title",
"minimum" : 0.0,
"maximum" : 1.0,
"default" : 0.1,
"step" : 0.005,
"minimum" : 0,
"maximum" : 100,
"default" : 5,
"append" : "edt_append_percent",
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 17
},
"greenSignalThreshold" :
{
"type" : "number",
"title" : "edt_conf_v4l2_greenSignalThreshold_title",
"minimum" : 0.0,
"maximum" : 1.0,
"default" : 0.1,
"step" : 0.025,
"minimum" : 0,
"maximum" : 100,
"default" : 5,
"append" : "edt_append_percent",
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 18
},
"blueSignalThreshold" :
{
"type" : "number",
"title" : "edt_conf_v4l2_blueSignalThreshold_title",
"minimum" : 0.0,
"maximum" : 1.0,
"default" : 0.1,
"step" : 0.005,
"minimum" : 0,
"maximum" : 100,
"default" : 5,
"append" : "edt_append_percent",
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 19
},
"signalDetectionVerticalOffsetMin" :
"sDVOffsetMin" :
{
"type" : "number",
"title" : "edt_conf_v4l2_signalDetectionVerticalOffsetMin_title",
"title" : "edt_conf_v4l2_sDVOffsetMin_title",
"minimum" : 0.0,
"maximum" : 1.0,
"default" : 0.1,
"step" : 0.005,
"append" : "edt_append_percent",
"default" : 0.25,
"step" : 0.01,
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 20
},
"signalDetectionVerticalOffsetMax" :
"sDVOffsetMax" :
{
"type" : "number",
"title" : "edt_conf_v4l2_signalDetectionVerticalOffsetMax_title",
"title" : "edt_conf_v4l2_sDVOffsetMax_title",
"minimum" : 0.0,
"maximum" : 1.0,
"default" : 0.1,
"step" : 0.005,
"append" : "edt_append_percent",
"default" : 0.75,
"step" : 0.01,
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 21
},
"signalDetectionHorizontalOffsetMin" :
"sDHOffsetMin" :
{
"type" : "number",
"title" : "edt_conf_v4l2_signalDetectionHorizontalOffsetMin_title",
"title" : "edt_conf_v4l2_sDHOffsetMin_title",
"minimum" : 0.0,
"maximum" : 1.0,
"default" : 0.1,
"step" : 0.005,
"append" : "edt_append_percent",
"default" : 0.25,
"step" : 0.01,
"options": {
"dependencies": {
"signalDetection": true
}
},
"propertyOrder" : 22
},
"signalDetectionHorizontalOffsetMax" :
"sDHOffsetMax" :
{
"type" : "number",
"title" : "edt_conf_v4l2_signalDetectionHorizontalOffsetMax_title",
"title" : "edt_conf_v4l2_sDHOffsetMax_title",
"minimum" : 0.0,
"maximum" : 1.0,
"default" : 0.1,
"step" : 0.005,
"append" : "edt_append_percent",
"default" : 0.75,
"step" : 0.01,
"options": {
"dependencies": {
"signalDetection": true
}
},
"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["frameDecimation"].toInt(2),
grabberConfig["sizeDecimation"].toInt(8),
grabberConfig["redSignalThreshold"].toDouble(0.0),
grabberConfig["greenSignalThreshold"].toDouble(0.0),
grabberConfig["blueSignalThreshold"].toDouble(0.0),
grabberConfig["redSignalThreshold"].toDouble(0.0)/100.0,
grabberConfig["greenSignalThreshold"].toDouble(0.0)/100.0,
grabberConfig["blueSignalThreshold"].toDouble(0.0)/100.0,
grabberConfig["priority"].toInt(890));
grabber->set3D(parse3DMode(grabberConfig["mode"].toString("2D")));
grabber->setCropping(
@ -596,10 +596,10 @@ void HyperionDaemon::createGrabberV4L2()
grabberConfig["cropBottom"].toInt(0));
grabber->setSignalDetectionEnable(grabberConfig["signalDetection"].toBool(true));
grabber->setSignalDetectionOffset(
grabberConfig["signalDetectionHorizontalOffsetMin"].toDouble(0.25),
grabberConfig["signalDetectionVerticalOffsetMin"].toDouble(0.25),
grabberConfig["signalDetectionHorizontalOffsetMax"].toDouble(0.75),
grabberConfig["signalDetectionVerticalOffsetMax"].toDouble(0.75));
grabberConfig["sDHOffsetMin"].toDouble(0.25),
grabberConfig["sDVOffsetMin"].toDouble(0.25),
grabberConfig["sDHOffsetMax"].toDouble(0.75),
grabberConfig["sDVOffsetMax"].toDouble(0.75));
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)));