From c7b3088a98c25d052de5ce917e199c8099f61c5c Mon Sep 17 00:00:00 2001 From: Paul Philippov Date: Fri, 21 Feb 2025 21:45:26 -0500 Subject: [PATCH] scripts: rewrite day/night mode elements controls --- overlay/lower/usr/sbin/color | 25 +++++++------------- overlay/lower/usr/sbin/daynight | 18 +++++++++------ overlay/lower/usr/sbin/ircut | 41 +++++++++++++++------------------ 3 files changed, 38 insertions(+), 46 deletions(-) diff --git a/overlay/lower/usr/sbin/color b/overlay/lower/usr/sbin/color index 5b6e4af0c..4123ce43f 100755 --- a/overlay/lower/usr/sbin/color +++ b/overlay/lower/usr/sbin/color @@ -1,52 +1,43 @@ #!/bin/sh -# set parameters from cli, if empty -[ -z "$mode" ] && mode=$1 - -MODE_FILE=/tmp/colormode.txt +MODE_FILE="/tmp/colormode.txt" [ -f "$MODE_FILE" ] || touch "$MODE_FILE" # NB! ISP mode is set backwards: 0 - color, 1 - monochrome -show_help() { - echo "Usage: $0 [on|off|toggle|status|read]" >&2 - exit 1 -} - switch_to_color() { imp-control ispmode 0 - echo "Switched to full-color mode" echo "1" > "$MODE_FILE" } switch_to_monochrome() { imp-control ispmode 1 - echo "Switched to monochrome mode" echo "0" > "$MODE_FILE" } case "$1" in - 0 | off) + 0 | off | night) switch_to_monochrome ;; - 1 | on) + 1 | on | day) switch_to_color ;; ~ | toggle) - if [ "$(cat $MODE_FILE 2> /dev/null)" -eq 1 ]; then + if [ "$(cat "$MODE_FILE")" -eq 1 ]; then switch_to_monochrome else switch_to_color fi ;; status) - cat $MODE_FILE + cat "$MODE_FILE" ;; \? | read) - cat $MODE_FILE | tr -d '\n' + cat "$MODE_FILE" | tr -d '\n' ;; *) - show_help + echo "Usage: $0 [on|off|toggle|status|read]" >&2 + exit 1 ;; esac diff --git a/overlay/lower/usr/sbin/daynight b/overlay/lower/usr/sbin/daynight index 6c92a2934..3be68f268 100755 --- a/overlay/lower/usr/sbin/daynight +++ b/overlay/lower/usr/sbin/daynight @@ -1,16 +1,20 @@ #!/bin/sh -die() { printf "\e[38;5;160m%s\e[0m\n" "$1" >&2; exit 1; } +die() { echo "$1" >&2; exit 1; } pidof -o %PPID $(basename $0) > /dev/null && die "is already running" +. /etc/web.conf +if [ -z "$day_night_color" ]; then + fw_printenv | grep ^day_night_ | sed -E 's/=(.*)$/="\1"/' >> /etc/web.conf + . /etc/web.conf +fi + STOP_FILE="/tmp/daynight.stop" MODE_FILE="/tmp/nightmode.txt" [ -f "$MODE_FILE" ] || echo "day" > "$MODE_FILE" -. /etc/web.conf - is_disabled() { [ -f "$STOP_FILE" ] } @@ -37,24 +41,24 @@ controls_white() { switch_to_day() { is_disabled && return - echo "switch to day" controls_ircut && ircut on controls_ir850 && irled off ir850 controls_ir940 && irled off ir940 controls_white && irled off white controls_color && color on - echo "day" > $MODE_FILE + echo "day" > "$MODE_FILE" + echo "switched to day" } switch_to_night() { is_disabled && return - echo "switch to night" controls_color && color off controls_ircut && ircut off controls_ir850 && irled on ir850 controls_ir940 && irled on ir940 controls_white && irled on white - echo "night" > $MODE_FILE + echo "night" > "$MODE_FILE" + echo "switched to night" } # determine luminance of the scene diff --git a/overlay/lower/usr/sbin/ircut b/overlay/lower/usr/sbin/ircut index 1d2b59dce..7f5121fdd 100755 --- a/overlay/lower/usr/sbin/ircut +++ b/overlay/lower/usr/sbin/ircut @@ -1,9 +1,13 @@ #!/bin/sh -die() { printf "\e[38;5;160m%s\e[0m\n" "$1" >&2; exit 1; } -info() { printf "\e[38;5;46m%s\e[0m\n" "$1" >&2; } +die() { echo "$1" >&2; exit 1; } -gpio_ircut=$(fw_printenv -n gpio_ircut) +. /etc/web.conf + +if [ -z "$gpio_ircut" ]; then + fw_printenv gpio_ircut | sed -E 's/=(.*)$/="\1"/' >> /etc/web.conf + . /etc/web.conf +fi pin1=$(echo $gpio_ircut | awk '{print $1}') if [ -n "$pin1" ]; then @@ -30,19 +34,6 @@ fi MODE_FILE="/tmp/ircutmode.txt" [ -f "$MODE_FILE" ] || touch "$MODE_FILE" -show_help() { - echo "Usage: $0 [on|off|toggle|status]" >&2 - exit 1 -} - -report_ir_filter() { - case "$(cat "$MODE_FILE")" in - 0) info "IRCUT filter is removed" ;; - 1) info "IRCUT filter is set" ;; - *) info "IRCUT filter is in unknown state" ;; - esac -} - ir_filter_off() { gpio set "$pin1" "$pin1_off" > /dev/null if [ -n "$pin2" ]; then @@ -66,24 +57,30 @@ ir_filter_on() { case "$1" in 0 | off | night) ir_filter_off - report_ir_filter ;; 1 | on | day) ir_filter_on - report_ir_filter ;; ~ | toggle) - [ "$(cat "$MODE_FILE")" -eq 0 ] && ir_filter_on || ir_filter_off - report_ir_filter + if [ "$(cat "$MODE_FILE")" -eq 0 ]; then + ir_filter_on + else + ir_filter_off + fi ;; status) - report_ir_filter + case "$(cat "$MODE_FILE")" in + 0) echo "IRCUT filter is removed" ;; + 1) echo "IRCUT filter is set" ;; + *) echo "IRCUT filter is in unknown state" ;; + esac ;; \? | read) cat "$MODE_FILE" | tr -d '\n' ;; *) - show_help + echo "Usage: $0 [on|off|toggle|status|read]" >&2 + exit 1 ;; esac