Это приложение может помочь вам подключить данные о счетах за электроэнергию и энергопотреблении государственной сети к HomeAssistant для отслеживания энергопотребления в доме в режиме реального времени. Оно также может сохранять ежедневное энергопотребление в базе данных, чтобы можно было отслеживать историю. В частности, предоставляются два типа данных:
Отображается как объект в HomeAssistant:
Идентификатор сущности | иллюстрировать |
---|---|
last_electricity_usage | Потребление электроэнергии за последние сутки, в КВтч, киловатт час. Атрибут содержит Present_date (запрос даты, представленной батареей) |
electricity_charge_balance | Предоплата отображает остаток счета за электроэнергию, в противном случае отображается счет за электроэнергию, подлежащий оплате в прошлом месяце, в юанях. |
yearly_electricity_usage | Общий расход электроэнергии в этом году, ед. к Втч, киловатт-час. |
yearly_electricity_charge | Общая стоимость электроэнергии в этом году, юань |
Необязательные данные о ежедневном энергопотреблении за последние тридцать дней (база данных mongodb), например:
Это изображение поддерживает архитектуру:
linux/amd64
:Применимо к архитектура x86-64 (amd64) Linux систему, например компьютер с ОС Windows.linux/arm64
:Применимо к ARMv8 архитектурный Linux Такие системы, как Raspberry Pi, коробка N1.linux/arm/v7
:Применимо к ARMv7 архитектурный Linux Системы, такие как Wanke Cloud.Получите данные National Grid через пакет selenium Python и используйте REST API, предоставленный homeassistant, для обновления статуса объекта до homeassistant с помощью запросов POST.
Установите докер и homeassistant, минималистичный метод установки Homeassistant.
Создать папку проекта
mkdir sgcc_electricity
cd sgcc_electricity
Создать файл переменных среды
vim .env
Обратитесь к следующим файлам, чтобы записать файл .env.
# Следующие элементы необходимо изменить
# Государственная сеть Авторизоваться информация
PHONE_NUMBER="xxx" # Измените его на свой. Авторизоваться.
PASSWORD="xxxx" # Сменить пароль на свой Авторизоваться
# база данных Конфигурация
ENABLE_DATABASE_STORAGE=True # or False Отключить базу data хранит данные о ежедневном потреблении электроэнергии.
# база данные могут заполнить существующую монгодббазу данных
MONGO_URL="mongodb://USERNAME:PASSWORD@localhost:27017/" # база данныхадрес Изменить ИМЯ ПОЛЬЗОВАТЕЛЯ ПАРОЛЬ и локальный хост
DB_NAME="homeassistant" # база имя данных, по умолчанию — homeassistant
# COLLECTION_NAME по умолчанию имеет значениеelectric_daily_usage_{идентификатор пользователя State Grid} и не поддерживает изменение.
# homeassistantКонфигурация
HASS_URL="http://localhost:8123/" # Измените свой локальный хост на адрес вашего домашнего помощника.
HASS_TOKEN="eyxxxxx" # долгосрочный токен домашнего помощника
# Параметры работы Selenium
JOB_START_TIME="07:00" # Время запуска задачи в 24-часовом формате, например «07:00», означает, что она будет выполняться в 7 утра каждый день. Если программа запускается в первый раз позже 7 утра, она будет выполняться немедленно.
## Другие параметры по умолчанию
DRIVER_IMPLICITY_WAIT_TIME=60 # Время ожидания браузера по умолчанию, секунды.
RETRY_TIMES_LIMIT=5 # Авторизоваться Количество повторов
LOGIN_EXPECTED_TIME=60 # Таймаут авторизации, секунды
RETRY_WAIT_TIME_OFFSET_UNIT=10
FIRST_SLEEP_TIME=10 # Время ожидания первого запуска, секунды
# Уровень журнала
LOG_LEVEL="INFO" # Например, «DUBUG» может проверить ситуацию с ошибкой.
Напишите файл docker-compose.yml.
vim docker-compose.yml
Заполните следующее содержимое
version: "3"
services:
app:
env_file:
- .env
image: renhai/sgcc_electricity:latest # renhai/sgcc_electricity:armv7-latest
container_name: sgcc_electricity
network_mode: bridge
environment:
- SET_CONTAINER_TIMEZONE=true
- CONTAINER_TIMEZONE=Asia/Shanghai
restart: unless-stopped
command: python3 main.py
# По умолчанию данные записываются в монгобазу почти 30 дней. данные, легко запросить
mongo:
image: mongo:4.4.18
restart: always
container_name: mongo-for-sgcc
network_mode: bridge
environment:
MONGO_INITDB_ROOT_USERNAME: USERNAME # Измените свое имя пользователя
MONGO_INITDB_ROOT_PASSWORD: PASSWORD # Измените свой пароль
MONGODB_DATABASE: "homeassistant" # Измените его на свою собственную базу данныхимя,и.envвбаза данныхимя一致 CONTAINER_TIMEZONE: Asia/Shanghai
volumes:
- ./db:/data/db
ports:
- "27017:27017"
Поскольку датчик создается с использованием метода REST API, регистрация объекта не требуется, и его нельзя редактировать в веб-интерфейсе. При необходимости вы можете добавить следующую конфигурацию в файл Configuration.yaml и перезапустить HA, чтобы иметь возможность редактировать соответствующие объекты в веб-интерфейсе, чтобы можно было изменять объекты с суффиксом _entity.
# Example configuration.yaml entry
# В файле может быть только один шаблон
template:
# Справочная документация: https://www.home-assistant.io/integrations/template.
- trigger:
- platform: event
event_type: "state_changed"
event_data:
entity_id: sensor.electricity_charge_balance
sensor:
- name: electricity_charge_balance_entity
unique_id: electricity_charge_balance_entity
state: "{{ states('sensor.electricity_charge_balance') }}"
state_class: measurement
unit_of_measurement: "CNY"
device_class: monetary
- trigger:
- platform: event
event_type: "state_changed"
event_data:
entity_id: sensor.last_electricity_usage
sensor:
- name: Потребление электроэнергии за последние сутки
unique_id: last_electricity_usage_entity
state: "{{ states('sensor.last_electricity_usage') }}"
attributes:
present_date: "{{ state_attr('sensor.last_electricity_usage', 'present_date') }}"
last_updated: "{{ state_attr('sensor.last_electricity_usage', 'last_updated') }}"
state_class: total
unit_of_measurement: "kWh"
device_class: energy
- trigger:
- platform: event
event_type: "state_changed"
event_data:
entity_id: sensor.yearly_electricity_usage
sensor:
- name: yearly_electricity_usage_entity
unique_id: yearly_electricity_usage_entity
state: "{{ states('sensor.yearly_electricity_usage') }}"
state_class: total_increasing
unit_of_measurement: "kWh"
device_class: energy
- trigger:
- platform: event
event_type: "state_changed"
event_data:
entity_id: sensor.yearly_electricity_charge
sensor:
- name: yearly_electricity_charge_entity
unique_id: yearly_electricity_charge_entity
state: "{{ states('sensor.yearly_electricity_charge') }}"
state_class: total_increasing
unit_of_measurement: "CNY"
device_class: monetary
❗️После настройки используйте сущности с сущностями. Например, используйте Sensor.last_electricity_usage_entity_1234567890 вместо Sensor.last_electricity_usage_1234567890.
Объедините mini-graph-card](https://github.com/kalkih/mini-graph-card) и гриб, чтобы добиться эффекта:
type: custom:mini-graph-card
entities:
- entity: sensor.last_electricity_usage_entity
name: Ежедневное потребление электроэнергии Госсетью
aggregate_func: first
show_state: true
show_points: true
group_by: date
hour24: true
hours_to_show: 240
image-20230729172257731
Измените файл homeassistant.yml, а затем перезапустите или перезагрузите файл конфигурации. Обратите внимание, что Sensor.yearly_electricity_usage_entity в текущей лестнице должен быть изменен в соответствии с вашей реальной ситуацией:
# В файле может быть только один датчик
sensor:
# Цена на электроэнергию в реальном времени
- platform: template #Название платформы
sensors: #список датчиков
real_time_electricity_price: #Имя объекта: только строчные буквы, подчеркивание
unique_id: "real_time_electricity_price" #UID (обязательно)
friendly_name: 'Цена на электроэнергию в реальном времени' #Псевдоним датчика, отображаемый на веб-интерфейсе (необязательно)
unit_of_measurement: "CNY/kWh" #Единица измерения датчика (необязательно)
icon_template: mdi:currency-jpy #Значок по умолчанию
value_template: > #Определите шаблон для получения статуса датчика (обязательно). Цифры 6 и 22 ниже относятся к 6 часам, а 22 часа относятся к лестнице 123. 6 цен. пиковые и минимальные цены трех лестниц соответственно.
{% if now().strftime("%H")| int >= 6 and now().strftime("%H")|int < 22 and states("sensor.current_ladder")=="1" %}
0.617
{%elif now().strftime("%H")| int >= 6 and now().strftime("%H")|int < 22 and states("sensor.current_ladder")=="2" %}
0.677
{%elif now().strftime("%H")| int >= 6 and now().strftime("%H")|int < 22 and states("sensor.current_ladder")=="3" %}
0.977
{% elif states("sensor.current_ladder")=="1" %}
0.307
{% elif states("sensor.current_ladder")=="2" %}
0.337
{% elif states("sensor.current_ladder")=="3" %}
0.487
{% endif %}
# текущая лестница
- platform: template
sensors:
current_ladder:
unique_id: "current_ladder"
friendly_name: 'текущая лестница'
unit_of_measurement: "сорт"
icon_template: mdi:elevation-rise
value_template: > #Вот три значения ладдера в Шанхае: второй ладдер — 3120, третий — 4800
{% if states("sensor.yearly_electricity_usage_entity") | float <= 3120 %}
1
{% elif states("sensor.yearly_electricity_usage_entity") | float >3120 and states("sensor.yearly_electricity_usage_entity") | float <= 4800 %}
2
{% else %}
3
{% endif %}
Его можно настроить на энергетической панели для пошагового расчета энергопотребления для устройств, умеющих считать мощность.
tip:Открытьha>Панель управления>энергия>Добавить электричестводанные>Цена на электроэнергию в реальном временисущность-выбиратьreal_time_electricity_price。
Вы можете использовать встроенные уведомления homeassistant или другие службы уведомлений, такие как pushdeer.
Первоначальный автор: https://github.com/louisslee/sgcc_electricity, оригинальный README_origin.md. Кто-то синхронизировал:https://github.com/liantianji/sgcc_electricity
Добавлены части:
TO-DO