[
  {
    "path": "README.md",
    "content": "# Plassonade's Dashboard\n\nThe father of Ambient Intelligence (AmI), Mark Weiser, said:\n> The most profound technologies are those that disappear. \n> They weave themselves into the fabric of everyday life until they are indistinguishable from it.\n\nThe intention behind creating this dashboard is to display only the necessary information (not raw data) in a concise and comprehensive manner to the end user of the Smart Home.\n\nIn an ideal Smart Home, dashboards wouldn't be needed. However, there are times when you still need to pick up your phone to adjust a few things. So, let's make a cool dashboard!\n\n\n🚧 This is a work in progress, I will update this repository regularly as the dashboard changes 🚧\n\n## Disclaimer\n\nThis dashboard's code is provided as-is. It is up to you to modify the entities' names (sensors and devices) to make it work.\n\n## Requirements\n- [HACS] (not forcefully needed but it's gonna help you install most of the following requirements automatically)\n- [Mushroom cards]\n- [Stack in cards]\n- [Simple thermostat]\n- [Mini graph card]\n- [Card Mod]\n\n[HACS]: <https://hacs.xyz/>\n[Mushroom cards]: <https://github.com/piitaya/lovelace-mushroom>\n[Stack in cards]: <https://github.com/custom-cards/stack-in-card>\n[Simple thermostat]: <https://github.com/nervetattoo/simple-thermostat>\n[Mini graph card]: <https://github.com/kalkih/mini-graph-card>\n[Card  Mod]: <https://github.com/thomasloven/lovelace-card-mod>\n\n## Want to replicate my setup?\n\nYou can find my Smart Home setup [by following this link].\n\n[by following this link]: <https://linktr.ee/plassonade>\n\nIf you order from here, it won't cost you anything more but I will receive a small commission from your purchases. Thanks for your support!\n\n## Room card\n\n![Room card](room_card/room_card.jpg)\n\nThe intention was to have a functional and minimal card to check the status of each room at a glance.\nIt is also a shortcut to a more detailed view (dashboard) for each room, which is perfect for a small screen (smartphone) display.\nI've designed a small card, that I duplicated for each room, and all put together in a grid component.\n\nEach card displays:\n- The light state of the room (if any light is on, the room logo will be lit up to the color of the lights);\n- The temperature of the specific room;\n- If presence is detected or not in that room.\n\nControls:\n- By clicking on the room you can turn on/off the lights inside it;\n- Clicking on the arrow will redirect you to the approriate dashboard.\n\nTo make this work, you just need to replace the entities for each of your rooms and copy/paste the card in the grid if you have more rooms to manage.\nAlso, you need to create a dashboard for each room that you will navigate to when tapping on the arrow.\n\n### Adding radiator glow animation\n\n![Radiator glow](room_card/radiator_glow.gif)\n\nYou can create a radiator (or even A/C) glow to the room card by just adding a conditional animation.\nThe additional code needs to be at the root of each room card (stack-in-card), under the `card_mod` style, like this:\n```\n...\n    card_mod:\n      style: |\n        ha-card {\n          border: none;\n\n          /* Add your thermostat entity like below with your desired condition */\n          {% if state_attr('climate.better_thermostat', 'hvac_action') == 'heating' %}\n          animation: breathing-shadow 1.5s infinite alternate ease-in-out;\n          {% else %}\n          animation: none;\n          {% endif %}\n        }\n        /* Breathing/glow animation */\n        /* Feel free to change the color and intensity to your liking */\n        @keyframes breathing-shadow {\n          0% {\n            box-shadow: 0px 0px 10px 1px #FF8C00;\n          }\n          100% {\n            box-shadow: 0px 0px 13px 3px #FF8C00;\n          }\n        }\n    cards:\n      - type: custom:mushroom-template-card\n        primary: Living Room\n...\n```\nReplace the thermostat name with yours, but you can definitively use something else (like a switch for example) if you don't have a thermostat entity.\n\nBy the way, I highly suggest you to use the [Better Thermostat] integration to have your radiators and A/C fully automatized, [here is a video I made about it].\n\n[Better Thermostat]: <https://github.com/KartoffelToby/better_thermostat>\n[here is a video I made about it]: <https://www.instagram.com/plassonade/reel/DDQCu4EAaN7/>\n\n## Climate control and Weather card\n\n![Climate control and Weather card](climate_card/climate_card.png)\n\nThe goal was to concatenate a few things into a single card:\n- Air conditioning control and status (on/off/heat/cold/dry/temperature);\n- Air conditioning presets (none/eco/boost);\n- Inside temperature vs. outside temperature;\n- Local weather: temperature and conditions;\n- Possibility to turn on/off an automation*\n\n*This automation allows me to turn on and off the A/C if presence is detected, and automatically adjust the temperature depending on how far residents are from the A/C.\n\n## Media control\n\nWork in progress...\n\n## Lights control\n\nWork in progress...\n\n## Tech stats, server metrics\n\nWork in progress...\n\n## Residents status and location\n\nWork in progress...\n\n\n## Shades, Roller shutters control\n\nWork in progress...\n\n\n\n\n## Need help?\n\nFeel free to ask your questions on our Discord community, The Smart Playground.\n[You can join it for free here].\n\n[You can join it for free here]: <https://plassonade.com/links>\n"
  },
  {
    "path": "climate_card/climate_card.yaml",
    "content": "type: custom:stack-in-card\nkeep:\n  margin: false\n  box_shadow: false\n  background: false\nstyle: |\n  ha-card-border-width: 0\n  ha-card {\n    border: none\n  }\ncards:\n  - type: grid\n    square: false\n    columns: 2\n    cards:\n      - type: custom:mushroom-template-card\n        style: |\n          ha-card {\n            padding-bottom: 1px !important;\n            border: none\n          }\n        primary: Daikin\n        secondary: |\n          Currently: {{ state_attr('climate.daikinap83672', 'hvac_action') }}\n        icon: |-\n          {% set mode = states('climate.daikinap83672') %}\n          {% if mode == 'off' %}\n          mdi:power\n          {% elif mode == 'cool' %}\n          mdi:snowflake\n          {% elif mode == 'heat' %}\n          mdi:fire\n          {% elif mode == 'heat_cool' %}\n          mdi:autorenew\n          {% else %}\n          mdi:home-thermometer\n          {% endif %}\n        icon_color: |-\n          {% set status = state_attr('climate.daikinap83672','hvac_action') %}\n          {% if status == 'off' %}\n          grey\n          {% elif status == 'cooling' %}\n          blue\n          {% elif status == 'heating' %}\n          red\n          {% else %}\n          grey\n          {% endif %}\n        tap_action: none\n      - type: vertical-stack\n        cards:\n          - type: custom:simple-thermostat\n            style: |\n              ha-card {\n                --st-spacing: 0px;\n                border: none\n              }\n              #ha-card .current--value {\n              #  color: #ffffff;\n              #}\n              header {\n                margin-bottom: 12px !important;\n                padding-bottom: 0px !important;\n              }\n              ha-card .thermostat-trigger { \n                color: #9e9e9e;\n              }\n            entity: climate.daikinap83672\n            header:\n              name: false\n              icon: false\n            decimals: '0'\n            fallback: 'Off'\n            hide:\n              temperature: true\n              state: true\n            layout:\n              mode:\n                names: false\n                icons: false\n                headings: false\n              step: row\n            step_size: '1'\n            control:\n              hvac:\n                'off': false\n                heat: false\n                cool: false\n                heat_cool: false\n                dry: false\n                fan_only: false\n  - type: custom:mushroom-chips-card\n    style: |\n      ha-card {\n        --chip-box-shadow: none;\n        --chip-background: none;\n        border: none;\n      }\n    alignment: justify\n    chips:\n      - type: template\n        entity: climate.daikinap83672\n        content: |\n          {{ state_attr(entity, 'fan_mode') }}\n        icon: mdi:fan\n        icon_color: green\n        tap_action: none\n        style: |\n          ha-card {\n            border: none\n          }\n      - type: entity\n        entity: automation.nexus_a_c_temperature_management\n        tap_action:\n          action: call-service\n          service: automation.toggle\n          target:\n            entity_id: automation.nexus_a_c_temperature_management\n        hold_action:\n          action: more-info\n        icon_color: primary\n        style: |\n          ha-card {\n            border: none;\n            --chip-height: 33px\n          }\n      - type: weather\n        entity: weather.ajaccio\n        show_conditions: true\n        show_temperature: true\n        style: |\n          ha-card {\n            border: none\n          }\n      - type: template\n        double_tap_action:\n          action: none\n        content: '{{ states(entity) }}% Humidity'\n        entity: sensor.pure_cool_link_humidity\n        icon: mdi:water\n        icon_color: blue\n        tap_action:\n          action: none\n        hold_action:\n          action: none\n        style: |\n          ha-card {\n            border: none\n          }\n  - type: custom:simple-thermostat\n    style: |\n      ha-card {\n        --st-font-size-toggle-label: 6px\n        --st-spacing: 0px;\n        --st-default-spacing: 0px;\n        #--st-mode-background: #262626;\n        margin-left: 12px;\n        margin-right: 12px;\n        border: none\n      }\n      ha-card .mode-item.active.off { \n        #background: #363636;\n        #color: #9e9e9e;\n      }\n      ha-card .mode-item.active.cool { \n        background: #1d3447;\n        color: #2196f3;\n      }\n      ha-card .mode-item.active.heat { \n        background: #472421;\n        color: #f44336;\n      }\n      ha-card .mode-item.active.heat_cool { \n        background: #493516;\n        color: #ff9800;\n      }\n      ha-card .mode-item.active { \n        background: #263926;\n        color: #4caf50;\n      }\n      ha-card .mode-item.active:hover { \n        background: #363636;\n        color: #9e9e9e;\n      }\n      ha-card .mode-item:hover { \n        background: #363636;\n        color: #9e9e9e;\n      }\n      ha-card .mode-item {\n        --st-spacing: 10px;\n        border-radius: 10px;\n      }\n      ha-card .modes {\n        grid-gap: 12px\n      }\n    entity: climate.daikinap83672\n    header: false\n    setpoints: false\n    hide:\n      temperature: true\n      state: true\n    layout:\n      mode:\n        headings: false\n        icons: true\n        names: false\n      step: row\n    control:\n      hvac:\n        'off':\n          name: Power\n        heat:\n          name: Heat\n        cool:\n          name: Cool\n        heat_cool:\n          name: Auto\n  - type: grid\n    square: false\n    columns: 3\n    cards:\n      - type: custom:mushroom-entity-card\n        entity: sensor.daikinap83672_inside_temperature\n        primary_info: state\n        secondary_info: name\n        name: Inside\n        icon_color: green\n        style: |\n          ha-card {\n            border: none\n          }\n      - type: custom:mushroom-entity-card\n        entity: sensor.hue_outdoor_motion_sensor_temperature\n        primary_info: state\n        secondary_info: name\n        name: Outside\n        icon_color: blue\n        style: |\n          ha-card {\n            border: none\n          }\n      - type: custom:simple-thermostat\n        style: |\n          ha-card {\n            --st-font-size-toggle-label: 6px\n            --st-spacing: 0px;\n            --st-default-spacing: 1.3px;\n            --st-mode-background: #262626;\n            margin-right: 12px;\n            border: none;\n          }\n          ha-card .mode-item.active.eco { \n            background: #263926;\n            color: #4caf50;\n          }\n          ha-card .mode-item.active.boost { \n            background: #472421;\n            color: #f44336;\n          }\n          ha-card .mode-item.active.none { \n            background: #1d3447;\n            color: #2196f3;\n          }\n          ha-card .mode-item.active:hover { \n            background: #363636;\n            color: #9e9e9e;\n          }\n          ha-card .mode-item:hover { \n            background: #363636;\n            color: #9e9e9e;\n          }\n          ha-card .mode-item {\n            --st-spacing: 6px;\n            border-radius: 10px;\n          }\n          ha-card .modes {\n            grid-gap: 12px\n          }\n        entity: climate.daikinap83672\n        header: false\n        setpoints: false\n        hide:\n          temperature: true\n          state: true\n        layout:\n          mode:\n            headings: false\n            icons: true\n            names: false\n          step: row\n        control:\n          preset:\n            none:\n              icon: mdi:circle-medium\n            eco:\n              icon: mdi:leaf\n            boost:\n              icon: mdi:rocket-launch\n            away: false\n  - type: custom:mini-graph-card\n    entities:\n      - entity: sensor.daikinap83672_inside_temperature\n        name: Inside Temperature\n        color: '#4caf50'\n      - entity: sensor.hue_outdoor_motion_sensor_temperature\n        name: Outside Temperature\n        color: '#2196f3'\n    hours_to_show: 24\n    line_width: 3\n    font_size: 50\n    animate: true\n    show:\n      name: false\n      icon: false\n      state: false\n      legend: false\n      points: hover\n      fill: fade\n      labels: false\n      labels_secondary: false\n    style: |\n      ha-card {\n        border: none\n      }\n"
  },
  {
    "path": "room_card/room_card.yaml",
    "content": "square: false\ntype: grid\ncards:\n  - type: custom:stack-in-card\n    keep:\n      margin: false\n      box_shadow: false\n      background: false\n    mode: horizontal\n    card_mod:\n      style: |\n        ha-card {\n          border: none;\n          {% if state_attr('climate.better_thermostat', 'hvac_action') == 'heating' %}\n          animation: breathing-shadow 1.5s infinite alternate ease-in-out;\n          {% else %}\n          animation: none;\n          {% endif %}\n        }\n\n        @keyframes breathing-shadow {\n          0% {\n            box-shadow: 0px 0px 10px 1px #FF8C00;\n          }\n          100% {\n            box-shadow: 0px 0px 13px 3px #FF8C00;\n          }\n        }\n    cards:\n      - type: custom:mushroom-template-card\n        primary: Living Room\n        secondary: >\n          🌡️ {{\n          states(\"sensor.living_room_temperature_humidity_sensor_temperature\") }} °C\n          💧 {{ states(\"sensor.living_room_temperature_humidity_sensor_humidity\") }}\n          %        icon: mdi:sofa\n        entity: light.living_room_lights\n        icon_color: '{{ state_attr(entity, \"rgb_color\")}}'\n        badge_icon: |\n          {% if is_state('binary_sensor.aqara_fp2', 'on') %}\n            mdi:motion-sensor\n          {% else %}\n            mdi:none\n          {% endif %}\n        badge_color: |\n          {% if is_state('binary_sensor.aqara_fp2', 'on') %}\n            green\n          {% else %}\n            mdi:none\n          {% endif %}\n        fill_container: true\n        card_mod:\n          style: |\n            ha-card {\n              border: none;\n              width: 170%\n            }\n      - type: custom:mushroom-chips-card\n        chips:\n          - type: action\n            icon: mdi:arrow-right\n            style: |\n              ha-card {\n                border: none;\n              }\n        alignment: end\n        card_mod:\n          style: |\n            ha-card {\n              display: flex;\n              align-items: center;\n              justify-content: right;\n              height: 100%;\n              padding-right: 14px;\n              --chip-spacing: 0px;\n              --chip-background: transparent;\n            }\n  - type: custom:stack-in-card\n    keep:\n      margin: false\n      box_shadow: false\n      background: false\n    mode: horizontal\n    card_mod:\n      style: |\n        ha-card {\n          border: none;\n        }\n    cards:\n      - type: custom:mushroom-template-card\n        primary: Bedroom\n        secondary: >\n          🌡️ {{\n          states(\"sensor.living_room_temperature_humidity_sensor_temperature\") }} °C\n          💧 {{ states(\"sensor.living_room_temperature_humidity_sensor_humidity\") }}\n          %\n        icon: mdi:bed\n        entity: light.bedroom_lights\n        icon_color: '{{ state_attr(entity, \"rgb_color\")}}'\n        badge_icon: |\n          {% if is_state('binary_sensor.bedroom_fp2_presence_sensor_1', 'on') %}\n            mdi:motion-sensor\n          {% else %}\n            mdi:none\n          {% endif %}\n        badge_color: |\n          {% if is_state('binary_sensor.bedroom_fp2_presence_sensor_1', 'on') %}\n            green\n          {% else %}\n            mdi:none\n          {% endif %}\n        fill_container: true\n        card_mod:\n          style: |\n            ha-card {\n              border: none;\n              width: 170%\n            }\n      - type: custom:mushroom-chips-card\n        chips:\n          - type: action\n            icon: mdi:arrow-right\n            tap_action:\n              action: navigate\n              navigation_path: /smart-dash/bedroom\n            style: |\n              ha-card {\n                border: none;\n              }\n        alignment: end\n        card_mod:\n          style: |\n            ha-card {\n              display: flex;\n              align-items: center;\n              justify-content: right;\n              height: 100%;\n              padding-right: 14px;\n              --chip-spacing: 0px;\n              --chip-background: transparent;\n            }\n  - type: custom:stack-in-card\n    keep:\n      margin: false\n      box_shadow: false\n      background: false\n    mode: horizontal\n    card_mod:\n      style: |\n        ha-card {\n          border: none;\n        }\n    cards:\n      - type: custom:mushroom-template-card\n        primary: Bathroom\n        secondary: >\n          🌡️ {{\n          states(\"sensor.living_room_temperature_humidity_sensor_temperature\") }} °C\n          💧 {{ states(\"sensor.living_room_temperature_humidity_sensor_humidity\") }}\n          %\n        icon: mdi:shower-head\n        entity: light.bathroom_lights\n        icon_color: '{{state_attr(entity, \"rgb_color\")}}'\n        badge_icon: |\n          {% if is_state('binary_sensor.0x048727fffeb6bb7e_occupancy', 'on') %}\n            mdi:motion-sensor\n          {% else %}\n            mdi:none\n          {% endif %}\n        badge_color: |\n          {% if is_state('binary_sensor.0x048727fffeb6bb7e_occupancy', 'on') %}\n            green\n          {% else %}\n            mdi:none\n          {% endif %}\n        fill_container: true\n        card_mod:\n          style: |\n            ha-card {\n              border: none;\n              width: 170%\n            }\n      - type: custom:mushroom-chips-card\n        chips:\n          - type: action\n            icon: mdi:arrow-right\n            style: |\n              ha-card {\n                border: none;\n              }\n        alignment: end\n        card_mod:\n          style: |\n            ha-card {\n              display: flex;\n              align-items: center;\n              justify-content: right;\n              height: 100%;\n              padding-right: 14px;\n              --chip-spacing: 0px;\n              --chip-background: transparent;\n            }\n  - type: custom:stack-in-card\n    keep:\n      margin: false\n      box_shadow: false\n      background: false\n    mode: horizontal\n    card_mod:\n      style: |\n        ha-card {\n          border: none;\n        }\n    cards:\n      - type: custom:mushroom-template-card\n        primary: Balcony\n        secondary: >\n          🌡️ {{\n          states(\"sensor.living_room_temperature_humidity_sensor_temperature\") }} °C\n          💧 {{ states(\"sensor.living_room_temperature_humidity_sensor_humidity\") }}\n          %\n        icon: mdi:balcony\n        entity: light.balcony_lights\n        icon_color: '{{ state_attr(entity, \"rgb_color\")}}'\n        badge_icon: >\n          {% if is_state('binary_sensor.hue_outdoor_motion_sensor_motion', 'on')\n          %}\n            mdi:motion-sensor\n          {% else %}\n            mdi:none\n          {% endif %}\n        badge_color: >\n          {% if is_state('binary_sensor.hue_outdoor_motion_sensor_motion', 'on')\n          %}\n            green\n          {% else %}\n            mdi:none\n          {% endif %}\n        fill_container: true\n        card_mod:\n          style: |\n            ha-card {\n              border: none;\n              width: 170%\n            }\n      - type: custom:mushroom-chips-card\n        chips:\n          - type: action\n            icon: mdi:arrow-right\n            style: |\n              ha-card {\n                border: none;\n              }\n        alignment: end\n        card_mod:\n          style: |\n            ha-card {\n              display: flex;\n              align-items: center;\n              justify-content: right;\n              height: 100%;\n              padding-right: 14px;\n              --chip-spacing: 0px;\n              --chip-background: transparent;\n            }\ncolumns: 2\n"
  }
]