本帖最后由 kenlau 于 2020-2-15 21:53 编辑
这段时间在家里呆着,好长时间没出去了,小孩每天都通过平板上网课,可是每次上完课都很主动的玩游戏了,过年前一直想着用什么办法把家里的ros路由器接入到HA,好让我随时随刻的控制小孩的游戏时间,一直没空去研究,这段时间闲得发慌,上官网扒了一下,发现了switch竟然支持snmp,官网相关地址https://www.home-assistant.io/integrations/snmp/#switch,而ROS不就是可以支持snmp,而且还支持snmp写入来控制脚本的吗?于是就立马去操作了。详细的ros功能可以参考官网的WIKIhttps://wiki.mikrotik.com/wiki/Manual:SNMP#Run_Script
首先打开ROS的snmp功能,记得把写入模式选上。
下一步就是把平板电脑的MAC地址加到capsman的黑名单那里了。(我家里的WIFI设备全部是ROS设备,用CAPSMAN做AC控制的)
这里注意一下,脚本是通过执行capsman的黑名单备注来操作的(比如我备注的ipad),所以一但备注修改了,脚本也一起要修改。
接着下一步是脚本编写了,这里脚本要注意一下,snmp是调用脚本的顺序的,从上往下,最上面的是1,以此类推。
我这个脚本是把IPAD的MAC地址在地址列表里面启用和禁用,启用了就断网不能连接WIFI了,禁用的话可以连接WIFI
接着就可以添加配置到配置文件了,由于ROS的snmp是通过控制脚本实现的,不带状态反馈,所以分了几个步骤来实现
第一步先添加一个snmp的switch,配置如下:
switch:
- platform: snmp
name: ipad-wifi-off
host: 192.168.77.1
community: public
baseoid: 1.3.6.1.4.1.14988.1.1.8.1.1.3.2
payload_on: 0
payload_off: 1
- platform: snmp
name: ipad-wifi-on
host: 192.168.77.1
community: public
baseoid: 1.3.6.1.4.1.14988.1.1.8.1.1.3.1
payload_on: 1
payload_off: 0
注意上面baseoid最后的数字,那个是执行脚本的顺序,最后的数字1代表ROS脚本的第一条,最后的数字2代表ROS脚本的第二条。具体请看ROS的官网https://wiki.mikrotik.com/wiki/Manual:SNMP#Run_Script
这样snmp开关就配置完毕了,不过因为这个开关没反馈,所以会出现回弹的情况,不能反馈开关的状态,所以需要用到input_boolean。
第二步在configuration.yaml添加input_boolean
input_boolean:
ipadwifi:
name: 禁止IPAD联网
initial: off
icon: mdi:brightness-auto
第三步在automations.yaml添加如下
- alias: ipadwifi on
initial_state: true
trigger:
- platform: state
entity_id: input_boolean.ipadwifi
from: 'off'
to: 'on'
action:
service: switch.turn_on
data:
entity_id: switch.ipad_wifi_on
- alias: ipadwifi off
initial_state: true
trigger:
- platform: state
entity_id: input_boolean.ipadwifi
from: 'on'
to: 'off'
action:
service: switch.turn_off
data:
entity_id: switch.ipad_wifi_off
这样一个不会回弹的虚拟开关就做出来的,可是虚拟开关的开和关是没状态显示的,还需要做一个有状态显示的实体开关。
最后一步就是做一个template的开关,配置如下:
- platform: template
switches:
ipadwifi:
value_template: "{{ is_state('input_boolean.ipadwifi', 'off') }}"
turn_on:
service: input_boolean.turn_off
entity_id: input_boolean.ipadwifi
turn_off:
service: input_boolean.turn_on
entity_id: input_boolean.ipadwifi
icon_template: "{% if not is_state('input_boolean.ipadwifi', 'off') %}mdi:wifi-off{% else %}mdi:wifi{% endif %}"
完成后效果如下:
再配合大神做的[新奇玩法] 易用版-延迟倒计时的通用定时器卡片这个,非常好用。
虽然开关是有反馈状态,不过状态是虚拟的,每次重启都会恢复,所以我把开关状态做成是开,反正IPAD不是经常禁网,只不过在小孩不自觉的时候才禁,所以这个开的状态就算是重启了也是不禁网的状态,下面的视频大家看下使用效果。
|