blueprint: name: Spider domain: automation description: > # Spider **Version: 1.15** Handle Spider Ramses communication ## Configure ramses_cc integration Edit the ramses_cc configuration and add the advanced_features to configuration.yaml. ``` ramses_cc: advanced_features: send_packet: true message_events: "(RQ.* 01FF | I.* 1FC9 |( I| W).* 22C9 )" ``` ## Add a Generic Thermostat Create a heater input_boolean helper which can be shared between thermostats. Heater is a required field for generic_thermostat. And also add a helper schedule. Add a Generic Thermostat in configuration.yaml: ``` climate: - platform: generic_thermostat name: Thermostat Room 1 heater: input_boolean.thermostat_heater target_sensor: sensor.itho_autotemp_1_room_3_temp target_temp_step: 0.5 ``` The target_sensor is the entity that holds the room temperature. input: thermostat: name: Thermostat description: This must be a Generic Thermostat entity selector: entity: domain: climate gateway_address: name: Gateway Address description: The address of the HGI80 or evofw3 (starting with 18) spider_address: name: Spider Address description: The Spider address (starting with 21) normal_setpoint: name: Normal setpoint description: The default setpoint when no schema is active default: 20 selector: number: min: 15 max: 24 step: 0.5 unit_of_measurement: "C" mode: slider schedule_setpoint: name: Schedule setpoint description: The setpoint when schedule is active default: 18 selector: number: min: 15 max: 24 step: 0.5 unit_of_measurement: "C" mode: slider schedule: name: Schedule description: A time schedule for the "Schedule setpoint" # default: {} selector: entity: domain: schedule manual_spider_enabled: name: Enable Spider Manual input description: If true, enable manual input on Spider until next setpoint. Working for main thermostat, not for room thermostats at the moment. default: false selector: boolean: trigger: - platform: event event_type: ramses_cc_message id: message_received - platform: state entity_id: !input thermostat attribute: temperature id: setpoint_changed - platform: state entity_id: !input schedule id: schedule_changed variables: spider_address: !input "spider_address" gateway_address: !input "gateway_address" bind_address: '{{ "%02X" % ((gateway_address[:2] | int) * (2 ** 18) + (gateway_address[-6:] | int)) }}' thermostat: !input "thermostat" setpoint: '{{ state_attr(thermostat, "temperature") }}' setpoint_cooling: '{{ state_attr(thermostat, "temperature") + 1 }}' setpoint_payload: '{{ ("%02X" % ((setpoint | float * 2)) | round)}}' setpoint_cooling_payload: '{{ ("%02X" % ((setpoint_cooling | float * 2)) | round)}}' manual_spider_enabled: !input manual_spider_enabled action: - choose: - alias: "Received binding message from ramses" conditions: - condition: trigger id: - message_received - condition: template value_template: '{{ trigger.event.data.verb == " I" }}' - condition: template value_template: '{{ trigger.event.data.code == "1FC9" }}' - condition: template value_template: '{{ trigger.event.data.src == spider_address }}' - condition: template value_template: '{{ " 0022" in trigger.event.data.packet }}' sequence: - service: ramses_cc.send_packet data: device_id: !input spider_address verb: W code: 1FC9 payload: > 0001FF{{bind_address}} - alias: "Received request setpoint message from ramses" conditions: - condition: trigger id: - message_received - condition: template value_template: '{{ trigger.event.data.verb == "RQ" }}' - condition: template value_template: '{{ trigger.event.data.code == "01FF" }}' - condition: template value_template: '{{ trigger.event.data.src == spider_address }}' sequence: - service: ramses_cc.send_packet data: device_id: !input spider_address verb: RP code: 01FF payload: > 008080{{ setpoint_payload }}{{ setpoint_cooling_payload }}D0000000143C80800000B40080800280FF80040000 - alias: "Received write setpoint message from ramses" conditions: - condition: trigger id: - message_received - condition: template value_template: '{{ manual_spider_enabled == true }}' - condition: template value_template: '{{ trigger.event.data.verb == " W" }}' - condition: template value_template: '{{ trigger.event.data.code == "22C9" }}' - condition: template value_template: '{{ trigger.event.data.src == spider_address }}' - condition: template value_template: '{{ trigger.event.data.dst.startswith("18:") }}' sequence: - variables: setpoint: '{{ trigger.event.data.payload.setpoint_bounds[0] }}' setpoint_hex: '{{ "%04X" % ((setpoint * 100) | int) }}' - service: climate.set_temperature target: entity_id: !input thermostat data: temperature: '{{ setpoint }}' - service: ramses_cc.send_packet data: device_id: !input spider_address verb: I code: 22C9 payload: > 00{{setpoint_hex}}080201 - alias: "Setpoint changed in Generic Thermostat" conditions: - condition: trigger id: - setpoint_changed sequence: - repeat: count: 3 sequence: - delay: hours: 0 minutes: 0 seconds: 1 milliseconds: 0 - service: ramses_cc.send_packet data: device_id: !input spider_address verb: W code: 01FF payload: > 008080{{ setpoint_payload }}{{ setpoint_cooling_payload }}D0000000143C80800000B40080800280FF80040000 - alias: "Schedule changed to on, so change to schedule setpoint" conditions: - condition: trigger id: - schedule_changed - condition: template value_template: '{{ trigger.to_state.state == "on" }}' sequence: - service: climate.set_temperature target: entity_id: !input thermostat data: temperature: !input schedule_setpoint - alias: "Schedule changed to off, so change to normal setpoint" conditions: - condition: trigger id: - schedule_changed - condition: template value_template: '{{ trigger.to_state.state == "off" }}' sequence: - service: climate.set_temperature target: entity_id: !input thermostat data: temperature: !input normal_setpoint mode: queued trace: stored_traces: 10