NIP-91 IoT skeleton.

This commit is contained in:
fiatjaf 2023-10-11 10:45:18 -03:00
parent 09ffb951c6
commit 54dbeac2f2
No known key found for this signature in database
GPG Key ID: BAD43C4BE5C1A3A1
2 changed files with 105 additions and 55 deletions

48
91.md Normal file
View File

@ -0,0 +1,48 @@
NIP-91
======
IoT sensors and intents
-----------------------
`draft` `optional` `author:BlackCoffee` `author:arcbtc` `author:fiatjaf`
This NIP standardizes communication of public sensor and intent events in order to create an open, pluggable and interoperable standard for "Internet of Things" devices to communicate.
The standard event format follows the following template:
```js
{
"kind": <a number from the table below>,
"tags": [
["device", <optional device id>],
["alt", <optional human-readable translation of the event>],
],
"content": "<data according to the format in the table below>"
...
}
```
Ideally each device would have its own public key, which allows for easy command-and-control and comes with built-in trus guarantees (i.e. you know you're getting the data from the correct device if you know its key and can check the signature), but the `device` tag exists for when that is too cumbersome and more than one device is using the same key.
The `alt` tag follows NIP-31 and can accomodate all human-readable needs, like the device name or the human-readable name of the place it is in.
Other generic tags, like `g` for geolocation, may be included.
### Event Kinds
Kinds between 8000-8999 (inclusive) are reserved for this NIP, to be filled in the table below.
| kind | name | type | unit | example | description |
| ----- | ----- | ------ | ----- | ----- | -------- |
| 8000 | intent | | | | someone wants to trigger an action on a device? |
| 8001 | on | empty | | | device was turned on |
| 8002 | off | empty | | | device will turn off |
| 8003 | temperature | number | celsius | 20.9 | |
| 8004 | pressure | number | pascals | 1013 | |
| 8005 | location | array | decimal degrees | [51.5053, -0.08737] | |
| 8006 | light | | | | |
| 8007 | humidity | | | | |
| 8008 | rain | | | | |
| 8009 | moisture | | | | |
| 8010 | unary switch | | empty | | a sensor that detects if a thing happened or not |
| 8011 | binary switch | boolean | | true / false | a switch that can be turned on or off |

View File

@ -67,6 +67,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
- [NIP-75: Zap Goals](75.md) - [NIP-75: Zap Goals](75.md)
- [NIP-78: Application-specific data](78.md) - [NIP-78: Application-specific data](78.md)
- [NIP-89: Recommended Application Handlers](89.md) - [NIP-89: Recommended Application Handlers](89.md)
- [NIP-91: IoT Sensors and Intents](91.md)
- [NIP-94: File Metadata](94.md) - [NIP-94: File Metadata](94.md)
- [NIP-98: HTTP Auth](98.md) - [NIP-98: HTTP Auth](98.md)
- [NIP-99: Classified Listings](99.md) - [NIP-99: Classified Listings](99.md)
@ -95,6 +96,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
| `1040` | OpenTimestamps | [03](03.md) | | `1040` | OpenTimestamps | [03](03.md) |
| `1984` | Reporting | [56](56.md) | | `1984` | Reporting | [56](56.md) |
| `1985` | Label | [32](32.md) | | `1985` | Label | [32](32.md) |
| `8000-8999` | IoT Sensors and Intents | [91](91.md) |
| `4550` | Community Post Approval | [72](72.md) | | `4550` | Community Post Approval | [72](72.md) |
| `9041` | Zap Goal | [75](75.md) | | `9041` | Zap Goal | [75](75.md) |
| `9734` | Zap Request | [57](57.md) | | `9734` | Zap Request | [57](57.md) |