lifx灯泡的简单脚本解释器
bardolph的Python项目详细描述
巴道夫
阿尔·丰特斯-bardolph@fontes.org
bardolph是控制lifx灯的设施 通过简单的脚本语言。它是针对那些想 自动控制或试验他们的灯,但谁不 想学习编程语言或API。
我的目的也是让代码可以在其他python程序中使用。一 解析器和虚拟机的目标是通过 相当简单的入口。
程序不使用Internet 访问灯泡,不需要登录;它的所有通信都会发生 通过本地WiFi网络。您可以使用基本文本编辑器编辑脚本,然后 从命令行运行。
该项目严重依赖于lifxlan 访问灯泡的python库。你需要为代码安装它 在这个项目中运行。
这种语言缺少了很多你可能会想到的东西,因为它仍然 正在开发中。但是,它也非常简单,应该是可用的 非程序员。
灯泡脚本
脚本是一个纯文本文件,其中所有空格都是等效的。你可以 如果需要,可以使用制表符将其格式化,或者将整个脚本放在一行。 注释以""字符开头,并一直到行的末尾。所有 关键字在小写文本中。脚本文件名的扩展名为".ls", 意思是"灯泡脚本"。
基本知识
要设置一个或多个灯光的颜色,虚拟机将发送 灯泡的四个参数(色调、饱和度、亮度和开尔文)。
下面是一个示例:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
此脚本设置所有已知灯光的颜色,并将其全部打开。这个 数值的含义,以及灯光是如何处理它们的 通过lifx局域网协议
任何从未指定默认值为零的值,或空字符串。这会导致 以获得不需要的结果,因此每个值至少应在之前设置一次 设置任何灯光的颜色。
如果第二次未指定某个值,则会再次使用前一个值。 例如,下面使用相同的数字表示饱和度、亮度, 以及开尔文:
hue 20000 saturation 65500 brightness 45000 kelvin 2700 set all
hue 40000 set all
此脚本将:
- 将所有灯设置为HSBK 20000、65500、45000、2700
- 将所有灯设置为HSBK 40000、65500、45000、2700 < > >
- 立即关闭所有灯。
- 等待5000毫秒。
- 打开所有灯,在2000毫秒内加大功率。
- 再次等待5000毫秒。
- 关掉"桌子"灯,用2000毫秒把它调暗到 黑暗。 < > >
- 等待1000毫秒。
- 同时打开两个灯 < > >
- 等待1000毫秒。
- 打开名为"table"的灯。
- 等待1000毫秒。
- 打开名为"椅子边"的灯。 < > >
- 将所有灯光设置为绿色(色调23000)。
- 等待用户按键。
- 将所有灯设置为黄色(9000)。
- 等待按键。
- 将灯转为红色(63800)。 < > >
- -r或--repeat:无限期重复脚本,直到按下ctrl-c。
- -v或--verbose:运行时生成完整的调试输出。
- -F或——假的:不要在真正的灯光下操作。相反,使用"假"灯光 只需将输出发送到stdout。这有助于调试和测试。 < > >
-f
或--赝品
:不要访问灯光,而是使用 只需将输出发送到日志。-d
或--调试:使用调试级别日志记录。
< > >-s
:将灯光脚本输出到stdout。如果将输出保存到文件中 作为脚本运行,它会将灯光恢复到相同的状态, 包括颜色和功率。-t
:将文本输出到stdout,在所有已知的 灯泡、组和位置。-p
:基于 已知的鳞茎。结果文件与生成的输出非常相似 通过lsc
命令,并且可以使用python-m\uuu generated\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu/code>运行
< > >
单个灯
脚本可以按名称控制各个灯光。例如,如果你有一盏灯 命名为"table",您可以设置其颜色:
hue 20000 saturation 65500 brightness 45000 kelvin 2700
set "Table"
灯光名称必须用引号括起来。它们可以包含空格,但可以 不包含换行符。例如:
# Ok
on "Chair Side"
# Error
on "Chair
Side"
如果一个脚本提到了一个没有被发现或是其他的光的名字 不可用,将错误发送到日志,并执行脚本 继续。
电源命令
打开或关闭灯光的命令与颜色命令类似:
off all
on "Table"
这将关闭所有的灯,并打开名为"table"的灯。
"开"和"关"命令对灯光的颜色没有影响。 当"on"执行时,每个灯都会有它的颜色 它被关掉了。如果灯已经打开或关闭,则 冗余电源操作将不起作用,尽管它将被发送 到灯泡。
定时颜色变化
脚本可以包含时间延迟和持续时间,这两个都可以表示为 以毫秒为单位。一个时间延迟指定了等待之前的时间量 向灯光发送下一个命令。传递持续时间值 到灯泡,其解释通过lifx api定义。
例如:
off all time 5000 duration 2000 on all off "Table"
这将:
如上所述,使用time
和duration
的现有值
每一个命令。在本例中,仅设置时间
一次,但每次操作之间都会有相同的延迟。
如果要同时设置多个灯光,可以使用
和
:
time 1000 on "Table" and "Chair Side" # Uses "and".
此脚本将:
将此与:
time 1000 on "Table" on "Chair Side" # Does not use "and".
此脚本将:
和
关键字与设置
、打开
和关闭
一起工作。当多个灯光
通过这种方式指定,解释器尝试在
一次,每次之间(理论上)没有延迟。
需要注意的是,延迟时间的计算是基于 剧本开始了。延误不是根据完工情况计算的 上一条指令的时间。
例如:
time 2000
on all
# Do a lot of slow stuff.
off all
"关闭"指令将在 脚本已启动,"关闭"指令从该启动开始4秒 时间,
如果脚本的一部分需要很长时间才能执行,则等待时间可能会过去 在虚拟机为下一条指令做好准备之前。在这种情况下 指令执行没有任何计时器延迟。如果延迟时间也是 简而言之,程序将继续执行 尽可能快地说明。
暂停按键
脚本可以等待按键,而不是使用定时延迟。为了 例如,要模拟手动红绿灯:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
0
此脚本将:
脚本可以包含暂停和定时延迟。停顿之后 计时器已重置。
组和位置
set
、on
和off
命令可应用于组和位置。
例如,如果您有一个名为"客厅"的位置,您可以设置它们
全部相同颜色:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
1
继续相同的示例,还可以设置 "阅读灯"组:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
2
定义
符号可以定义为包含常用名称或数字:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
3
定义可参考其他现有符号:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
4
检索当前颜色
get
命令从灯泡中检索当前设置:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
5
此脚本检索色调
,饱和度
,亮度
的值,
以及"台灯"灯泡上的开尔文。然后
仅覆盖色调。然后,设置
命令将所有灯光设置为
结果颜色。
可以检索所有灯光或组成员的颜色 或地点。在这种情况下,每个设置都是 灯。例如:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
6
这将从该组中的所有灯光获取平均色调,然后
在任何后续的设置
操作中使用的色调。同样的计算是在
饱和度、亮度和开尔文也一样。
运行脚本
从命令行运行脚本:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
7
在此上下文中,"name"包含脚本的名称。这相当于:
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
8
可以按顺序运行多个脚本。如果指定m不止一个 命令行,它将按顺序提示它们并按顺序执行它们。 例如,
# comment
hue 1200 # red
saturation 65500
brightness 40000
kelvin 2700
set all
on all
9
将运行light.ls
,完成后,执行dark.ls
选项
命令行标志可以修改脚本的运行方式。例如:
hue 20000 saturation 65500 brightness 45000 kelvin 2700 set all
hue 40000 set all
0
可用选项有:
使用-f选项,将有5个伪灯光,并且它们的名称被固定为 "桌子"、"顶部"、"中间"、"底部"和"椅子"。两个假组织是 提供"杆子"和"桌子"。一个名为"home"的位置包含所有 还有假灯光。
其他程序
有些实用程序python程序可以从命令行运行。 在任何平台上运行的每个脚本都有一个小脚本 能够执行bash脚本,通常是macos和linux系统。所有的 必须从安装bardolph的目录运行这些命令。
lsc-灯泡脚本编译器
这相当于python-m controller.lsc
。语法是
lsc name.ls
。只能提供一个文件名。
缩写lsc代表"灯泡脚本编译器"。这个元编译器
生成一个python文件,该文件包含
脚本,在名为\u generated\uuuuu.py
的文件中。生成的文件可以运行
与其他python模块一样,从命令行执行以下操作:
hue 20000 saturation 65500 brightness 45000 kelvin 2700 set all
hue 40000 set all
1
生成的python模块仍然依赖于bardolph运行时代码,并且 需要从同一目录执行。
如果要在自己的python代码中使用此模块,可以导入
并调用函数run_script()
。但是,因为模块不是
完全独立的,Bardolphlib
和controller
模块
需要在运行时导入。
生成的程序有两个选项:
例如,在生成python程序之后:
hue 20000 saturation 65500 brightness 45000 kelvin 2700 set all
hue 40000 set all
2
这不会影响任何物理灯光,但会将文本发送到屏幕 指示脚本将执行的操作。
快照
snapshot
命令是一个bash脚本,它等价于
python-m controller.snapshot
此程序捕获灯光的当前状态并生成 请求的输出类型。默认输出是一个可读的列表 灯光。
输出的性质由命令行选项决定。这些是 最有趣的是:
系统要求
该程序已经在python 3.5.1和3.7.3版本上进行了测试。我没试过 但我几乎可以肯定它不会在任何2.x版本上运行。
我没有做任何压力测试,所以我不知道有什么限制 脚本大小。注意,应用程序将整个脚本加载到内存中 继续执行。
<我已经在MacOS 10.14.5、Debian Linux Stretch和 2019年6月,释放拉斯宾。对我来说,在树莓皮零W上效果很好。缺少功能
这些是我将要研究的缺失特性之一 此优先级: