Как стать автором
Обновить
84.95
ISPsystem
Софт для управления IT-инфраструктурой

Как я автоматизировал свое утро с помощью Python

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров42K
Автор оригинала: Gabe

Приходилось ли вам по утрам смотреть в потолок в ужасе от горы предстоящей рутины? А я вот часто так делал. Пока однажды не сорвался. Я решил автоматизировать все свои утренние дела при помощи Python, и результат оказался поистине потрясающим.

Точка невозврата

Эта среда выдалась особенно напряженной. Будильник предательски не сработал, я пролил кофе на последнюю чистую рубашку и опоздал на автобус, из-за чего пришел на важную встречу позже, чем рассчитывал. В голове пронеслась мысль: «Неужели мне придется прожить так всю жизнь?». Это был тот самый рубеж. Бесконечный утренний хаос довел меня до ручки, и я решил, что необходимо вернуть контроль над ситуацией.

Идея

Моя идея началась с шутки моего друга Сэма. Мы болтали за кружечкой кофе, и он вскользь заметил: «Было бы здорово, если бы можно было запрограммировать утро так, чтобы оно проходило само собой». Мы посмеялись, но идея меня зацепила. Почему бы и нет? Я неплохо разбирался в коде. Не раз выполнял автоматизацию небольших задач. А получится ли автоматизировать целое утро?

Первые шаги

На следующий же день я приступил к мозговому штурму. Что больше всего бесит меня по утрам? Приготовление кофе, выбор одежды, проверка погоды, составление графика и так далее. Я составил список и понял, что с помощью парочки скриптов смогу избавиться от этих досадных недоразумений.

Проливаем свет

Далее я задумался об освещении. Где-то я читал, что правильный свет может существенно влиять на настроение и уровень энергии. Поэтому я купил набор умных лампочек, которыми можно было управлять с помощью Python.

Photo by Mostafa Safadel on Unsplash

Я написал скрипт, который плавно повышал яркость света в спальне, имитируя восход солнца. Теперь даже самыми хмурыми зимними днями я просыпался будто бы вместе с солнцем.

from phue import Bridge
import time
def gradual_light(bridge_ip, light_id, duration):
   bridge = Bridge(bridge_ip)
   bridge.connect()
   for brightness in range(0, 256, 5):
       bridge.set_light(light_id, 'bri', brightness)
       time.sleep(duration / 51)  # There are 51 steps from 0 to 255 in increments of 5
gradual_light('192.168.1.2', 1, 600)

Синхронизируем расписание

Photo by Behnam Norouzi on Unsplash

Разобравшись со светом, я переключил внимание на распорядок дня. Мне нужен был способ быстро получить представление о списке дел без необходимости проверять сразу несколько приложений. Я написал скрипт, который получал мое расписание из Google Calendar и читал его вслух при помощи библиотеки преобразования текста в речь.

import os
from google.oauth2 import service_account
from googleapiclient.discovery import build
import pyttsx3

def get_events():
    SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
    SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-file.json'
    credentials = service_account.Credentials.from_service_account_file(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    service = build('calendar', 'v3', credentials=credentials)
    now = datetime.datetime.utcnow().isoformat() + 'Z'
    events_result = service.events().list(calendarId='primary', timeMin=now,
                                        maxResults=10, singleEvents=True,
                                        orderBy='startTime').execute()
    events = events_result.get('items', [])
    return events
def read_schedule():
    events = get_events()
    if not events:
        text = 'No upcoming events found.'
    else:
        text = 'Your schedule for today:'
        for event in events:
            start = event['start'].get('dateTime', event['start'].get('date'))
            text += f"\n{start}: {event['summary']}"
    engine = pyttsx3.init()
    engine.say(text)
    engine.runAndWait()
read_schedule()

Автоматизируем кофе

Photo by Tyler Nix on Unsplash

Прежде всего я решил закрыть вопрос с приготовлением кофе. Для этого я приобрел «умную» кофеварку, которой можно управлять с помощью телефона. Затем я написал на Python скрипт, использующий библиотеку, которая взаимодействует с API кофеварки. Каждый вечер перед сном я ставил будильник и запускал скрипт, который запускал варку кофе за десять минут до моего пробуждения. Это незначительное на первый взгляд изменение позволило мне каждое утро просыпаться под запах свежего кофе. Маленькое, но чудо.

import requests
import time

def brew_coffee():
    # Replace with your coffee maker's API endpoint and access token
    api_url = "http://smartcoffeeapi.com/brew"
    access_token = "your_access_token_here"
    
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
    }
    
    response = requests.post(api_url, headers=headers)
    if response.status_code == 200:
        print("Coffee is brewing!")
    else:
        print("Failed to start coffee maker.")
