-
-
Notifications
You must be signed in to change notification settings - Fork 52
Fan V2
Fan V2 is an adjustable-speed fan with the option to add oscillate and direction flags. Use the "Characteristic Properties" area of the service node to define which features your fan has.
Characteristic | Optional/Required | Characteristic Properties (to enable property) |
---|---|---|
Active | Required | |
RotationSpeed | Optional | {"RotationSpeed":true} |
RotationDirection | Optional | {"RotationDirection":true} |
SwingMode | Optional | {"SwingMode":true} |
Characteristic | Format | Accepted Values | Notes |
---|---|---|---|
Active | bool | true/false |
{"Active":true} / {"Active":false}
|
RotationSpeed | int | 0 - 100 | Percentage, default step value = 1 |
RotationDirection | int | 0, 1 |
0 : clockwise, 1 : counter clockwise |
SwingMode | int | 0, 1 | Oscillate, 0 : disabled, 1 : enabled. Default: 0
|
If you would like to have all features, use this in Characteristic Properties:
{
"SwingMode":true,
"RotationDirection":true,
"RotationSpeed":true
}
If you would like to limit the rotation speed to 4 speeds, use the following in your Characteristic Properties field:
{
"SwingMode":true,
"RotationSpeed":{
"minValue": 0,
"maxValue": 100,
"minStep":25
},
"RotationDirection":true
}
These examples are meant to be copied into your Node-RED system and adapted to your setup.
This is an example of a fan with rotation speed range from 0 to 100, changeable rotation direction, and oscillate feature. Additionally there is a function node that will remember the state of all characteristics and pass them on to the next node if any state of the fan was changed from inside of the Home app.
Please see comments inside the function node for explanation of how it works.
Copyable Node-RED flow:
[{"id":"e144d033.29c8b","type":"random","z":"70499365.f98a34","name":"Random Speed","low":"1","high":"100","inte":"true","property":"payload","x":580,"y":220,"wires":[["352c1899.bc572"]]},{"id":"ce15d433.0f9078","type":"inject","z":"70499365.f98a34","name":"Rotation Speed","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":380,"y":220,"wires":[["e144d033.29c8b"]]},{"id":"352c1899.bc572","type":"change","z":"70499365.f98a34","name":"To JSON","rules":[{"t":"move","p":"payload","pt":"msg","to":"payload.RotationSpeed","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":280,"wires":[["2b80e6f3.a922ba"]]},{"id":"2b80e6f3.a922ba","type":"homekit-service","z":"70499365.f98a34","isParent":true,"bridge":"63a21f39.7ace9","parentService":"","name":"Fan V2","serviceName":"Fanv2","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","characteristicProperties":"{\n \"SwingMode\":true,\n \"RotationDirection\":true,\n \"RotationSpeed\":true\n}","x":320,"y":340,"wires":[["56166d2c.e2041c","fbd3a6e6.f9cf7"]]},{"id":"56166d2c.e2041c","type":"function","z":"70499365.f98a34","name":"Full output","func":"/* Initialize your variables. Replace\nthe default variable with whatever you\nwould like to send in case of reboot when\nthere is no context variable saved. The\nstatement for \"Active\" is read in english \nlike:\n \"create variable Active for this function\n use the context veriable if there is one\n otherwise set it to 0\"\nThese context variables hold the state of\neach setting so they can be passed to\nother nodes (i.e. Harmony remote, OpenHAB)*/\n\nvar Active = context.get('Active')||0;\nvar RotationSpeed = context.get('RotationSpeed')||0;\nvar RotationDirection = context.get('RotationDirection')||0;\nvar SwingMode = context.get('SwingMode')||0;\n\nvar FullOutput={};\n\nif(msg.payload.Active === 0 || msg.payload.Active == 1){\n Active = msg.payload.Active;\n context.set('Active',Active);\n}\nif(msg.payload.RotationSpeed){\n RotationSpeed = msg.payload.RotationSpeed;\n context.set('RotationSpeed',RotationSpeed);\n}\nif(msg.payload.RotationDirection === 0 || msg.payload.RotationDirection == 1){\n RotationDirection = msg.payload.RotationDirection;\n context.set('RotationDirection',RotationDirection);\n}\nif(msg.payload.SwingMode === 0 || msg.payload.SwingMode == 1){\n SwingMode = msg.payload.SwingMode;\n context.set('SwingMode',SwingMode);\n}\nif (msg.hap.context !== undefined) {\n FullOutput.payload={\n \"Active\":Active,\n \"RotationSpeed\":RotationSpeed,\n \"RotationDirection\":RotationDirection,\n \"SwingMode\":SwingMode\n }\n return [FullOutput]\n}","outputs":1,"noerr":0,"x":530,"y":340,"wires":[["13714915.5e847f"]]},{"id":"fbd3a6e6.f9cf7","type":"debug","z":"70499365.f98a34","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":500,"y":440,"wires":[]},{"id":"e80a42f1.4f13c8","type":"inject","z":"70499365.f98a34","name":"Clockwise","topic":"","payload":"{\"RotationDirection\":0}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":140,"y":220,"wires":[["2b80e6f3.a922ba"]]},{"id":"a41bb9bb.93c26","type":"inject","z":"70499365.f98a34","name":"Counterclockwise","topic":"","payload":"{\"RotationDirection\":1}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":260,"wires":[["2b80e6f3.a922ba"]]},{"id":"370f1b5b.17c2ec","type":"inject","z":"70499365.f98a34","name":"Off","topic":"","payload":"{\"Active\":0}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":340,"wires":[["2b80e6f3.a922ba"]]},{"id":"e592a6ab.b6ed88","type":"inject","z":"70499365.f98a34","name":"On","topic":"","payload":"{\"Active\":1}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":380,"wires":[["2b80e6f3.a922ba"]]},{"id":"1e9168b4.b9f977","type":"inject","z":"70499365.f98a34","name":"Oscillate Off","topic":"","payload":"{\"SwingMode\":0}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":460,"wires":[["2b80e6f3.a922ba"]]},{"id":"c584f489.ab4fe8","type":"inject","z":"70499365.f98a34","name":"Oscillate On","topic":"","payload":"{\"SwingMode\":1}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":500,"wires":[["2b80e6f3.a922ba"]]},{"id":"13714915.5e847f","type":"debug","z":"70499365.f98a34","name":"Full Output","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":730,"y":340,"wires":[]},{"id":"63a21f39.7ace9","type":"homekit-bridge","z":"","bridgeName":"Dev2","pinCode":"111-11-111","port":"","allowInsecureRequest":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","customMdnsConfig":false,"mdnsMulticast":true,"mdnsInterface":"","mdnsPort":"","mdnsIp":"","mdnsTtl":"","mdnsLoopback":true,"mdnsReuseAddr":true}]