Yapay zekâ tarafından English dilinden çevrildi ·
Bunu 140 otel odasındaki fan coil vanalarında yapıyoruz, bu yüzden kurulumumuzu aşağıda anlatıyorum.Hermetry komutları cihaza kendi downlink konusu üzerinden gönderir. Fan kartı v1/rpc/req/+ konusuna abone olur; komut v1/rpc/req/<id> olarak, bir method ve params ile gelir ve kart yanıtını v1/rpc/res/<id> üzerinden verir. Konudaki id, yanıtın eşleştirilme yoludur.Fan profilinde Commands sekmesini açın ve bir komut ekleyin; örneğin method fan.set, tipi Yes/no olan tek bir parametre on, tier Basic. Basic önemli, çünkü bir dashboard Switch yalnızca Basic tier komutları gönderir. Sonra supervisor’daki karta bir Switch kartı ekleyin, eylemi kontrolün değeriyle Run a command fan.set olsun ve Current state, kartın değiştirdikten sonra bildirdiği bir telemetri anahtarına bağlansın; biz fan.on kullanıyoruz.Arduino tarafı kabaca PubSubClient ile:
void onMsg(char* topic, byte* payload, unsigned int len) {
String t(topic);
if (!t.startsWith("v1/rpc/req/")) return;
String id = t.substring(11);
StaticJsonDocument<256> doc;
deserializeJson(doc, payload, len);
if (doc["method"] == "fan.set") {
bool on = doc["params"]["on"];
digitalWrite(RELAY, on ? HIGH : LOW);
client.publish(("v1/rpc/res/" + id).c_str(), "{"ok":true}");
client.publish("v1/telemetry", on ? "{"fan.on":1}" : "{"fan.on":0}");
}
}
// after every connect:
client.subscribe("v1/rpc/req/+", 1);
Belgelere göre bir komut iki kez gelebilir, bu yüzden son birkaç id’yi saklayıp tekrarları atlıyoruz. Sayfa: Komutları cihazlara gönderme. Yeniden başlatmadan sonra korunması gereken ayar noktaları (ısıtıcı hedef sıcaklığı) için ise bunun yerine v1/attributes/set üzerindeki paylaşılan öznitelikleri kullanıyoruz; kart bağlanır bağlanmaz bunları ister.
We have fan coil valves in 140 hotel rooms doing this, so here is our setup.
Hermetry sends commands to the device on its own downlink topic. The fan board subscribes to v1/rpc/req/+, a command arrives as v1/rpc/req/<id> with a method and params, and the board answers on v1/rpc/res/<id>. The id in the topic is how the answer is matched.
On the fan profile, open the Commands tab and add a command, for example method fan.set, one parameter on of type Yes/no, tier Basic. Basic matters because a dashboard Switch only sends Basic tier commands. Then the supervisor’s board gets a Switch card, its action is Run a command fan.set with the control’s value, and the Current state is bound to a telemetry key the board reports after it switched, we use fan.on.
Rough Arduino side with PubSubClient:
void onMsg(char* topic, byte* payload, unsigned int len) {
String t(topic);
if (!t.startsWith("v1/rpc/req/")) return;
String id = t.substring(11);
StaticJsonDocument<256> doc;
deserializeJson(doc, payload, len);
if (doc["method"] == "fan.set") {
bool on = doc["params"]["on"];
digitalWrite(RELAY, on ? HIGH : LOW);
client.publish(("v1/rpc/res/" + id).c_str(), "{"ok":true}");
client.publish("v1/telemetry", on ? "{"fan.on":1}" : "{"fan.on":0}");
}
}
// after every connect:
client.subscribe("v1/rpc/req/+", 1);
The docs say a command can arrive twice, so keep the last few ids and skip repeats. Page: Sending commands to devices. For setpoints that should survive a reboot (heater target temperature) we use shared attributes on v1/attributes/set instead, the board asks for them right after connecting.

