{"id":50340365,"url":"https://github.com/lockevod/octopus_ev_spain","last_synced_at":"2026-05-29T16:30:42.917Z","repository":{"id":305509684,"uuid":"1020739102","full_name":"lockevod/octopus_ev_spain","owner":"lockevod","description":"Integración para conectar tu cuenta de Octopus Energy España con Home Assistant y monitorizar tu consumo, saldo y estado de cargador EV.","archived":false,"fork":false,"pushed_at":"2025-07-20T13:19:54.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-20T15:12:52.734Z","etag":null,"topics":["ev","hacs-integration","home-assistant","octopus"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lockevod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-16T10:16:58.000Z","updated_at":"2025-07-20T13:19:57.000Z","dependencies_parsed_at":"2025-07-20T15:23:09.655Z","dependency_job_id":null,"html_url":"https://github.com/lockevod/octopus_ev_spain","commit_stats":null,"previous_names":["lockevod/octopus_ev_spain"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/lockevod/octopus_ev_spain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lockevod%2Foctopus_ev_spain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lockevod%2Foctopus_ev_spain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lockevod%2Foctopus_ev_spain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lockevod%2Foctopus_ev_spain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lockevod","download_url":"https://codeload.github.com/lockevod/octopus_ev_spain/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lockevod%2Foctopus_ev_spain/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33662205,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ev","hacs-integration","home-assistant","octopus"],"created_at":"2026-05-29T16:30:42.135Z","updated_at":"2026-05-29T16:30:42.905Z","avatar_url":"https://github.com/lockevod.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Octopus Energy España - Integración Home Assistant\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/custom-components/hacs)\n[![GitHub release](https://img.shields.io/github/release/lockevod/ha-octopus-ev-spain.svg)](https://github.com/lockevod/ha-octopus-ev-spain/releases)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/lockevod/ha-octopus-ev-spain/graphs/commit-activity)\n\nIntegración **no oficial** para conectar tu cuenta de **Octopus Energy España** con Home Assistant. Monitoriza tu consumo, saldos, facturas y controla tu cargador EV inteligente.\n\n\u003e ⚠️ **Importante**: Esta es una integración desarrollada por la comunidad, **no oficial** de Octopus Energy. El uso es bajo tu propia responsabilidad.\n\u003e ⚠️ **Importante**: BETA \n## 🚗 Características Principales\n\n### 📊 **Información de Cuenta**\n- **Saldos en tiempo real**: Electricidad y Monedero Solar\n- **Información de contrato**: Número, tipo, fechas de validez\n- **Datos de suministro**: Dirección, CUPS de electricidad\n- **Facturas**: Importe y fechas de la última factura\n\n### ⚡ **Control de Cargador EV**\n- **Estado en tiempo real**: Conectado, desconectado, cargando\n- **Control de carga rápida**: Iniciar/detener boost desde HA\n- **Sesiones programadas**: Visualiza horarios de carga inteligente\n- **Configuración avanzada**: Porcentaje máximo y hora objetivo\n- **Historial de cargas**: Fecha, duración, energía y coste\n\n### 🔧 **Servicios y Automatización**\n- **Servicios integrados**: Control completo vía servicios de HA\n- **Eventos personalizados**: Para automatizaciones avanzadas\n- **Notificaciones**: Cambios de estado automáticos\n- **Botones de acción**: Actualización manual del estado\n\n### 💰 **Dispositivo Precios: \"Octopus Energy EV España\"**\n\n| Sensor | Tipo | Descripción |\n|---------|------|-------------|\n| `sensor.octopus_precios_tarifa` | Sensor | Estructura de precios de la tarifa contratada |\n| `sensor.octopus_precio_actual` | Sensor | Precio actual según horarios españoles |\n| `sensor.octopus_precio_actual_ev` | Sensor | Precio actual con descuentos EV aplicados |\n\n#### 🎯 **Detalles de los Sensores de Precios:**\n\n##### 📋 **`sensor.octopus_precios_tarifa`**\n- **Muestra**: `\"Variable: 0.084 - 0.197 €/kWh\"` (rango de tu tarifa)\n- **Atributos clave**:\n  - `rate_peak`: `\"0.197 €/kWh\"` (Precio punta)\n  - `rate_standard`: `\"0.122 €/kWh\"` (Precio llano)  \n  - `rate_offpeak`: `\"0.084 €/kWh\"` (Precio valle)\n  - `all_variable_rates`: `[0.197, 0.122, 0.084]` (Para automatizaciones)\n\n##### ⚡ **`sensor.octopus_precio_actual`**\n- **Muestra**: `0.122` (precio actual en €/kWh)\n- **Horarios aplicados**:\n  - 🔴 **PUNTA** (0.197 €/kWh): L-V 10:00-14:00 y 18:00-22:00\n  - 🟡 **LLANO** (0.122 €/kWh): L-V 8:00-10:00, 14:00-18:00, 22:00-24:00\n  - 🟢 **VALLE** (0.084 €/kWh): L-V 0:00-8:00 + Sábados y Domingos completos\n- **Atributos clave**:\n  - `today[]`: Array con 48 intervalos de 30min para hoy\n  - `tomorrow[]`: Array con 48 intervalos de 30min para mañana\n  - `today_min_price`, `today_max_price`, `today_avg_price`\n  - `current_period_start`, `current_period_end`, `current_period_value`\n\n##### 🚗 **`sensor.octopus_precio_actual_ev`** ⭐ **¡REVOLUCIONARIO!**\n- **Muestra**: `0.068` (durante carga EV) o precio normal\n- **Lógica inteligente**:\n  - **Sin coche conectado** → Precios normales\n  - **Con coche conectado + carga programada** → **0.068 €/kWh fijo**\n  - **Con coche conectado sin carga** → Precios normales  \n  - **Se actualiza automáticamente** cuando cambian las `planned_dispatches`\n- **Atributos únicos**:\n  - `charger_connected`: `true/false`\n  - `charging_periods[]`: Horarios exactos con descuento\n  - `current_period_is_ev_discount`: `true/false`\n  - `today_ev_discount_periods`: Número de períodos con descuento\n  - `charging_sessions_count`: Sesiones programadas hoy\n\n#### 📊 **Formato de datos (exacto a especificación API):**\n```json\n\"today\": [\n  {\n    \"start\": \"2025-07-23T00:00:00+02:00\",\n    \"end\": \"2025-07-23T00:30:00+02:00\",\n    \"value\": 0.084\n  },\n  {\n    \"start\": \"2025-07-23T00:30:00+02:00\", \n    \"end\": \"2025-07-23T01:00:00+02:00\",\n    \"value\": 0.084\n  }\n]\n```\n\n---\n\n## 🏠 Instalación\n\n### 📱 **Método 1: My Home Assistant (Recomendado)**\n\u003e ⚠️ **Importante**: No operativo en estos momentos. Disponible en breve\n\n[![Abrir repositorio en HACS](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=lockevod\u0026repository=ha-octopus-ev-spain\u0026category=integration)\n\n1. **Haz clic en el botón de arriba** ↑\n2. Se abrirá HACS directamente con el repositorio\n3. Haz clic en **\"Descargar\"**\n4. **Reinicia Home Assistant**\n5. Ve a **Configuración → Dispositivos y Servicios → Agregar Integración**\n6. Busca **\"Octopus Energy EV Spain\"**\n\n### 🛠️ **Método 2: HACS Manual**\n\u003e ⚠️ **Importante**: No operativo en estos momentos. Disponible en breve\n\u003e \n1. **Instala HACS** si no lo tienes: [Guía oficial HACS](https://hacs.xyz/docs/setup/download)\n2. **Añade repositorio personalizado**:\n   - Ve a **HACS → Integraciones → ⋮ → Repositorios personalizados**\n   - **URL**: `https://github.com/lockevod/ha-octopus-ev-spain`\n   - **Categoría**: `Integración`\n   - Haz clic en **\"Agregar\"**\n3. **Instala la integración**:\n   - Busca **\"Octopus Energy EV Spain\"** en HACS\n   - Haz clic en **\"Descargar\"**\n4. **Reinicia Home Assistant**\n\n### 💾 **Método 3: Instalación Manual**\n\n```bash\n# Descarga o clona en tu directorio custom_components\ngit clone https://github.com/lockevod/ha-octopus-ev-spain.git\nmv ha-octopus-ev-spain/custom_components/octopus_ev_spain /config/custom_components/\n```\n\n---\n\n## ⚙️ Configuración\n\n### 🔑 **Configuración Inicial**\n\n1. **Ve a Configuración → Dispositivos y Servicios**\n2. **Haz clic en \"Agregar Integración\"**\n3. **Busca \"Octopus Energy EV Spain\"**\n4. **Introduce tus credenciales**:\n   - Email de tu cuenta Octopus Energy España\n   - Contraseña (se almacena de forma segura)\n\n### ✅ **Requisitos**\n- **Home Assistant 2025.1+**\n- **Cuenta activa** en Octopus Energy España\n- **Tarifa EV** (para funciones de cargador): Octopus Intelligent GO\n\n---\n\n## 📋 Entidades Disponibles\n\n### 🏢 **Dispositivo Principal: \"Octopus Energy EV España\"**\n\n| Sensor | Descripción | Unidad |\n|--------|-------------|---------|\n| `sensor.octopus_numero_de_contrato` | Número de contrato | - |\n| `sensor.octopus_direccion` | Dirección del suministro | - |\n| `sensor.octopus_cups_electricidad` | CUPS de electricidad | - |\n| `sensor.octopus_tipo_de_contrato` | Tipo de tarifa contratada | - |\n| `sensor.octopus_contrato_valido_desde` | Fecha inicio contrato | fecha |\n| `sensor.octopus_contrato_valido_hasta` | Fecha fin contrato | fecha |\n| `sensor.octopus_electricidad_saldo` | Saldo cuenta electricidad | € |\n| `sensor.octopus_monedero_solar_saldo` | Saldo monedero solar | € |\n| `sensor.ultima_factura_octopus` | Importe última factura | € |\n| `sensor.octopus_precios_tarifa` | Estructura de precios de la tarifa | texto |\n| `sensor.octopus_precio_actual` | Precio actual de la electricidad | €/kWh |\n| `sensor.octopus_precio_actual_ev` | Precio actual con descuento EV | €/kWh |\n\n### 🚗 **Dispositivo Cargador EV: \"[Nombre Cargador]\"**\n\n| Entidad | Tipo | Descripción |\n|---------|------|-------------|\n| `sensor.[nombre]_contract_number` | Sensor | Número de contrato (referencia) |\n| `sensor.[nombre]_address` | Sensor | Dirección (referencia) |\n| `sensor.[nombre]_state` | Sensor | Estado actual del cargador |\n| `sensor.[nombre]_planned_sessions` | Sensor | Sesiones de carga programadas |\n| `sensor.[nombre]_next_session_start` | Sensor | Inicio próxima sesión |\n| `sensor.[nombre]_last_session_end` | Sensor | Fin última sesión |\n| `sensor.[nombre]_total_hours_today` | Sensor | Total horas programadas hoy |\n| `sensor.[nombre]_last_charge_date` | Sensor | Fecha última carga |\n| `sensor.[nombre]_last_session_duration` | Sensor | Duración última carga |\n| `sensor.[nombre]_last_energy_added` | Sensor | Energía última carga (kWh) |\n| `sensor.[nombre]_last_session_cost` | Sensor | Coste última carga (€) |\n| `switch.[nombre]_carga_rapida` | Switch | Control carga rápida |\n| `number.[nombre]_max_percentage` | Número | Porcentaje máximo de carga |\n| `select.[nombre]_target_time` | Select | Hora objetivo (04:00-11:00) |\n| `button.[nombre]_actualizar_y_verificar_estado` | Botón | Actualizar estado manualmente |\n\n---\n\n## 🎨 Ejemplos Lovelace\n\n### 📊 **Tarjeta de Estado del Cargador**\n\n```yaml\ntype: entities\ntitle: 🚗 Estado Cargador EV\nentities:\n  - entity: sensor.cargador_ev_state\n    name: Estado\n    icon: mdi:ev-station\n  - entity: sensor.cargador_ev_planned_sessions\n    name: Sesiones Programadas\n  - entity: sensor.cargador_ev_next_session_start\n    name: Próxima Sesión\n    format: time\n  - entity: sensor.cargador_ev_total_hours_today\n    name: Horas Programadas Hoy\n  - type: divider\n  - entity: switch.cargador_ev_carga_rapida\n    name: Carga Rápida\n  - entity: number.cargador_ev_max_percentage\n    name: Porcentaje Máximo\n  - entity: select.cargador_ev_target_time\n    name: Hora Objetivo\n```\n\n### 💰 **Tarjeta de Saldos y Facturación**\n\n```yaml\ntype: glance\ntitle: 💰 Saldos Octopus Energy\nentities:\n  - entity: sensor.octopus_electricidad_saldo\n    name: Electricidad\n    icon: mdi:lightning-bolt\n  - entity: sensor.octopus_monedero_solar_saldo\n    name: Solar\n    icon: mdi:solar-power\n  - entity: sensor.ultima_factura_octopus\n    name: Última Factura\n    icon: mdi:receipt\ncolumns: 3\n```\n\n### ⚡ **Tarjeta de Precios en Tiempo Real**\n\n```yaml\ntype: entities\ntitle: ⚡ Precios Electricidad\nentities:\n  - entity: sensor.octopus_precios_tarifa\n    name: Estructura Tarifaria\n    icon: mdi:currency-eur\n  - entity: sensor.octopus_precio_actual\n    name: Precio Actual Normal\n    icon: mdi:flash\n  - entity: sensor.octopus_precio_actual_ev\n    name: Precio Actual EV\n    icon: mdi:car-electric\n  - type: divider\n  - type: custom:template-entity-row\n    entity: sensor.octopus_precio_actual_ev\n    name: Ahorro EV Actual\n    state: \u003e\n      {% set normal = states('sensor.octopus_precio_actual') | float %}\n      {% set ev = states('sensor.octopus_precio_actual_ev') | float %}\n      {% if normal \u003e ev %}\n        -{{ ((normal - ev) * 1000) | round(1) }} cts/kWh\n      {% else %}\n        Sin descuento\n      {% endif %}\n    icon: mdi:piggy-bank\n```\n\n### 📊 **Dashboard de Precios Avanzado**\n\n```yaml\ntype: vertical-stack\ncards:\n  # Precios actuales\n  - type: horizontal-stack\n    cards:\n      - type: gauge\n        entity: sensor.octopus_precio_actual\n        name: Precio Normal\n        min: 0\n        max: 0.3\n        severity:\n          green: 0.1\n          yellow: 0.15\n          red: 0.2\n        needle: true\n      - type: gauge  \n        entity: sensor.octopus_precio_actual_ev\n        name: Precio EV\n        min: 0\n        max: 0.3\n        severity:\n          green: 0.1\n          yellow: 0.15\n          red: 0.2\n        needle: true\n  \n  # Información del periodo actual\n  - type: entities\n    entities:\n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Periodo Actual\n        state: \u003e\n          {% set start = state_attr('sensor.octopus_precio_actual', 'current_period_start') %}\n          {% set end = state_attr('sensor.octopus_precio_actual', 'current_period_end') %}\n          {% if start and end %}\n            {{ as_timestamp(start) | timestamp_custom('%H:%M') }} - {{ as_timestamp(end) | timestamp_custom('%H:%M') }}\n          {% else %}\n            No disponible\n          {% endif %}\n        icon: mdi:clock-outline\n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Descuento EV Activo\n        state: \u003e\n          {% set is_ev = state_attr('sensor.octopus_precio_actual_ev', 'current_period_is_ev_discount') %}\n          {{ 'Sí' if is_ev else 'No' }}\n        icon: \u003e\n          {% set is_ev = state_attr('sensor.octopus_precio_actual_ev', 'current_period_is_ev_discount') %}\n          {{ 'mdi:check-circle' if is_ev else 'mdi:close-circle' }}\n```\n\n### 📈 **Gráfico de Precios con ApexCharts**\n\n```yaml\ntype: custom:apexcharts-card\nheader:\n  title: 💰 Precios Octopus Hoy vs Mañana\n  show: true\nspan:\n  start: day\ngraph_span: 48h\nseries:\n  - entity: sensor.octopus_precio_actual\n    name: Precio Normal\n    type: line\n    color: blue\n    data_generator: |\n      const today = entity.attributes.today || [];\n      const tomorrow = entity.attributes.tomorrow || [];\n      const allPrices = [...today, ...tomorrow];\n      return allPrices.map((entry) =\u003e {\n        return [new Date(entry.start).getTime(), entry.value];\n      });\n  - entity: sensor.octopus_precio_actual_ev\n    name: Precio EV (con descuento)\n    type: line\n    color: red\n    data_generator: |\n      const today = entity.attributes.today || [];\n      const tomorrow = entity.attributes.tomorrow || [];\n      const allPrices = [...today, ...tomorrow];\n      return allPrices.map((entry) =\u003e {\n        return [new Date(entry.start).getTime(), entry.value];\n      });\nyaxis:\n  - title:\n      text: €/kWh\n    min: 0\n    max: 0.25\nannotations:\n  yaxis:\n    - y: 0.068\n      borderColor: green\n      label:\n        text: \"Precio EV (6.8cts)\"\n        style:\n          color: white\n          background: green\n```\n\n### 🎯 **Tarjeta de Ahorro EV Inteligente**\n\n```yaml\ntype: vertical-stack\ncards:\n  - type: horizontal-stack\n    cards:\n      - type: custom:mushroom-entity-card\n        entity: sensor.octopus_precio_actual\n        name: Precio Normal\n        icon: mdi:flash\n        primary_info: state\n        secondary_info: \u003e\n          {% set min_price = state_attr('sensor.octopus_precio_actual', 'today_min_price') %}\n          {% set max_price = state_attr('sensor.octopus_precio_actual', 'today_max_price') %}\n          Min: {{ min_price }}€ | Max: {{ max_price }}€\n      - type: custom:mushroom-entity-card\n        entity: sensor.octopus_precio_actual_ev\n        name: Precio EV\n        icon: mdi:car-electric\n        primary_info: state\n        secondary_info: \u003e\n          {% set discount_periods = state_attr('sensor.octopus_precio_actual_ev', 'today_ev_discount_periods') %}\n          {{ discount_periods }} períodos con descuento\n        \n  - type: entities\n    title: 🔋 Información EV Inteligente\n    entities:\n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Estado Descuento EV\n        state: \u003e\n          {% if state_attr('sensor.octopus_precio_actual_ev', 'current_period_is_ev_discount') %}\n            🟢 ACTIVO ({{ states('sensor.octopus_precio_actual_ev') }}€/kWh)\n          {% else %}\n            ⚪ Inactivo\n          {% endif %}\n        icon: mdi:car-electric\n      \n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Ahorro Instantáneo\n        state: \u003e\n          {% set normal = states('sensor.octopus_precio_actual') | float %}\n          {% set ev = states('sensor.octopus_precio_actual_ev') | float %}\n          {% set savings = (normal - ev) * 1000 %}\n          {% if savings \u003e 0 %}\n            💰 {{ savings | round(1) }} cts/kWh\n          {% else %}\n            Sin ahorro actual\n          {% endif %}\n        icon: mdi:piggy-bank\n      \n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Próximas Cargas Hoy\n        state: \u003e\n          {% set periods = state_attr('sensor.octopus_precio_actual_ev', 'charging_periods') %}\n          {% if periods %}\n            {% for period in periods %}\n              {{ as_timestamp(period.start) | timestamp_custom('%H:%M') }}-{{ as_timestamp(period.end) | timestamp_custom('%H:%M') }}\n              {%- if not loop.last %}, {% endif %}\n            {% endfor %}\n          {% else %}\n            Sin cargas programadas\n          {% endif %}\n        icon: mdi:calendar-clock\n```\n\n### 🚨 **Alerta de Precios Críticos**\n\n```yaml\ntype: conditional\nconditions:\n  - entity: sensor.octopus_precio_actual\n    state_not: \"unavailable\"\ncard:\n  type: vertical-stack\n  cards:\n    # Alerta precio alto\n    - type: conditional\n      conditions:\n        - entity: sensor.octopus_precio_actual\n          numeric_state:\n            above: 0.17\n      card:\n        type: custom:mushroom-entity-card\n        entity: sensor.octopus_precio_actual\n        name: ⚠️ PRECIO ALTO\n        primary_info: state\n        secondary_info: \"Evita consumos innecesarios\"\n        icon: mdi:alert\n        icon_color: red\n        tap_action:\n          action: more-info\n    \n    # Oportunidad precio bajo\n    - type: conditional\n      conditions:\n        - entity: sensor.octopus_precio_actual\n          numeric_state:\n            below: 0.09\n      card:\n        type: custom:mushroom-entity-card\n        entity: sensor.octopus_precio_actual\n        name: 💚 PRECIO MUY BAJO\n        primary_info: state\n        secondary_info: \"¡Momento ideal para cargar!\"\n        icon: mdi:flash\n        icon_color: green\n        tap_action:\n          action: call-service\n          service: octopus_ev_spain.start_boost_charge\n          service_data:\n            device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n    \n    # Descuento EV activo\n    - type: conditional\n      conditions:\n        - entity: sensor.octopus_precio_actual_ev\n          attribute: current_period_is_ev_discount\n          state: true\n      card:\n        type: custom:mushroom-entity-card\n        entity: sensor.octopus_precio_actual_ev\n        name: ⚡ DESCUENTO EV ACTIVO\n        primary_info: state\n        secondary_info: \"Precio especial EV en curso\"\n        icon: mdi:car-electric\n        icon_color: blue\n```\n\n### 🕐 **Planificador de Sesiones**\n\n```yaml\ntype: custom:scheduler-card\ntitle: 📅 Programación Carga EV\nentities:\n  - switch.cargador_ev_carga_rapida\ndiscover_existing: true\ntime_step: 30\nshow_header_toggle: true\n```\n\n### 🎯 **Tarjeta de Control Rápido**\n\n```yaml\ntype: horizontal-stack\ncards:\n  - type: button\n    entity: button.cargador_ev_actualizar_y_verificar_estado\n    name: Actualizar\n    icon: mdi:refresh\n    tap_action:\n      action: call-service\n      service: button.press\n      target:\n        entity_id: button.cargador_ev_actualizar_y_verificar_estado\n  - type: button\n    entity: switch.cargador_ev_carga_rapida\n    name: Boost ON\n    icon: mdi:flash\n    tap_action:\n      action: call-service\n      service: switch.turn_on\n      target:\n        entity_id: switch.cargador_ev_carga_rapida\n  - type: button\n    entity: switch.cargador_ev_carga_rapida\n    name: Boost OFF\n    icon: mdi:flash-off\n    tap_action:\n      action: call-service\n      service: switch.turn_off\n      target:\n        entity_id: switch.cargador_ev_carga_rapida\n```\n\n---\n\n## 🤖 Automatizaciones\n\n### 🔔 **Notificación cuando se conecta el coche**\n\n```yaml\nalias: \"EV: Notificar conexión\"\ntrigger:\n  - platform: state\n    entity_id: sensor.cargador_ev_state\n    to: \"connected\"\naction:\n  - service: notify.mobile_app_tu_telefono\n    data:\n      title: \"🔌 Coche Conectado\"\n      message: \u003e\n        Cargador {{ trigger.to_state.attributes.friendly_name }} \n        conectado. {{ states('sensor.cargador_ev_planned_sessions') }}\n```\n\n### 💰 **Notificación de precio EV barato**\n\n```yaml\nalias: \"Precios: Notificar descuento EV activo\"\ntrigger:\n  - platform: state\n    entity_id: sensor.octopus_precio_actual_ev\n    attribute: current_period_is_ev_discount\n    to: true\ncondition:\n  - condition: numeric_state\n    entity_id: sensor.octopus_precio_actual_ev\n    below: 0.08  # Menor que 8 céntimos\naction:\n  - service: notify.mobile_app_tu_telefono\n    data:\n      title: \"⚡ Precio EV súper barato\"\n      message: \u003e\n        Precio actual EV: {{ states('sensor.octopus_precio_actual_ev') }}€/kWh\n        vs Normal: {{ states('sensor.octopus_precio_actual') }}€/kWh\n        Ahorro: {{ ((states('sensor.octopus_precio_actual')|float - states('sensor.octopus_precio_actual_ev')|float) * 1000)|round(1) }} cts/kWh\n```\n\n### ⚡ **Inicio automático de carga en precio bajo**\n\n```yaml\nalias: \"EV: Carga automática con precio valle\"\ntrigger:\n  - platform: numeric_state\n    entity_id: sensor.octopus_precio_actual\n    below: 0.09  # Precio valle muy barato\n    for:\n      minutes: 5\ncondition:\n  - condition: state\n    entity_id: sensor.cargador_ev_state\n    state: \"connected\"\n  - condition: numeric_state\n    entity_id: sensor.coche_battery_level  # Tu sensor de batería del coche\n    below: 80\n  - condition: time\n    after: \"22:00:00\"\n    before: \"06:00:00\"  # Solo horario valle nocturno\naction:\n  - service: octopus_ev_spain.start_boost_charge\n    data:\n      device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n  - service: notify.persistent_notification\n    data:\n      title: \"🌙 Carga Nocturna Barata\"\n      message: \u003e\n        Precio valle detectado: {{ states('sensor.octopus_precio_actual') }}€/kWh\n        Iniciando carga automática nocturna.\n```\n\n### 🏠 **Gestión energética basada en precios**\n\n```yaml\nalias: \"Casa: Optimización según precios\"\ndescription: \"Ajusta consumo según precios Octopus\"\ntrigger:\n  - platform: state\n    entity_id: sensor.octopus_precio_actual\nvariables:\n  precio_actual: \"{{ states('sensor.octopus_precio_actual') | float }}\"\n  precio_ev: \"{{ states('sensor.octopus_precio_actual_ev') | float }}\"\n  exceso_solar: \"{{ states('sensor.inversor_potencia_exceso') | int }}\"\n  bateria_ev: \"{{ states('sensor.coche_battery_level') | int }}\"\naction:\n  - choose:\n      # Precio muy caro: Solo cargas esenciales\n      - conditions:\n          - \"{{ precio_actual \u003e 0.18 }}\"\n        sequence:\n          - service: switch.turn_off\n            target:\n              entity_id: switch.termo_electrico\n          - service: switch.turn_off\n            target:\n              entity_id: switch.lavavajillas_delayed_start\n          - service: notify.persistent_notification\n            data:\n              title: \"⚠️ Precio Alto\"\n              message: \u003e\n                Precio actual: {{ precio_actual }}€/kWh\n                Desactivando cargas no esenciales.\n      \n      # Precio barato: Aprovechar para cargas extras\n      - conditions:\n          - \"{{ precio_actual \u003c 0.10 }}\"\n          - \"{{ bateria_ev \u003c 90 }}\"\n        sequence:\n          - service: switch.turn_on\n            target:\n              entity_id: switch.termo_electrico\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: notify.persistent_notification\n            data:\n              title: \"💚 Precio Bajo\"\n              message: \u003e\n                Precio valle: {{ precio_actual }}€/kWh\n                Activando cargas aprovechando precio bajo.\n```\n\n### 📊 **Automatización de estadísticas de ahorro**\n\n```yaml\nalias: \"Precios: Calcular ahorro diario EV\"\ntrigger:\n  - platform: time\n    at: \"23:59:00\"  # Final del día\naction:\n  - service: input_number.set_value\n    target:\n      entity_id: input_number.ahorro_ev_hoy\n    data:\n      value: \u003e\n        {% set today_prices = state_attr('sensor.octopus_precio_actual', 'today') %}\n        {% set today_ev_prices = state_attr('sensor.octopus_precio_actual_ev', 'today') %}\n        {% set ahorro_total = 0 %}\n        {% if today_prices and today_ev_prices %}\n          {% for i in range(today_prices|length) %}\n            {% set normal = today_prices[i].value %}\n            {% set ev = today_ev_prices[i].value %}\n            {% set ahorro_total = ahorro_total + (normal - ev) %}\n          {% endfor %}\n          {{ (ahorro_total / today_prices|length * 24) | round(3) }}\n        {% else %}\n          0\n        {% endif %}\n  - service: logbook.log\n    data:\n      name: \"Ahorro EV\"\n      message: \u003e\n        Ahorro medio hoy: {{ states('input_number.ahorro_ev_hoy') }}€/kWh\n        Periodos con descuento: {{ state_attr('sensor.octopus_precio_actual_ev', 'today_ev_discount_periods') }}\n```\n\n---\n\n## ☀️ Integración Solar\n\n### 🔋 **Optimización Carga Solar + EV**\n\nLa integración incluye soporte completo para el **Monedero Solar** de Octopus Energy, permitiendo optimizar la carga de tu EV con energía solar.\n\n#### 📊 **Sensores Solar Disponibles**\n- `sensor.octopus_monedero_solar_saldo` - Saldo del monedero solar (€)\n\n#### ⚡ **Automatización: Carga EV con Exceso Solar**\n\n```yaml\nalias: \"Solar: Cargar EV con exceso solar\"\ndescription: \"Inicia carga cuando hay exceso de producción solar\"\ntrigger:\n  - platform: numeric_state\n    entity_id: sensor.inversor_potencia_exceso  # Tu sensor de exceso solar\n    above: 3000  # 3kW de exceso\n    for:\n      minutes: 5\ncondition:\n  - condition: state\n    entity_id: sensor.cargador_ev_state\n    state: \"connected\"\n  - condition: time\n    after: \"09:00:00\"\n    before: \"17:00:00\"  # Solo durante horas solares\n  - condition: numeric_state\n    entity_id: sensor.coche_battery_level\n    below: 80  # Solo si batería \u003c 80%\naction:\n  - service: octopus_ev_spain.start_boost_charge\n    data:\n      device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n  - service: notify.persistent_notification\n    data:\n      title: \"☀️ Carga Solar Activada\"\n      message: \u003e\n        Exceso solar detectado: {{ states('sensor.inversor_potencia_exceso') }}W.\n        Iniciando carga EV con energía solar.\n```\n\n#### 🛑 **Automatización: Parar carga cuando no hay exceso**\n\n```yaml\nalias: \"Solar: Detener carga sin exceso\"\ntrigger:\n  - platform: numeric_state\n    entity_id: sensor.inversor_potencia_exceso\n    below: 1000  # Menos de 1kW de exceso\n    for:\n      minutes: 10\ncondition:\n  - condition: state\n    entity_id: switch.cargador_ev_carga_rapida\n    state: \"on\"\n  - condition: state\n    entity_id: binary_sensor.carga_solar_activa  # Sensor helper\n    state: \"on\"\naction:\n  - service: octopus_ev_spain.stop_boost_charge\n    data:\n      device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n  - service: input_boolean.turn_off\n    target:\n      entity_id: input_boolean.carga_solar_activa\n  - service: notify.persistent_notification\n    data:\n      title: \"☀️ Carga Solar Pausada\"\n      message: \"Exceso solar insuficiente. Carga EV pausada.\"\n```\n\n#### 📈 **Dashboard Solar + EV**\n\n```yaml\ntype: vertical-stack\ncards:\n  - type: horizontal-stack\n    cards:\n      - type: gauge\n        entity: sensor.inversor_potencia_actual\n        name: Producción Solar\n        min: 0\n        max: 5000\n        severity:\n          green: 2000\n          yellow: 1000\n          red: 0\n      - type: gauge\n        entity: sensor.octopus_monedero_solar_saldo  \n        name: Monedero Solar\n        min: 0\n        max: 100\n        severity:\n          green: 50\n          yellow: 20\n          red: 0\n  \n  - type: entities\n    title: ☀️ Control Carga Solar\n    entities:\n      - entity: sensor.inversor_potencia_exceso\n        name: Exceso Solar\n        icon: mdi:solar-power\n      - entity: input_boolean.carga_solar_activa\n        name: Modo Carga Solar\n        icon: mdi:car-electric\n      - entity: sensor.cargador_ev_state\n        name: Estado Cargador\n      - entity: switch.cargador_ev_carga_rapida\n        name: Carga Activa\n  \n  - type: custom:apexcharts-card\n    header:\n      title: ☀️ Solar vs Carga EV\n      show: true\n    span:\n      start: day\n    graph_span: 24h\n    series:\n      - entity: sensor.inversor_potencia_actual\n        name: Producción Solar\n        type: area\n        color: orange\n      - entity: sensor.cargador_potencia_actual  # Tu sensor de potencia del cargador\n        name: Consumo EV\n        type: line\n        color: blue\n      - entity: sensor.inversor_potencia_exceso\n        name: Exceso Solar\n        type: line\n        color: green\n```\n\n#### 🏠 **Gestión Inteligente Casa + Solar + EV**\n\n```yaml\nalias: \"Casa: Gestión energética inteligente\"\ndescription: \"Optimiza consumo según producción solar y necesidades\"\ntrigger:\n  - platform: state\n    entity_id: sensor.inversor_potencia_exceso\nvariables:\n  exceso: \"{{ states('sensor.inversor_potencia_exceso') | int }}\"\n  bateria_casa: \"{{ states('sensor.bateria_casa_soc') | int }}\"\n  bateria_ev: \"{{ states('sensor.coche_battery_level') | int }}\"\naction:\n  - choose:\n      # Mucho exceso: Cargar EV + Batería casa\n      - conditions:\n          - \"{{ exceso \u003e 4000 }}\"\n          - \"{{ bateria_ev \u003c 90 }}\"\n        sequence:\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: switch.turn_on\n            target:\n              entity_id: switch.bateria_casa_carga_forzada\n      \n      # Exceso medio: Solo EV si batería casa OK\n      - conditions:\n          - \"{{ exceso \u003e 2000 and exceso \u003c= 4000 }}\"\n          - \"{{ bateria_casa \u003e 70 }}\"\n          - \"{{ bateria_ev \u003c 80 }}\"\n        sequence:\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n      \n      # Poco exceso: Solo cargas esenciales\n      - conditions:\n          - \"{{ exceso \u003c 1000 }}\"\n        sequence:\n          - service: octopus_ev_spain.stop_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: switch.turn_off\n            target:\n              entity_id: switch.bateria_casa_carga_forzada\n```\n\n#### 💰 **Sensor: Ahorro Solar EV**\n\n```yaml\n# configuration.yaml\nsensor:\n  - platform: template\n    sensors:\n      ahorro_solar_ev:\n        friendly_name: \"Ahorro Solar EV\"\n        unit_of_measurement: \"€\"\n        device_class: monetary\n        value_template: \u003e\n          {% set energia_solar = states('sensor.energia_solar_a_ev_hoy') | float %}\n          {% set precio_red = states('sensor.precio_luz_actual') | float %}\n          {% set precio_solar = 0.05 %}  # Coste estimado kWh solar\n          {{ ((precio_red - precio_solar) * energia_solar) | round(2) }}\n        attribute_templates:\n          energia_solar_hoy: \"{{ states('sensor.energia_solar_a_ev_hoy') }} kWh\"\n          precio_evitado: \"{{ states('sensor.precio_luz_actual') }}€/kWh\"\n```\n\n#### 📱 **Notificaciones Solar**\n\n```yaml\nalias: \"Solar: Notificar oportunidades carga\"\ntrigger:\n  - platform: numeric_state\n    entity_id: sensor.inversor_potencia_exceso\n    above: 3000\n    for:\n      minutes: 15\ncondition:\n  - condition: state\n    entity_id: sensor.cargador_ev_state\n    state: \"connected\"\n  - condition: state\n    entity_id: switch.cargador_ev_carga_rapida\n    state: \"off\"\naction:\n  - service: notify.mobile_app_tu_telefono\n    data:\n      title: \"☀️ Oportunidad Carga Solar\"\n      message: \u003e\n        Exceso solar: {{ states('sensor.inversor_potencia_exceso') }}W\n        Coche conectado. ¿Iniciar carga gratuita?\n      data:\n        actions:\n          - action: \"start_solar_charge\"\n            title: \"🚗 Cargar Ahora\"\n          - action: \"dismiss\"\n            title: \"❌ Descartar\"\n\n# Automatización para manejar la respuesta\n- alias: \"Solar: Manejar respuesta notificación\"\n  trigger:\n    - platform: event\n      event_type: mobile_app_notification_action\n      event_data:\n        action: \"start_solar_charge\"\n  action:\n    - service: octopus_ev_spain.start_boost_charge\n      data:\n        device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n    - service: input_boolean.turn_on\n      target:\n        entity_id: input_boolean.carga_solar_activa\n```\n\n---\n\n## 🔗 **Ejemplos con Custom Components Avanzados**\n\n### 🔋 **Con Huawei Solar Custom Component**\n\nAsumiendo que ya tienes [Huawei Solar](https://github.com/wlcrs/huawei_solar) instalado:\n\n```yaml\nalias: \"Octopus + Huawei: Control EV inteligente\"\ndescription: \"Usa sensores Huawei Solar para controlar cargador Octopus\"\ntrigger:\n  - platform: state\n    entity_id: sensor.inverter_active_power\n    for:\n      minutes: 3\nvariables:\n  produccion_solar: \"{{ states('sensor.inverter_active_power') | int }}\"\n  consumo_casa: \"{{ states('sensor.power_meter_active_power') | int }}\"\n  bateria_casa_soc: \"{{ states('sensor.battery_state_of_capacity') | int }}\"\n  exceso_solar: \"{{ produccion_solar - consumo_casa }}\"\n  ev_estado: \"{{ states('sensor.cargador_ev_state') }}\"\naction:\n  - choose:\n      # Exceso \u003e 3kW + Batería casa \u003e 70%: Iniciar carga EV\n      - conditions:\n          - \"{{ exceso_solar \u003e 3000 }}\"\n          - \"{{ bateria_casa_soc \u003e 70 }}\"\n          - \"{{ ev_estado == 'connected' }}\"\n        sequence:\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: notify.persistent_notification\n            data:\n              title: \"🔋⚡ Huawei + Octopus\"\n              message: \u003e\n                Iniciando carga EV: {{ exceso_solar }}W exceso\n                Batería casa: {{ bateria_casa_soc }}%\n      \n      # Poco exceso: Parar carga\n      - conditions:\n          - \"{{ exceso_solar \u003c 1000 }}\"\n          - \"{{ is_state('switch.cargador_ev_carga_rapida', 'on') }}\"\n        sequence:\n          - service: octopus_ev_spain.stop_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n```\n\n### 🌤️ **Con Solcast Custom Component**\n\nAsumiendo que ya tienes [Solcast](https://github.com/BJReplay/ha-solcast-solar) instalado:\n\n```yaml\nalias: \"Octopus + Solcast: Planificación predictiva\"\ndescription: \"Ajusta configuración Octopus según previsiones Solcast\"\ntrigger:\n  - platform: time\n    at: \"06:00:00\"\n  - platform: state\n    entity_id: sensor.cargador_ev_state\n    to: \"connected\"\nvariables:\n  prevision_hoy: \"{{ states('sensor.solcast_pv_forecast_forecast_today') | float }}\"\n  prevision_manana: \"{{ states('sensor.solcast_pv_forecast_forecast_tomorrow') | float }}\"\n  mejor_hora_hoy: \"{{ state_attr('sensor.solcast_pv_forecast_peak_w_today', 'period_start') }}\"\n  ev_bateria: \"{{ states('sensor.coche_battery_level') | int }}\"\naction:\n  - choose:\n      # Excelente día solar (\u003e25kWh): Configurar para máximo solar\n      - conditions:\n          - \"{{ prevision_hoy \u003e 25 }}\"\n        sequence:\n          - service: select.select_option\n            target:\n              entity_id: select.cargador_ev_target_time\n            data:\n              option: \"10:30\"  # Hora pico solar\n          - service: number.set_value\n            target:\n              entity_id: number.cargador_ev_max_percentage\n            data:\n              value: 95\n          - service: notify.persistent_notification\n            data:\n              title: \"🌞 Solcast + Octopus\"\n              message: \u003e\n                Excelente día solar: {{ prevision_hoy }}kWh\n                EV configurado para carga solar máxima\n      \n      # Día solar regular (10-25kWh): Configuración mixta\n      - conditions:\n          - \"{{ prevision_hoy \u003e= 10 and prevision_hoy \u003c= 25 }}\"\n        sequence:\n          - service: select.select_option\n            target:\n              entity_id: select.cargador_ev_target_time\n            data:\n              option: \"09:00\"\n          - service: number.set_value\n            target:\n              entity_id: number.cargador_ev_max_percentage\n            data:\n              value: 80\n      \n      # Mal día solar (\u003c10kWh): Carga nocturna\n      - conditions:\n          - \"{{ prevision_hoy \u003c 10 }}\"\n        sequence:\n          - service: select.select_option\n            target:\n              entity_id: select.cargador_ev_target_time\n            data:\n              option: \"06:00\"  # Tarifa valle\n          - service: number.set_value\n            target:\n              entity_id: number.cargador_ev_max_percentage\n            data:\n              value: 70\n```\n\n### 🧠 **Con EMHASS Custom Component - OPTIMIZACIÓN AVANZADA**\n\nAsumiendo que ya tienes [EMHASS](https://github.com/davidusb-geek/emhass) instalado:\n\n```yaml\nalias: \"Octopus + EMHASS: Optimización con precios reales\"\ndescription: \"Usa precios Octopus para alimentar optimización EMHASS\"\ntrigger:\n  - platform: time_pattern\n    minutes: \"/30\"  # Cada 30 minutos (coincide con intervalos de precios)\n  - platform: state\n    entity_id: sensor.octopus_precio_actual_ev\n    attribute: today\nvariables:\n  # Obtener precios horarios de Octopus para EMHASS\n  precios_hoy: \"{{ state_attr('sensor.octopus_precio_actual_ev', 'today') }}\"\n  precios_manana: \"{{ state_attr('sensor.octopus_precio_actual_ev', 'tomorrow') }}\"\n  coche_conectado: \"{{ state_attr('sensor.octopus_precio_actual_ev', 'charger_connected') }}\"\n  precio_actual: \"{{ states('sensor.octopus_precio_actual_ev') | float }}\"\naction:\n  # Configurar EMHASS con precios reales de Octopus\n  - service: rest_command.emhass_post_configuration\n    data:\n      load_cost_forecast: \u003e\n        [{% for precio in precios_hoy -%}\n          {{ precio.value }}{{ ',' if not loop.last }}\n        {%- endfor %}]\n      prod_price_forecast: \u003e\n        [{% for precio in precios_hoy -%}\n          {{ (precio.value * 0.8) | round(3) }}{{ ',' if not loop.last }}\n        {%- endfor %}]\n      \n  # Ejecutar optimización si es necesario\n  - choose:\n      # Precio muy alto: Optimizar para reducir consumo\n      - conditions:\n          - \"{{ precio_actual \u003e 0.15 }}\"\n        sequence:\n          - service: rest_command.emhass_optimization\n            data:\n              def_total_hours: [0, 0, 0, 0]  # No cargar durante precio alto\n          - service: notify.persistent_notification\n            data:\n              title: \"🧠 EMHASS + Octopus\"\n              message: \u003e\n                Precio alto ({{ precio_actual }}€/kWh): Optimización conservadora\n      \n      # Precio bajo + coche conectado: Optimizar para cargar\n      - conditions:\n          - \"{{ precio_actual \u003c 0.10 }}\"\n          - \"{{ coche_conectado }}\"\n        sequence:\n          - service: rest_command.emhass_optimization\n            data:\n              def_total_hours: [3, 0, 0, 0]  # Cargar 3kW durante precio bajo\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: notify.persistent_notification\n            data:\n              title: \"🧠 EMHASS + Octopus\"\n              message: \u003e\n                Precio bajo ({{ precio_actual }}€/kWh): Optimización agresiva + carga EV\n```\n\n### 📈 **Dashboard EMHASS + Octopus integrado**\n\n```yaml\ntype: vertical-stack\ncards:\n  # Precios y optimización\n  - type: horizontal-stack\n    cards:\n      - type: gauge\n        entity: sensor.octopus_precio_actual_ev\n        name: Precio EV Actual\n        min: 0\n        max: 0.25\n        severity:\n          green: 0.08\n          yellow: 0.12\n          red: 0.18\n      - type: gauge\n        entity: sensor.p_deferrable0  # EMHASS\n        name: Recomendación EMHASS\n        min: 0\n        max: 5000\n        unit: W\n  \n  # Estado de integración\n  - type: entities\n    title: 🧠 EMHASS + Octopus Integration\n    entities:\n      - entity: sensor.octopus_precio_actual\n        name: Precio Normal\n      - entity: sensor.octopus_precio_actual_ev\n        name: Precio EV (con descuento)\n      - entity: sensor.p_deferrable0\n        name: EMHASS Recomendación EV\n      - entity: sensor.unit_load_cost\n        name: EMHASS Coste kWh\n      - type: divider\n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Diferencia EMHASS vs Octopus\n        state: \u003e\n          {% set octopus = states('sensor.octopus_precio_actual_ev') | float %}\n          {% set emhass = states('sensor.unit_load_cost') | float %}\n          {{ ((octopus - emhass) * 1000) | round(1) }} cts/kWh\n        icon: mdi:compare-horizontal\n  \n  # Gráfico comparativo\n  - type: custom:apexcharts-card\n    header:\n      title: 📊 Precios: Octopus vs EMHASS\n    span:\n      start: day\n    series:\n      - entity: sensor.octopus_precio_actual_ev\n        name: Octopus Precio EV\n        type: line\n        color: blue\n        data_generator: |\n          return entity.attributes.today.map((entry) =\u003e {\n            return [new Date(entry.start).getTime(), entry.value];\n          });\n      - entity: sensor.unit_load_cost\n        name: EMHASS Coste\n        type: line\n        color: orange\n      - entity: sensor.p_deferrable0\n        name: EMHASS Recomendación (kW)\n        type: column\n        yaxis_id: power\n        color: green\n    yaxis:\n      - id: price\n        title:\n          text: €/kWh\n      - id: power\n        opposite: true\n        title:\n          text: kW\n```\n\n### 🔄 **Automatización: Sincronizar EMHASS con precios Octopus**\n\n```yaml\nalias: \"EMHASS: Sincronizar con precios Octopus automáticamente\"\ndescription: \"Actualiza EMHASS cada vez que Octopus actualiza precios\"\ntrigger:\n  - platform: state\n    entity_id: sensor.octopus_precio_actual_ev\n    attribute: today\n  - platform: time\n    at: \"00:05:00\"  # Diariamente para obtener precios de mañana\naction:\n  - service: rest_command.emhass_dayahead_optim\n    data:\n      load_cost_forecast: \u003e\n        {% set today = state_attr('sensor.octopus_precio_actual_ev', 'today') %}\n        {% set tomorrow = state_attr('sensor.octopus_precio_actual_ev', 'tomorrow') %}\n        {% set all_prices = today + tomorrow %}\n        [{% for precio in all_prices -%}\n          {{ precio.value }}{{ ',' if not loop.last }}\n        {%- endfor %}]\n      prod_price_forecast: \u003e\n        {% set today = state_attr('sensor.octopus_precio_actual_ev', 'today') %}\n        {% set tomorrow = state_attr('sensor.octopus_precio_actual_ev', 'tomorrow') %}\n        {% set all_prices = today + tomorrow %}\n        [{% for precio in all_prices -%}\n          {{ (precio.value * 0.75) | round(3) }}{{ ',' if not loop.last }}\n        {%- endfor %}]\n  - service: logbook.log\n    data:\n      name: \"EMHASS + Octopus\"\n      message: \u003e\n        Precios sincronizados: {{ state_attr('sensor.octopus_precio_actual_ev', 'today_prices_count') }} períodos hoy,\n        {{ state_attr('sensor.octopus_precio_actual_ev', 'tomorrow_prices_count') }} períodos mañana.\n        Descuentos EV: {{ state_attr('sensor.octopus_precio_actual_ev', 'today_ev_discount_periods') }} períodos.\n```\n\n### 🔄 **Combinación: Huawei + Solcast + EMHASS + Octopus + PRECIOS**\n\n```yaml\nalias: \"SUPER: Sistema maestro con precios inteligentes\"\ndescription: \"Combina todos los sistemas + precios Octopus para gestión perfecta\"\ntrigger:\n  - platform: time_pattern\n    minutes: \"/10\"  # Cada 10 minutos\nvariables:\n  # Huawei Solar (tiempo real)\n  produccion_actual: \"{{ states('sensor.inverter_active_power') | int }}\"\n  consumo_casa: \"{{ states('sensor.power_meter_active_power') | int }}\"\n  bateria_casa: \"{{ states('sensor.battery_state_of_capacity') | int }}\"\n  exceso_actual: \"{{ produccion_actual - consumo_casa }}\"\n  \n  # Solcast (previsiones)\n  prevision_siguiente: \"{{ states('sensor.solcast_pv_forecast_power_now') | int }}\"\n  prevision_dia: \"{{ states('sensor.solcast_pv_forecast_forecast_today') | float }}\"\n  \n  # EMHASS (optimización)\n  recomendacion_emhass: \"{{ states('sensor.p_deferrable0') | int }}\"\n  \n  # Octopus Precios (NUEVO - clave para decisiones)\n  precio_actual: \"{{ states('sensor.octopus_precio_actual') | float }}\"\n  precio_ev: \"{{ states('sensor.octopus_precio_actual_ev') | float }}\"\n  descuento_ev_activo: \"{{ state_attr('sensor.octopus_precio_actual_ev', 'current_period_is_ev_discount') }}\"\n  precio_min_hoy: \"{{ state_attr('sensor.octopus_precio_actual', 'today_min_price') | float }}\"\n  \n  # Octopus EV España\n  ev_estado: \"{{ states('sensor.cargador_ev_state') }}\"\n  ev_cargando: \"{{ is_state('switch.cargador_ev_carga_rapida', 'on') }}\"\n  ev_bateria: \"{{ states('sensor.coche_battery_level') | int }}\"\naction:\n  - choose:\n      # PRIORIDAD 1: Exceso solar + precio valle = Carga máxima\n      - conditions:\n          - \"{{ exceso_actual \u003e 3500 }}\"\n          - \"{{ bateria_casa \u003e 80 }}\"\n          - \"{{ precio_actual \u003c= precio_min_hoy + 0.01 }}\"  # Precio muy barato\n          - \"{{ ev_estado == 'connected' }}\"\n          - \"{{ ev_bateria \u003c 95 }}\"\n        sequence:\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: number.set_value\n            target:\n              entity_id: number.cargador_ev_max_percentage\n            data:\n              value: 95\n          - service: logbook.log\n            data:\n              name: \"Sistema Maestro\"\n              message: \u003e\n                🔥 OPTIMAL: Exceso {{ exceso_actual }}W + Precio {{ precio_actual }}€/kWh\n                Batería casa {{ bateria_casa }}% - Carga EV al máximo\n      \n      # PRIORIDAD 2: Descuento EV activo + EMHASS recomienda\n      - conditions:\n          - \"{{ descuento_ev_activo }}\"\n          - \"{{ recomendacion_emhass \u003e 2000 }}\"\n          - \"{{ ev_estado == 'connected' }}\"\n          - \"{{ not ev_cargando }}\"\n        sequence:\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: logbook.log\n            data:\n              name: \"Sistema Maestro\"\n              message: \u003e\n                ⚡ DESCUENTO EV: {{ precio_ev }}€/kWh (vs {{ precio_actual }}€/kWh)\n                EMHASS recomienda: {{ recomendacion_emhass }}W\n      \n      # PRIORIDAD 3: Exceso solar moderado + precio no alto\n      - conditions:\n          - \"{{ exceso_actual \u003e 2000 }}\"\n          - \"{{ bateria_casa \u003e 60 }}\"\n          - \"{{ precio_actual \u003c 0.15 }}\"\n          - \"{{ ev_estado == 'connected' }}\"\n          - \"{{ not ev_cargando }}\"\n        sequence:\n          - service: octopus_ev_spain.start_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: logbook.log\n            data:\n              name: \"Sistema Maestro\"\n              message: \u003e\n                ☀️ SOLAR MODERADO: {{ exceso_actual }}W\n                Precio aceptable: {{ precio_actual }}€/kWh\n      \n      # PRIORIDAD 4: Precio muy alto - Parar todo lo no esencial\n      - conditions:\n          - \"{{ precio_actual \u003e 0.18 }}\"\n          - \"{{ exceso_actual \u003c 1000 }}\"\n        sequence:\n          - service: octopus_ev_spain.stop_boost_charge\n            data:\n              device_id: \"{{ state_attr('sensor.cargador_ev_state', 'device_id') }}\"\n          - service: switch.turn_off\n            target:\n              entity_id: switch.bateria_casa_carga_forzada\n          - service: logbook.log\n            data:\n              name: \"Sistema Maestro\"\n              message: \u003e\n                ⚠️ PRECIO ALTO: {{ precio_actual }}€/kWh\n                Exceso mínimo: {{ exceso_actual }}W - Conservando energía\n      \n      # PRIORIDAD 5: Prevision solar buena + precio valle próximo\n      - conditions:\n          - \"{{ prevision_siguiente \u003e 3000 }}\"\n          - \"{{ precio_actual \u003e precio_min_hoy + 0.05 }}\"  # No es el precio más barato\n          - \"{{ ev_bateria \u003c 70 }}\"\n        sequence:\n          # Esperar a mejor momento - no hacer nada por ahora\n          - service: logbook.log\n            data:\n              name: \"Sistema Maestro\"  \n              message: \u003e\n                ⏳ ESPERANDO: Previsión solar {{ prevision_siguiente }}W\n                Precio actual {{ precio_actual }}€/kWh vs mín {{ precio_min_hoy }}€/kWh\n```\n\n### 📊 **Dashboard Integrado Completo con Precios**\n\n```yaml\ntype: vertical-stack\ncards:\n  # Estado de todos los sistemas + precios\n  - type: horizontal-stack\n    cards:\n      - type: entity\n        entity: sensor.inverter_device_status\n        name: 🔋 Huawei\n      - type: entity\n        entity: sensor.solcast_pv_forecast_forecast_today\n        name: 🌤️ Solcast\n      - type: entity\n        entity: sensor.p_deferrable0\n        name: 🧠 EMHASS\n      - type: entity\n        entity: sensor.octopus_precio_actual_ev\n        name: 💰 Octopus\n      - type: entity\n        entity: sensor.cargador_ev_state\n        name: 🚗 EV\n\n  # Métricas principales con precios\n  - type: horizontal-stack\n    cards:\n      - type: gauge\n        entity: sensor.inverter_active_power\n        name: Solar Actual\n        min: 0\n        max: 10000\n      - type: gauge\n        entity: sensor.octopus_precio_actual\n        name: Precio Normal\n        min: 0\n        max: 0.25\n        severity:\n          green: 0.08\n          yellow: 0.15\n          red: 0.20\n      - type: gauge\n        entity: sensor.octopus_precio_actual_ev\n        name: Precio EV\n        min: 0\n        max: 0.25\n        severity:\n          green: 0.068\n          yellow: 0.10\n          red: 0.15\n\n  # Información de decisiones inteligentes\n  - type: entities\n    title: 🧠 Decisiones del Sistema Maestro\n    entities:\n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Situación Energética\n        state: \u003e\n          {% set exceso = states('sensor.inverter_active_power')|int - states('sensor.power_meter_active_power')|int %}\n          {% set precio = states('sensor.octopus_precio_actual')|float %}\n          {% if exceso \u003e 3000 and precio \u003c 0.10 %}\n            🔥 ÓPTIMA - Solar + Precio bajo\n          {% elif exceso \u003e 2000 %}\n            ☀️ BUENA - Exceso solar moderado\n          {% elif precio \u003c 0.08 %}\n            💰 BUENA - Precio muy barato\n          {% elif precio \u003e 0.18 %}\n            ⚠️ CARA - Precio alto\n          {% else %}\n            ⚡ NORMAL - Condiciones estándar\n          {% endif %}\n        icon: \u003e\n          {% set exceso = states('sensor.inverter_active_power')|int - states('sensor.power_meter_active_power')|int %}\n          {% set precio = states('sensor.octopus_precio_actual')|float %}\n          {% if exceso \u003e 3000 and precio \u003c 0.10 %}\n            mdi:fire\n          {% elif precio \u003e 0.18 %}\n            mdi:alert\n          {% else %}\n            mdi:flash\n          {% endif %}\n      \n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Recomendación IA\n        state: \u003e\n          {% set exceso = states('sensor.inverter_active_power')|int - states('sensor.power_meter_active_power')|int %}\n          {% set precio = states('sensor.octopus_precio_actual')|float %}\n          {% set ev_conectado = is_state('sensor.cargador_ev_state', 'connected') %}\n          {% set descuento_ev = state_attr('sensor.octopus_precio_actual_ev', 'current_period_is_ev_discount') %}\n          \n          {% if exceso \u003e 3000 and precio \u003c 0.10 and ev_conectado %}\n            Cargar EV al máximo\n          {% elif descuento_ev and ev_conectado %}\n            Aprovechar descuento EV\n          {% elif precio \u003e 0.18 %}\n            Conservar energía\n          {% elif precio \u003c 0.08 %}\n            Cargar todo lo posible\n          {% else %}\n            Modo estándar\n          {% endif %}\n        icon: mdi:brain\n      \n      - type: custom:template-entity-row\n        entity: sensor.octopus_precio_actual_ev\n        name: Ahorro Potencial Hoy\n        state: \u003e\n          {% set normal_avg = state_attr('sensor.octopus_precio_actual', 'today_avg_price') %}\n          {% set ev_avg = state_attr('sensor.octopus_precio_actual_ev', 'today_avg_price') %}\n          {% if normal_avg and ev_avg %}\n            {{ ((normal_avg - ev_avg) * 1000) | round(1) }} cts/kWh\n          {% else %}\n            Calculando...\n          {% endif %}\n        icon: mdi:piggy-bank\n\n  # Gráfico integrado con precios\n  - type: custom:apexcharts-card\n    header:\n      title: ⚡ SISTEMA COMPLETO + PRECIOS\n    span:\n      start: day\n    series:\n      - entity: sensor.inverter_active_power\n        name: Solar (Huawei)\n        type: area\n        color: orange\n        unit: W\n      - entity: sensor.solcast_pv_forecast_power_now\n        name: Previsión (Solcast)\n        type: line\n        color: yellow\n        unit: W\n      - entity: sensor.p_deferrable0\n        name: Óptimo (EMHASS)\n        type: column\n        color: green\n        unit: W\n      - entity: sensor.octopus_precio_actual\n        name: Precio Normal (Octopus)\n        type: line\n        color: blue\n        yaxis_id: price\n        unit: €/kWh\n        data_generator: |\n          return entity.attributes.today.map((entry) =\u003e {\n            return [new Date(entry.start).getTime(), entry.value];\n          });\n      - entity: sensor.octopus_precio_actual_ev\n        name: Precio EV (Octopus)\n        type: line\n        color: red\n        yaxis_id: price\n        unit: €/kWh\n        data_generator: |\n          return entity.attributes.today.map((entry) =\u003e {\n            return [new Date(entry.start).getTime(), entry.value];\n          });\n    yaxis:\n      - id: power\n        title:\n          text: W\n      - id: price\n        opposite: true\n        title:\n          text: €/kWh\n        min: 0\n        max: 0.25\n```\n\n### 🎯 **Ventajas de la Integración Completa:**\n\n- ✅ **Datos reales** (Huawei) + **Previsiones** (Solcast) + **Optimización** (EMHASS) + **Precios reales** (Octopus)\n- ✅ **Control directo** del cargador Octopus EV Spain\n- ✅ **Lógica de prioridades** inteligente basada en precios y producción solar\n- ✅ **Dashboard unificado** de todos los sistemas con precios en tiempo real\n- ✅ **Automatización sin intervención** manual usando precios Octopus\n- ✅ **Máximo ahorro** energético con descuentos EV automáticos\n\n¡Tu custom component de Octopus EV Spain se convierte en el cerebro ejecutor de todo el sistema, ahora con **información de precios en tiempo real**! 🧠⚡💰\n\n---\n\n## 💰 **¿Por qué los Sensores de Precios son Revolucionarios?**\n\n### 🎯 **Para EMHASS:**\n- **Precios horarios reales** directos de Octopus → EMHASS optimiza con datos 100% precisos\n- **Descuentos EV automáticos** → EMHASS recibe precios EV reales (0.068€/kWh vs normales)\n- **Sincronización perfecta** → Cuando Octopus actualiza precios, EMHASS se reconfigura automáticamente\n\n### 🏠 **Para Casa Inteligente:**\n- **Decisiones energéticas automáticas** basadas en precios reales\n- **Activación de cargas** cuando precio \u003c 0.09€/kWh\n- **Pausa de consumos** cuando precio \u003e 0.18€/kWh\n- **Aprovechamiento de descuentos EV** para cargas domésticas\n\n### ⚡ **Para Optimización Solar:**\n- **Combina exceso solar + precios** → Decisión perfecta de cuándo cargar\n- **Evita venta a red en precio alto** → Mejor cargar EV con descuento\n- **Maximiza autoconsumo** en períodos de precio valle\n\n### 📊 **Para Monitorización:**\n- **Ahorro real calculado** → Ves exactamente cuánto ahorras con EV\n- **Predicciones** → Sabes cuándo habrá precios bajos mañana\n- **Estadísticas** → Períodos más económicos, ahorro mensual, etc.\n\n### 🤖 **Ejemplos de Valor Real:**\n\n```yaml\n# Automatización: Usar datos de precios para EMHASS\n- Si precio_actual \u003c precio_min_hoy + 0.02€ → EMHASS agresivo\n- Si descuento_ev_activo → Forzar carga EV independiente de exceso solar  \n- Si precio \u003e 0.18€/kWh → EMHASS conservador, solo cargas esenciales\n```\n\n**Resultado**: Sistema energético que **toma decisiones inteligentes** usando precios reales de tu comercializadora, no estimaciones. ¡La integración perfecta entre hardware, software y mercado eléctrico! 🎯\n\n---\n\n## 🔧 Servicios Disponibles\n\n### `octopus_ev_spain.start_boost_charge`\n**Inicia carga rápida**\n```yaml\nservice: octopus_ev_spain.start_boost_charge\ndata:\n  device_id: \"tu_device_id\"\n```\n\n### `octopus_ev_spain.stop_boost_charge`\n**Detiene carga rápida**\n```yaml\nservice: octopus_ev_spain.stop_boost_charge\ndata:\n  device_id: \"tu_device_id\"\n```\n\n### `octopus_ev_spain.refresh_charger`\n**Actualiza datos del cargador**\n```yaml\nservice: octopus_ev_spain.refresh_charger\n```\n\n### `octopus_ev_spain.check_charger`\n**Verifica estado y notifica cambios**\n```yaml\nservice: octopus_ev_spain.check_charger\ndata:\n  notify: true\n```\n\n### `octopus_ev_spain.set_preferences`\n**Configura preferencias de carga**\n```yaml\nservice: octopus_ev_spain.set_preferences\ndata:\n  device_id: \"tu_device_id\"\n  max_percentage: 85\n  target_time: \"08:30\"\n```\n\n---\n\n## 🔗 Integración con Otras Plataformas\n\n### 💡 **Node-RED**\n```json\n{\n  \"id\": \"ev_monitor\",\n  \"type\": \"ha-entity\",\n  \"name\": \"Monitor EV\",\n  \"server\": \"home_assistant\",\n  \"entity_id\": \"sensor.cargador_ev_state\",\n  \"property\": \"state\",\n  \"output_properties\": [\n    {\n      \"property\": \"payload\",\n      \"propertyType\": \"msg\",\n      \"value\": \"\",\n      \"valueType\": \"entityState\"\n    }\n  ]\n}\n```\n\n### 📊 **Grafana Dashboard**\n```json\n{\n  \"dashboard\": {\n    \"title\": \"Octopus Energy EV\",\n    \"panels\": [\n      {\n        \"title\": \"Consumo EV\",\n        \"type\": \"stat\",\n        \"targets\": [\n          {\n            \"entity\": \"sensor.cargador_ev_last_energy_added\",\n            \"format\": \"time_series\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### 🎮 **Control por Voz (Alexa/Google)**\n```yaml\n# configuration.yaml\nalexa:\n  smart_home:\n    filter:\n      include_entities:\n        - switch.cargador_ev_carga_rapida\n        - sensor.cargador_ev_state\n```\n\n### 💰 **Integración con Tarifas**\n```yaml\n# Sensor personalizado para coste en tiempo real\nsensor:\n  - platform: template\n    sensors:\n      coste_carga_actual:\n        friendly_name: \"Coste Carga Actual\"\n        unit_of_measurement: \"€/kWh\"\n        value_template: \u003e\n          {% if is_state('sensor.cargador_ev_state', 'boost_charging') %}\n            {{ states('sensor.precio_luz_actual') }}\n          {% else %}\n            {{ states('sensor.precio_luz_valle') }}\n          {% endif %}\n```\n\n---\n\n## 🐛 Resolución de Problemas\n\n### ❌ **Error de Autenticación**\n```\nConfigEntryAuthFailed: Authentication failed\n```\n**Solución**: Verifica email y contraseña. Si persiste, prueba a cambiar la contraseña en Octopus Energy.\n\n### 🔄 **Datos no se actualizan**\n**Solución**: \n1. Usa el botón \"Actualizar Estado\" del cargador\n2. Ejecuta el servicio `octopus_ev_spain.refresh_charger`\n3. Verifica conectividad a internet\n\n### 🚗 **Cargador no aparece**\n**Solución**: \n- Asegúrate de tener la tarifa Octopus Intelligent GO\n- El cargador debe estar registrado en tu cuenta Octopus\n\n### 📊 **Sensores muestran \"unknown\"**\n**Solución**:\n- Espera unos minutos tras la configuración inicial\n- Algunos sensores requieren datos históricos (hasta 24h)\n\n---\n\n## 🤝 Contribuir\n\n¿Encontraste un bug? ¿Tienes una idea? ¡Contribuye al proyecto!\n\n1. **Fork** el repositorio\n2. **Crea** una rama para tu feature\n3. **Commit** tus cambios\n4. **Push** a la rama\n5. **Abre** un Pull Request\n\n### 📝 **Reportar Issues**\n[Abrir issue en GitHub](https://github.com/lockevod/ha-octopus-ev-spain/issues)\n\n---\n\n## 📜 Licencia\n\nEste proyecto está bajo la licencia **MIT**. Ver [LICENSE](LICENSE) para más detalles.\n\n---\n\n## ⚠️ Disclaimer\n\nEsta integración **NO ES OFICIAL** de Octopus Energy España. Es un proyecto comunitario desarrollado de forma independiente.\n\n**El uso de esta integración es bajo tu propia responsabilidad**. Los desarrolladores no se hacen responsables de:\n- Errores en el código o funcionamiento\n- Interacciones no deseadas con la API de Octopus\n- Consumos mayores de lo previsto\n- Cualquier problema derivado del uso de la integración\n\nSi no estás de acuerdo con estos términos, **no uses la integración**.\n\n---\n\n## 🙏 Agradecimientos\n\n- **Basado en la idea original** de [MiguelAngelLV/ha-octopus-spain](https://github.com/MiguelAngelLV/ha-octopus-spain)\n- **Comunidad Home Assistant España** por el feedback y testing\n- **Octopus Energy** por su API (no oficial)\n\n---\n\n## 🔗 Enlaces Útiles\n\n- 🏠 [Home Assistant](https://www.home-assistant.io/)\n- 🛠️ [HACS](https://hacs.xyz/)\n- ⚡ [Octopus Energy España](https://octopusenergy.es/)\n- 📘 [Documentación Home Assistant](https://www.home-assistant.io/integrations/)\n\n---\n\n**¿Te gusta la integración?** ⭐ ¡Dale una estrella al repo!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flockevod%2Foctopus_ev_spain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flockevod%2Foctopus_ev_spain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flockevod%2Foctopus_ev_spain/lists"}