itd/README.md

196 lines
5.7 KiB
Markdown
Raw Normal View History

2021-08-21 08:19:49 +00:00
# ITD
## InfiniTime Daemon
`itd` is a daemon that uses my infinitime [library](https://go.arsenm.dev/infinitime) to interact with the [PineTime](https://www.pine64.org/pinetime/) running [InfiniTime](https://infinitime.io).
2022-09-01 10:14:05 +00:00
[![Build status](https://ci.appveyor.com/api/projects/status/01qpwa2bn7c7fdi2?svg=true)](https://ci.appveyor.com/project/moussaelianarsen/itd-7t6ko)
[![itd-git AUR package](https://img.shields.io/aur/version/itd-git?label=itd-git&logo=archlinux)](https://aur.archlinux.org/packages/itd-git/)
[![itd-bin AUR package](https://img.shields.io/aur/version/itd-bin?label=itd-bin&logo=archlinux)](https://aur.archlinux.org/packages/itd-bin/)
2021-08-21 23:36:10 +00:00
2021-08-21 08:19:49 +00:00
---
### Features
- Notification relay
2021-10-06 16:41:33 +00:00
- Notification transliteration
2021-10-15 07:26:14 +00:00
- Call Notifications (ModemManager)
2021-08-21 08:19:49 +00:00
- Music control
2021-10-23 00:12:46 +00:00
- Get info from watch (HRM, Battery level, Firmware version, Motion)
2021-08-21 08:19:49 +00:00
- Set current time
- Control socket
- Firmware upgrades
- Weather
- BLE Filesystem
2021-08-21 08:19:49 +00:00
---
### 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](https://gitea.arsenm.dev/Arsen6331/lrpc) library for requests. This library accepts requests in msgpack, with the following format:
2021-08-21 08:19:49 +00:00
```json
{"Receiver": "ITD", "Method": "Notify", "Arg": {"title": "title1", "body": "body1"}, "ID": "some-id-here"}
2021-08-21 08:19:49 +00:00
```
It will return a msgpack response, the format of which can be found [here](https://gitea.arsenm.dev/Arsen6331/lrpc/src/branch/master/internal/types/types.go#L30). 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.
2021-08-21 08:19:49 +00:00
---
2021-10-04 08:05:01 +00:00
### Transliteration
2021-10-05 02:07:54 +00:00
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:
2021-10-04 08:05:01 +00:00
- eASCII
- Scandinavian
- German
- Hebrew
- Greek
- Russian
- Ukranian
- Arabic
- Farsi
- Polish
- Lithuanian
- Estonian
- Icelandic
2022-04-16 17:14:18 +00:00
- Czech
2021-10-04 08:05:01 +00:00
- French
- Armenian
2021-10-05 02:07:54 +00:00
- Korean
- Chinese
2022-03-11 12:17:12 +00:00
- Romanian
2021-10-04 08:05:01 +00:00
- Emoji
2021-10-05 02:07:54 +00:00
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:
2021-10-04 08:05:01 +00:00
```toml
2021-10-05 02:07:54 +00:00
[notifs.translit]
2021-10-04 08:05:01 +00:00
use = ["eASCII", "Russian", "Emoji"]
custom = [
"test", "replaced"
]
```
---
2021-08-21 08:19:49 +00:00
### `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:
2021-10-23 00:12:46 +00:00
itctl [flags]
2021-08-21 08:19:49 +00:00
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:
2021-10-23 00:12:46 +00:00
-h, --help help for itctl
-s, --socket-path string Path to itd socket
2021-08-21 08:19:49 +00:00
Use "itctl [command] --help" for more information about a command.
```
2021-08-22 02:07:59 +00:00
2021-08-26 16:01:03 +00:00
---
### `itgui`
In `cmd/itgui`, there is a gui frontend to the socket of `itd`. It uses the [Fyne library](https://fyne.io/) for Go.
#### Compilation
Before compiling, certain prerequisites must be installed. These are listed on the following page: https://developer.fyne.io/started/#prerequisites
It can be compiled by running:
2021-08-26 16:01:03 +00:00
```shell
go build ./cmd/itgui
```
#### Cross-compilation
Due to the use of OpenGL, cross-compilation of `itgui` isn't as simple as that of `itd` and `itctl`. The following guide from the Fyne website should work for `itgui`: https://developer.fyne.io/started/cross-compiling.
2021-08-26 16:01:03 +00:00
#### Screenshots
2022-05-05 21:05:58 +00:00
![Info tab](cmd/itgui/screenshots/info.png)
2021-08-26 16:01:03 +00:00
2022-05-05 21:05:58 +00:00
![Motion tab](cmd/itgui/screenshots/motion.png)
2021-08-26 16:01:03 +00:00
2022-05-05 21:05:58 +00:00
![Notify tab](cmd/itgui/screenshots/notify.png)
2021-08-26 16:01:03 +00:00
2022-05-05 21:05:58 +00:00
![FS tab](cmd/itgui/screenshots/fs.png)
2021-08-26 16:01:03 +00:00
2022-05-05 21:05:58 +00:00
![FS mkdir](cmd/itgui/screenshots/mkdir.png)
2021-08-26 16:01:03 +00:00
2022-05-05 21:05:58 +00:00
![Time tab](cmd/itgui/screenshots/time.png)
2021-08-22 02:07:59 +00:00
2022-05-05 21:05:58 +00:00
![Firmware tab](cmd/itgui/screenshots/firmware.png)
2021-08-22 02:07:59 +00:00
2022-05-05 21:05:58 +00:00
![Upgrade in progress](cmd/itgui/screenshots/progress.png)
2021-08-22 02:07:59 +00:00
2022-05-11 19:10:50 +00:00
![Metrics tab](cmd/itgui/screenshots/metrics.png)
2021-08-21 08:19:49 +00:00
---
### Installation
2022-05-10 04:46:03 +00:00
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.
2021-08-21 08:19:49 +00:00
To install, run
```shell
make && sudo make install
```
---
2021-08-21 22:14:37 +00:00
### Starting
To start the daemon, run the following **without root**:
```shell
systemctl --user start itd
```
To autostart on login, run:
```shell
systemctl --user enable itd
```
---
2021-08-21 08:19:49 +00:00
### Cross compiling
To cross compile, simply set the go environment variables. For example, for PinePhone, use:
```shell
make GOOS=linux GOARCH=arm64
```
2021-11-25 00:46:57 +00:00
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).
2021-08-21 08:19:49 +00:00
---
### 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`.
2022-02-22 00:18:52 +00:00
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](https://www.openstreetmap.org/copyright) contributors
Weather data from the [Norwegian Meteorological Institute](https://www.met.no/en)