Ich habe ein Shelly Script geschrieben, welches beim Bewegen eines Rollladens jede Sekunde die aktuelle Position per MQTT Funkt. Das ganze ist so aufgebaut, das die Nachrichten einfach den Event Nachrichte auf dem /events/rpc kanal nachempfunden sind. Das funktioniert auch soweit wie geowollt. Nur finde ich keine Option den Zeitstempel im Script abzufragen und in der Eventnachricht zu senden.
Ob sich ein Rollladen bewegt frage ich über eine Timerfunktion ab. Diese prüft jede Sekunde ob der Rolladen gerae Strom verbraucht (apower). Über die Start Stop Events habe ich das nicht zum laufen bekommen.
Kann mir jemand sagen wie ich an den Zeitstempel komme?
Code
let notifyTimer = Timer.set(
1000,
true,
function() {
let coverStatus = Shelly.getComponentStatus("cover", 0);
if(coverStatus.apower > 0 && coverStatus.current_pos >= 0) {
let deviceInfo = Shelly.getDeviceInfo();
let shellyId = deviceInfo.id;
let status = {
src: shellyId,
dst: shellyId + "/events",
method: "NotifyStatus",
params: {
ts: 0,
"cover:0": coverStatus
}
};
MQTT.publish(shellyId + "/events/rpc", JSON.stringify(status), 0, false);
}
}
);
Alles anzeigen
Die gesendete Nachricht sieht dann aktuell so aus:
Code
{
"params": {
"cover:0": {
"current_pos": 80,
"pos_control": true,
"temperature": {
"tF": 134.6,
"tC": 57
},
"aenergy": {
"minute_ts": 1690100565,
"by_minute": [
273.367,
0,
0
],
"total": 5.546
},
"pf": 0.97,
"current": 0.513,
"voltage": 236.5,
"apower": 118.2,
"move_started_at": 1690100557.33,
"move_timeout": 60,
"state": "opening",
"source": "MQTT",
"id": 0
},
"ts": 0
},
"method": "NotifyStatus",
"dst": "shellypro2pm-.../events",
"src": "shellypro2pm-..."
}
Alles anzeigen