mos.ru power sensors
This commit is contained in:
@@ -58,8 +58,8 @@ class MosEnergoSbytUpdater(Automation):
|
||||
self.set_state(entity_id, state = balance, attributes = attributes)
|
||||
|
||||
class MosEnergoSbytCounter(Base):
|
||||
_version = 11
|
||||
_device = "ios/12.1.2/2.14.14(221)"
|
||||
_version = 13
|
||||
_device = "android/11.2.6/2.9.15(105)"
|
||||
_session = None
|
||||
_profile = None
|
||||
|
||||
@@ -132,6 +132,8 @@ class MosEnergoSbytCounter(Base):
|
||||
url = "https://lkkbyt.mosenergosbyt.ru/gate/do?api_version={}&id_device={}&phone={}&ls={}&process=login&pw_abn={}&type=1".format(self._version, self._device, phone, ls, pass_md5)
|
||||
response = requests.get(url).text
|
||||
session_response = self._parse_response(response)
|
||||
if ('ID_SESSION' not in session_response):
|
||||
return
|
||||
session = session_response['ID_SESSION']
|
||||
return session
|
||||
|
||||
@@ -144,9 +146,19 @@ class MosEnergoSbytCounter(Base):
|
||||
headers.append(node.text)
|
||||
for node in et.findall('./b/p'):
|
||||
values.append(node.text)
|
||||
|
||||
result = {}
|
||||
if len(headers) == 0:
|
||||
return result
|
||||
|
||||
for i in range(0, len(headers)):
|
||||
if i>=len(headers) or i>=len(values):
|
||||
continue
|
||||
header = headers[i]
|
||||
value = values[i]
|
||||
result[header] = value
|
||||
|
||||
if 'NM_RESULT' in result and 'Вышла новая версия приложения' in result['NM_RESULT']:
|
||||
self.error('[!] new version is available. Please update: {}.'.format(result))
|
||||
|
||||
return result
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
mosenergo_counter:
|
||||
module: mosenergosbyt
|
||||
class: MosEnergoSbytCounter
|
||||
properties:
|
||||
login: !secret mosenergo_main_login
|
||||
pwd: !secret mosenergo_main_pwd
|
||||
# mosenergo_counter:
|
||||
# module: mosenergosbyt
|
||||
# class: MosEnergoSbytCounter
|
||||
# properties:
|
||||
# login: !secret mosenergo_main_login
|
||||
# pwd: !secret mosenergo_main_pwd
|
||||
|
||||
mosenergo_counter_updater:
|
||||
module: mosenergosbyt
|
||||
class: MosEnergoSbytUpdater
|
||||
entity_ids:
|
||||
mosenergosbyt_total: sensor.power_mosenergosbyt_total
|
||||
mosenergosbyt_balance: sensor.power_mosenergosbyt_balance
|
||||
app: mosenergo_counter
|
||||
dependencies:
|
||||
- mosenergo_counter
|
||||
global_dependencies:
|
||||
- globals
|
||||
# mosenergo_counter_updater:
|
||||
# module: mosenergosbyt
|
||||
# class: MosEnergoSbytUpdater
|
||||
# entity_ids:
|
||||
# mosenergosbyt_total: sensor.power_mosenergosbyt_total
|
||||
# mosenergosbyt_balance: sensor.power_mosenergosbyt_balance
|
||||
# app: mosenergo_counter
|
||||
# dependencies:
|
||||
# - mosenergo_counter
|
||||
# global_dependencies:
|
||||
# - globals
|
||||
|
||||
mosenergo_counter_sender:
|
||||
module: mosenergosbyt
|
||||
class: MosEnergoSbytSender
|
||||
entity_ids:
|
||||
home_power_total: sensor.power_main_total
|
||||
app: mosenergo_counter
|
||||
dependencies:
|
||||
- mosenergo_counter
|
||||
global_dependencies:
|
||||
- globals
|
||||
# mosenergo_counter_sender:
|
||||
# module: mosenergosbyt
|
||||
# class: MosEnergoSbytSender
|
||||
# entity_ids:
|
||||
# home_power_total: sensor.power_main_total
|
||||
# app: mosenergo_counter
|
||||
# dependencies:
|
||||
# - mosenergo_counter
|
||||
# global_dependencies:
|
||||
# - globals
|
||||
|
||||
|
||||
mosenergo_alt:
|
||||
module: mosenergosbyt
|
||||
class: MosEnergoSbytCounter
|
||||
properties:
|
||||
login: !secret mosenergo_alt_login
|
||||
pwd: !secret mosenergo_alt_pwd
|
||||
# mosenergo_alt:
|
||||
# module: mosenergosbyt
|
||||
# class: MosEnergoSbytCounter
|
||||
# properties:
|
||||
# login: !secret mosenergo_alt_login
|
||||
# pwd: !secret mosenergo_alt_pwd
|
||||
|
||||
mosenergo_alt_updater:
|
||||
module: mosenergosbyt
|
||||
class: MosEnergoSbytUpdater
|
||||
app: mosenergo_alt
|
||||
dependencies:
|
||||
- automation
|
||||
- mosenergo_alt
|
||||
global_dependencies:
|
||||
- globals
|
||||
# mosenergo_alt_updater:
|
||||
# module: mosenergosbyt
|
||||
# class: MosEnergoSbytUpdater
|
||||
# app: mosenergo_alt
|
||||
# dependencies:
|
||||
# - automation
|
||||
# - mosenergo_alt
|
||||
# global_dependencies:
|
||||
# - globals
|
||||
@@ -12,6 +12,8 @@ class WaterCounterSender(Automation):
|
||||
self.run_daily(self.send_mosru_counters, dt.time(12, 00, 0))
|
||||
|
||||
def send_mosru_counters(self, kwargs):
|
||||
if 'constraint' in self.args and not self.constrain_input_boolean(self.args['constraint']):
|
||||
return
|
||||
self.log('Starting sending counters value to mos.ru')
|
||||
new_values = []
|
||||
self.app.update_watercounters()
|
||||
@@ -47,11 +49,38 @@ class WaterCounterSender(Automation):
|
||||
self.log('error sending: {}'.format(err))
|
||||
|
||||
|
||||
class PowerCounterSender(Automation):
|
||||
timezone = '+03:00'
|
||||
def initialize(self):
|
||||
super().initialize()
|
||||
if 'power_total' not in self.entity_ids:
|
||||
self.log('Please specify power_total for PowerCounterSender.')
|
||||
return
|
||||
self.run_daily(self.send_mosru_counters, dt.time(14, 00, 0))
|
||||
# self.send_mosru_counters("")
|
||||
|
||||
def send_mosru_counters(self, kwargs):
|
||||
if 'constraint' in self.args and not self.constrain_input_boolean(self.args['constraint']):
|
||||
return
|
||||
today = datetime.today()
|
||||
if today.day < 15 or today.day > 26:
|
||||
self.log("We can send power values between days 15 and 26.")
|
||||
return
|
||||
power_total = round(float(self.get_state(self.entity_ids['power_total'])))
|
||||
period = datetime.now().strftime('%Y-%m-%d')
|
||||
self.log('Starting sending power counters value ({}) to mosru.'.format(power_total))
|
||||
new_values = [{'counter_id': 'T1', 'indication': power_total, 'period': period}]
|
||||
try:
|
||||
result = self.app.send_electrocounters(new_values)
|
||||
self.log(result)
|
||||
except EmpServerException as err:
|
||||
self.log('error sending: {}'.format(err))
|
||||
|
||||
class WaterCounterSensor(Automation):
|
||||
timezone = '+03:00'
|
||||
def initialize(self):
|
||||
super().initialize()
|
||||
self.timer = self.run_every(self.update_sensors, self.datetime(), 1*60*60)
|
||||
self.timer = self.run_every(self.update_sensors, self.datetime()+timedelta(seconds=10), 1*60*60)
|
||||
|
||||
def update_sensors(self, args) -> None:
|
||||
self.log('Updating water counters')
|
||||
@@ -102,6 +131,33 @@ class WaterCounterSensor(Automation):
|
||||
|
||||
self.set_state(entity_id, state = indication_max, attributes = attributes)
|
||||
|
||||
class PowerCounterSensor(Automation):
|
||||
timezone = '+03:00'
|
||||
def initialize(self):
|
||||
super().initialize()
|
||||
self.timer = self.run_every(self.update_sensors, self.datetime()+timedelta(seconds=30), 1*60*60)
|
||||
|
||||
def update_sensors(self, args) -> None:
|
||||
self.log('Updating power counters')
|
||||
self.app.update_power()
|
||||
if 'power_total' in self.entity_ids:
|
||||
power_total = self.app.power_total
|
||||
self.create_power_entity(self.entity_ids['power_total'], power_total, 'kWh', 'Счетчик')
|
||||
if 'power_balance' in self.entity_ids:
|
||||
power_balance = self.app.power_balance
|
||||
self.create_power_entity(self.entity_ids['power_balance'], power_balance, '₽', 'Баланс')
|
||||
|
||||
def create_power_entity(self, entity_id, value, unit, description):
|
||||
icon = "mdi:av-timer"
|
||||
attributes = {}
|
||||
attributes['unit_of_measurement'] = unit
|
||||
attributes['icon'] = icon
|
||||
attributes['friendly_name'] = "{}(mos.ru)".format(description)
|
||||
attributes['description'] = 'Created and updated from appdaemon ({})'.format(__name__)
|
||||
|
||||
self.set_state(entity_id, state = value, attributes = attributes)
|
||||
|
||||
|
||||
class EpdBalanceSensor(Automation):
|
||||
def initialize(self):
|
||||
super().initialize()
|
||||
@@ -184,6 +240,11 @@ class MosruPower(MosruBase):
|
||||
self._check_login()
|
||||
self._power_counters = self._api.get_electrocounters(self._flat_id)
|
||||
|
||||
def send_electrocounters(self, new_values) -> None:
|
||||
self._check_login()
|
||||
self._api.send_electrocounters(self._flat_id, new_values)
|
||||
|
||||
|
||||
class MosruWater(MosruBase):
|
||||
_water_counters = None
|
||||
|
||||
|
||||
@@ -25,6 +25,19 @@ epd_sensor:
|
||||
global_dependencies:
|
||||
- globals
|
||||
|
||||
|
||||
power_sensor:
|
||||
class: PowerCounterSensor
|
||||
module: mosru
|
||||
entity_ids:
|
||||
power_balance: sensor.power_mosenergosbyt_balance
|
||||
power_total: sensor.power_mosenergosbyt_total
|
||||
app: mosru_client
|
||||
dependencies:
|
||||
- mosru_client
|
||||
global_dependencies:
|
||||
- globals
|
||||
|
||||
water_sensor:
|
||||
class: WaterCounterSensor
|
||||
module: mosru
|
||||
@@ -49,3 +62,14 @@ water_sender:
|
||||
global_dependencies:
|
||||
- globals
|
||||
|
||||
power_sender:
|
||||
class: PowerCounterSender
|
||||
module: mosru
|
||||
entity_ids:
|
||||
power_total: sensor.power_main_total
|
||||
app: mosru_client
|
||||
dependencies:
|
||||
- mosru_client
|
||||
global_dependencies:
|
||||
- globals
|
||||
|
||||
|
||||
Reference in New Issue
Block a user