def start_bot(): global thread global WateringControl #logging.getLogger("TeleBot").setLevel(logging.CRITICAL) WateringControl = controls.get(controls.control_Watering) thread = Thread(target=threaded_function, args=(10, )) thread.start()
def listen_thread(arg): while Running: try: noisy_time=controls.get(controls.control_NoisyActions).do_check() for control in controls.active: control.do_check(noisy_time) if not Running: break sleep(config.CHECK_PERIOD_S) except Exception as e: my_logging.logger.exception("main exception:") pass
def __call__(self, screen): user_input = None curses.curs_set(0) self.center(screen) while True: if user_input in key_bindings.get('move_up'): self.selected = (self.selected - 1) % len(self.options) elif user_input in key_bindings.get('move_down'): self.selected = (self.selected + 1) % len(self.options) elif user_input in key_bindings.get('select'): break elif user_input == curses.KEY_RESIZE: self.center(screen) self._draw_frame(screen) self._draw(screen) user_input = screen.getch() curses.curs_set(1) return self.options[self.selected][1]
def callback_inline(call): try: if call.message: if call.data == "measure_water": WateringControl.do_watering("measure_water", 5, False) send_msg_bot_long_check(call.message.chat.id, WateringControl.get_status_str()) elif call.data == "do_watering_now": WateringControl.do_watering("force from telegram") bot.send_message(call.message.chat.id, "Watering done !") elif call.data == "get_status": bot.send_message( call.message.chat.id, controls.get_status_str() + sensors.get_status_str()) elif call.data == "manual_run_stop_fan": controls.get( controls.control_TempHum).switch(external_command=True) bot.send_message( call.message.chat.id, controls.get(controls.control_TempHum).get_status_str()) elif call.data == "auto_fan": controls.get(controls.control_TempHum).set_auto() bot.send_message(call.message.chat.id, "Fans auto !") elif call.data == "on_off_outlet": controls.get( controls.control_Outlet).switch(external_command=True) bot.send_message( call.message.chat.id, devices.get(devices.Outlet)[0].get_status_str()) elif call.data == "on_off_conditioner": controls.get(controls.control_ConditionerControl_IR).switch( external_command=True) bot.send_message( call.message.chat.id, devices.get(devices.IrConditioner)[0].get_status_str()) elif call.data == "auto_outlet": controls.get(controls.control_Outlet).set_auto() bot.send_message(call.message.chat.id, "Outlet auto !") elif call.data == "wake_my_pc": send_magic_packet('7C:05:07:11:40:26') send_magic_packet('7c:05:07:11:40:26') bot.send_message(call.message.chat.id, "Command sended !") elif call.data == "check_light": bot.send_message( call.message.chat.id, sensors.get(sensors.Light)[0].get_status_str()) elif call.data == "make_camera_photo": devices.get(devices.Camera)[0].do_photo() photo = open('/dev/shm/camera.jpg', 'rb') bot.send_photo(call.message.chat.id, photo) elif call.data == "make_co2_graph": make_co2_graph() photo = open('/dev/shm/plot.png', 'rb') bot.send_photo(call.message.chat.id, photo) elif call.data == "make_temp_hum_graph": make_temp_hum_graph() photo = open('/dev/shm/plot.png', 'rb') bot.send_photo(call.message.chat.id, photo) elif call.data == "make_particles_graph": make_particles_graph() photo = open('/dev/shm/plot.png', 'rb') bot.send_photo(call.message.chat.id, photo) elif call.data == "get_last_10_watering_dates": values = database.get_last_10_watering_info() bot.send_message(call.message.chat.id, values) else: send_msg_bot_long_check(str(config.my_telegram_id), "unknown call data: " + call.data, get_markup()) my_logging.logger.error("unknown call.data " + call.data) elif call.inline_message_id: if call.data == "test": bot.edit_message_text(inline_message_id=call.inline_message_id, text="forbidden !!!") except Exception as e: my_logging.logger.exception("callback_inline:" + str(e)) pass finally: filenames = ["/dev/shm/plot.png", "/dev/shm/camera.jpg"] for filename in filenames: if os.path.exists(filename): os.remove(filename)
status=devices.get_status_str()+sensors.get_status_str()+controls.get_status_str() my_logging.logger.info(status) TTS.init() # this must be before STT # sopare_plugin.init() STT.init() # this must be at the end watch_thread.init() my_logging.logger.info("end init") # MAIN if __name__ == "__main__": init() my_logging.logger.info("Script started") my_logging.logger.info("time for watering = " + str(config.DEF_TIME_WATER_S)+" s") if controls.get(controls.control_NoisyActions).check_speech_allowed(): TTS.say("Умный дом перезапущен.") # TTS.say(utils.common.get_weather_desc()) # MAIN LOOP while True: STT.listen_cycle() stop_all_devices() my_logging.logger.info("Script ended " + get_time()) GPIO.cleanup()
def exec_command(command): my_logging.logger.info("command:" + command) # devices control if command in [ "вентилятор", "включи вентилятор", "включить вентилятор", "выключи вентилятор", "выключить вентилятор" ]: say_ok(command) controls.get(controls.control_TempHum).switch(external_command=True) elif command in ["вентилятор авто"]: say_ok(command) controls.get(controls.control_TempHum).set_auto() elif command in [ "розетка", "включи розетку", "включить розетку", "выключи розетку", "выключить розетку" ]: say_ok(command) controls.get(controls.control_Outlet).switch(external_command=True) elif command in ["розетка авто"]: say_ok(command) controls.get(controls.control_Outlet).set_auto() elif command in [ "кондиционер", "включи кондиционер", "выключи кондиционер", "жарко" ]: say_ok(command) controls.get(controls.control_ConditionerControl_IR).switch( external_command=True) elif command in ["кондиционер авто"]: say_ok(command) controls.get(controls.control_ConditionerControl_IR).set_auto() elif command in ["включи все"]: say_ok(command) controls.enable() elif command in ["выключи все"]: say_ok(command) controls.disable() elif command in ["все авто"]: say_ok(command) controls.set_auto() # noise control elif command in ["тихо"]: say_ok(command) controls.get(controls.control_NoisyActions).force_silent = True elif command in ["говори"]: say_ok(command) controls.get(controls.control_NoisyActions).force_silent = False #temperature and humidity and co2 elif command in [ "температура", "какая температура", "температура в комнате" ]: temperature, humidity, num_cycles_wrong = sensors.get( sensors.TempHum)[0].read_val() temp_str = "{:.1f}".format(temperature).replace('.', ',') TTS.say("Температура в комнате: " + temp_str + " градусов") if temperature < 22: TTS.say("прохладно, оденься потеплее") elif command in ["влажность", "какая влажность", "влажность в комнате"]: temperature, humidity, num_cycles_wrong = sensors.get( sensors.TempHum)[0].read_val() hum_str = "{:.1f}".format(humidity).replace('.', ',') TTS.say("Влажность в комнате: " + str(hum_str) + " %") if humidity < 35: TTS.say("суховато, можно увлажнить") elif command in [ "углекислый газ", "газ", "какой уровень углекислого газа" ]: co2 = sensors.get(sensors.CO2)[0].read_val() TTS.say("Уровень углекислого газа в комнате: " + str(co2) + " ppm") if co2 > 800: TTS.say("можно открыть окно") elif command in ["частицы", "загрязнение"]: particles = sensors.get(sensors.Particles_pms7003)[0].read_val() pm25 = particles['data']['10'] TTS.say("Частиц 2.5 в комнате: " + str(pm25[1]) + "микрограмм на кубометр") if pm25[1] > 100: TTS.say("надевай маску, загрязнение высокое !") #time, weather,news elif command in ["время", "сколько время", "сколько времени"]: TTS.say('{0:%H:%M}'.format(datetime.now())) elif command in ["дата", "какой день", "какой сегодня день"]: dt = format_datetime(datetime.now(), "dd MMMM HH:mm", locale='ru') TTS.say("Сейчас : " + dt) elif command in [ "погода", "прогноз погоды", "что на улице", "что с погодой" ]: TTS.say(utils.common.get_weather_desc()) elif command in ["новости", "что нового"]: count = 1 TTS.say("Новости от РосБизнесКонсалтинг:") for news in utils.common.get_news(): TTS.say(f"Новость {count}: {news}") count += 1 # misc, just for fun elif command in ["отзовись", "привет"]: sound.play_command("hello") elif command in ["спокойной ночи", "спокойной"]: TTS.say("Спокойной ночи дорог'ой") elif command in ["доброе утро", "доброе", "с добрым утром"]: TTS.say("С добрым утром дорог'ой") elif command in ["как дела", "как жизнь"]: TTS.say("Отлично, температура " + str(utils.common.get_cpu_temperature()) + ", у тебя как ?") elif command in ["как тебя зовут", "твое имя", "кто ты"]: TTS.say( "я автоматизировнный помощник по дому, пока не до конца доделанный" ) # wake up elif command in [ "разбуди завтра в 7", "разбуди завтра в 7:00", "разбуди в 7:00" ]: next = datetime.now() + timedelta(days=1) next = next.replace(hour=7) wakeup_list.append(next) TTS.say("Хорошо, разбужу в 7") elif command in [ "разбуди завтра в 8", "разбуди завтра в 8:00", "разбуди в 8:00" ]: next = datetime.now() + timedelta(days=1) next = next.replace(hour=8) wakeup_list.append(next) TTS.say("Хорошо, разбужу в 8") elif command in ["отмена", "отмена комманды"]: TTS.say("всего хорошего") #unknown, error else: if not TTS.say("непонятная комманда : " + command): sound.play_command("repeat") my_logging.logger.info("unknown command: " + command)