Türetilmiş değer, cihazlarınızın göndermediği, ancak gönderdiklerinden hesapladığınız bir anahtardır: başka bir birime çevrilmiş sıcaklık, bir durum kodu, son okumadan bu yana tüketim veya bir oran. Bunu bir akışta hesaplayıp Save telemetry ile kaydedersiniz; böylece diğer anahtarlar gibi grafiğe alınır, özetlenir ve alarmlanır.
Kural: türetmeyi cihazın kendi mesajında yapın
Save telemetry değerleri yalnızca mesajı gönderen cihaz için kaydeder (mesajın originator değeri). Diğer mesajları not_a_device ile reddeder. Bu nedenle:
- Türetilmiş değerleri, cihazın mesajlarını alan root flow içinde veya root’un Run flow ile mesajı devrettiği bir akışta hesaplayın (mesaj ve cihazı aynı kalır).
- Bir Schedule, Inject, Event veya Named timer tetikleyicisiyle başlatılan akışın originator değeri cihaz değil, kuruluş (veya akış) olur. Cihaz telemetrisi kaydedemez.
- Türetilmiş değer varsayılan olarak kaydın zamanında saklanır; böylece kaynağı olan okumayla aynı hizada görünür.
Adımların yerleştirilmesi
Varsayılan root flow’da telemetri, Message type anahtarından (telemetry çıkışı) Save telemetry bloğuna gider. Bloklarınızı bu bağlantıya ekleyin:
Device messages → Alarm rules → Message type ─ telemetry → [your blocks] → Save telemetry
Her telemetri mesajı tek bir kayıt içerir: msg.payload, {"temperature": 21.5, "humidity": 40} gibi düz bir nesnedir. msg.payload içine anahtarlarınızı ekleyin; tüm anahtarlar birlikte kaydedilir.
Alarm kuralları türetilmiş anahtarı da görmeliyse, bloklarınızı Alarm rules bloğundan önce yerleştirin ve yalnızca telemetri mesajlarında çalışacak şekilde (örneğin msg.metadata.msgType üzerinde bir Switch sonrasında) ayarlayın.
Her cihaz her mesajda her anahtarı göndermez. Dalınızı bir kontrolle başlatın (örneğin msg.payload.power üzerinde nempty ile bir Switch); aksi halde hesaplama başarısız olur veya null yazar.
Örnek: birim dönüşümü
temperature_f değerini temperature yanında saklayın:
- Bir Calculate bloğu ekleyin. expr:
round(msg.payload.temperature * 1.8 + 32, 1). target:msg.payload.temperature_f. - Save telemetry bloğundan önce bağlayın.
Doğrusal aralık dönüşümü için bir Scale bloğu kullanın; örneğin 4–20 mA sinyalini 0–10 bar’a çevirmek için (in_min 4, in_max 20, out_min 0, out_max 10; anahtarın kendi yolunda).
Örnek: birden çok değerden durum kodu
Grafikler ve saha renkleri için status değerini sayı olarak saklayın: 2 = kritik, 1 = uyarı, 0 = normal.
Add a Calculate block with targetmsg.payload.status_codeand expr:msg.payload.temperature > 8 ? 2 : (msg.payload.temperature > 6 ? 1 : 0)
İsteğe bağlı olarak,statusanahtarını okuyan 2B ve 3B saha görünümleri için, hedefimsg.payload.statusve exprmsg.payload.status_code == 2 ? "critical" : (msg.payload.status_code == 1 ? "warning" : "ok")olan ikinci bir Calculate ekleyin.
Örnek: sayaçtan tüketim
Bir sayaç artan bir energy_kwh gönderir. Bir önceki okumadan bu yana tüketimi energy_delta olarak saklayın:
- Bir Delta bloğu ekleyin. Input:
msg.payload.energy_kwh. Output:msg.payload.energy_delta. Period:msg.payload.period_ms. - Seed:
latest; böylece dağıtımdan sonraki ilk mesaj 0 vermek yerine saklanan son değerden ölçüm yapar. - When negative (
on_negative): sayaç yeniden başlayabiliyorsazero; bu durumda yeniden başlatma 0 yazar ve yeni değer temel değer olur. - out çıkışını Save telemetry bloğuna bağlayın. other çıkışını (anahtarı olmayan mesajlar) da doğrudan Save telemetry bloğuna bağlayın; böylece diğer okumalar yine saklanır.
Delta bloğu cihaz başına bir önceki değeri tutar. Saatlik veya günlük tüketim için türetilmiş anahtara gerek yoktur: ham sayacı increase toplamıyla okuyun. Bkz. Aggregates and rollups.
Örnek: oran
Delta örneğinin üzerine bir Calculate ekleyin: hedef msg.payload.power_kw, expr msg.payload.period_ms > 0 ? msg.payload.energy_delta / (msg.payload.period_ms / 3600000) : 0. Bu, bir önceki okumadan bu yana ortalama güçtür.
Örnek: saklanan bir değerle birleştirme
Bu mesajdan ve cihazın daha önce gönderdiği başka bir anahtardan bir değer hesaplamak için (örneğin şu anki level ve günde bir kez gönderilen capacity):
- Bir Latest values bloğu ekleyin. keys:
capacity. target:msg.metadata.latest. When data is missing:skip. - Bir Calculate ekleyin: hedef
msg.payload.fill_pct, exprround(msg.payload.level / msg.metadata.latest.capacity * 100, 1).
msg.metadata altındaki değerler asla saklanmaz; yalnızca msg.payload saklanır. Bir okumaya değil cihaza ait değerler (kapasite, limit) için sunucu özniteliği tercih edin ve bunu Device details ile okuyun.
Örnek: yumuşatma
Bir Statistics bloğu (window count, size 10, çıkış avg) msg.payload değerini son 10 değerin ortalamasıyla değiştirir. Özgün kaydı korumak için bir script kullanın ya da ortalamayı ayrı bir dalda hesaplayıp orada kaydedin. Türetilmiş ortalamalara nadiren ihtiyaç duyulur: grafikler avg toplamıyla ortalama alabilir.
Dikkat edilmesi gerekenler
| Konu | Ayrıntı |
|---|---|
| Anahtar sınırı | Her türetilmiş anahtar yeni bir anahtardır ve planınızın anahtar sınırına dahil edilir. Bkz. Telemetry keys. |
| Script blokları | Bir Script bloğu her şeyi hesaplayabilir, ancak planınızın script blok sayısına dahil edilir. Calculate, Change ve Delta tercih edin. |
| Bellek | Delta, Statistics ve benzeri bloklar değerleri cihaz başına hatırlar. Bu tür bir bloğun ayarlarını değiştirip dağıtmak, belleğini boş olarak başlatır. |
| Geç gelen veriler | Geç gelen mesajlar root flow’dan geçer ve türetilmiş değerler dahil olmak üzere saklanır. |
| Test | Dağıtmadan önce bir akışı örnek bir mesajla Test edin: test sırasında hiçbir şey saklanmaz. Bkz. Versions, testing and rollback. |
| Diğer kayıtlar | General ana makinede, Save reading bloğu akışlardan yazmayı kabul eden diğer kayıt türlerinin okumalarını saklar (örneğin planınız kapsıyorsa varlık sayaçları). Cihaz verileri her zaman Save telemetry üzerinden geçer. |
Ayrıca bakınız: IoT data blocks, Data transform blocks ve Flow cookbook.

