"""Light chosen LED slots in distinct colours (everything else off) to map zones. python tools/zone_probe.py 0 1 2 3 4 # slot 0 red, 1 green, 2 blue, 3 yellow, 4 magenta python tools/zone_probe.py --range 10 19 # light slots 10..19 all white """ import argparse import eve PALETTE = [("red", (255, 0, 0)), ("green", (0, 255, 0)), ("blue", (0, 0, 255)), ("yellow", (255, 200, 0)), ("magenta", (255, 0, 255)), ("cyan", (0, 255, 255)), ("white", (255, 255, 255))] def main(): ap = argparse.ArgumentParser() ap.add_argument("slots", nargs="*", type=int) ap.add_argument("--range", nargs=2, type=int, metavar=("FIRST", "LAST")) ap.add_argument("--total", type=int, default=20, help="slots to send (default 20)") ap.add_argument("--hold", type=float, default=0, help="keep re-sending for N seconds") ap.add_argument("--fps", type=int, default=10, help="re-send rate with --hold (default 10)") args = ap.parse_args() colors = [(0, 0, 0)] * args.total if args.range: for s in range(args.range[0], args.range[1] + 1): colors[s] = (255, 255, 255) print(f"slots {args.range[0]}..{args.range[1]}: white") for slot, (name, rgb) in zip(args.slots, PALETTE): colors[slot] = rgb print(f"slot {slot}: {name}") if args.hold: print(f"re-sending every {1000 // args.fps} ms for {args.hold} s (Ctrl+C to stop)") eve.stream(colors, args.hold, args.fps) else: eve.send(colors, verbose=False) if __name__ == "__main__": main()