Envelope: Automation Servisi
Topic: qapu.automation
DLQ: qapu.dlq.automation
Producer: automation-service
Automation servisi, cihazlara uzaktan komut gönderir (röle aç/kapa, parametre güncelleme vb.). Bir otomasyona komut talep edildiğinde automation.command.requested.v1, iş başarıyla tamamlandığında automation.job.completed.v1, hata durumunda automation.job.failed.v1 üretilir.
Event Envanteri
| Event | Ne zaman üretilir? | Consumer | Amaç |
|---|---|---|---|
automation.command.requested.v1 | Kural veya kullanıcı tetiklemesi ile otomasyon işi kuyruğa alındığında | (iç) | Komut kuyruğa alındı bildirimi |
automation.job.completed.v1 | Cihazdan başarı ACK alındığında | Action Servisi, Ledger | Döngüyü kapatmak ve denetim |
automation.job.failed.v1 | Cihazdan hata alındığında veya zaman aşımı oluştuğunda | Observer | Hata görünürlüğü ve retry kararı |
automation.command.requested.v1
Özet
| Başlık | Değer |
|---|---|
| Topic | qapu.automation |
| Producer | automation-service |
| Consumer | (Servis içi) |
| Tetikleyici | action.execute.requested.v1 tüketimi — action_type automate olduğunda |
| Kritiklik | Yüksek — cihaza fiziksel komut gider |
Payload
{
"event": "automation.command.requested.v1",
"meta": {
"trace_id": "01a2b3c4d5e6f7g8h9i0",
"producer_service": "automation-service",
"produced_at": "2026-03-11T15:22:15.000Z",
"process_ms": 5
},
"context": {
"device_id": "400000011D081B70",
"raw_id": 12345,
"stream_id": 9823412,
"device_time": "2026-03-11T15:22:06Z",
"stream_time": "2026-03-11T15:22:15.000Z",
"iccid": null,
"imei": null,
"firmware": "2.3.0"
},
"data": {
"job_id": "job_9823412_001",
"action_id": "act_9823412_001",
"command": "relay_open",
"channel": 2,
"timeout_ms": 30000,
"queued_at": "2026-03-11T15:22:15.000Z"
},
"error": null
}
Alan Açıklamaları
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
data.job_id | string | Evet | Otomasyon işinin benzersiz tanımlayıcısı |
data.command | string | Evet | Cihaza gönderilecek komut adı |
data.channel | integer | Hayır | Hedef röle veya çıkış kanalı numarası |
data.timeout_ms | integer | Evet | ACK bekleme süresi (ms) |
automation.job.completed.v1
Özet
| Başlık | Değer |
|---|---|
| Topic | qapu.automation |
| Producer | automation-service |
| Consumer | Action Servisi, Ledger Servisi |
| Tetikleyici | Cihazdan başarı ACK alındığında |
| Kritiklik | Yüksek |
Payload
{
"event": "automation.job.completed.v1",
"meta": {
"trace_id": "01a2b3c4d5e6f7g8h9i1",
"producer_service": "automation-service",
"produced_at": "2026-03-11T15:22:18.300Z",
"process_ms": 3300
},
"context": {
"device_id": "400000011D081B70",
"raw_id": 12345,
"stream_id": 9823412,
"device_time": "2026-03-11T15:22:06Z",
"stream_time": "2026-03-11T15:22:18Z",
"iccid": null,
"imei": null,
"firmware": null
},
"data": {
"job_id": "job_9823412_001",
"action_id": "act_9823412_001",
"command": "relay_open",
"channel": 2,
"ack_received_at": "2026-03-11T15:22:18.290Z",
"duration_ms": 3290
},
"error": null
}
automation.job.failed.v1
Özet
| Başlık | Değer |
|---|---|
| Topic | qapu.automation |
| Producer | automation-service |
| Consumer | Observer Servisi |
| Kritiklik | Yüksek — cihaz komutu uygulanamadı |
Payload
{
"event": "automation.job.failed.v1",
"meta": {
"trace_id": "01a2b3c4d5e6f7g8h9i2",
"producer_service": "automation-service",
"produced_at": "2026-03-11T15:22:45.050Z",
"process_ms": 30050
},
"context": {
"device_id": "400000011D081B70",
"raw_id": 12345,
"stream_id": 9823412,
"device_time": "2026-03-11T15:22:06Z",
"stream_time": "2026-03-11T15:22:45Z",
"iccid": null,
"imei": null,
"firmware": null
},
"data": {
"job_id": "job_9823412_001",
"action_id": "act_9823412_001",
"command": "relay_open",
"channel": 2
},
"error": {
"failed_stage": "automation",
"error_code": "AUTOMATION_ACK_TIMEOUT",
"error_message": "No ACK received within 30000ms",
"failed_at": "2026-03-11T15:22:45Z"
}
}