# Set this script to run 10 minutes before your alarm
brew_coffee()

Автоматизируем гардероб

Фото Huy Nguyen, Unsplash

Далее следовало разобраться с гардеробом. Подобрать наряд всегда было для меня непросто, так как половина одежды вечно валялась кучей по всему полу. Я установил камеру в шкафу и написал скрипт, который должен был каждое утро фотографировать мой гардероб. Затем, с помощью базового распознавания объектов, скрипт предлагал бы мне варианты одежды в зависимости от погоды и моего расписания на день.

import requests

def get_weather():
    response = requests.get("http://api.weatherapi.com/v1/current.json?key=your_api_key&q=your_location")
    weather = response.json()
    return weather['current']['temp_c'], weather['current']['condition']['text']
def suggest_outfit(temp, condition):
    if temp < 10:
        return "Warm coat and scarf"
    elif 10 <= temp < 20:
        return "Jacket and jeans"
    else:
        return "T-shirt and shorts"
temp, condition = get_weather()
outfit = suggest_outfit(temp, condition)
print(f"Today's weather: {temp}°C and {condition}. Suggested outfit: {outfit}")

Для этого я написал скрипт, который проверял погоду и предлагал соответствующую одежду. Чтобы быть уверенным в практичности предложенных вариантов, я даже ввел данные о своем гардеробе.

import cv2
import numpy as np
import requests

def capture_wardrobe_image():
    camera = cv2.VideoCapture(0)
    return_value, image = camera.read()
    cv2.imwrite('wardrobe.jpg', image)
    camera.release()
    cv2.destroyAllWindows()
def suggest_outfit():
    # Replace with your image recognition model API
    api_url = "http://outfitsuggestionapi.com/predict"
    image_path = "wardrobe.jpg"
    
    with open(image_path, 'rb') as image_file:
        files = {'file': image_file}
        response = requests.post(api_url, files=files)
    
    if response.status_code == 200:
        outfit_suggestion = response.json()
        print(f"Suggested outfit: {outfit_suggestion}")
    else:
        print("Failed to get outfit suggestion.")
# Capture wardrobe image and suggest outfit
capture_wardrobe_image()
suggest_outfit()

Обновления погоды и расписания

Photo by Andre Benz on Unsplash

К слову о погоде. Я написал еще один скрипт, который извлекал самые свежие данные из онлайн API. Затем он сравнивал прогноз погоды с событиями из календаря на этот день. Если собирался дождь, а у меня была назначена встреча на другом конце города, он отправлял мне напоминание захватить зонтик. Если же было солнечно и у меня не было никаких встреч, программа предлагала выбрать более повседневный наряд.

import requests
from datetime import datetime

def get_weather():
    api_url = "http://api.weatherapi.com/v1/current.json"
    params = {
        "key": "your_weather_api_key",
        "q": "your_location"
    }
    response = requests.get(api_url, params=params)
    return response.json()
def get_schedule():
    # Replace with your calendar API
    api_url = "http://calendarapi.com/events"
    params = {
        "access_token": "your_calendar_access_token"
    }
    response = requests.get(api_url, params=params)
    return response.json()
def send_reminder(message):
    # Replace with your preferred notification method
    print(f"Reminder: {message}")
# Get weather and schedule
weather = get_weather()
schedule = get_schedule()
# Decision logic based on weather and schedule
if weather['current']['condition']['text'].lower() == 'rain':
    send_reminder("It's going to rain. Don't forget your umbrella!")
else:
    send_reminder("No rain today. Dress comfortably.")
for event in schedule['events']:
    event_time = datetime.fromisoformat(event['start_time'])
    if event_time.hour < 12:
        send_reminder(f"Morning event: {event['title']} at {event_time.strftime('%I:%M %p')}")

Завтрак и прочие неприятности

Фото Look Studio, Unsplash

Завтрак — еще одна важная проблема. Я часто пропускал его или перекусывал чем-то вредным по пути на работу. Поэтому я разработал скрипт, который связывался с умной системой учета запасов в холодильнике и кладовой. Он отслеживал, какие продукты у меня имеются, и предлагал рецепты, основанные на моих предпочтениях и потребностях в питании. Кроме того, я запрограммировал блендер так, чтобы он начинал готовить смузи, едва я выйду из душа.

import requests

def get_pantry_inventory():
    # Replace with your smart pantry API
    api_url = "http://smartpantryapi.com/inventory"
    response = requests.get(api_url)
    return response.json()
def suggest_recipe(inventory):
    # Replace with your recipe suggestion API
    api_url = "http://recipesuggestionapi.com/suggest"
    response = requests.post(api_url, json=inventory)
    return response.json()
