Init commit
This commit is contained in:
279
bin/clockv2
Executable file
279
bin/clockv2
Executable file
@@ -0,0 +1,279 @@
|
||||
#!/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Прервано пользователем!")
|
||||
Reference in New Issue
Block a user