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

 找回密码
 立即注册
查看: 4723|回复: 8

简易判断当前日期是否节假日的传感器,包含切换数据库

[复制链接]

11

主题

53

帖子

325

积分

论坛分享达人

积分
325
金钱
262
HASS币
70
发表于 2019-10-21 22:48:45 | 显示全部楼层 |阅读模式
本帖最后由 zhanghy 于 2019-10-21 23:02 编辑

1. 安装postgre Sql等...
sudo apt-get update
sudo hassbian-config install postgresql
sudo nano /etc/systemd/system/[email protected]

2. 创建表,插入默认数据
CREATE TABLE HOLIDAY(ID INT PRIMARY KEY     NOT NULL,DATE           TEXT    NOT NULL,TYPE            INT     NOT NULL);

3. 配置config
shell_command:
  update_day_type: python3 /home/homeassistant/.homeassistant/myshells/holiday.py

4.安装python库
sudo pip3 install psycopg2

5. 创建一个holiday.py,放到shell_command指定的位置,如:/home/homeassistant/.homeassistant/myshells/holiday.py修改以下语句:对应库名,用户,密码,服务器信息
conn = psycopg2.connect(database="homeassistant", user="homeassistant",
                        password="homeassistant", host="127.0.0.1", port="5432")
# encoding: utf-8
import requests
import json
from time import gmtime, strftime
import psycopg2

date = strftime("%Y%m%d", gmtime())
github_url = "http://api.goseek.cn/Tools/holiday?date=" + date
print(github_url)
r = requests.get(github_url)
holiday_date = r.json()
get_day = holiday_date['data']
print(get_day)


# CREATE TABLE HOLIDAY(ID INT PRIMARY KEY     NOT NULL,DATE           TEXT    NOT NULL,TYPE            INT     NOT NULL);
conn = psycopg2.connect(database="homeassistant", user="homeassistant",
                        password="homeassistant", host="127.0.0.1", port="5432")
print("Opened database successfully")


cur = conn.cursor()
sql = "UPDATE HOLIDAY set DATE =%s,TYPE=%d WHERE ID=1" % (date, get_day)
cur.execute(sql)
conn.commit()
print("Records update successfully")
conn.close()

6. 将该脚本放到ha所在电脑的系统当中, 路径与shell_command中一致


7. 配置一条自动化: 每天0点一分调用shell_command 中的py脚本

- alias: update_day_type
  initial_state: true
  trigger:
    - platform: time
      at: '00:01:00'
  action:
    - service: shell_command.update_day_type

8 .创建一个sql传感器
sensor:
  - platform: sql
    db_url: postgresql://homeassistant:homeassistant@localhost/homeassistant
    queries:
      - name: DB size
        query: "SELECT (pg_database_size('homeassistant')/1024/1024) as db_size;"
        column: "db_size"
        unit_of_measurement: MB
      - name: day type
        query: "SELECT type FROM HOLIDAY where id=1;"
        column: "type"


9. 重启ha

应该没有遗漏了....







评分

参与人数 1金钱 +20 HASS币 +20 收起 理由
Roger + 20 + 20 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2019-10-22 09:17:56 | 显示全部楼层
本帖最后由 neroxps 于 2019-10-22 09:20 编辑

楼主操作骚的出奇???换数据库直接改代码是不是太硬核了???

https://www.home-assistant.io/integrations/recorder/#custom-database-engines
看错了,大佬是自己写了一个python shell 来查询假日~

为何不考虑用 http://api.goseek.cn/


Nero
回复

使用道具 举报

27

主题

2143

帖子

8932

积分

论坛元老

Rank: 8Rank: 8

积分
8932
金钱
6784
HASS币
30

论坛元老

发表于 2019-10-22 14:54:15 | 显示全部楼层
真硬核,围观群众码一条
回复

使用道具 举报

6

主题

287

帖子

4151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4151
金钱
3859
HASS币
0
发表于 2019-11-4 09:38:55 | 显示全部楼层
楼主,你的第二步里,少了一个步骤“插入默认数据”吧
回复

使用道具 举报

11

主题

53

帖子

325

积分

论坛分享达人

积分
325
金钱
262
HASS币
70
 楼主| 发表于 2019-11-23 22:45:28 | 显示全部楼层
neroxps 发表于 2019-10-22 09:17
[md]

~~楼主操作骚的出奇???换数据库直接改代码是不是太硬核了???~~

换了换了,不存数据库了,原生的http请求没法动态传日期,改成用command_line了,接收一下print就行了

# encoding: utf-8
import requests
import json
from time import gmtime, strftime

date = strftime("%Y%m%d", gmtime())
github_url = "http://api.goseek.cn/Tools/holiday?date=" + date
r = requests.get(github_url)
holiday_date = r.json()
get_day = holiday_date['data']
print(get_day)
回复

使用道具 举报

11

主题

53

帖子

325

积分

论坛分享达人

积分
325
金钱
262
HASS币
70
 楼主| 发表于 2019-11-23 22:46:38 | 显示全部楼层
Roger 发表于 2019-11-4 09:38
楼主,你的第二步里,少了一个步骤“插入默认数据”吧

嗯,现在不用数据库了
回复

使用道具 举报

11

主题

53

帖子

325

积分

论坛分享达人

积分
325
金钱
262
HASS币
70
 楼主| 发表于 2019-11-28 16:27:21 | 显示全部楼层
第二步少了一条,插入一条id为1的默认数据
回复

使用道具 举报

11

主题

53

帖子

325

积分

论坛分享达人

积分
325
金钱
262
HASS币
70
 楼主| 发表于 2019-11-28 16:28:55 | 显示全部楼层
zhanghy 发表于 2019-11-28 16:27
第二步少了一条,插入一条id为1的默认数据

着急睡觉, 直接贴markdown文档进来就出错....
回复

使用道具 举报

11

主题

53

帖子

325

积分

论坛分享达人

积分
325
金钱
262
HASS币
70
 楼主| 发表于 2019-11-28 16:30:52 | 显示全部楼层
第一步没写完:需要把homeassistant启动服务的前置条件添加一个: 在postgresql启动之后启动
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 15:48 , Processed in 0.067634 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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