Răsfoiți Sursa

chore: add generated pattern previews and time-based LED brightness script

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
tuanchris 2 săptămâni în urmă
părinte
comite
e317f0ed10
52 a modificat fișierele cu 72 adăugiri și 0 ștergeri
  1. BIN
      patterns/cached_images/previews/AcklingDykeDorset 6-4-2018.thr.webp
  2. BIN
      patterns/cached_images/previews/BucklandDownDorset 5-26-2018.thr.webp
  3. BIN
      patterns/cached_images/previews/Butterfly.thr.webp
  4. BIN
      patterns/cached_images/previews/CleyHill 7-18-2017.thr.webp
  5. BIN
      patterns/cached_images/previews/Fractal.thr.webp
  6. BIN
      patterns/cached_images/previews/HackpenHill 6-9-2018.thr.webp
  7. BIN
      patterns/cached_images/previews/Hampton-on-Lucy 8-8-2015.thr.webp
  8. BIN
      patterns/cached_images/previews/Hosta.thr.webp
  9. BIN
      patterns/cached_images/previews/KeysleyDown 6-10-2018.thr.webp
  10. BIN
      patterns/cached_images/previews/LiddingtonCastle 6-24-2001.thr.webp
  11. BIN
      patterns/cached_images/previews/LongwoodWarrenHants 7-10-2018.thr.webp
  12. BIN
      patterns/cached_images/previews/MilkHill 6-2-2009.thr.webp
  13. BIN
      patterns/cached_images/previews/MilkHill 7-8-2011.thr.webp
  14. BIN
      patterns/cached_images/previews/Muncombe Hill 7-14-2018.thr.webp
  15. BIN
      patterns/cached_images/previews/OareWiltshire 6-21-2010.thr.webp
  16. BIN
      patterns/cached_images/previews/Petalar.thr.webp
  17. BIN
      patterns/cached_images/previews/SimpleRadiance.thr.webp
  18. BIN
      patterns/cached_images/previews/SineVsBezier2.thr.webp
  19. BIN
      patterns/cached_images/previews/Spiral6.thr.webp
  20. BIN
      patterns/cached_images/previews/Sponge.thr.webp
  21. BIN
      patterns/cached_images/previews/StarryNight.thr.webp
  22. BIN
      patterns/cached_images/previews/WinterbourneBassett 6-1-1997.thr.webp
  23. BIN
      patterns/cached_images/previews/WinterbourneStokeDown 7-18-2018.thr.webp
  24. BIN
      patterns/cached_images/previews/circle-packer-rings.thr.webp
  25. BIN
      patterns/cached_images/previews/dither_cells.thr.webp
  26. BIN
      patterns/cached_images/previews/dither_eccentricerase.thr.webp
  27. BIN
      patterns/cached_images/previews/dither_gears.thr.webp
  28. BIN
      patterns/cached_images/previews/dither_gosper4.thr.webp
  29. BIN
      patterns/cached_images/previews/dither_hypnogrid.thr.webp
  30. BIN
      patterns/cached_images/previews/dither_itsyourmove.thr.webp
  31. BIN
      patterns/cached_images/previews/dither_nautilus.thr.webp
  32. BIN
      patterns/cached_images/previews/dither_parallel.thr.webp
  33. BIN
      patterns/cached_images/previews/dither_sierpinski8.thr.webp
  34. BIN
      patterns/cached_images/previews/dither_strangthang.thr.webp
  35. BIN
      patterns/cached_images/previews/dither_sunburst.thr.webp
  36. BIN
      patterns/cached_images/previews/dither_tri4.thr.webp
  37. BIN
      patterns/cached_images/previews/dither_yinyang.thr.webp
  38. BIN
      patterns/cached_images/previews/fancy-tiles.thr.webp
  39. BIN
      patterns/cached_images/previews/flower-bubbles.thr.webp
  40. BIN
      patterns/cached_images/previews/hero_11loop2.thr.webp
  41. BIN
      patterns/cached_images/previews/hero_13wave1.thr.webp
  42. BIN
      patterns/cached_images/previews/hero_5loop1.thr.webp
  43. BIN
      patterns/cached_images/previews/hero_7loop4.thr.webp
  44. BIN
      patterns/cached_images/previews/hero_9wave2.thr.webp
  45. BIN
      patterns/cached_images/previews/hexagoner.thr.webp
  46. BIN
      patterns/cached_images/previews/noise-cell.thr.webp
  47. BIN
      patterns/cached_images/previews/rose.thr.webp
  48. BIN
      patterns/cached_images/previews/sawtooth.thr.webp
  49. BIN
      patterns/cached_images/previews/snowflake.thr.webp
  50. BIN
      patterns/cached_images/previews/swirl-overlay.thr.webp
  51. BIN
      patterns/cached_images/previews/turtle.thr.webp
  52. 72 0
      scripts/led_brightness_by_time.sh

