Assistants.voltage
Ассистент контроля напряжения в электросети.
Периодически опрашивает розетку с измерением напряжения и отправляет уведомления при выходе за установленные пороги.
1#!/usr/bin/env python3 2""" 3Ассистент контроля напряжения в электросети. 4 5Периодически опрашивает розетку с измерением напряжения и 6отправляет уведомления при выходе за установленные пороги. 7""" 8 9from e_lib.assistants import ThresholdMonitorAssistant 10from langfuse import observe 11from loguru import logger 12 13from Controllers.smart_plug import SmartPlugController 14 15 16class VoltageAssistant(ThresholdMonitorAssistant): 17 """Контролирует напряжение в электросети. 18 19 Получает показания напряжения из розетки и сравнивает с 20 верхним и нижним порогами. При выходе за пределы отправляет 21 предупреждение через бота. 22 23 Attributes: 24 voltage_threshold_low: Нижний порог напряжения. 25 voltage_threshold_high: Верхний порог напряжения. 26 rounding: Количество знаков после запятой для округления. 27 smart_plug: Контроллер розетки. 28 bot: Бот для отправки уведомлений. 29 """ 30 31 def __init__( 32 self, 33 name, 34 smart_plug_controller: SmartPlugController, 35 voltage_threshold_low=200, 36 voltage_threshold_high=250, 37 rounding=0, 38 bot=None, 39 ): 40 """Инициализирует ассистента контроля напряжения. 41 42 Args: 43 name: Имя ассистента. 44 smart_plug_controller: Контроллер розетки. 45 voltage_threshold_low: Нижний порог напряжения. 46 voltage_threshold_high: Верхний порог напряжения. 47 rounding: Количество знаков после запятой для округления. 48 bot: Бот для отправки уведомлений. 49 """ 50 super().__init__( 51 name, 52 threshold_low=voltage_threshold_low, 53 threshold_high=voltage_threshold_high, 54 rounding=rounding, 55 notifier=bot, 56 logger=logger, 57 ) 58 self.voltage_threshold_low = voltage_threshold_low 59 self.voltage_threshold_high = voltage_threshold_high 60 self.rounding = rounding 61 self.smart_plug = smart_plug_controller 62 self.bot = bot 63 64 def read_metric(self): 65 """Получает текущее значение напряжения из розетки. 66 67 Returns: 68 Напряжение в вольтах или None, если состояние получить не удалось. 69 """ 70 state = self.smart_plug.get_state() 71 if state is None: 72 return None 73 return state["voltage"] 74 75 @observe(name=f"Цикл контроля напряжения {__qualname__}") 76 def run(self): 77 """Выполняет один цикл контроля напряжения. 78 79 Получает состояние розетки, округляет напряжение и сравнивает 80 с порогами. При выходе за пределы отправляет уведомление. 81 """ 82 super().run() 83 84 def _format_high(self, value): 85 """Формирует сообщение о превышении верхнего порога. 86 87 Args: 88 value: Текущее значение напряжения. 89 90 Returns: 91 Текст сообщения. 92 """ 93 return f"Напряжение достигло порога: {value}V >= {self.voltage_threshold_high}V" 94 95 def _format_low(self, value): 96 """Формирует сообщение о понижении напряжения ниже порога. 97 98 Args: 99 value: Текущее значение напряжения. 100 101 Returns: 102 Текст сообщения. 103 """ 104 return f"Напряжение достигла порога: {value}V <= {self.voltage_threshold_low}V"
17class VoltageAssistant(ThresholdMonitorAssistant): 18 """Контролирует напряжение в электросети. 19 20 Получает показания напряжения из розетки и сравнивает с 21 верхним и нижним порогами. При выходе за пределы отправляет 22 предупреждение через бота. 23 24 Attributes: 25 voltage_threshold_low: Нижний порог напряжения. 26 voltage_threshold_high: Верхний порог напряжения. 27 rounding: Количество знаков после запятой для округления. 28 smart_plug: Контроллер розетки. 29 bot: Бот для отправки уведомлений. 30 """ 31 32 def __init__( 33 self, 34 name, 35 smart_plug_controller: SmartPlugController, 36 voltage_threshold_low=200, 37 voltage_threshold_high=250, 38 rounding=0, 39 bot=None, 40 ): 41 """Инициализирует ассистента контроля напряжения. 42 43 Args: 44 name: Имя ассистента. 45 smart_plug_controller: Контроллер розетки. 46 voltage_threshold_low: Нижний порог напряжения. 47 voltage_threshold_high: Верхний порог напряжения. 48 rounding: Количество знаков после запятой для округления. 49 bot: Бот для отправки уведомлений. 50 """ 51 super().__init__( 52 name, 53 threshold_low=voltage_threshold_low, 54 threshold_high=voltage_threshold_high, 55 rounding=rounding, 56 notifier=bot, 57 logger=logger, 58 ) 59 self.voltage_threshold_low = voltage_threshold_low 60 self.voltage_threshold_high = voltage_threshold_high 61 self.rounding = rounding 62 self.smart_plug = smart_plug_controller 63 self.bot = bot 64 65 def read_metric(self): 66 """Получает текущее значение напряжения из розетки. 67 68 Returns: 69 Напряжение в вольтах или None, если состояние получить не удалось. 70 """ 71 state = self.smart_plug.get_state() 72 if state is None: 73 return None 74 return state["voltage"] 75 76 @observe(name=f"Цикл контроля напряжения {__qualname__}") 77 def run(self): 78 """Выполняет один цикл контроля напряжения. 79 80 Получает состояние розетки, округляет напряжение и сравнивает 81 с порогами. При выходе за пределы отправляет уведомление. 82 """ 83 super().run() 84 85 def _format_high(self, value): 86 """Формирует сообщение о превышении верхнего порога. 87 88 Args: 89 value: Текущее значение напряжения. 90 91 Returns: 92 Текст сообщения. 93 """ 94 return f"Напряжение достигло порога: {value}V >= {self.voltage_threshold_high}V" 95 96 def _format_low(self, value): 97 """Формирует сообщение о понижении напряжения ниже порога. 98 99 Args: 100 value: Текущее значение напряжения. 101 102 Returns: 103 Текст сообщения. 104 """ 105 return f"Напряжение достигла порога: {value}V <= {self.voltage_threshold_low}V"
Контролирует напряжение в электросети.
Получает показания напряжения из розетки и сравнивает с верхним и нижним порогами. При выходе за пределы отправляет предупреждение через бота.
Attributes: voltage_threshold_low: Нижний порог напряжения. voltage_threshold_high: Верхний порог напряжения. rounding: Количество знаков после запятой для округления. smart_plug: Контроллер розетки. bot: Бот для отправки уведомлений.
32 def __init__( 33 self, 34 name, 35 smart_plug_controller: SmartPlugController, 36 voltage_threshold_low=200, 37 voltage_threshold_high=250, 38 rounding=0, 39 bot=None, 40 ): 41 """Инициализирует ассистента контроля напряжения. 42 43 Args: 44 name: Имя ассистента. 45 smart_plug_controller: Контроллер розетки. 46 voltage_threshold_low: Нижний порог напряжения. 47 voltage_threshold_high: Верхний порог напряжения. 48 rounding: Количество знаков после запятой для округления. 49 bot: Бот для отправки уведомлений. 50 """ 51 super().__init__( 52 name, 53 threshold_low=voltage_threshold_low, 54 threshold_high=voltage_threshold_high, 55 rounding=rounding, 56 notifier=bot, 57 logger=logger, 58 ) 59 self.voltage_threshold_low = voltage_threshold_low 60 self.voltage_threshold_high = voltage_threshold_high 61 self.rounding = rounding 62 self.smart_plug = smart_plug_controller 63 self.bot = bot
Инициализирует ассистента контроля напряжения.
Args: name: Имя ассистента. smart_plug_controller: Контроллер розетки. voltage_threshold_low: Нижний порог напряжения. voltage_threshold_high: Верхний порог напряжения. rounding: Количество знаков после запятой для округления. bot: Бот для отправки уведомлений.
65 def read_metric(self): 66 """Получает текущее значение напряжения из розетки. 67 68 Returns: 69 Напряжение в вольтах или None, если состояние получить не удалось. 70 """ 71 state = self.smart_plug.get_state() 72 if state is None: 73 return None 74 return state["voltage"]
Получает текущее значение напряжения из розетки.
Returns: Напряжение в вольтах или None, если состояние получить не удалось.
76 @observe(name=f"Цикл контроля напряжения {__qualname__}") 77 def run(self): 78 """Выполняет один цикл контроля напряжения. 79 80 Получает состояние розетки, округляет напряжение и сравнивает 81 с порогами. При выходе за пределы отправляет уведомление. 82 """ 83 super().run()
Выполняет один цикл контроля напряжения.
Получает состояние розетки, округляет напряжение и сравнивает с порогами. При выходе за пределы отправляет уведомление.