Initial version
This commit is contained in:
21
.asoundrc
Normal file
21
.asoundrc
Normal file
@@ -0,0 +1,21 @@
|
||||
pcm.!default {
|
||||
type asym
|
||||
playback.pcm {
|
||||
type plug
|
||||
slave.pcm "output"
|
||||
}
|
||||
capture.pcm {
|
||||
type plug
|
||||
slave.pcm "input"
|
||||
}
|
||||
}
|
||||
|
||||
pcm.output {
|
||||
type hw
|
||||
card 1
|
||||
}
|
||||
|
||||
ctl.!default {
|
||||
type hw
|
||||
card 1
|
||||
}
|
||||
69
kukuc-clock.py
Normal file
69
kukuc-clock.py
Normal file
@@ -0,0 +1,69 @@
|
||||
import RPi.GPIO as GPIO
|
||||
import time
|
||||
from datetime import datetime
|
||||
import subprocess
|
||||
import sys
|
||||
from slovak_datetime_formatter import get_datetime_as_slovak_sentence
|
||||
|
||||
BUTTON_TIMEOUT = 30 # pressing and holding the button longer then e.g. 2 seconds terminates playing
|
||||
PIN = 17 # listen to changes on this GPIO
|
||||
GPIO.setmode(GPIO.BCM) # use BCM pin layout
|
||||
GPIO.setwarnings(False)
|
||||
|
||||
|
||||
def setup_pin():
|
||||
GPIO.setup(PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
||||
|
||||
def terminate_playing(proc):
|
||||
print("Terminating playing...")
|
||||
proc.terminate()
|
||||
proc.wait(timeout=5)
|
||||
print("Terminated")
|
||||
|
||||
def play_presny_cas():
|
||||
print("Playing presny_cas.wav")
|
||||
proc = subprocess.Popen(["aplay", "presny_cas.wav"])
|
||||
wait_for_button_release_or_timeout(PIN, BUTTON_TIMEOUT)
|
||||
print("GPIO went HIGH - terminating playing")
|
||||
terminate_playing(proc)
|
||||
|
||||
def play_beep():
|
||||
print("Playing beep.wav")
|
||||
subprocess.call(["aplay", "beep.wav"])
|
||||
|
||||
def generate_presny_cas():
|
||||
text = get_datetime_as_slovak_sentence(datetime.now())
|
||||
print(f"Generating presny_cas.wav for '{text}'")
|
||||
subprocess.call(
|
||||
[
|
||||
"curl", "--silent", "--get", "--data-urlencode", f"text={text}", "https://tts.virtonline.eu/api/tts", "--output", "presny_cas.wav",
|
||||
]
|
||||
)
|
||||
print("Generated presny_cas.wav")
|
||||
|
||||
def wait_for_button_release_or_timeout(pin, timeout):
|
||||
timeout_start = time.time()
|
||||
while time.time() < timeout_start + timeout:
|
||||
if GPIO.input(pin) == GPIO.HIGH:
|
||||
break
|
||||
time.sleep(0.05)
|
||||
|
||||
|
||||
def handle_pin(pin):
|
||||
print(f"GPIO {pin} LOW - event triggered")
|
||||
generate_presny_cas()
|
||||
play_presny_cas()
|
||||
|
||||
try:
|
||||
setup_pin()
|
||||
play_beep()
|
||||
play_beep()
|
||||
GPIO.add_event_detect(PIN, GPIO.FALLING, callback=handle_pin, bouncetime=1000)
|
||||
print(f"Waiting for the GPIO {PIN} to go LOW...")
|
||||
while True:
|
||||
time.sleep(0.01)
|
||||
except Exception:
|
||||
print("Cought exception...")
|
||||
sys.exit()
|
||||
finally:
|
||||
GPIO.cleanup()
|
||||
15
kukuc-clock.service
Normal file
15
kukuc-clock.service
Normal file
@@ -0,0 +1,15 @@
|
||||
[Unit]
|
||||
Description=kukuc-clock
|
||||
After=sound.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=pi
|
||||
Group=pi
|
||||
WorkingDirectory=/home/pi/kukuc-clock
|
||||
ExecStart=/usr/bin/python3 -u /home/pi/kukuc-clock/kukuc-clock.py
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
BIN
presny_cas.wav
Normal file
BIN
presny_cas.wav
Normal file
Binary file not shown.
177
slovak_datetime_formatter.py
Normal file
177
slovak_datetime_formatter.py
Normal file
@@ -0,0 +1,177 @@
|
||||
from datetime import datetime
|
||||
|
||||
hodiny_slovnik = {
|
||||
0: "dvanásť",
|
||||
1: "jedna",
|
||||
2: "dve",
|
||||
3: "tri",
|
||||
4: "štyri",
|
||||
5: "päť",
|
||||
6: "šesť",
|
||||
7: "sedem",
|
||||
8: "osem",
|
||||
9: "deväť",
|
||||
10: "desať",
|
||||
11: "jedenásť",
|
||||
12: "dvanásť",
|
||||
13: "jedna",
|
||||
14: "dve",
|
||||
15: "tri",
|
||||
16: "štyri",
|
||||
17: "päť",
|
||||
18: "šesť",
|
||||
19: "sedem",
|
||||
20: "osem",
|
||||
21: "deväť",
|
||||
22: "desať",
|
||||
23: "jedenásť",
|
||||
24: "dvanásť",
|
||||
}
|
||||
|
||||
minuty_slovnik = {
|
||||
0: "nula",
|
||||
1: "jedna",
|
||||
2: "dve",
|
||||
3: "tri",
|
||||
4: "štyri",
|
||||
5: "päť",
|
||||
6: "šesť",
|
||||
7: "sedem",
|
||||
8: "osem",
|
||||
9: "deväť",
|
||||
10: "desať",
|
||||
11: "jedenásť",
|
||||
12: "dvanásť",
|
||||
13: "trinásť",
|
||||
14: "štrnásť",
|
||||
15: "pätnásť",
|
||||
16: "šestnásť",
|
||||
17: "sedemnásť",
|
||||
18: "osemnásť",
|
||||
19: "devätnásť",
|
||||
20: "dvadsať",
|
||||
21: "dvadsať jedna",
|
||||
22: "dvadsať dve",
|
||||
23: "dvadsať tri",
|
||||
24: "dvadsať štyri",
|
||||
25: "dvadsať päť",
|
||||
26: "dvadsať šesť",
|
||||
27: "dvadsať sedem",
|
||||
28: "dvadsať osem",
|
||||
29: "dvadsať deväť",
|
||||
30: "tridsať",
|
||||
31: "tridsať jedna",
|
||||
32: "tridsať dve",
|
||||
33: "tridsať tri",
|
||||
34: "tridsať štyri",
|
||||
35: "tridsať päť",
|
||||
36: "tridsať šesť",
|
||||
37: "tridsať sedem",
|
||||
38: "tridsať osem",
|
||||
39: "tridsať deväť",
|
||||
40: "štyridsať",
|
||||
41: "štyridsať jedna",
|
||||
42: "štyridsať dve",
|
||||
43: "štyridsať tri",
|
||||
44: "štyridsať štyri",
|
||||
45: "štyridsať päť",
|
||||
46: "štyridsať šesť",
|
||||
47: "štyridsať sedem",
|
||||
48: "štyridsať osem",
|
||||
49: "štyridsať deväť",
|
||||
50: "päťdesiat",
|
||||
51: "päťdesiat jedna",
|
||||
52: "päťdesiat dve",
|
||||
53: "päťdesiat tri",
|
||||
54: "päťdesiat štyri",
|
||||
55: "päťdesiat päť",
|
||||
56: "päťdesiat šesť",
|
||||
57: "päťdesiat sedem",
|
||||
58: "päťdesiat osem",
|
||||
59: "päťdesiat deväť",
|
||||
}
|
||||
|
||||
dni_slovnik = {
|
||||
0: "pondelok",
|
||||
1: "utorok",
|
||||
2: "streda",
|
||||
3: "štvrtok",
|
||||
4: "piatok",
|
||||
5: "sobota",
|
||||
6: "nedeľa",
|
||||
}
|
||||
|
||||
mesiace_slovnik = {
|
||||
1: "januára",
|
||||
2: "februára",
|
||||
3: "marca",
|
||||
4: "apríla",
|
||||
5: "mája",
|
||||
6: "júna",
|
||||
7: "júla",
|
||||
8: "augusta",
|
||||
9: "septembra",
|
||||
10: "októbra",
|
||||
11: "novembra",
|
||||
12: "decembra",
|
||||
}
|
||||
|
||||
cisla = {
|
||||
1: "prvého",
|
||||
2: "druhého",
|
||||
3: "tretieho",
|
||||
4: "štvrtého",
|
||||
5: "piateho",
|
||||
6: "šiesteho",
|
||||
7: "siedmeho",
|
||||
8: "ôsmeho",
|
||||
9: "deviateho",
|
||||
10: "desiateho",
|
||||
11: "jedenásteho",
|
||||
12: "dvanásteho",
|
||||
13: "trinásteho",
|
||||
14: "štrnásteho",
|
||||
15: "pätnásteho",
|
||||
16: "šestnásteho",
|
||||
17: "sedemnásteho",
|
||||
18: "osemnásteho",
|
||||
19: "devätnásteho",
|
||||
20: "dvadsiateho",
|
||||
21: "dvadsiateho prvého",
|
||||
22: "dvadsiateho druhého",
|
||||
23: "dvadsiateho tretieho",
|
||||
24: "dvadsiateho štvrtého",
|
||||
25: "dvadsiateho piateho",
|
||||
26: "dvadsiateho šiesteho",
|
||||
27: "dvadsiateho siedmeho",
|
||||
28: "dvadsiateho ôsmeho",
|
||||
29: "dvadsiateho deviateho",
|
||||
30: "tridsiateho",
|
||||
31: "tridsiateho prvého",
|
||||
}
|
||||
|
||||
def format_hodiny(hodina):
|
||||
if hodina == 'jedna':
|
||||
return 'hodina'
|
||||
elif hodina.endswith('dve') or hodina.endswith('tri') or hodina.endswith('štyri'):
|
||||
return 'hodiny'
|
||||
else:
|
||||
return 'hodín'
|
||||
|
||||
def format_minuty(minuta):
|
||||
if minuta == 'jedna':
|
||||
return 'minúta'
|
||||
elif minuta == 'dve' or minuta == 'tri' or minuta == 'štyri':
|
||||
return 'minúty'
|
||||
else:
|
||||
return 'minút'
|
||||
|
||||
# Zobrazenie času a dátumu
|
||||
def get_datetime_as_slovak_sentence(cas):
|
||||
hodiny = hodiny_slovnik[cas.hour % 12]
|
||||
minuty = minuty_slovnik[cas.minute]
|
||||
|
||||
return f"Je {hodiny} {format_hodiny(hodiny)} a {minuty} {format_minuty(minuty)}, {dni_slovnik[cas.weekday()]}, {cisla[cas.day]} {mesiace_slovnik[cas.month]}"
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(get_datetime_as_slovak_sentence(datetime.now()))
|
||||
Reference in New Issue
Block a user