Úvod
Aplikace rfssmd slouží pro logování stavů, která mohou být odesílána z jednotlivých uzlů. Stavy jsou ukládány do PostgreeSQL databáze. V databázi pracuje nad několika tabulkami. Konfiguraci si načítá z konfigurační tabulky(sql) a umí vyčíst routovací tabulku (pouze reachable routy) z hraničního uzlu a tu poté uložit do tabulky(dojde tím k získání adres všech uzlů).
ID dotazu / odpovědi
Všechny dotazy mají optional parametr "requestId": "nejaka hodnota od nas", který se kopíruje bezezměny do odpovědi. Slouží k párování dotaz odpověď.
Přihlášení do systému
Po připojení k serveru je třeba provést jako první krok ověření uživatele. Odesílá se požadavek s logovacím jménem a přihlašovacím heslem. Zalogování je platné po dobu trvání spojení. Spojení identifikuje uživatele.
Login
dotaz:
{
"kind":"rfssmd#login",
"user":"login", [optional]
"pass":"passwd", [optional]
"token": "eyJhbG.eyJpZCI6=.FYeW6A=" [optional]
}
odpověď OK:
{
"kind":"rfssmd#loginResponse",
"result" : "Accepted",
"token": "eyJhbG.eyJpZCI6=.FYeW6A="
}
odpověď chyba:
{
"kind":"rfssmd#loginResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Logout
dotaz:
{
"kind":"rfssmd#logout",
}
odpověď OK:
{
"kind":"rfssmd#logoutResponse",
"result" : "Accepted",
}
Onovení tokenu
dotaz:
{
"kind":"rfssmd#renewLogin",
}
odpověď OK:
{
"kind": "rfssmd#renewLoginResponse",
"result": "Accepted",
"token": "eyJhbG.eyJpZCI6=.FYeW6A="
}
Správa uživatelských účtů
Výpis uživatelů
Výpis uživatelů v systému.
Uživatele lze také specifikovat zadáním nekteré z jeho vlastností jako parametr.
dotaz:
{
"kind":"rfssmd#listUsers",
"part":["user", "telephone"],
"page-size": 2,
"telephone": "+420732288366",
"sort": { "id" : "asc" }
}
odpověď OK:
{
"kind": "rfssmd#listUsersResponse",
"result": "Accepted",
"users": {
"list": [
{
"id": 1,
"telephone": "+420732288366",
"user": "demo"
}
],
"list-count": 1,
"page-number": 1,
"page-size": 2,
"total-count": 1
}
}
odpověď chyba:
{
"kind":"rfssmd#listUsersResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parts / Filtry
| Typ | Description |
|---|---|
| id | ID uživatel |
| user | login uživatele |
| pass | HASH hesla |
| lastseen | čas posledního přihlášení uživatele |
| created | čas vytvoření uživatele |
| updated | čas aktualizace uživatele |
| firstname | jméno |
| lastname | přijmení |
| address | adresa |
| city | město |
| telephone | telefon |
| telephone_secondary | telefon |
| contactid | id kontaktu |
| contact_created | čas vytvoření kontaktu |
| contact_updated | čas úpravy kontaktu |
| gdpr | souhlas s GDPR |
Úprava uživatele
Modifikace parametrů uživatele. Parametry uvedené v json jsou upraveny, ostatní zůstávají nezměněny.
dotaz:
{
"kind" : "rfssmd#modifyUser",
"id" : 0, [optional]
"user" : "login", [optional]
"edit" : {
"gdpr" : true,
"user" : "login",
"pass" : "passwd",
"firstname" : "jmeno",
"lastname" : "prijmeni",
"address" : "adresa",
"city" : "mesto",
"telephone" : "telefon",
"telephone_secondary" : "telefon",
"email" : "email@email.cz"
}
}
odpověď OK:
{
"kind":"rfssmd#modifyUserResponse",
"user":"login",
"id" : id,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#modifyUserResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parameters
| Parameter | Description |
|---|---|
| user | string - pokud není specifikován provádí se editace na přilogovaném uživateli |
| id | int - pokud není specifikováno provádí se editace na přilogovaném uživateli |
Vytvoření uživatele
Vytvoření uživatele.
| povinné parametry |
|---|
| user |
| pass |
| firstname |
| lastname |
| telephone |
dotaz:
{
"kind":"rfssmd#createUser",
"user": {
"user":"login",
"pass":"passwd",
"firstname":"jmeno",
"lastname":"prijmeni",
"address":"adresa",
"street_no":"číslo popisné",
"street":"ulice",
"city":"mesto",
"telephone":"telefon",
"telephone_secondary":"telefon",
"email":"email@email.cz"
}
}
odpověď OK:
{
"kind": "rfssmd#createUserResponse",
"user": "login",
"id": id,
"contactid": cid,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#createUserResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Smazání uživatele
Uzivatel specifikován pomocí parametru user nebo id. id má vyšší prioritu. Příkaz smaže i kontakt, pokud na něj není v DB další reference.
dotaz:
{
"kind":"rfssmd#deleteUser",
"user":"login" [optional],
"id":"login" [optional]
}
odpověď OK:
{
"kind": "rfssmd#deleteUserResponse",
"user": "login",
"id": id,
"result" : "Accepted"
}
odpověď chyba:
{
"kind": "rfssmd#deleteUserResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Uživatelská práva
Uživatelská práva umožňují nastavení přístupu jednotlivích uživatelů k uzlům a definují povolené oprace s nimi.
Typy práv
| Typ | Description | Value |
|---|---|---|
| SUPERADMIN | kompletní přístup - čtení i zápis | nemá význam |
| SUPERVISOR | kompletní přístup - pouze čtení | nemá význam |
| GROUPADMIN | přístup ke skupině kanalizací - čtení i zápis | id skupiny / sewerage group |
| GROUPVISOR | přístup ke skupině kanalizací - pouze čtení | id skupiny / sewerage group |
| NODEADMIN | přístup k uzlu - čtení i zápis | id uzlu / jímky |
| NODEVISOR | přístup k uzlu - pouze čtení | id uzlu / jímky |
Výpis typů práv
Dotaz vratí seznam práv s popisem a id.
dotaz:
{
"kind":"rfssmd#privilegesDef"
}
odpověď OK:
{
"kind":"rfssmd#privilegesDefResponse",
"result" : "Accepted",
"privileges" : [
{
"datatype": "string",
"description": "kompletni pristup - cteni i zapis",
"id": 1,
"name": "SUPERADMIN"
},
...
]
}
odpověď chyba:
{
"kind":"rfssmd#privilegesDefResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Výpis práv uživatele
Dotaz pro výpis práv daného uživatele.
dotaz:
{
"kind" : "rfssmd#privilegesList",
"user" : "login", [optional]
"id" : 1 [optional]
}
odpověď OK:
{
"kind":"rfssmd#privilegesListResponse",
"result" : "Accepted",
"user":"login",
"id":id,
"privileges": {
"list": [
{
"datatype": "string",
"description": "kompletni pristup - cteni i zapis",
"id": 1,
"name": "SUPERADMIN",
"privilegetypeid": 1,
"value": "full"
},
...
],
"list-count" : 1
}
}
odpověď chyba:
{
"kind":"rfssmd#privilegesListResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Přiřazení práv
dotaz:
{
"kind":"rfssmd#privilegeAppend",
"id" : 0, [optional]
"user": "login", [optional]
"privilegeTypeID" : id,
"privilegeValue" : "value"
}
odpověď OK:
{
"kind":"rfssmd#privilegeAppendResponse",
"user":"login",
"id":id,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#privilegeAppendResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Odebrání práv
dotaz:
{
"kind":"rfssmd#privilegeRemove",
"id" : 0, [optional]
"user":"login", [optional]
"privilegeID" : id,
"privilegeValue" : "value"
}
odpověď OK:
{
"kind":"rfssmd#privilegeRemoveResponse",
"user":"login",
"id":id,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#privilegeRemoveResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Editace práva
dotaz:
{
"kind":"rfssmd#privilegeModify",
"id" : 0, [optional]
"user":"login", [optional]
"privilegeID" : id,
"privilegeValue" : "value",
"privilegeNewValue" : "value"
}
odpověď OK:
{
"kind":"rfssmd#privilegeModifyResponse",
"user":"login",
"id":id,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#privilegeModifyResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Správa kontaktů
Výpis kontaktů
Výpis kontaktů vedených v systému.
dotaz:
{
"kind": "rfssmd#contactsList",
"part":["firstname", "lastname", "address", "street_no", "street", "city", "telephone",
"telephone_secondary", "email", "contact_created", "contact_updated"],
"contact_id" : 32 [optional]
}
odpověď OK:
{
"contacts": {
"list": [
{
"address": "adresa",
"city": "mesto",
"contact_created": "2019-04-14T10:51:50.000",
"contact_id": 32,
"contact_updated": "2019-04-14T10:51:50.000",
"email": "email@email.cz",
"firstname": "jmeno",
"lastname": "prijmeni",
"telephone": "telefon",
"telephone_secondary": "contactsListtelefon"
}
],
"list-count": 1,
"page-number": 1,
"page-size": 10,
"total-count": 1
},
"kind": "rfssmd#contactsListResponse",
"result": "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#contactsListResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parts / Filtry
| Typ | Description |
|---|---|
| contact_id | ID kontaktu |
| firstname | jméno |
| lastname | přijmení |
| address | adresa |
| city | město |
| telephone | telefon |
| telephone_secondary | telefon |
| contact_created | čas vytvoření kontaktu |
| contact_updated | čas úpravy kontaktu |
Úprava kontaktu
dotaz:
{
"kind" : "rfssmd#contactModify",
"contact_id" : 32,
"edit" : {
"firstname" : "jmeno",
"lastname" : "prijmeni",
"address" : "adresa",
"street_no":"číslo popisné",
"street":"ulice",
"city" : "mesto",
"telephone" : "telefon",
"telephone_secondary" : "telefon",
"email" : "email@email.cz"
}
}
odpověď OK:
{
"kind":"rfssmd#contactModifyResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#contactModifyResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Vytvoření kontaktu
| povinné parametry |
|---|
| firstname |
| lastname |
| telephone |
dotaz:
{
"kind":"rfssmd#contactAppend",
"contact": {
"firstname":"jmeno",
"lastname":"prijmeni",
"address":"adresa",
"street_no":"číslo popisné",
"street":"ulice",
"city":"mesto",
"telephone":"telefon",
"telephone_secondary":"telefon",
"email":"email@email.cz"
}
}
odpověď OK:
{
"kind": "rfssmd#contactAppendResponse",
"contact_id": id,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#contactAppendResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Smazání kontaktu
Lze smazat pouze kontakty na které nejsou v databázi reference.
dotaz:
{
"kind":"rfssmd#contactRemove",
"contact_id":"login"
}
odpověď OK:
{
"kind": "rfssmd#contactRemoveResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind": "rfssmd#contactRemoveResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Správa segmentů
Segmenty reprezentují fyzickou vrstvu sítě, každý segment má jeden hraniční uzel na který se bezdrátově připojují další uzly v dotyčném segmentu.
Výpis segmentů
dotaz:
{
"kind": "rfssmd#sewerageSegmentsList",
"part":["segment_name", "segment_net_prefix"],
"sort": { "segment_name" : "asc" }
}
odpověď OK:
{
"kind": "rfssmd#sewerageSegmentsListResponse",
"segments": {
"list" : [
{
"segment_id": 1,
"segment_name": "PRESSKAN - DEMO PV",
"segment_net_prefix" : "fddd:d0e6:2bf6::/64"
},
...
],
"list-count":3
},
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageSegmentsList",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parts / Filtry
| Name | Description |
|---|---|
| segment_id | ID segmentu |
| segment_name | název segmentu |
| segment_encryption_key | šifrovací klíč bezdrátové sítě segmentu |
| segment_net_prefix | IPv6 prefix segmentu |
| segment_modbus_port | TCP port MODBUS pro daný segment |
| segment_seweragegroupid | ID existujicí skupiny do které segment patří |
| segment_bordernodeid | ID existujicího uzlu který je hraničním uzlem v daném segmentu |
Přidání segmentu
dotaz:
{
"kind": "rfssmd#sewerageSegmentAppend",
"segment" :
{
"segment_name" : "název segmentu",
"segment_encryption_key" : "klíč pro šifrování sítě",
"segment_net_prefix" : "IPv6 prefix sítě",
"segment_modbus_port" : 10150,
"segment_seweragegroupid" : 3,
"segment_bordernodeid" : 55
},
"node" : [soucasne vlozeni hranicniho uzlu]
{
[parametry jako pro pridani uzlu]
}
}
odpověď OK:
{
"kind" : "rfssmd#sewerageSegmentAppendResponse",
"segment_id" : 4,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageSegmentAppendResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Smazání segmentu
dotaz:
{
"kind": "rfssmd#sewerageSegmentRemove",
"segment_name" : "nazev segmentu", [optional]
"segment_id" : id [optional]
}
odpověď OK:
{
"kind" : "rfssmd#sewerageSegmentRemoveResponse",
"segment_id" : 4,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageSegmentRemoveResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Editace segmentu
dotaz:
{
"kind" : "rfssmd#sewerageSegmentModify",
"segment_name" : "nazev segmentu", [optional]
"segment_id" : id, [optional]
"edit" : {
"segment_name" : "novy nazev",
}
}
odpověď OK:
{
"kind" : "rfssmd#sewerageSegmentModifyResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageSegmentModifyResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Správa skupin
Skupiny reprezentují instalaci kanalizace v dané lokalitě, každá skupina může mít N segmentů.
Výpis skupin
dotaz:
{
"kind" : "rfssmd#sewerageGroupsList",
"part" : ["sewerage_group_name", "contactids"],
"sort": { "sewerage_group" : "asc" }
}
odpověď OK:
{
"kind": "rfssmd#sewerageGroupsListResponse",
"groups": {
"list" : [
{
"sewerage_group": 1,
"sewerage_group_name": "Zruč nad Sázavou - ulice Nábřežní",
"contactids": [cid1, cid2]
},
{
"sewerage_group": 2,
"sewerage_group_name": "Zbraslavice - lokalita u letiště",
"contactids": [cid1]
},
{
"sewerage_group": 3,
"sewerage_group_name": "PRESSKAN - DEMO",
"contactids": [cid4, cid7]
}
],
"list-count": 3,
"page-number": 1,
"page-size": 10,
"total-count": 3
},
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageGroupsListResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parts / Filtry
| Name | Description |
|---|---|
| sewerage_group | ID skupiny |
| sewerage_group_name | název skupiny |
Přidání skupiny
dotaz:
{
"kind": "rfssmd#sewerageGroupAppend",
"group" :
{
"sewerage_group_name": "nazev skupiny",
"contactids": [cid1, cid2], [optional]
}
}
odpověď OK:
{
"kind" : "rfssmd#sewerageGroupAppendResponse",
"id" : 4,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageGroupAppendResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Smazání skupiny
dotaz:
{
"kind" : "rfssmd#sewerageGroupRemove",
"sewerage_group_name" : "nazev skupiny", [optional]
"sewerage_group" : id, [optional]
}
odpověď OK:
{
"kind" : "rfssmd#sewerageGroupRemoveResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageGroupRemoveResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Editace skupiny
dotaz:
{
"kind" : "rfssmd#sewerageGroupModify",
"sewerage_group_name" : "nazev skupiny", [optional]
"sewerage_group" : id, [optional]
"edit" : {
"sewerage_group_name" : "novy nazev",
"contactids": [cid1, cid2], [optional - nahradí stávající seznam kontaktů]
}
}
odpověď OK:
{
"kind" : "rfssmd#sewerageGroupModifyResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#sewerageGroupModifyResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Správa topologických skupin
Topologické skupiny reprezentují propojení uzlů kanalizačnímy trubkami nezávisle na bezdrátovém propojení uzlů.
Výpis topologických skupin
dotaz:
{
"kind" : "rfssmd#topologyGroupsList",
"part" : ["topology_group_name", "nodes"],
"sort": { "topology_group" : "asc" }
}
odpověď OK:
{
"kind": "rfssmd#topologyGroupsListResponse",
"groups": {
"list" : [
{
"topology_group": 1,
"topology_group_name": "Zruč nad Sázavou - ulice Nábřežní",
"nodes":[]
},
{
"topology_group": 2,
"topology_group_name": "Zbraslavice - lokalita u letiště",
"nodes":[]
},
{
"topology_group": 3,
"topology_group_name": "PRESSKAN - DEMO",
"nodes":[]
}
],
"list-count": 3,
"page-number": 1,
"page-size": 10,
"total-count": 3
},
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#topologyGroupsListResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parts / Filtry
| Name | Description |
|---|---|
| topology_group | ID skupiny |
| topology_group_name | název skupiny |
Přidání topologické skupiny
dotaz:
{
"kind": "rfssmd#topologyGroupAppend",
"group" :
{
"topology_group_name": "nazev skupiny",
"nodes": [1,5,12] [optional]
}
}
odpověď OK:
{
"kind" : "rfssmd#topologyGroupAppendResponse",
"id" : 4,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#topologyGroupAppendResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Smazání topologické skupiny
dotaz:
{
"kind" : "rfssmd#topologyGroupRemove",
"topology_group_name" : "nazev skupiny", [optional]
"topology_group" : id, [optional]
}
odpověď OK:
{
"kind" : "rfssmd#topologyGroupRemoveResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#topologyGroupRemoveResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Editace topologické skupiny
dotaz:
{
"kind" : "rfssmd#topologyGroupModify",
"topology_group_name" : "nazev skupiny", [optional]
"topology_group" : id, [optional]
"edit" : {
"topology_group_name" : "novy nazev",
"nodes":[]
}
}
odpověď OK:
{
"kind" : "rfssmd#topologyGroupModifyResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#topologyGroupModifyResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Správa uzlů
Výpis uzlů
Generování seznamů uzlů rfssmd#nodesList.
Uzly lze specifikovat jako pole nodes/segments/sewerage_groups/topology_groups nebo jejich kombinace.
dotaz:
{
"kind": "rfssmd#nodesList",
"nodes": [8, 11], [optional]
"part": [ "gps_lat", "gps_long", "identification_sump", "online", "identification_street", "identification_street_no" ], [optional]
"online": true, [optional]
"sort": { "id" : "asc" }, [optional]
"sort": [{ "id1" : "asc" }, { "id2" : "desc" }] [optional]
}
odpověď OK:
{
"kind": "rfssmd#nodesListResponse",
"nodes": {
"list": [
{
"gps_lat": 49.7422506,
"gps_long": 15.1047783,
"id": 11,
"identification_sump": "Zruč, č. p. 176",
"online": false
},
{
"gps_lat": 49.7434447,
"gps_long": 15.1060578,
"id": 8,
"identification_sump": "Zruč, č. p. 115",
"online": false
}
],
"list-count": 2,
"page-number": 1,
"page-size": 10,
"total-count": 2
},
"result": "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodesListResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parts / Filtry
| Name | Description |
|---|---|
| id | id uzlu |
| mac_address | mac adresa uzlu |
| identification_sump | libovolný indentifikační text |
| identification_street | ulice umístění |
| identification_street_no | číslo popisné/evidenční/parcela |
| gps_lat | gps - zeměpisná šířka |
| gps_long | gps - zeměpisná délka |
| note | poznámka |
| accessible | je jínka přístupná bez domluvy |
| modbus | MODBUS ID pro napojení na SCADA |
| alm_power | signalizovaný alarm výpadku sítě |
| alm_watchdog | stav watchdogu uzlu |
| alm_level_emergency | 1 - signalizuje dosažení hladiny havarijním plovákem |
| alm_pump_starteroff | 1 - signalizuje vypadek motorového spouštěče |
| alm_sump | 1 - otevření krytu šachty |
| stat_pump_run | 1 - běží čerpadlo |
| stat_cnt_pump_start | počet čerpání |
| stat_cnt_pump_hours | doba běhu sekundy |
| stat_cnt_pump_kwh | odhad spotřebované energie kWh |
| stat_cnt_pump_m3 | odhad odčerpaného množství |
| stat_ver_fw | verze spuštěného FW |
| stat_ver_hw | verze HW |
| stat_ver_boot_bootloaer | verze zavaděče |
| stat_ver_boot_fw1 | verze FW1 |
| stat_ver_boot_fw2 | verze FW2 |
| stat_ver_boot_run | který FW běží - 1 nebo 2 |
| stat_ver_boot_fw1_nok | 0 pokud je FW1 OK |
| stat_ver_boot_fw2_nok | 0 pokud je FW2 OK |
| stat_freqoffset | ofset frekvence vysílače |
| stat_default_route | poslední IPv6 defaultní routa uzlu |
| online | stav uzlu true=online |
| pumped_at | čas posledního čerpaní |
| last_seen | čas poslední aktivity uzlu |
| set_pump_switchinginterval | vrací interval periodického spínání v minutách |
| set_pump_switchingtimes | JSON řetězec s aktuálním nastavením spínacích intervalů |
| set_pump_block_startup | čas blokace čerpadla po spuštění zařízení (např. po výpadku el) v sekundách. |
| set_pump_block_retent | 1 - trvalá blokace čerpání (pokud čerpání nespustí plovák) |
| nodes | pole ID uzlů které chceme vypsat |
| failure | false - výpis pouze uzlů bez chyby, true - výpis pouze uzlů indikujících chybu |
Přidání uzlu
| povinné parametry |
|---|
| mac_address |
| identification_sump |
| gps_lat |
| gps_long |
| note |
| accessible |
| modbus |
| segment_id |
| contactid |
dotaz:
{
"kind": "rfssmd#nodeAppend",
"node": {
"unregisteredid": 5, [optional - lze zadat místo MAC - ID neregistrovaného uzlu ze seznamu neregistrovaných uzlů]
"mac_address": "00:12:4B:00:89:AB:00:3D",
"identification_sump": "Zruč, č. p. 72",
"gps_lat": 49.7431503,
"gps_long": 15.1062364,
"note":"poznámka",
"accessible": 1,
"modbus": id,
"segment_id": sid,
"contactid": cid
}
}
odpověď OK:
{
"kind":"rfssmd#nodeAppendResponse",
"id":nodeid,
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeAppendResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Smazání uzlu
dotaz:
{
"kind": "rfssmd#nodeRemove",
"id": nodeid
}
odpověď OK:
{
"kind":"rfssmd#nodeRemoveResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeRemoveResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Editace uzlu
dotaz:
{
"kind": "rfssmd#nodeModify",
"id": nodeid,
"edit":
{
"mac_address": "00:12:4B:00:89:AB:00:3D", [optional]
"identification_sump": "Zruč, č. p. 72", [optional]
"gps_lat": 49.7431503, [optional]
"gps_long": 15.1062364, [optional]
"note":"poznámka", [optional]
"accessible": 1, [optional]
"modbus": id, [optional]
"contactid": cid [optional]
}
}
odpověď OK:
{
"kind":"rfssmd#nodeModifyResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeModifyResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Edit
| Name | Description |
|---|---|
| id | id uzlu |
| mac_address | mac adresa uzlu |
| identification_sump | indentifikační text |
| gps_lat | gps - zeměpisná šířka |
| gps_long | gps - zeměpisná délka |
| note | poznámka |
| accessible | je jínka přístupná bez domluvy |
| modbus | MODBUS ID pro napojení na SCADA |
| segment_id | ID segmentu ke kterému uzel patří |
Výpis neregistrovaných uzlů
dotaz:
{
"kind": "rfssmd#nodesUnregList",
"part": ["mac_address", "segmentid"]
}
odpověď OK:
{
"kind": "rfssmd#nodesUnregListResponse",
"nodes": {
"list": [
{
"id": 1,
"mac_address": "00:12:4B:00:89:AB:01:36",
"segmentid": 5
},
{
"id": 2,
"mac_address": "00:12:4B:00:89:AB:01:38",
"segmentid": 5
}
],
"list-count": 5,
"page-number": 1,
"page-size": 5,
"total-count": 5
},
"result": "Accepted"
}
Smazání neregistrovaných uzlů
dotaz:
{
"kind": "rfssmd#nodeUnregRemove",
"id": 5
}
odpověď OK:
{
"kind": "rfssmd#nodeUnregRemoveResponse",
"result": "Accepted"
}
Výpis logů
Výpis logů uzlů rfssmd#logList.
dotaz:
{
"kind": "rfssmd#logList",
"sewerage_group": 1, [optional]
"part":["identification_sump", "log_value"], [optional]
"sort": { "log_created_at" : "asc" }, [optional]
"page-size":2, [optional]
"page-number": 1, [optional]
}
odpověď OK:
{
"kind":"rfssmd#logListResponse",
"logs": {
"list": [
{
"id": 1,
"identification_sump": "Zruč, č. p. 72",
"log_value": "default GW node 2a01:490:24:300:ce2d:e009:4c8e:20 does not exists yet"
},
{
"id": 1,
"identification_sump": "Zruč, č. p. 72",
"log_value": "Created"
}
],
"list-count": 2,
"page-number": 1,
"page-size": 2,
"total-count": 3877
},
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#logListResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Parts / Filtry
| Name | Description |
|---|---|
| id | id uzlu |
| mac_address | mac adresa uzlu |
| identification_sump | indentifikační text |
| gps_lat | gps - zeměpisná šířka |
| gps_long | gps - zeměpisná délka |
| note | poznámka |
| accessible | je jínka přístupná bez domluvy |
| modbus | MODBUS ID pro napojení na SCADA |
| log_value | hodnota logu |
| log_created_at | čas vytvoření |
| log_name | název typu logu |
| log_type | datový typ logu |
| log_description | popis typu logu |
| segment_id | ID segmentu |
| segment_name | název segmentu |
| segment_encryption_key | šifrovací klíč bezdrátové sítě segmentu |
| segment_net_prefix | IPv6 prefix segmentu |
| segment_modbus_port | TCP port MODBUS pro daný segment |
| sewerage_group | ID skupiny |
| sewerage_group_name | název skupiny |
Správa instalovaného HW uzlů
Výpis použitelných typů HW
Vypíše seznam definovaných typů HW.
dotaz:
{
"kind": "rfssmd#nodeHWDef"
}
odpověď OK:
{
"kind":"rfssmd#nodeHWDefResponse",
"result" : "Accepted",
"hardware_types" : [
{
"hwdescription": "vřetenové čerpadlo s příkonem 1,1 kW",
"id": 1,
"hwname": "Čerpadlo"
},
...
]
}
odpověď chyba:
{
"kind":"rfssmd#nodeHWDefResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Výpis HW
Vypíše seznam instalovaného HW na daném uzlu.
dotaz:
{
"kind": "rfssmd#nodeHWList",
"node": 5
}
odpověď OK:
{
"kind":"rfssmd#nodeHWListResponse",
"result" : "Accepted",
"hardware" : [
{
"hwid": 1,
"hwtypeid": 3,
"hwdescription": "vřetenové čerpadlo s příkonem 1,1 kW",
"hwname": "Čerpadlo",
"hwserial":"N38PWM",
},
...
]
}
odpověď chyba:
{
"kind":"rfssmd#nodeHWListResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Přidání HW
Přidání HW k uzlu "hwtype" je hodnota id z "rfssmd#nodeHWDef"
dotaz:
{
"kind": "rfssmd#nodeHWAppend",
"node": 5,
"hardware" :
{
"hwtype" : 2, [hodnota id z "rfssmd#nodeHWDef"]
"hwserial" : "N38PWM"
}
}
odpověď OK:
{
"kind":"rfssmd#nodeHWAppendResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeHWAppendResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Smazání HW
dotaz:
{
"kind": "rfssmd#nodeHWRemove",
"hwid": 33
}
odpověď OK:
{
"kind":"rfssmd#nodeHWRemoveResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeHWRemoveResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Editace HW
dotaz:
{
"kind": "rfssmd#nodeHWModify",
"hwid": 33, [hodnota hwid z rfssmd#nodeHWListResponse]
"edit" :
{
"hwtype" : 2, [hodnota hwtypeid z "rfssmd#nodeHWDef"]
"hwserial" : "N38PWM"
}
}
odpověď OK:
{
"kind":"rfssmd#nodeHWModifyResponse",
"result" : "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeHWModifyResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Statistická data
Postupně doplním co vymyslíme.
Objekt "data" specifikuje výběr dat. Zatím funguje pouze načtení dat z logu spuštění čerpadel - pump_start_log.
Objekt "graph" říká jak se mají daza zpracovat, zatím umím pouze histogram.
Vzorový příklad spočítá histogram počtu spuštění čerpadla v intervalech "bins" v časovém rozsahu "range".
Uzly lze specifikovat jako pole nodes/segments/sewerage_groups/topology_groups nebo jejich kombinace.
| Name | Description |
|---|---|
| pump_start_log | spouštění čerpadla během dne |
| pump_start_inc | přírůstky počtu čerpání během dne - má smyl specifikovat pouze jeden uzel |
| pump_hours_inc | přírůstky času čerpání během dne - má smyl specifikovat pouze jeden uzel |
dotaz:
{
"kind": "rfssmd#statistics",
"graph" : {
"type":"histogram",
"bins" : 7
},
"data": {
"source": "pump_start_log",
"range": {"from":"2019-01-01 00:00:01", "to":"2019-03-31 00:00:01"},
"nodes" : [1,5,12]
}
}
odpověď:
{
"kind": "rfssmd#statisticsResponse",
"data": [1,2,3,4,5],
"result": "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#statisticsResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Ovládání uzlů - přímý asynchronní přístup k HW
Přímý přístup k registrům uzlů, čtení a zápis může nějakou dobu trvat podle vytížení sítě.
| Name | Type | Description |
|---|---|---|
| SET_PUMP_BLOCK_RETEN | (uint8) povoleno | Zablokuje - odblokuje spouštění čerpadla a uloží do retenční paměti. (čerpadlo se může i tak spustit plovákem) |
| SET_PUMP_BLOCK_STARTUP | (uint16) čas | Zablokuje spuštění čerpadla po zapnutí na zadaný čas. V sekundách. |
| SET_PUMP_SWITCHINGINTERVAL | (uint16) čas | Nastaví spouštění čerpadla po zadaném čase. V minutách. |
| SET_PUMP_SWITCHINGTIMES | (uint8) počet aktivních časů, ((uint16)*2)*9 od-do | Povolení spouštění čerpadla v zadaných časech. V minutách od začátku dne. V případě od>do se připočítává jeden den. |
Čtení z registrů uzlů
dotaz:
{
"kind": "rfssmd#nodeGet",
"nodes": [11],
"part":["SET_PUMP_BLOCK_STARTUP", "SET_PUMP_BLOCK_RETEN", "SET_PUMP_SWITCHINGINTERVAL", "SET_PUMP_SWITCHINGTIMES"]
}
odpověď:
{
"kind": "rfssmd#nodeGetResponse",
"nodes": {
"list": [
{
"SET_PUMP_BLOCK_RETEN": 0,
"SET_PUMP_BLOCK_STARTUP": 0,
"SET_PUMP_SWITCHINGINTERVAL": 0,
"SET_PUMP_SWITCHINGTIMES": {
"active": 1, [počet aktivních časů, 0 = časovače vypnuty]
"begins": [
10 [počátek intervalu]
],
"ends": [
15 [konec intervalu]
]
},
"id": 11
} ],
"list-count": 1,
},
"result": "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeGetResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Zápis do registrů uzlů
dotaz:
{
"kind": "rfssmd#nodeSet",
"nodes": [23],
"part": [
{"SET_PUMP_BLOCK_STARTUP": 5},
{ "SET_PUMP_SWITCHINGTIMES":{
"active":1,
"begins":[10],
"ends":[15]
}
}
]
}
odpověď:
{
"kind": "rfssmd#nodeSetResponse",
"nodes": {
"list": [
{
"SET_PUMP_BLOCK_STARTUP": "ACCEPTED",
"SET_PUMP_SWITCHINGTIMES": "ACCEPTED",
"id": 23
}
],
"list-count": 1
},
"result": "Accepted"
}
odpověď chyba:
{
"kind":"rfssmd#nodeSetResponse",
"result" : "Rejected",
"error": {"code": 0, "message":"popis chyby"}
}
Seznam registů uzlů
Výpis seznamu podporovaných parametrů pro parametr "part" příkazu nodeGet/nodeSet.
dotaz:
{
"kind": "rfssmd#nodeProps"
}
odpověď:
{
"kind": "rfssmd#nodeProps",
"props": [
"STAT_INPUT32 (READ)",
"STAT_OUTPUT32 (READ)",
"STAT_ANALOG_IN1_VAL (READ)",
"STAT_ANALOG_OUT1_VAL (READ)",
"STAT_TEMP_INNER (READ)",
"STAT_TEMP_PUMP (READ)",
"STAT_PUMP_RUN (READ)",
"STAT_CNT_PUMP_START (READ)",
"STAT_CNT_PUMP_HOURS (READ)",
"STAT_CNT_PWRCONSUMP (READ)",
"STAT_CNT_WATERVOL (READ)",
"STAT_CNT_FAULT (READ)",
"STAT_VER_FW (READ)",
"STAT_VER_HW (READ)",
"STAT_VER_BOOT (READ)",
"STAT_DEFAULT_ROUTE (READ)",
"SET_PUMP_WATTAGE (READ/WRITE)",
"SET_PUMP_FLOW (READ/WRITE)",
"SET_PUMP_MAXTEMP (READ/WRITE)",
"SET_PUMP_OKTEMP (READ/WRITE)",
"SET_PUMP_BLOCK_RETEN (READ/WRITE)",
"SET_PUMP_SWITCHINGINTERVAL (READ/WRITE)",
"SET_PUMP_BLOCK_STARTUP (READ/WRITE)",
"SET_ALM_POWER (READ/WRITE)",
"SET_ALM_SUMP (READ/WRITE)",
"SET_ALM_LEVEL_EMERGENCY (READ/WRITE)",
"SET_ALM_PUMP_OVERHEAT (READ/WRITE)",
"SET_ALM_PUMP_STARTEROFF (READ/WRITE)",
"SET_ALM_LEVEL_HIGH (READ/WRITE)",
"SET_ALM_PUMP (READ/WRITE)",
"SET_DATETIME (READ/WRITE)",
"SET_PUMP_SWITCHINGTIMES (READ/WRITE)",
"SET_ALM_NEIGH (READ/WRITE)",
"SET_ALM_DEFAULT_ROUTE (READ/WRITE)",
"SET_ALM_INPUT32 (READ/WRITE)",
"SET_ALM_OUTPUT32 (READ/WRITE)",
"SET_ALM_SETTINGS_CHANGED (READ/WRITE)",
"SET_ALM_ANALOG_IN1_CHANGE (READ/WRITE)",
"SET_ALM_ANALOG_OUT1_CHANGE (READ/WRITE)",
"SET_ALM_ANALOG_IN1_CHANGE_P (READ/WRITE)",
"SET_ALM_ANALOG_IN1_CHANGE_D (READ/WRITE)",
"SET_RF_CHANNEL (READ/WRITE)",
"SET_USR_VALUE0 (READ/WRITE)",
"SET_USR_VALUE1 (READ/WRITE)",
"SET_USR_VALUE2 (READ/WRITE)",
"SET_USR_VALUE3 (READ/WRITE)",
"SET_USR_VALUE4 (READ/WRITE)",
"CMD_PUMP_START (WRITE)",
"CMD_CONDUIT_WFLUSH (WRITE)",
"CMD_CNTRST_PUMP_START (WRITE)",
"CMD_CNTRST_PUMP_HOURS (WRITE)",
"CMD_CNTRST_PWRCONSUMP (WRITE)",
"CMD_CNTRST_WATERVOL (WRITE)",
"CMD_PUMP_BLOCK (WRITE)",
"CMD_OUTPUT_HIGH (WRITE)",
"CMD_OUTPUT_LOW (WRITE)",
"CMD_OUTPUT_VAL (WRITE)",
"CMD_RESTART (WRITE)",
"FW_GO_TO_UPDATE_MODE (WRITE)",
"FW_UPLOAD (WRITE)"
]
}
Seznam alarmů
Všechny alarmy vycházejí ze základního formátu
základní formát:
{
"ALARM": {
"TYPE": "ALM_DEFAULT_ROUTE",
"timestamp": "2020-10-26T11:32:20",
"value": [hodnota nebo struktura]
},
"kind": "rfssmd#alarm",
"level": 1, [0 - základní alarmy, 1 - rozšířene]
"nodeid": 3
}
Parametr value je odvislý od typu alarmu.
| TYPE | VALUE | popis |
|---|---|---|
| ALM_DEFAULT_ROUTE | { "IP": "fddd:d0e6:2bf6:1e34:5d96:a5b4:12:4b00" } | ip adresa uzlu přes který je tento uzel komunikuje |
| ALM_DEFAULT_ROUTE_V2 | { "IP": "fddd:d0e6:2bf6:1e34:5d96:a5b4:12:4b00", "quality": 0, "rssi": -10 } | ip adresa uzlu přes který je tento uzel komunikuje, kvalita linky, uroveň signálu |
| ALM_DEFAULT_ROUTE | { "IP": "fddd:d0e6:2bf6:1e34:5d96:a5b4:12:4b00" } | ip adresa uzlu přes který je tento uzel komunikuje |
| ALM_POWER | 0/1 | 1 - napájení je v pořádku, 0 - došlo k výpadku |
| ALM_PUMP | 0/1 | 1 - čerpání zahájeno, 0 - čerpání ukončeno |
| ALM_PUMP_V2 | { "RUN": 0, "starts": 5,"secs": 100} | 1 - čerpání zahájeno, 0 - čerpání ukončeno, starts - pocet startů, secs - doba běhu |
| ALM_PUMP_STARTEROFF | 0/1 | 1 - motorový chránič vypadl, 0 - OK |
| ALM_LEVEL_EMERGENCY | 0/1 | 1 - havarijní hladina, 0 - OK |
Errors
The Kittn API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 | Bad Request -- Your request is invalid. |
| 401 | Unauthorized -- Your API key is wrong. |
| 403 | Forbidden -- The kitten requested is hidden for administrators only. |
| 404 | Not Found -- The specified kitten could not be found. |
| 405 | Method Not Allowed -- You tried to access a kitten with an invalid method. |
| 406 | Not Acceptable -- You requested a format that isn't json. |
| 410 | Gone -- The kitten requested has been removed from our servers. |
| 418 | I'm a teapot. |
| 429 | Too Many Requests -- You're requesting too many kittens! Slow down! |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
| 503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |