Nov lučke API #9

Open
opened 2026-06-30 09:38:12 +00:00 by miha.frangez · 0 comments
Owner

Lučke bi bilo fajn prestavit na "surov" API, da ne rabimo delat polling za preverjanje stanja. S tem bo zadeva ful bolj odzivna.

Specifikacija APIja

Ko zadevo implementiraš skopiraj (in po potrebi popravi) to specifikacijo v docs mapo

Avtentikacija

POST http://192.168.190.90/rest/auth/login
{
    "username": "rc_fri",
    "password": "sha512sum_gesla",
    "stayLoggedIn": true
}

V odgovoru dobiš token:

deadb33f-1234-5678-9abc-b00b135

WebSocket state updates

Na WebSocket pošlješ token in seznam tagov, ki te zanimajo. Od njega dobivaš live update.

WS ws://192.168.190.90/websocket/tags
{
    "token": "deadb33f-1234-5678-9abc-b00b135",
    "tags": [
        "c1305.light_out[72]",
        "c1305.scan_time",
        "c1305.rtc_sec",
        "c1305.can_tx_msg_per_second"
    ]
}

Ob spremembi dobiš taka sporočila - eno lahko vsebuje več kot eno vrednost:

{"c1219.light_out[72]": "1"}
{"c1305.scan_time": "32", "c1305.rtc_sec": "21", "c1305.can_tx_msg_per_second": "10"}

Pisanje na tage

POST http://192.168.190.90/rest/tags/descriptive-write
Authorization: Bearer deadb33f-1234-5678-9abc-b00b135
{
  "tag": "c1305.light_out[72]",
  "value": 0
}

Če je vse ok ti odgovori s kodo 200 in besedilom:

ok

Mapiranje tagov

Za predavalnice dobimo mapping iz "source" kode (jadx go brrr). Za ostalo je problem kasneje.

Implementacija

Skripta prebere tag mapping iz neke datoteke. Ta datoteka je drugačna za vsako predavalnico in je shranjena v gitu. Ansible config določi katero datotko brat. Glej priložen tags.txt za seznam. Malo bo treba testirat da ugotovimo kaj je kaj. Naredi tabelo (predavalnica, ime_luči, dimmable, tag). Preveri ali je treba za dimmable luči poslat _out=1 in _out_dim_proc=100 ali je dovolj samo procent. Če je treba oboje, daj v tabelo namesto taga ločeno PLC ID in index luči, pa v kodi konstruiraj tage.

Ko maš mapirano pa še popravi frontend. Treba bo naret ločen component za P1 in P22 ker so pač različne luči na voljo.

Lučke bi bilo fajn prestavit na "surov" API, da ne rabimo delat polling za preverjanje stanja. S tem bo zadeva ful bolj odzivna. # Specifikacija APIja Ko zadevo implementiraš skopiraj (in po potrebi popravi) to specifikacijo v docs mapo ## Avtentikacija ```yaml POST http://192.168.190.90/rest/auth/login ``` ```json { "username": "rc_fri", "password": "sha512sum_gesla", "stayLoggedIn": true } ``` V odgovoru dobiš token: ``` deadb33f-1234-5678-9abc-b00b135 ``` ## WebSocket state updates Na WebSocket pošlješ token in seznam tagov, ki te zanimajo. Od njega dobivaš live update. ``` WS ws://192.168.190.90/websocket/tags ``` ```json { "token": "deadb33f-1234-5678-9abc-b00b135", "tags": [ "c1305.light_out[72]", "c1305.scan_time", "c1305.rtc_sec", "c1305.can_tx_msg_per_second" ] } ``` Ob spremembi dobiš taka sporočila - eno lahko vsebuje več kot eno vrednost: ```json {"c1219.light_out[72]": "1"} {"c1305.scan_time": "32", "c1305.rtc_sec": "21", "c1305.can_tx_msg_per_second": "10"} ``` ## Pisanje na tage ```yaml POST http://192.168.190.90/rest/tags/descriptive-write Authorization: Bearer deadb33f-1234-5678-9abc-b00b135 ``` ```json { "tag": "c1305.light_out[72]", "value": 0 } ``` Če je vse ok ti odgovori s kodo 200 in besedilom: ``` ok ``` # Mapiranje tagov Za predavalnice dobimo mapping iz "source" kode (jadx go brrr). Za ostalo je problem kasneje. # Implementacija Skripta prebere tag mapping iz neke datoteke. Ta datoteka je drugačna za vsako predavalnico in je shranjena v gitu. Ansible config določi katero datotko brat. Glej priložen tags.txt za seznam. Malo bo treba testirat da ugotovimo kaj je kaj. Naredi tabelo (predavalnica, ime_luči, dimmable, tag). Preveri ali je treba za dimmable luči poslat _out=1 in _out_dim_proc=100 ali je dovolj samo procent. Če je treba oboje, daj v tabelo namesto taga ločeno PLC ID in index luči, pa v kodi konstruiraj tage. Ko maš mapirano pa še popravi frontend. Treba bo naret ločen component za P1 in P22 ker so pač različne luči na voljo.
6.6 KiB
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
rc/predavalnice-kontroler#9
No description provided.