BIN
patterns/cached_images/previews/AcklingDykeDorset 6-4-2018.thr.webp


BIN
patterns/cached_images/previews/BucklandDownDorset 5-26-2018.thr.webp


BIN
patterns/cached_images/previews/Butterfly.thr.webp


BIN
patterns/cached_images/previews/CleyHill 7-18-2017.thr.webp


BIN
patterns/cached_images/previews/Fractal.thr.webp


BIN
patterns/cached_images/previews/HackpenHill 6-9-2018.thr.webp


BIN
patterns/cached_images/previews/Hampton-on-Lucy 8-8-2015.thr.webp


BIN
patterns/cached_images/previews/Hosta.thr.webp


BIN
patterns/cached_images/previews/KeysleyDown 6-10-2018.thr.webp


BIN
patterns/cached_images/previews/LiddingtonCastle 6-24-2001.thr.webp


BIN
patterns/cached_images/previews/LongwoodWarrenHants 7-10-2018.thr.webp


BIN
patterns/cached_images/previews/MilkHill 6-2-2009.thr.webp


BIN
patterns/cached_images/previews/MilkHill 7-8-2011.thr.webp


BIN
patterns/cached_images/previews/Muncombe Hill 7-14-2018.thr.webp


BIN
patterns/cached_images/previews/OareWiltshire 6-21-2010.thr.webp


BIN
patterns/cached_images/previews/Petalar.thr.webp


BIN
patterns/cached_images/previews/SimpleRadiance.thr.webp


BIN
patterns/cached_images/previews/SineVsBezier2.thr.webp


BIN
patterns/cached_images/previews/Spiral6.thr.webp


BIN
patterns/cached_images/previews/Sponge.thr.webp


BIN
patterns/cached_images/previews/StarryNight.thr.webp


BIN
patterns/cached_images/previews/WinterbourneBassett 6-1-1997.thr.webp


BIN
patterns/cached_images/previews/WinterbourneStokeDown 7-18-2018.thr.webp


BIN
patterns/cached_images/previews/circle-packer-rings.thr.webp


BIN
patterns/cached_images/previews/dither_cells.thr.webp


BIN
patterns/cached_images/previews/dither_eccentricerase.thr.webp


BIN
patterns/cached_images/previews/dither_gears.thr.webp


BIN
patterns/cached_images/previews/dither_gosper4.thr.webp


BIN
patterns/cached_images/previews/dither_hypnogrid.thr.webp


BIN
patterns/cached_images/previews/dither_itsyourmove.thr.webp


BIN
patterns/cached_images/previews/dither_nautilus.thr.webp


BIN
patterns/cached_images/previews/dither_parallel.thr.webp


BIN
patterns/cached_images/previews/dither_sierpinski8.thr.webp


BIN
patterns/cached_images/previews/dither_strangthang.thr.webp


BIN
patterns/cached_images/previews/dither_sunburst.thr.webp


BIN
patterns/cached_images/previews/dither_tri4.thr.webp


BIN
patterns/cached_images/previews/dither_yinyang.thr.webp


BIN
patterns/cached_images/previews/fancy-tiles.thr.webp


BIN
patterns/cached_images/previews/flower-bubbles.thr.webp


BIN
patterns/cached_images/previews/hero_11loop2.thr.webp


BIN
patterns/cached_images/previews/hero_13wave1.thr.webp


BIN
patterns/cached_images/previews/hero_5loop1.thr.webp


BIN
patterns/cached_images/previews/hero_7loop4.thr.webp


BIN
patterns/cached_images/previews/hero_9wave2.thr.webp


BIN
patterns/cached_images/previews/hexagoner.thr.webp


BIN
patterns/cached_images/previews/noise-cell.thr.webp


BIN
patterns/cached_images/previews/rose.thr.webp


BIN
patterns/cached_images/previews/sawtooth.thr.webp


BIN
patterns/cached_images/previews/snowflake.thr.webp


BIN
patterns/cached_images/previews/swirl-overlay.thr.webp


BIN
patterns/cached_images/previews/turtle.thr.webp


+ 72 - 0
scripts/led_brightness_by_time.sh

@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+# Set DW LED brightness based on time of day.
+# Intended to be run from cron every minute, e.g.:
+#   * * * * * /Volumes/4TB\ SSD/projects/dune-weaver/scripts/led_brightness_by_time.sh >> /tmp/dw-led-brightness.log 2>&1
+#
+# Anchors below are (HH:MM, brightness 0-100). Brightness is linearly
+# interpolated between consecutive anchors, so the LEDs ramp smoothly.
+
+set -euo pipefail
+
+API="${DW_API:-http://localhost:8080}"
+ENDPOINT="$API/api/dw_leds/brightness"
+
+# Edit these to taste. Must be sorted by time. First and last bracket midnight.
+ANCHORS=(
+  "00:00 5"    # deep night: dim glow
+  "06:30 15"   # pre-dawn: warm wake-up level
+  "08:00 60"   # morning: full ambient
+  "12:00 90"   # midday peak
+  "18:00 70"   # evening
+  "21:30 30"   # wind-down
+  "23:30 5"    # back to deep night
+)
+
+now_minutes() {
+  local h m
+  h=$(date +%H)
+  m=$(date +%M)
+  # base-10 force avoids "08" being parsed as octal
+  echo $(( 10#$h * 60 + 10#$m ))
+}
+
+anchor_minutes() { # "HH:MM <bri>" -> minutes
+  local t=${1%% *}
+  local h=${t%%:*}
+  local m=${t##*:}
+  echo $(( 10#$h * 60 + 10#$m ))
+}
+
+anchor_value() { echo "${1##* }"; }
+
+compute_brightness() {
+  local now=$1 prev_t prev_v next_t next_v
+  for ((i = 0; i < ${#ANCHORS[@]} - 1; i++)); do
+    prev_t=$(anchor_minutes "${ANCHORS[i]}")
+    next_t=$(anchor_minutes "${ANCHORS[i+1]}")
+    if (( now >= prev_t && now <= next_t )); then
+      prev_v=$(anchor_value "${ANCHORS[i]}")
+      next_v=$(anchor_value "${ANCHORS[i+1]}")
+      # linear interpolation, integer math
+      echo $(( prev_v + (next_v - prev_v) * (now - prev_t) / (next_t - prev_t) ))
+      return
+    fi
+  done
+  # fallback: last anchor's value
+  anchor_value "${ANCHORS[-1]}"
+}
+
+main() {
+  local now bri
+  now=$(now_minutes)
+  bri=$(compute_brightness "$now")
+
+  echo "[$(date -Iseconds)] minute=$now brightness=$bri"
+
+  curl -fsS -X POST "$ENDPOINT" \
+    -H 'Content-Type: application/json' \
+    -d "{\"value\": $bri}"
+  echo
+}
+
+main "$@"