def start_smoothie_blender(recipe):
    # Replace with your smart blender API
    api_url = "http://smartblenderapi.com/start"
    response = requests.post(api_url, json=recipe)
    if response.status_code == 200:
        print("Smoothie is being made!")
    else:
        print("Failed to start smoothie blender.")
# Get pantry inventory and suggest recipe
inventory = get_pantry_inventory()
recipe = suggest_recipe(inventory)
print(f"Suggested recipe: {recipe}")
# Start smoothie blender with the suggested recipe
start_smoothie_blender(recipe)

Напоминания о тренировках

Напоследок я установил себе напоминания о тренировках. Я написал скрипт, который при помощи API Twilio отправляет текстовые сообщения, напоминающие мне о необходимости сделать зарядку в 8 утра.

from twilio.rest import Client

account_sid = 'your_account_sid'
auth_token = 'your_auth_token'
client = Client(account_sid, auth_token)
message = client.messages.create(
    body="Time to work out!",
    from_='+1234567890',
    to='+0987654321'
)
print(message.sid)

Внедрение

Когда скрипты были готовы, настало время испытать их на практике. Я объединил их в единую, целостную утреннюю программу. Я создал мастер-скрипт, который контролировал все процессы — от звонка будильника до варки кофе и выбора костюма.

import threading

def morning_routine():
    alarm_thread = threading.Thread(target=play_alarm)
    coffee_thread = threading.Thread(target=brew_coffee)
    weather_thread = threading.Thread(target=get_weather_and_suggest_outfit)
    alarm_thread.start()
    coffee_thread.start()
    weather_thread.start()
    alarm_thread.join()
    coffee_thread.join()
    weather_thread.join()
def get_weather_and_suggest_outfit():
    temp, condition = get_weather()
    outfit = suggest_outfit(temp, condition)
    print(f"Today's weather: {temp}°C and {condition}. Suggested outfit: {outfit}")
morning_routine()

Результат

Первое утро, когда я тестировал систему, потрепало мне нервы. Вдруг что-то пойдет не так? Но все сработало как по маслу. Будильник включил мою любимую песню в 7 утра. Я скатился с кровати, и через пять минут квартиру наполнил запах свежесваренного кофе. Я сидел с кружкой и слушал, как компьютер зачитывает мне последние письма. К тому времени как я закончил с кофе, я уже точно знал, как будет выглядеть мой день, а в 8 утра мне пришло сообщение с напоминанием о необходимости сделать зарядку.

Я был в восторге. Это не только облегчило мое пробуждение, но и сделало меня более продуктивным. У меня было больше энергии и сосредоточенности, потому что не пришлось тратить силы на рутинные дела.

Ложка дегтя

Впрочем, не всем был по душе мой новый образ жизни. Некоторые друзья решили, что я сошел с ума. «Ты позволяешь машинам управлять твоей жизнью», — говорили они. «А вдруг что-то пойдет не так?»

Однажды утром девушка устроила мне настоящую сцену. «Слушай, я знаю, что ты любишь свою технику, — начала она, — но не кажется ли тебе, что ты заходишь слишком далеко? Что будет, если у тебя отключится интернет, или твои скрипты сломаются? Ты же пропадешь!»

Она была права. Я стал очень сильно зависеть от системы. Дело в том, что отказ системы — это не вопрос «если», а вопрос «когда». Чтобы снизить риски, я предусмотрел резервные варианты. Если кофеварка не включалась, я получал уведомление и мог запустить ее вручную. Если отказывала камера гардероба, у меня был список готовых нарядов, из которых можно было выбрать нужный. Скрипт прогноза погоды? Ну, при необходимости я всегда мог вручную проверить прогноз на телефоне.

Заключение

Автоматизация утренней рутины с помощью Python оказалась не просто забавным экспериментом — она изменила ход моей жизни. Она показала мне ценность автоматизации и то, как технологии могут улучшить нашу жизнь самыми неожиданными способами. Конечно, может показаться, что это уже перебор, но для такого человека, как я, это просто идеальный вариант.

Если честно, я не собираюсь ничего менять. Каждое утро благодаря нескольким строчкам кода я могу спокойно и без стресса начать свой день.

Так что, если вы устали от утренних хлопот, почему бы вам тоже не попробовать? Возьмите ноутбук, напишите несколько скриптов, а остальное пусть сделает Python. Возможно, вы поймете, что немного автоматизации — это очень здорово.

Надеюсь, эта статья была вам полезна. Спасибо, что уделили время ее прочтению.

Теги:
Хабы:
+10
Комментарии98

Публикации

Информация

Сайт
www.ispsystem.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
ISPsystem