I’ve managed to integrate my TED Pro/6000. I have the Spyder so that I can read individual circuits, which is what I was really after. (The total panel load isn’t as useful due to how my property is wired overall)
I used Node Red to poll the XML api webpage that is exposed. (You can find it for your TED at the link that previous folks have mentioned, so http://YOUR.IP.HERE/api/SpyderData.xml if you have the Spyder)
Start with an injection node (I’m polling every 2 seconds, but still playing around wiht it). Then use the HTTP request node to the link for your TED API page. Then drop in an XML to JSON node since Home Assistant can’t natively read XML. Then a function node to read the data. My code for my node is below. Edit yours accordingly. Then I send my to my MQTT server to read into Home Assistant.
let spyderGroups = msg.payload.SpyderData.Spyder;
// Define sensor mappings
let sensors = {
"barn/living_room": spyderGroups[0].Group[0].Now[0],
"barn/lights_1": spyderGroups[0].Group[3].Now[0],
"barn/lights_3": spyderGroups[0].Group[4].Now[0],
"barn/lights_2": spyderGroups[0].Group[5].Now[0],
"barn/well": spyderGroups[1].Group[0].Now[0],
"barn/heat_pump": spyderGroups[1].Group[1].Now[0],
"barn/dryer": spyderGroups[1].Group[2].Now[0],
"barn/boiler": spyderGroups[1].Group[3].Now[0],
"barn/water_heater": spyderGroups[1].Group[5].Now[0],
"barn/server_rack": spyderGroups[1].Group[7].Now[0]
};
let messages = [];
for (let topic in sensors) {
messages.push({ topic: "spyder/" + topic, payload: sensors[topic] });
}
return [messages];
I did setup my mqtt sensors in the configuration.yaml file so I could define units and device class, like so:
mqtt:
sensor:
- name: "Barn Lights 1 Power"
state_topic: "spyder/barn/lights_1"
unit_of_measurement: "W"
device_class: power
I only imported the power readings and then used helpers in Home Assistant to create energy sensors from the power readings so I could import it into my Energy page.
Good Luck!
Here’s my full Node Red JSON if you’d like to see it:
[{"id":"spyder_flow","type":"tab","label":"Spyder Power Sensors","disabled":false,"info":""},{"id":"http_request","type":"http request","z":"spyder_flow","name":"Get Spyder Data","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://YOUR.TED.IP.HERE/api/SpyderData.xml","tls":"","persist":false,"proxy":"","authType":"","x":270,"y":240,"wires":[["xml_to_json"]]},{"id":"xml_to_json","type":"xml","z":"spyder_flow","name":"Convert XML to JSON","property":"payload","attr":"","chr":"","x":460,"y":140,"wires":[["split_sensors"]]},{"id":"split_sensors","type":"function","z":"spyder_flow","name":"Extract Sensor Data","func":"let spyderGroups = msg.payload.SpyderData.Spyder;\n\n// Define sensor mappings\nlet sensors = {\n \"barn/living_room\": spyderGroups[0].Group[0].Now[0],\n \"barn/lights_1\": spyderGroups[0].Group[3].Now[0],\n \"barn/lights_3\": spyderGroups[0].Group[4].Now[0],\n \"barn/lights_2\": spyderGroups[0].Group[5].Now[0],\n \"barn/well\": spyderGroups[1].Group[0].Now[0],\n \"barn/heat_pump\": spyderGroups[1].Group[1].Now[0],\n \"barn/dryer\": spyderGroups[1].Group[2].Now[0],\n \"barn/boiler\": spyderGroups[1].Group[3].Now[0],\n \"barn/water_heater\": spyderGroups[1].Group[5].Now[0],\n \"barn/server_rack\": spyderGroups[1].Group[7].Now[0]\n};\n\nlet messages = [];\nfor (let topic in sensors) {\n messages.push({ topic: \"spyder/\" + topic, payload: sensors[topic] });\n}\n\nreturn [messages];","outputs":1,"x":680,"y":220,"wires":[["mqtt_out"]]},{"id":"mqtt_out","type":"mqtt out","z":"spyder_flow","name":"Send to MQTT","topic":"","qos":"0","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"e9b5242fb5363506","x":880,"y":140,"wires":[]},{"id":"inject_trigger","type":"inject","z":"spyder_flow","name":"Trigger Every 2s","props":[{"p":"payload"}],"repeat":"2","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"str","x":100,"y":160,"wires":[["http_request"]]},{"id":"e9b5242fb5363506","type":"mqtt-broker","name":"mosquito","broker":"YOUR.MQTT.IP.HERE","port":1883,"clientid":"","autoConnect":true,"usetls":false,"protocolVersion":4,"keepalive":60,"cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]