Init
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import appdaemon.plugins.hass.hassapi as hass
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker, scoped_session
|
||||
|
||||
class Db(hass.Hass):
|
||||
def initialize(self):
|
||||
# Set up callback and listen for state change of desired switch
|
||||
self.listen_state(self.entity_changed, self.args["entity_id"])
|
||||
self.update_stats()
|
||||
|
||||
def entity_changed(self, entity, attribute, old, new, kwargs):
|
||||
self.update_stats()
|
||||
|
||||
def update_stats(self):
|
||||
engine = create_engine(self.args["connectionstring"])
|
||||
session_obj = sessionmaker(bind=engine)
|
||||
session = scoped_session(session_obj)
|
||||
|
||||
results = session.execute('SELECT state,last_changed FROM states where entity_id = "' + self.args["entity_id"] + '" and state<>\'unknown\' and last_changed>=(NOW() - INTERVAL 1 MONTH) order by last_changed limit 1')
|
||||
row = results.first()
|
||||
start_value = float(row['state'])
|
||||
start_date = row['last_changed']
|
||||
|
||||
current_value = float(self.get_state(self.args["entity_id"]))
|
||||
diff = round(current_value - start_value,2)
|
||||
self.log('Counter start value: {} (@{}), current value: {}, diff: {}'.format(start_value, start_date, current_value, diff))
|
||||
@@ -0,0 +1,9 @@
|
||||
db:
|
||||
module: db
|
||||
class: Db
|
||||
connectionstring: !secret mysql_url
|
||||
entity_id: sensor.power_total
|
||||
|
||||
debug: true
|
||||
global_dependencies:
|
||||
- automation
|
||||
@@ -0,0 +1,30 @@
|
||||
import appdaemon.plugins.hass.hassapi as hass
|
||||
# from automation import Automation # type: ignore
|
||||
|
||||
"""
|
||||
Monitor events and output changes to the verbose_log. Nice for debugging purposes.
|
||||
Arguments:
|
||||
- events: List of events to monitor
|
||||
"""
|
||||
class Monitor(hass.Hass):
|
||||
def initialize(self) -> None:
|
||||
# super().initialize()
|
||||
self.listen_event_handle_list = []
|
||||
|
||||
events = self.args['events']
|
||||
|
||||
if events != None:
|
||||
for event in self.split_device_list(self.args["events"]):
|
||||
self.log('watching event "{}" for state changes'.format(event))
|
||||
self.listen_event_handle_list.append(self.listen_event(self.changed, event))
|
||||
if len(self.listen_event_handle_list) == 0:
|
||||
self.log('watching all events for state changes')
|
||||
self.listen_event_handle_list.append(self.listen_event(self.changed))
|
||||
|
||||
def changed(self, event_name, data, kwargs):
|
||||
self.log(event_name + ': ' + str(data))
|
||||
|
||||
def terminate(self):
|
||||
for listen_event_handle in self.listen_event_handle_list:
|
||||
self.cancel_listen_event(listen_event_handle)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# eventMonitor:
|
||||
# module: eventMonitor
|
||||
# class: Monitor
|
||||
# global_dependencies:
|
||||
# - automation
|
||||
# events:
|
||||
Reference in New Issue
Block a user