mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-12-22 16:35:52 -05:00
Added Nostr IoT
This commit is contained in:
parent
57e9e8d92f
commit
e9610d61e3
73
107.md
Normal file
73
107.md
Normal file
|
@ -0,0 +1,73 @@
|
|||
NIP-107
|
||||
======
|
||||
|
||||
Nostr Internet of Things
|
||||
-----------------------------------
|
||||
|
||||
`draft` `optional` `author:benarc` `author:blackcoffeebtc`
|
||||
|
||||
## Ratioanale
|
||||
|
||||
The terms/conditions of IoT software/hardware is horrible. A user should be able to message a light or heating and ask it to turn on/off. Nostr gives the simple, permissionless development enviroment IoT needs.
|
||||
|
||||
All communication happens over [NIP04](https://github.com/nostr-protocol/nips/blob/master/04.md).
|
||||
|
||||
## Terms
|
||||
|
||||
- `user` - user operating IoT device with NOSTR key-pair and a client made specifically for IoT
|
||||
- `device` - device to operate over Nostr with NOSTR key-pair, using a microcontroller client like <a href="https://github.com/lnbits/arduino-nostr">nostr-arduino</a>
|
||||
|
||||
|
||||
## Nostr IoT Clients
|
||||
|
||||
### User
|
||||
|
||||
Where the `user` registers 'device'(s) and its keys, then updates the `device`(s).
|
||||
|
||||
### Device
|
||||
|
||||
The `device` uses a client like <a href="https://github.com/lnbits/arduino-nostr">nostr-arduino</a> to receive commands from the `user` or another `device`.
|
||||
The `devie` can also push data such as senssor readings and updates.
|
||||
|
||||
## `User` OR `device` registering/updating a `user` OR `device`
|
||||
|
||||
A merchant can publish these events:
|
||||
| Kind | | Description | NIP |
|
||||
|---------|------------------|---------------------------------------------------------------------------------------------------------------|-----------------------------------------|
|
||||
| `4 ` | `direct_message` | Communicate between `device`(s) and `user`(s). The messages can be plain-text or JSON. | [NIP04](https://github.com/nostr-protocol/nips/blob/master/04.md) |
|
||||
|
||||
|
||||
### Event: Register a `device`
|
||||
|
||||
**Event Content**:
|
||||
```json
|
||||
{
|
||||
"id": <String, UUID generated by the user.Sequential IDs (`0`, `1`, `2`...) are discouraged>,
|
||||
"device_id": <String, UUID of the stall to which this device belong to>,
|
||||
"name": <String, device name>,
|
||||
"description": <String (optional), device description>,
|
||||
"categories":[ <String (optional), device category, such as 'boiler'>],
|
||||
"users":[ [<String (optional), user public-key>]],
|
||||
"images": <[String], array of image URLs, optional>
|
||||
}
|
||||
```
|
||||
|
||||
Note:
|
||||
- `users`:
|
||||
- A list that can restrict access to public-keys, `device`(s) also has keys and can be a `user`.
|
||||
|
||||
### Event: Update a `device`
|
||||
|
||||
**Event Content**:
|
||||
```json
|
||||
{
|
||||
"id": <String, UUID generated by the merchant.Sequential IDs (`0`, `1`, `2`...) are discouraged>,
|
||||
"device_id": <String, UUID of the stall to which this device belong to>,
|
||||
"settings":[ [<String (optional), user public-key>]]
|
||||
}
|
||||
```
|
||||
|
||||
Note:
|
||||
- `settings`:
|
||||
- Standard `settings` innclude:
|
||||
- eg: `[["on", <bool>], ["range", <int, 0-1000>], ["timer_on", <int unix timestamp>], ["timer_off", <int unix timestamp>]]`
|
Loading…
Reference in New Issue
Block a user