『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 1362|回复: 3

[已解决] switch command_line问题

[复制链接]

20

主题

135

帖子

797

积分

高级会员

Rank: 4

积分
797
金钱
662
HASS币
0
发表于 2023-3-5 21:46:39 | 显示全部楼层 |阅读模式
本帖最后由 flamestsui 于 2023-3-7 09:02 编辑

以下是官方是示例:
switch:
  - platform: command_line
    switches:
      driveway_sensor_motion:
        friendly_name: Driveway buiten sensor
        command_on: >
          curl -X PUT -d '{"on":true}' "http://127.0.0.1/api/sensors/config/"
        command_off: >
          curl -X PUT -d '{"on":false}' "http://127.0.0.1/api/sensors/config/"
        command_state: curl http://127.0.0.1/api/sensors/
        value_template: >
          {{value_json.config.on}}
        icon_template: >
          {% if value_json.config.on == true %} mdi:toggle-switch
          {% else %} mdi:toggle-switch-off
          {% endif %}


我用Flask简单做了个网页接受数据。

from flask import Flask, request

app = Flask(__name__)

@app.route('/autoBill/', methods=['GET'])
def auto():
    value = request.args.get('value')
    if value == "state":
        return "on"
    else:
        return value


@app.route('/api/sensors/config/', methods=['PUT'])
def a():
    value = request.json.get('on')
    if value:
        return "true"
    else:
        return "false"

@app.route('/api/sensors/', methods=['GET'])
def b():
    return "true"

if __name__ == '__main__':
    app.run("0.0.0.0", 80, debug=True)


但是,在首页创建了按钮后,点击按钮,Flask未收到任何数据。
我研究了很久,都不知道是怎么回事。哪位大大知道的。请告诉下我。感谢!
我是想做一个开关。控制开启和关闭
回复

使用道具 举报

146

主题

2267

帖子

7004

积分

元老级技术达人

积分
7004
金钱
4732
HASS币
30
发表于 2023-3-5 22:31:36 | 显示全部楼层
你是想用自己的网页,通过接口,控制ha里的设备,还是想通过ha控制网页协议下的某个设备
回复

使用道具 举报

20

主题

135

帖子

797

积分

高级会员

Rank: 4

积分
797
金钱
662
HASS币
0
 楼主| 发表于 2023-3-5 23:51:11 | 显示全部楼层
本帖最后由 flamestsui 于 2023-3-6 11:25 编辑
bugensui 发表于 2023-3-5 22:31
你是想用自己的网页,通过接口,控制ha里的设备,还是想通过ha控制网页协议下的某个设备 ...

我是测试command功能,我写了个py,控制passwall的开关。在HA里面准备新增个switch,来调用py内容。
sensor:
  - platform: command_line
    name: checkPassWall
    command: "python3 /config/script/checkPassWall.py"

  - platform: template
    sensors:
      passwall:
        icon_template: mdi:gas-station
        friendly_name: "PassWall状态"
        value_template: "{{ is_state('sensor.passwall', 'on') }}"

switch:
  - platform: command_line
    switches:
      checkPassWall:
        command_on: "python3 /config/script/checkPassWall.py"
        command_off: "python3 /config/script/checkPassWall.py"

  - platform: template
    switches:
      passwall:
        friendly_name: "PassWall状态"
        value_template: '{{ is_state("sensor.passwall", "on") }}'
        turn_on:
          - service: switch.turn_on
            data:
              entity_id: switch.checkPassWall
        turn_off:
          - service: switch.turn_off
            data:
              entity_id: switch.checkPassWall
        icon_template: >-
          {% if is_state('sensor.passwall', 'on') %}
            mdi:television
          {% else %}
            mdi:television-off
          {% endif %}

但是不能用,我才想试试能不能行的

而且,我按照下面这样写
switch:
  - platform: command_line
    switches:
      driveway_sensor_motion:
        friendly_name: Driveway buiten sensor
        command_on: >
          curl -X PUT -d '{"on":true}' "http://127.0.0.1/api/sensors/config/"
        command_off: >
          curl -X PUT -d '{"on":false}' "http://127.0.0.1/api/sensors/config/"
        command_state: curl http://127.0.0.1/api/sensors/
        value_template: >
          {{value_json.config.on}}
        icon_template: >
          {% if value_json.config.on == true %} mdi:toggle-switch
          {% else %} mdi:toggle-switch-off
          {% endif %}
在Flask里面,也没有获取到PUT来的数据
回复

使用道具 举报

20

主题

135

帖子

797

积分

高级会员

Rank: 4

积分
797
金钱
662
HASS币
0
 楼主| 发表于 2023-3-7 09:02:05 | 显示全部楼层
本帖最后由 flamestsui 于 2023-3-7 09:09 编辑

结果,我自己搞定了。我发现有个坑的是,curl访问是localhost和127.0.0.1就失败。我把接受文件换成域名就行了。passwall.yaml
sensor:
  - platform: command_line
    name: checkPassWall
    command: "python3 /config/script/checkPassWall.py"
    value_template: "{{ value }}"

switch:
  - platform: command_line
    switches:
      checkpasswall:
        command_on: "python3 /config/script/openPassWall.py"
        command_off: "python3 /config/script/closePassWall.py"
        command_state: "python3 /config/script/checkPassWall.py"
        value_template: '{{ value == "on" }}'
        friendly_name: openWRT PassWall
        unique_id: checkpasswall
        icon_template: >-
          {% if is_state('sensor.checkPassWall', 'on') %}
            mdi:router-wireless
          {% else %}
            mdi:router-wireless-off
          {% endif %}



checkPassWall.py
import openWRTs

if __name__ == '__main__':
    openWrt = openWRTs.openWRT("http://192.168.88.2", "root", "lieyanxh14.")
    openWrt.login()
    print(openWrt.checkPassWall())



openPassWall.py
import openWRTs

if __name__ == '__main__':
    openWrt = openWRTs.openWRT("http://192.168.88.2", "root", "lieyanxh14.")
    openWrt.login()
    openWrt.openPassWall()
    if openWrt.isChanges():
        openWrt.submit()
        openWrt.confrim()


Snipaste_2023-03-07_09-09-34.png


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 23:40 , Processed in 0.146783 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表