280 lines
7.8 KiB
Python
Executable File
280 lines
7.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
# Работа со временем.
|
||
|
||
import subprocess
|
||
from datetime import datetime
|
||
|
||
import requests
|
||
|
||
# noqa
|
||
minutes = [
|
||
"ноль минут",
|
||
"одна минута",
|
||
"две минуты",
|
||
"три минуты",
|
||
"четыре минуты",
|
||
"пять минут",
|
||
"шесть минут",
|
||
"семь минут",
|
||
"восемь минут",
|
||
"девять минут",
|
||
"десять минут",
|
||
"одиннадцать минут",
|
||
"двенадцать минут",
|
||
"тринадцать минут",
|
||
"четырнадцать минут",
|
||
"пятнадцать минут",
|
||
"шестнадцать минут",
|
||
"семнадцать минут",
|
||
"восемнадцать минут",
|
||
"девятнадцать минут",
|
||
"двадцать минут",
|
||
"двадцать одна минута",
|
||
"двадцать две минуты",
|
||
"двадцать три минуты",
|
||
"двадцать четыре минуты",
|
||
"двадцать пять минут",
|
||
"двадцать шесть минут",
|
||
"двадцать семь минут",
|
||
"двадцать восемь минут",
|
||
"двадцать девять минут",
|
||
"тридцать минут",
|
||
"тридцать одна минута",
|
||
"тридцать две минуты",
|
||
"тридцать три минуты",
|
||
"тридцать четыре минуты",
|
||
"тридцать пять минут",
|
||
"тридцать шесть минут",
|
||
"тридцать семь минут",
|
||
"тридцать восемь минут",
|
||
"тридцать девять минут",
|
||
"сорок минут",
|
||
"сорок одна минута",
|
||
"сорок две минуты",
|
||
"сорок три минуты",
|
||
"сорок четыре минуты",
|
||
"сорок пять минут",
|
||
"сорок шесть минут",
|
||
"сорок семь минут",
|
||
"сорок восемь минут",
|
||
"сорок девять минут",
|
||
"пятьдесят минут",
|
||
"пятьдесят одна минута",
|
||
"пятьдесят две минуты",
|
||
"пятьдесят три минуты",
|
||
"пятьдесят четыре минуты",
|
||
"пятьдесят пять минут",
|
||
"пятьдесят шесть минут",
|
||
"пятьдесят семь минут",
|
||
"пятьдесят восемь минут",
|
||
"пятьдесят девять минут",
|
||
]
|
||
|
||
clocks = [
|
||
"ноль часов",
|
||
"один час",
|
||
"два часа",
|
||
"три часа",
|
||
"четыре часа",
|
||
"пять часов",
|
||
"шесть часов",
|
||
"семь часов",
|
||
"восемь часов",
|
||
"девять часов",
|
||
"десять часов",
|
||
"одиннадцать часов",
|
||
"двенадцать часов",
|
||
"тринадцать часов",
|
||
"четы*рнадцать часов",
|
||
"пятнадцать часов",
|
||
"шестнадцать часов",
|
||
"семнадцать часов",
|
||
"восемнадцать часов",
|
||
"девятнадцать часов",
|
||
"двадцать часов",
|
||
"двадцать один час",
|
||
"двадцать два часа",
|
||
"двадцать три часа",
|
||
]
|
||
|
||
days = [
|
||
"ноль",
|
||
"первое",
|
||
"второе",
|
||
"третье",
|
||
"четвертое",
|
||
"пятое",
|
||
"шестое",
|
||
"седьмое",
|
||
"восьмое",
|
||
"девятое",
|
||
"десятое",
|
||
"одиннадцатое",
|
||
"двенадцатое",
|
||
"тринадцатое",
|
||
"четырнадцатое",
|
||
"пятнадцатое",
|
||
"шестнадцатое",
|
||
"семнадцатое",
|
||
"восемнадцатое",
|
||
"девятнадцатое",
|
||
"двадцатое",
|
||
"двадцать первое",
|
||
"двадцать второе",
|
||
"двадцать третье",
|
||
"двадцать четвертое",
|
||
"двадцать пятое",
|
||
"двадцать шестое",
|
||
"двадцать седьмое",
|
||
"двадцать восьмое",
|
||
"двадцать девятое",
|
||
"тридцатое",
|
||
"тридцать первое",
|
||
]
|
||
|
||
w_day = [
|
||
"понед*ельник",
|
||
"вт*орник",
|
||
"сред*а",
|
||
"четв*ерг",
|
||
"п*ятница",
|
||
"субб*ота",
|
||
"воскрес*енье",
|
||
]
|
||
|
||
month_dic = {
|
||
1: "январ*я",
|
||
2: "феврал*я",
|
||
3: "м*арта",
|
||
4: "апр*еля",
|
||
5: "м*ая",
|
||
6: "и*юня",
|
||
7: "и*юля",
|
||
8: "*августа",
|
||
9: "сентябр*я",
|
||
10: "октябр*я",
|
||
11: "ноябр*я",
|
||
12: "декабр*я",
|
||
}
|
||
|
||
|
||
def get_date():
|
||
"""
|
||
Получение текущего времени.
|
||
В формате: "HH часов YY минут"
|
||
"""
|
||
now_time = datetime.now() # текущая дата со временем
|
||
week_day = datetime.today().weekday()
|
||
hour = clocks[now_time.hour]
|
||
minute = minutes[now_time.minute]
|
||
day = now_time.day
|
||
month = now_time.month
|
||
|
||
say_date = (
|
||
hour
|
||
+ " "
|
||
+ minute
|
||
+ ", "
|
||
+ w_day[week_day]
|
||
+ ", "
|
||
+ days[day]
|
||
+ " "
|
||
+ month_dic.get(month)
|
||
+ ", "
|
||
)
|
||
|
||
return say_date
|
||
|
||
|
||
def inflect(n: object, form1: object, form2: object, form5: object) -> object:
|
||
"""
|
||
Приведение в соответствие слова в зависимости от числа.
|
||
Например: inflect(18,'градус','градуса','градусов') -> 'градусов'
|
||
"""
|
||
n = abs(n) # убираем минус, если есть
|
||
n = n % 100 # две последних цифры
|
||
n1 = n % 10 # последняя цифра
|
||
|
||
if 10 < n < 20:
|
||
form = form5
|
||
elif 1 < n1 < 5:
|
||
form = form2
|
||
elif n1 == 1:
|
||
form = form1
|
||
else:
|
||
form = form5
|
||
|
||
return form
|
||
|
||
|
||
def temperature(n):
|
||
if n < 0:
|
||
f = "мор*оза"
|
||
elif n >= 1:
|
||
f = "тепл*а"
|
||
else:
|
||
f = ""
|
||
|
||
return f
|
||
|
||
|
||
with open("/sys/class/power_supply/BAT0/capacity", "r") as f:
|
||
capacity = f.read()
|
||
|
||
with open("/sys/class/power_supply/BAT0/cycle_count", "r") as f:
|
||
cycle = f.read()
|
||
|
||
with open("/sys/class/power_supply/BAT0/status", "r") as f:
|
||
status = f.read()
|
||
|
||
|
||
if int(capacity) % 10 == 1:
|
||
percent = "процент"
|
||
elif int(capacity) % 10 == 2 or int(capacity) % 10 == 3 or int(capacity) % 10 == 4:
|
||
percent = "процента"
|
||
else:
|
||
percent = "процентов"
|
||
|
||
if status.strip() == "Discharging":
|
||
bstat = "Разряжается"
|
||
else:
|
||
bstat = "Заряжается"
|
||
|
||
|
||
def main():
|
||
str_time = get_date()
|
||
|
||
weather_url = (
|
||
"http://api.openweathermap.org/data/2.5/"
|
||
"weather?id=472757&lang=ru"
|
||
"&appid=6f9d925282c57d29a95977d346e2d528&units=metric"
|
||
)
|
||
# 539221
|
||
r = requests.get(weather_url).text.split(sep=",")
|
||
hum = r[4].split(sep=":")[1]
|
||
t = r[7].split(sep=":")[2]
|
||
temp = round(float(t))
|
||
temp_f = temperature(temp)
|
||
lc_weather = inflect(temp, "градус", "градуса", "градусов")
|
||
weather_string = (
|
||
# " Сейч*ас в стан*ице Кум*ылженской" + str(temp) + lc_weather + temp_f + hum
|
||
" Сейч*ас в Волгогр*аде"
|
||
+ str(temp)
|
||
+ lc_weather
|
||
+ temp_f
|
||
+ hum
|
||
)
|
||
|
||
battery = f" Заряд батареи - {capacity} {percent}. {bstat}"
|
||
|
||
a = "Текущее Время " + str_time + weather_string + battery
|
||
|
||
return subprocess.run(["rhvoice_say", a])
|
||
|
||
|
||
try:
|
||
main()
|
||
except KeyboardInterrupt:
|
||
print("\rПрервано пользователем!")
|