Files
dotfiles/bin/clockv2
Archie Fox 06b8ee8caf Init commit
2025-06-08 06:59:19 +03:00

280 lines
7.8 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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Прервано пользователем!")