5.2 KiB
ITD
InfiniTime Daemon
itd
is a daemon that uses my infinitime library to interact with the PineTime running InfiniTime.
Features
- Notification relay
- Notification transliteration
- Call Notifications (ModemManager)
- Music control
- Get info from watch (HRM, Battery level, Firmware version, Motion)
- Set current time
- Control socket
- Firmware upgrades
- Weather
- BLE Filesystem
Socket
This daemon creates a UNIX socket at /tmp/itd/socket
. It allows you to directly control the daemon and, by extension, the connected watch.
The socket uses my lrpc library for requests. This library accepts requests in msgpack, with the following format:
{"Receiver": "ITD", "Method": "Notify", "Arg": {"title": "title1", "body": "body1"}, "ID": "some-id-here"}
It will return a msgpack response, the format of which can be found here. The response will have the same ID as was sent in the request in order to allow the client to keep track of which request the response belongs to.
Transliteration
Since the PineTime does not have enough space to store all unicode glyphs, it only stores the ASCII space and Cyrillic. Therefore, this daemon can transliterate unsupported characters into supported ones. Since some languages have different transliterations, the transliterators to be used must be specified in the config. Here are the available transliterators:
- eASCII
- Scandinavian
- German
- Hebrew
- Greek
- Russian
- Ukranian
- Arabic
- Farsi
- Polish
- Lithuanian
- Estonian
- Icelandic
- Czech
- French
- Armenian
- Korean
- Chinese
- Romanian
- Emoji
Place the desired map names in an array as notifs.translit.use
. They will be evaluated in order. You can also put custom transliterations in notifs.translit.custom
. These take priority over any other maps. The notifs.translit
config section should look like this:
[notifs.translit]
use = ["eASCII", "Russian", "Emoji"]
custom = [
"test", "replaced"
]
itctl
This daemon comes with a binary called itctl
which uses the socket to control the daemon from the command line. As such, it can be scripted using bash.
This is the itctl
usage screen:
Control the itd daemon for InfiniTime smartwatches
Usage:
itctl [flags]
itctl [command]
Available Commands:
firmware Manage InfiniTime firmware
get Get information from InfiniTime
help Help about any command
notify Send notification to InfiniTime
set Set information on InfiniTime
Flags:
-h, --help help for itctl
-s, --socket-path string Path to itd socket
Use "itctl [command] --help" for more information about a command.
itgui
In cmd/itgui
, there is a gui frontend to the socket of itd
. It uses the fyne library for Go. It can be compiled by running:
go build ./cmd/itgui
Screenshots
Installation
To install, install the go compiler and make. Usually, go is provided by a package either named go
or golang
, and make is usually provided by make
. The go compiler must be version 1.17 or newer for various new reflect
features.
To install, run
make && sudo make install
Starting
To start the daemon, run the following without root:
systemctl --user start itd
To autostart on login, run:
systemctl --user enable itd
Cross compiling
To cross compile, simply set the go environment variables. For example, for PinePhone, use:
make GOOS=linux GOARCH=arm64
This will compile itd
and itctl
for Linux aarch64 which is what runs on the PinePhone. This daemon only runs on Linux due to the library's dependencies (dbus
, and bluez
specifically).
Configuration
This daemon places a config file at /etc/itd.toml
. This is the global config. itd
will also look for a config at ~/.config/itd.toml
.
Most of the time, the daemon does not need to be restarted for config changes to take effect.
Attribution
Location data from OpenStreetMap Nominatim, © OpenStreetMap contributors
Weather data from the Norwegian Meteorological Institute