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