An app for Snips.ai with a fully controllable alarm clock.
Features
Installation
Configuration
Usage
Troubleshooting
Coming soon
Contribution
- Full multi-room support 🏠
- context-awareness: it detects what room you're in 💬
- customizable (ringtone sound, volume, ringing timeout, rooms) 🔧
❗ The following instructions assume that Snips is already configured and running on your device (e.g. a Raspberry Pi 3 from the Snips Maker Kit with Raspbian Stretch Lite). SAM should also already be set up and connected to your device and your account.
-
In the German app store add the app
Wecker & Alarme(by domi; this) to your German assistant. -
You want to have a more unique alarmclock? Take a look at the section Configuration below and see what you can change.
-
If you already have the same assistant on your platform, update it with:
sam update-assistant
Otherwise install the assistant on the platform with the following command to choose it (if you have multiple assistants in your Snips console):
sam install assistant
You may change some parameter values of the alarmclock during installation.
In the Snips console or manually in the file /var/lib/snips/skills/Snips-Wecker/config.ini you can change
some parameters that influence the behaviour of the alarm clock app:
| Parameter name | Default | Range | Description |
|---|---|---|---|
| ringing_volume | 50 | 0 - 100 | Volume of the ringtone |
| ringing_timeout | 30 | 3 - 8000 | Time in seconds for the ringing timeout |
| restore_alarms | on | on/off | Whether the alarms should be restored after reboot |
| ringtone_status | on | on/off | Describes the state of the ringtone. If it's off, only a MQTT message will be sent when the alarm is ringing |
-
Parameter
ringing_volumefor different ringing volume in each room:Scheme:
siteId1: volume1, siteId2: volume2, siteId3: volume3, [...]
Unit: Volume in % with range 0 - 100Example:
kitchen: 20, bedroom: 70, bathroom: 100 -
Parameter
ringing_timeoutfor different ringing timeout in each room:Scheme:
siteId1: timeout1, siteId2: timeout2, siteId3: timeout3, [...]
Unit: Timeout in seconds with range 3 to 8000Example:
kitchen: 50, bedroom: 120, bathroom: 300 -
Parameter
ringtone_statusfor different ringtone status in each room:Scheme:
siteId1: status1, siteId2: status2, siteId3: status3, [...]
Unit: Status with on or offExample:
kitchen: off, bedroom: on, bathroom: on -
Parameter
dict_siteIds:
Important if you have a multi-room setup of Snips! These are pairs of room names and siteIds of these rooms.Scheme:
room1: siteId1, room2: siteId2, room3: siteId3, [...]
Default:Schlafzimmer:default -
Parameter
default_room:
Important if you have a multi-room setup of Snips!
Here must be the name of the room in which the alarm is to be set, if no room was said in the command.Scheme:
roomname
Default:Schlafzimmer
Parameters values in the Snips console in this app:
- dict_site-id:
Wohnzimmer:main, Küche:kitchen, Büro:office, Schlafzimmer:bedroom - default_room:
Schlafzimmer
New alarm:
- Wecke mich
in neun Stunden. - Kannst du mich
morgen um 8 Uhr 30wecken? - Bitte wecke mich
in drei Tagen um 5 Uhr. - Stelle einen Alarm
in zwei Minuten. - Alarmiere mich
hierin 15 Minuten. - Stelle im
Schlafzimmereinen Alarm auf10 Uhr 20. - Stelle einen Alarm in der
Kücheauf18 Uhr 50. - Ich möchte
morgen um 7 Uhrindiesem Raumgeweckt werden. Morgensoll mich ein Weckerum 10 Uhrwecken.
Get alarms:
- Gibt es einen Alarm
um 12 Uhr? - Gibt es einen Wecker
um 1 Uhrindiesem Zimmer? - Sage alle Alarme
hierzwischen 21 Uhr und 23 Uhr. - Bitte zähle die Alarme von der
Küchebis zwanzig Uhrauf. - Wird
heute um Mitternachtder Wecker imKinderzimmerlosgehen? - Ist für
heute Abend neunzehn Uhrein Wecker aktiv? - Ich will alle Alarme wissen, die
heuteindiesem Zimmerklingeln. - Welche Alarme werden
am Mittwoch in zwei Wochenklingeln?
Get next alarm:
- Wann klingelt in der
Kücheder nächste Alarm? - Was ist der nächste Alarm?
- Kannst du mir sagen wann der nächste Alarm klingelt?
- In wie vielen Stunden klingelt
hierder nächste Alarm? - Sage mir wann der nächste Alarm klingelt.
- Wann ist der nächste Wecker gestellt?
- Wann klingelt der nächste Alarm im
Bad? - Ich will wissen wann im
Schlafzimmerder nächste Alarm los geht.
Delete alarms:
- Lösche alle Alarme
morgen um neun UhrimFoyer. - Kannst du bitte den Wecker
morgen um neun UhrimFoyerentfernen. - Kannst du den Wecker
in zwei Tagen um achtzehn UhrimEingangsbereichlöschen. - Alarm
um neun Uhr zehnimEsszimmerlöschen. - Bitte den Alarm im
Wohnzimmerum 8 Uhr zwanzigentfernen. - Entferne den Alarm
heute um zehn Uhrauf demDachboden. - Lösche den Alarm
heute um drei Uhrindiesem Raum. - Entferne den Wecker im
Kloum acht Uhr.
Get missed alarms:
- Habe ich Alarme
heutehierverpasst? - Habe ich in der Vergangenheit
hierAlarme verpasst? - Sage bitte die nicht gehörten Wecker vom
Eingang. - Kannst du die nicht gehörten Alarme sagen.
- Bitte lese alle verpassten Alarme von
gesternvor. - Kannst du alle verpassten Wecker von der
Küchesagen. - Sage alle verpassten Alarme von
diesem Mittwoch. - Habe ich
letzte WocheimKinderzimmereinen Alarm verpasst?
While an alarm is ringing in a room you can say a hotword in this room, which is by default "Hey Snips!". The ringtone
You should subscribe to external/alarmclock/out/allAlarms before publishing this message. Then you will get all
alarms.
No JSON Payload required.
JSON Payload (I'm working on it):
| Key | Value |
|---|---|
| siteId | String - Site where the alarmclock should stop ringing |
JSON Payload: data (example access name)
| Key | Value |
|---|---|
| new | JSON Object - Alarm details: datetime object and siteId (see below: 'new') |
| all | Dictionary - Includes all alarms (with the new one; see below: 'all') |
'new' - JSON Object: data['new']
| Key | Value |
|---|---|
| datetime | String - Python object which includes date and time |
| siteId | String - Site where the user created the alarm |
'all' - Dictionary: data['all']
| Dict-Keys (description) | Dict-Values (description) |
|---|---|
datetime (String - Includes date and time; can be parsed into datetime object with strptime from module datetime (see below)) |
siteId (String - Site where the user created the alarm) |
An example parsing with Python is in examples/exaple_parsing_newAlarm.py
todo
JSON Payload:
| Key | Value |
|---|---|
| siteId | String - Site where the alarmclock is ringing |
| room | String - Room name where the alarmclock is ringing |
-
I can't receive some MQTT messages from the Alarmclock.
Some MQTT clients may have a package size limit, so you won be able to receive messages with a larger payload than the limit size until you increase this. E.g. in the library
PubSubClientfor the Arduino the package limit is 128 bytes. In the file<Arduino libraries folder>/PubSubClient/src/PubSubClient.hthe constantMQTT_MAX_PACKET_SIZEmust be increased. How much? This depends on how many alarms you will create. -
The time is wrong on my device.
Make sure that the time and date are correct on your device.
- Ask for missed alarms [############_]
- New setting: snooze en/disabled (then don't end session)
- Captcha exercises against oversleeping [______________________]
- Internationalisation [############__]
- Nice README [#######__________]
- Send alarm data over MQTT [###_________________]
- Maybe: periodical alarms (daily, weekly); before: change clock thread to schedule module
Please report errors and bugs (you can see them with sam service log snips-skill-server or on the Pi
with sudo tail -f /var/log/syslog) by opening
a new issue.
You can also write other ideas for this app. Thank you for your contribution.
Made with 💙