That worked a treat, thanks!
For anyone else that gets stuck with the same thing, here's my flow for the Sonoff 4Chan switch for retaining on/off events in InfluxDB.
[{"id":"ad7da3bd.5e463","type":"mqtt in","z":"7294ec0e.c3b4a4","name":"","topic":"stat/heating/underfloor/+","qos":"2","datatype":"json","broker":"2a8957f2.2dd3b8","x":130,"y":660,"wires":[["747bc489.e04ecc"]]},{"id":"747bc489.e04ecc","type":"change","z":"7294ec0e.c3b4a4","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{ \"zone\": $keys(payload), \"power\": $lookup(payload, $keys(payload)) }","tot":"jsonata"},{"t":"change","p":"payload.power","pt":"msg","from":"ON","fromt":"str","to":"1","tot":"num"},{"t":"change","p":"payload.power","pt":"msg","from":"OFF","fromt":"str","to":"-1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":660,"wires":[["ee5461b4.e4981"]]},{"id":"ee5461b4.e4981","type":"function","z":"7294ec0e.c3b4a4","name":"MQTT to InfluxDB","func":"msg.payload = \"power,zone=\" + msg.payload.zone + \" power=\" + msg.payload.power ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":570,"y":660,"wires":[["9dac1a3d.735448"]]},{"id":"9dac1a3d.735448","type":"http request","z":"7294ec0e.c3b4a4","name":"","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://localhost:8086/write?db=nodered","tls":"","persist":true,"proxy":"","authType":"basic","x":750,"y":660,"wires":[[]]},{"id":"2a8957f2.2dd3b8","type":"mqtt-broker","name":"ns2","broker":"192.168.1.8","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]