DrHauss / node-red-contrib_BRP069C4

Module for Node-Red to Control ACs via Daikin Cloud
MIT License
5 stars 1 forks source link

Multiple SET handling #18

Closed DIY-Blub closed 1 year ago

DIY-Blub commented 1 year ago

Due to the complexity of my question I ask it in German, if you are interested please use translation program.

Hallo, da Du aus NRW kommst hoffe ich das du Deutsch verstehst :) ich versuche jetzt schon mehrmals auf verschiedene Arten eine benutzerfreundliche Umsetzung für das Senden von Befehlen umzusetzen. Wie hast Du das gemacht?

Mein Gedanke: Man drückt am (selbst erstellten) Interface die gewünschten Einstellungen und diese werden dann als Befehle übermittelt.

Problem: BATCH Jedoch kann man nicht mehrere Befehle hintereinander schicken. Ein gruppiertes (Node-Red: Batch, gruppiert, 10 Sekunden) übermitteln einzelner Befehle funktioniert nicht, weil nach dem ersten Befehl die darauf folgenden ignoriert werden.

Problem: MULTI-Object Ein Objekt mit mehreren Befehlen {0:{...},1:{...}} funktioniert leider auch nicht. TypeError: Cannot read property "setData" of null

msg.payload:

0: object
ssid: "DaikinAP12345"
managementPoint: "climateControl"
dataPoint: "streamerMode"
value: "on"

1: object
ssid: "DaikinAP12345"
managementPoint: "climateControl"
dataPoint: "fanControl"
dataPointPath: "/operationModes/fanOnly/fanDirection/vertical/currentMode"
value: "stop"

msg.topic: "set"

Ich kann doch nicht alle 60 Sekunden nur einen Befehl übermitteln, damit die Klimaanlage nach insgesamt 5 Minuten (5 Befehle) das gewünschte Verhalten erfüllt. ... das wäre nicht Benutzerfreundlich.

Ich hoffe Du kannst mir bei meinem Dilemma weiterhelfen!

Schöne Grüße, Christian

DrHauss commented 1 year ago

Ich schau es mir mal an... kann aber was dauern. Hast du vielleicht eine Beispiel Node mit Batch?

DIY-Blub commented 1 year ago

Danke, wie gewünscht:

[{"id":"485d764a.9037a8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"ea113c07.6a4bd8","type":"inject","z":"485d764a.9037a8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":260,"wires":[["8c42c082.9f039"]]},{"id":"75910ac9.bd28c4","type":"batch","z":"485d764a.9037a8","name":"","mode":"interval","count":10,"overlap":0,"interval":"10","allowEmptySequence":false,"topics":[],"x":550,"y":220,"wires":[["61d2b857.969ff8","909e763d.0168d8"]]},{"id":"8c42c082.9f039","type":"function","z":"485d764a.9037a8","name":"set temp","func":"msg.topic = \"set\";\nmsg.payload = {};\nmsg.payload.ssid = \"DaikinAP12345\";\nmsg.payload.managementPoint = \"climateControl\";\nmsg.payload.dataPoint = \"temperatureControl\";\nmsg.payload.value = 21.5;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":260,"wires":[["75910ac9.bd28c4"]]},{"id":"acb6400f.76b558","type":"function","z":"485d764a.9037a8","name":"set mode","func":"msg.topic = \"set\";\nmsg.payload = {};\nmsg.payload.ssid = \"DaikinAP12345\";\nmsg.payload.managementPoint = \"climateControl\";\nmsg.payload.dataPoint = \"operationMode\";\nmsg.payload.value = \"fanOnly\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":300,"wires":[["75910ac9.bd28c4"]]},{"id":"61f33207.2a7bb4","type":"function","z":"485d764a.9037a8","name":"set special","func":"msg.topic = \"set\";\nmsg.payload = {};\nmsg.payload.ssid = \"DaikinAP12345\";\nmsg.payload.managementPoint = \"climateControl\";\n\n// powerfulMode ODER streamerMode\nmsg.payload.dataPoint = \"streamerMode\";\n\n// on ODER off\nmsg.payload.value = \"on\";\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":350,"y":340,"wires":[["75910ac9.bd28c4"]]},{"id":"6acc2317.e7f9ac","type":"inject","z":"485d764a.9037a8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":300,"wires":[["acb6400f.76b558"]]},{"id":"aeea01a1.02c3a8","type":"inject","z":"485d764a.9037a8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":340,"wires":[["61f33207.2a7bb4"]]},{"id":"d7d97264.69f698","type":"function","z":"485d764a.9037a8","name":"set On/Off","func":"msg.topic = \"set\";\nmsg.payload = {};\nmsg.payload.ssid = \"DaikinAP12345\";\nmsg.payload.managementPoint = \"climateControl\";\nmsg.payload.dataPoint = \"onOffMode\";\nmsg.payload.value = \"off\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":350,"y":220,"wires":[["75910ac9.bd28c4"]]},{"id":"192c63e7.1ef3cc","type":"inject","z":"485d764a.9037a8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":220,"wires":[["d7d97264.69f698"]]},{"id":"909e763d.0168d8","type":"Daikin-Cloud-Controller","z":"485d764a.9037a8","name":"","loglevel":"warn","tokensave":"0","timeout":"10000","retry":"3","x":790,"y":140,"wires":[["61d2b857.969ff8"]]},{"id":"61d2b857.969ff8","type":"debug","z":"485d764a.9037a8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":220,"wires":[]}]

Einfach die Inject klicken, je nach Wunsch aber innerhalb von 10 Sekunden (Interval vom Bath).

DrHauss commented 1 year ago

Versuch es mal hiermit:

[{"id":"75910ac9.bd28c4","type":"batch","z":"485d764a.9037a8","name":"","mode":"interval","count":10,"overlap":0,"interval":"10","allowEmptySequence":false,"topics":[],"x":550,"y":220,"wires":[["cc0a8a1a30bda7c9"]]},{"id":"909e763d.0168d8","type":"Daikin-Cloud-Controller","z":"485d764a.9037a8","name":"","loglevel":"warn","tokensave":"0","timeout":"10000","retry":"3","x":830,"y":120,"wires":[["61d2b857.969ff8"]]},{"id":"cc0a8a1a30bda7c9","type":"delay","z":"485d764a.9037a8","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"5","rateUnits":"second","randomFirst":"1","randomLast":"10","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":700,"y":180,"wires":[["909e763d.0168d8","61d2b857.969ff8"]]}]

ggf. kann man die Zeit auch runter setzen...

DIY-Blub commented 1 year ago

funktioniert, super. Dankeschön!