{"id":13582676,"url":"https://github.com/pkozul/ha-floorplan","last_synced_at":"2025-10-05T16:30:32.457Z","repository":{"id":41247993,"uuid":"91287167","full_name":"pkozul/ha-floorplan","owner":"pkozul","description":"Floorplan for Home Assistant","archived":true,"fork":false,"pushed_at":"2021-01-25T08:15:58.000Z","size":293,"stargazers_count":1702,"open_issues_count":0,"forks_count":228,"subscribers_count":128,"default_branch":"master","last_synced_at":"2024-09-30T19:03:16.472Z","etag":null,"topics":["floorplan","home-assistant","home-assistant-config","home-automation","internet-of-things","iot","javascript","svg"],"latest_commit_sha":null,"homepage":null,"language":"HTML","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/pkozul.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}},"created_at":"2017-05-15T02:28:33.000Z","updated_at":"2024-09-13T20:49:04.000Z","dependencies_parsed_at":"2022-08-10T01:43:18.190Z","dependency_job_id":null,"html_url":"https://github.com/pkozul/ha-floorplan","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkozul%2Fha-floorplan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkozul%2Fha-floorplan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkozul%2Fha-floorplan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkozul%2Fha-floorplan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pkozul","download_url":"https://codeload.github.com/pkozul/ha-floorplan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235418279,"owners_count":18987130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["floorplan","home-assistant","home-assistant-config","home-automation","internet-of-things","iot","javascript","svg"],"created_at":"2024-08-01T15:02:55.835Z","updated_at":"2025-10-05T16:30:26.929Z","avatar_url":"https://github.com/pkozul.png","language":"HTML","funding_links":[],"categories":["HTML","User Interface","Home Automation","Related/useful Services and Software","Dashboards and Monitoring"],"sub_categories":["Third Party Add-ons","Android Things","Floor Plans"],"readme":"\u003ctable align=\"center\"\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003ch1 align=\"center\"\u003e\n⚠️ Please migrate to \u003ca href=\"https://github.com/ExperienceLovelace/ha-floorplan\"\u003e\u003cb\u003eha-floorplan\u003c/b\u003e\u003c/a\u003e ⚠️ \n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\nha-floorplan has been replaced with \u003ca href=\"https://github.com/ExperienceLovelace/ha-floorplan\"\u003e\u003cb\u003eha-floorplan\u003c/b\u003e\u003c/a\u003e.\u003cbr\u003e\u003cbr\u003ePlease check out the new solution, and let us know what you think.\u003cbr\u003e\u003cbr\u003e\n\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n# Floorplan for Home Assistant\n\n![floorplan](https://user-images.githubusercontent.com/2073827/27056482-911f2e14-500b-11e7-90f0-44a344c39f85.png)\n\n## Background\n\nOut of the box, the Home Assistant [front end](https://home-assistant.io/docs/frontend/) provides a great way of viewing and interacting with your entities. This project builds on top of that, allowing you to extend the user interface by adding your own visuals.\n\nWith Floorplan for Home Assistant, you can:\n\n- Integrate with Home Assistant as either a state card or a custom panel\n- Display any number of entities (i.e. binary sensors, lights, cameras, etc.)\n- Style each entity's states using CSS\n- Gradually transition between states using color gradients\n- Display the last triggered binary sensor using CSS\n- Display hover-over text for each entity\n- Call a service or display a popup dialog when an entity is clicked\n\nDespite its title, Floorplan for Home Assistant can be used as a general purpose user interface for just about anything you want to present in a visual way.\n\nThe concept is quite simple. You create an SVG file and simply add shapes/images to represent your Home Assistant entities. As long as the ids match up, your SVG comes to life and displays your entities' states in real time. Your entities also become clickable, so they act as shortcuts to opening the built-in 'more info' popups that are normally displayed by Home Assistant. This means clicking on a camera icon, for example, opens the Home Assistant 'more info' popup that displays the live camera feed. Hovering over the entitiy displays a tooltip showing all the information related to the entity.\n\nAlthough using it as a floorplan is the most common use case, you can go even further and create visuals of real world components. Some examples are:\n\n- An SVG image of a remote control with each button click triggering a service in Home Assistant\n- An SVG image of a Ring doorbell with the sensor and camera mapped to sensors in Home Assistant\n- An SVG image of a Logitech Squeezebox media player with the screen text mapped to the state, current song, etc. in Home Assistant\n\n## Usage\n\nTo get started, copy the following files from this repo to your Home Assistant directory:\n\n```\nwww/custom_ui/floorplan/ha-floorplan.html\nwww/custom_ui/floorplan/floorplan.svg\nwww/custom_ui/floorplan/floorplan.css\nwww/custom_ui/floorplan/lib/jquery-3.2.1.min.js\nwww/custom_ui/floorplan/lib/moment.min.js\nwww/custom_ui/floorplan/lib/svg-pan-zoom.min.js\n```\n\nAlthough a sample floorplan SVG file is included in this repo, you will want to create your own. See the [appendix](#creating-a-floorplan-svg-file) for more information.\n\nYou then have two options for how you want to the floorplan to appear in Home Assistant:\n\n- custom state card\n- custom panel\n\nOf course, you can choose to have it displayed in both places. If you have several floorplans to display (i.e. different levels of a house), that is supported too.\n\n### Option 1: Floorplan custom state card\n\n![image](https://user-images.githubusercontent.com/2073827/27063035-97aa2a6e-5032-11e7-8e8e-79935a19aebf.png)\n\nTo display the floorplan as a custom state card, copy the following file from this repo to your Home Assistant directory:\n\n```\nwww/custom_ui/state-card-floorplan.html\n```\n\nTo allow the above file to be served by Home Assistant, add it to the `frontend` section of your Home Assistant configuration:\n\n```\nfrontend:\n  extra_html_url:\n    - /local/custom_ui/state-card-floorplan.html\n```\n\nSince Home Assistant requires a single entity to be used as the target for a state card, create a virtual entity to represent the overall floorplan. You can choose any type of entity for this, such as the MQTT binary sensor. Add the following to your Home Assistant configuration:\n\n```\nbinary_sensor:\n  - platform: mqtt\n    state_topic: dummy/floorplan/sensor\n    name: Floorplan\n```\n\nThen, add the following to get Home Assistant to display this new virtual entity using the floorplan custom state card:\n\n```\nhomeassistant:\n  customize:    \n    binary_sensor.floorplan:\n      custom_ui_state_card: state-card-floorplan\n      config: !include floorplan.yaml\n```\n\nTo actually display the floorplan custom state card in the front end, add the virtual entity to one of your groups:\n\n```\ngroup:\n  zones:\n    name: Zones\n    entities:\n      - binary_sensor.floorplan\n```\n\nYou can also add a 'last motion' entity to keep track of which binary sensor was triggered last. See the [appendix](#adding-a-last-motion-entity-to-your-floorplan) for more information.\n\n### Option 2: Floorplan custom panel\n\n![image](https://user-images.githubusercontent.com/2073827/27063110-08d3fd82-5033-11e7-85b6-671722608394.png)\n\nTo display the floorplan as a custom panel, copy the following file from this repo to your Home Assistant directory:\n\n```\npanels/floorplan.html\n```\n\nThen, add the following to your Home Assistant configuration:\n\n```\npanel_custom:\n  - name: floorplan\n    sidebar_title: Floorplan\n    sidebar_icon: mdi:home\n    url_path: floorplan\n    config: !include floorplan.yaml\n```\n\n### Configure the floorplan\n\nWhether your floorplan is being displayed as a custom state card or as a custom panel, the same configuration file `floorplan.yaml` is used. This is where you tell Home Assistant which entities you want to display on your floorplan.\n\nThe example `floorplan.yaml` included in this repo shows how to add various entities to your floorplan and style their appearance based on their states.\n\nAt the top of the file, you provide a name for the floorplan, as well as the location of the SVG and CSS files:\n\n```\n      name: Demo Floorplan\n      image: /local/custom_ui/floorplan/floorplan.svg\n      stylesheet: /local/custom_ui/floorplan/floorplan.css\n```\n\nIf you want the floorplan to display any warnings (i.e. SVG file does not contain required elements), add the following:\n\n```\n      warnings:\n```\n\nIf you want to support panning and zooming within your SVG file, add the following:\n\n```\n      pan_zoom:\n```\n\nIf you want to hide the main application toolbar and display the floorplan in true fullscreen mode (when used as a custom panel), add the following:\n\n```\n      hide_app_toolbar:\n```\n\nTo set the date format displayed in the hover-over text, add the following:\n\n```\n      date_format: DD-MMM-YYYY\n```\n\nIf you want to display a 'last motion' entity, you can include that in the next section of the file. You specify the name of the entity, as well as the CSS class used to style its appearance:\n\n```\n      last_motion_entity: sensor.template_last_motion\n      last_motion_class: last-motion\n```\n\nThe remainder of the file is where you add your floorplan groups. These floorplan groups are not to be confused with [Home Assistant entity groups](https://home-assistant.io/components/group) that are used to combine multiple entities into one.\n\n```\n      groups:\n```\n\nYou need to place each of your entities into a floorplan group, since configuration is performed at a floorplan group level. The floorplan groups can be given any name, and have no purpose other than to allow for configuration of multiple items in one place.\n\nIf you've already created some Home Assistant entity groups, you can actually include those groups in two different ways:\n\n- single - the group will be represented as a single entity (`group.pantry_lights` in the example below). These sorts of Home Assistant entity groups get added beneath `entities:`).\n\n- exploded - the group will be exploded into separate entities (`group.living_area_lights` in the example below). These sorts of Home Assistant entity groups get added beneath `groups:`).\n\n```\n        - name: Lights\n          entities:\n             - light.kitchen\n             - group.pantry_lights\n          groups:\n             - group.living_area_lights\n```\n\nIn addition to monitoring your entities in real time, you can also trigger actions when your entities are clicked. Below is an example of such an action. Whenever one of the lights in the group is clicked, an action is triggered that calls the Home Assistant 'toggle' service. See the [appendix](#triggering-actions) for more information.\n\n```\n        - name: Lights\n          entities:\n             - light.kitchen\n             - group.pantry_lights\n          groups:\n             - group.living_area_lights\n          action:\n            service: toggle\n```\n\nBelow are some examples of groups, showing how to configure different types of entities in the floorplan.\n\n#### Sensors\n\nBelow is an example of a 'Sensors' group, showing how to add a temperature sensor (as text) to your floorplan. in the screenshot above, this can be seen as an SVG text element displaying the current temperature (i.e. '9.0°').\n\nThe sensor's state is displayed using a `text_template`. As you can see, it contains some embedded code that determines which actual text to display.\n\nThe sensor's CSS class is determined dynamically using a `class_template`. In the example below, the CSS class is determined based on the actual temperature value.\n\nSee the [appendix](#using-template-literals-in-your-configuration) for more information on how to use template literals in your configuration.\n\n```\n        - name: Sensors\n          entities:\n             - sensor.melbourne_now\n             - group.major_city_temp_sensors\n          text_template: '${entity.state ? entity.state : \"unknown\"}'\n          class_template: '\n            var temp = parseFloat(entity.state.replace(\"°\", \"\"));\n            if (temp \u003c 10)\n              return \"temp-low\";\n            else if (temp \u003c 30)\n              return \"temp-medium\";\n            else\n              return \"temp-high\";\n            '\n```\n\nBelow is an example of using dynamic images which are swapped out at runtime, based on the sensor's current state. In the example below, the `sensor.home_dark_sky_icon` entitiy is mapped to a `\u003crect\u003e` in the SVG file with the same id (which simply acts as a placeholder). Whenever the temperature sensor changes state, the `image_template` is evaluated to determine which SVG image should be emebedded within the bounds of the `\u003crect\u003e`. Also you need to make sure that the placeholder is placed directly within the svg (e.g. not in a layer in inkscape) or else the calculated coordinates will be wrong.\n\n```\n      groups:\n\n        - name: Dark Sky Sensors\n          entities:\n            - sensor.home_dark_sky_icon\n          image_template: '\n            var imageName = \"\";\n\n            switch (entity.state) {\n              case \"clear-day\":\n                imageName = \"day\";\n                break;\n\n              case \"clear-night\":\n                imageName = \"night\";\n                break;\n\n              case \"partly-cloudy-day\":\n                imageName = \"cloudy-day-1\";\n                break;\n\n              case \"partly-cloudy-night\":\n                imageName = \"cloudy-night-1\";\n                break;\n\n              case \"cloudy\":\n                imageName = \"cloudy\";\n                break;\n\n              case \"rain\":\n                imageName = \"rainy-1\";\n                break;\n\n              case \"snow\":\n                imageName = \"snowy-1\";\n                break;\n            }\n\n            return \"/local/custom_ui/floorplan/images/weather/\" + imageName + \".svg\";\n            '\n```\n\n#### Switches\n\nBelow is an example of a 'Switches' group, showing how to add switches to your floorplan. The appearance of each switch is styled using the appropriate CSS class, based on its current state.\n\n```\n        - name: Switches\n          entities:\n             - switch.doorbell\n          states:\n            - state: 'on'\n              class: 'doorbell-on'\n            - state: 'off'\n              class: 'doorbell-off'\n          action:\n            domain: switch\n            service: toggle\n```\n\n#### Lights\n\nBelow is an example of a 'Lights' group, showing how to add lights to your floorplan. The appearance of each light is styled using the appropriate CSS class, based on its current state.\n\n```\n        - name: Lights\n          entities:\n             - light.hallway\n             - light.living_room\n             - light.patio\n          states:\n            - state: 'on'\n              class: 'light-on'\n            - state: 'off'\n              class: 'light-off'\n```\n\n#### Alarm Panel\n\nBelow is an example of an 'Alarm Panel' group, showing how to add an alarm panel (as text) to your floorplan. The appearance of the alarm panel is styled using the appropriate CSS class, based on its current state. In the screenshot above, this can be seen as an SVG text element displaying the current alarm status (i.e. 'disarmed').\n\n```\n       - name: Alarm Panel\n          entities:\n             - alarm_control_panel.alarm\n          states:\n            - state: 'armed_away'\n              class: 'alarm-armed'\n            - state: 'armed_home'\n              class: 'alarm-armed'\n            - state: 'disarmed'\n              class: 'alarm-disarmed'\n```\n\n#### Binary Sensors\n\nBelow is an example of a 'Binary sensors' group, showing how to add binary sensors to your floorplan. The appearance of each binary sensor is styled using the appropriate CSS class, based on its current state. In the screenshot above, these can be seen as SVG paths (i.e. rooms/zones of the house).\n\nThe `state_transitions` section is optional, and allows your binary sensors to visually transition from one state to another, using the fill colors defined in the CSS classes associated with each state. You can specify the duration (in seconds) for the transition from one color to the other.\n\n```\n        - name: Binary Sensors\n          entities:\n            - binary_sensor.front_hallway\n            - binary_sensor.kitchen\n            - binary_sensor.master_bedroom\n            - binary_sensor.theatre_room\n          states:\n            - state: 'off'\n              class: 'info-background'\n            - state: 'on'\n              class: 'warning-background'\n          state_transitions:\n            - name: On to off\n              from_state: 'on'\n              to_state: 'off'\n              duration: 10\n```\n\n#### Cameras\n\nBelow is an example of a 'Cameras' group, showing how to add cameras to your floorplan. The appearance of each camera is styled using the appropriate CSS class, based on its current state. In the screenshot above, these can be seen as camera icons, which were imported from an external SVG image.\n\n        - name: Cameras\n          entities:\n            - camera.hallway\n            - camera.driveway\n            - camera.front_door\n            - camera.backyard\n          states:\n            - state: 'idle'\n              class: 'camera-idle'\n\n#### Media Players\n\nBelow is an example of a 'Media Players' group, showing how to add media players to your floorplan. The appearance of each media player is styled using the appropriate CSS class, based on its current state. In the screenshot above, these can be seen as Logitech Squeezebox icons, which were imported from an external SVG image.\n\n        - name: Media Players\n          entities:\n            - media_player.alfresco\n            - media_player.ensuite\n            - media_player.salon\n          states:\n            - state: 'off'\n              class: 'squeezebox-off'\n            - state: 'idle'\n              class: 'squeezebox-off'\n            - state: 'paused'\n              class: 'squeezebox-off'\n            - state: 'playing'\n              class: 'squeezebox-on'\n\n#### Toggling the visibility of entities\n\nIf you'd like to control the visibility of your entities, you can create a layer in your SVG file (using the `\u003cg\u003e` element) that contains the entities you want show/hide, along with a button (using `\u003crect\u003e`, for example) that is actually used to toggle the visiblity. Below is an example of a button `media_players_button` that toggles the visibility of all media players in the floorplan (i.e. those that are contained within the `media_players_layer` layer). The floorplan toggles between the two CSS classes whenever the button is clicked.\n\n```\n        - name: Media Players\n          elements:\n            - media_players_button\n          action:\n            domain: class\n            service: toggle\n            data:\n              elements:\n                - media_players_layer\n              classes:\n                - layer-visible\n                - layer-hidden\n              default_class: layer-hidden\n```\n\n## Appendix\n\n### Creating a floorplan SVG file\n\n[Inkscape](https://inkscape.org/en/develop/about-svg/) is a free application that lets you create vector images. You can make your floorplan as simple or as detailed as you want. The only requirement is that you create an element (i.e. `rect`, `path`, `text`, etc.) for each entity ( i.e. binary sensor, switch, camera, etc.) you want to display on your floorplan. Each of these elements needs to have its `id` set to the corresponding entity name in Home Assistant.\n\nFor example, below is what the SVG element looks like for a Front Hallway binary sensor. The `id` of the shape is set to the entity name `binary_sensor.front_hallway`. This allows the shape to automatically get hooked up to the right entity when the floorplan is displayed.\n\n```html\n\u003cpath id=\"binary_sensor.front_hallway\" d=\"M650 396 c0 -30 4 -34 31 -40 17 -3 107 -6 200 -6 l169 0 0 40 0 40\n-200 0 -200 0 0 -34z\"/\u003e\n```\n\nIf you need a good source of SVG files for icons or images, you can check out the following resources :\n[Material Design Icons](https://materialdesignicons.com/), [Noun Project](https://thenounproject.com/) and [Flat Icon](http://flaticon.com)\n\n### Adding a last motion entity to your floorplan\n\nAs an optional step, you can create a 'last motion' entity to keep track of which binary sensor was triggered last. To do so, add the following:\n\n```\nsensor:\n  - platform: template\n    sensors:\n      template_last_motion:\n        friendly_name: 'Last Motion'\n        value_template: \u003e\n          {%- set sensors = [states.binary_sensor.theatre_room, states.binary_sensor.back_hallway, states.binary_sensor.front_hallway, states.binary_sensor.kitchen] %}\n          {% for sensor in sensors %}\n            {% if as_timestamp(sensor.last_changed) == as_timestamp(sensors | map(attribute='last_changed') | max) %}\n              {{ sensor.name }}\n            {% endif %}\n          {% endfor %}\n```\n\nTo actually display the 'last motion' entity', add it to one of your groups:\n\n```\ngroup:\n  zones:\n    name: Zones\n    entities:\n      - sensor.template_last_motion\n      - binary_sensor.floorplan\n```\n\n### Using template literals in your configuration\n\nThe settings `text_template`, `class_template`, and `action_template` allow you to inject your own expressions and code using JavaScript [template literals](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals). Within these template literals, you have full access to the entity's state object, which allows you to access other properties such as `last_changed`, `attributes.friendly_name`, etc. The full set of objects available to your template literals is shown below:\n\n- `entity` - the state object for the current entity\n- `entities` - the state objects for all entities\n- `hass` - the [hass object](https://home-assistant.io/developers/development_hass_object/)\n- `config` - the floorplan configuration\n\n```\n        - name: Sensors\n          entities:\n             - sensor.melbourne_now\n          text_template: '${entity.state ? entity.state : \"unknown\"}'\n          class_template: '\n            var temp = parseFloat(entity.state.replace(\"°\", \"\"));\n            if (temp \u003c 10)\n              return \"temp-low\";\n            else if (temp \u003c 30)\n              return \"temp-medium\";\n            else\n              return \"temp-high\";\n            '\n```\n\n### Triggering actions\n\nWithin each group, you can define an `action` that triggers a call to the specified Home Assistant service when an entity is clicked. The `domain` is optional, and defaults to either the domain of the entity being clicked (for regular entities, i.e. 'light'), or to 'homeassistant' (for Home Assistant group entities).\n\nIn its simplest form, an `action` can be used to toggle an enity (or a group of entities, in the case of a Home assistant group).\n\n```\n           action:\n            service: toggle\n```\n\nYou can also explictly set the `domain` if you want to call a service from a particular domain.\n\n```\n          action:\n            domain: homeassistant\n            service: toggle\n```\nThe ability to specify a domain means you can kick off just about any service available in Home Assistant (scripts, automations, notifcations, shell commands, TTS, etc.).\n\n```\n          action:\n            domain: script\n            service: sound_frontdoor_chime\n```\n\nFor services that support additional data, you can include that as well. Below is an example of setting the transition and brightness when switching on a light.\n\n```\n          action:\n            domain: light\n            service: turn_on\n            data:\n              transition: 50\n              brightness: 75\n```\n\nWhen an entity is clicked, it can actually trigger an action on another entity. The example below shows how clicking on a light triggers a different light to be switched on, by supplying the other's light's `entity_id` as part of the action.\n\n```\n          action:\n            domain: light\n            service: turn_on\n            data:\n              entity_id: light.some_other_light\n              transition: 50\n              brightness: 75\n```\n\nFor more flexibility, you can use the `data_template` to dynamically generate data required for your `action`. The example below shows how a JSON object is dynamically created and populated with data. Thanks to template literals, you can inject code to evaluate expressions at runtime. Just for the purposes of illustration, the example shows the use of the JavaScript Math.min() function being used in conjunction with another entity's current state.\n\n ```\n          action:\n            domain: light\n            service: turn_on\n            data_template: '\n              {\n                \"entity_id\": \"light.some_other_light\",\n                \"brightness\": ${Math.min(entities[\"zone.home\"].attributes.radius, 50)}\n              }\n              '\n ```\n\n## Troubleshooting\n\nFirst of all, check the indentation of the floorplan config. All the examples above show the correct level of indentantion, so make sure that's done before proceedeing further.\n\nThe recommended web browser to use is Google Chrome. Pressing F12 displays the Developer Tools. When you press F5 to reload your floorplan page, the Console pane will show any errors that may have occurred. Also check the Network tab to see if any of the scripts failed to load. Ad-blockers have been known to prevent some scripts from loading.\n\nIf you're not seeing latest changes that you've made, try clearing the web browser cache. This can also be done in the Chrome Developer Tools. Select the Network tab, right click and select Clear browser cache.\n\nIf you're not able to access the floorplan in your web browswer at all, it could be that you've been locked out of Home Assistant due to too many failed login attempts. Check the file `ip_bans.yaml` in the root Home Assistant config directory and remove your IP address if it's in there.\n\nIf you encounter any issues with your entities not appearing, or not correctly showing state changes, firstly make sure that `warnings:` is added to your floorplan config. It will report any SVG elements that are missing, misspelt, etc.\n\nIf you're adding your own CSS classes for styling your entities, make sure you escape the dot character in the id, by prefixing it with a backlash:\n\n```\n#light\\.hallway:hover {\n}\n```\n\n## Resources\n\nCheck out Patrik's tutorial on [how to create a custom floorplan SVG](own-floorplan-svg-file-tutorial.md)\n\n## More information\n\nFor discussions and more information, check out the [thread](https://community.home-assistant.io/t/floorplan-for-home-assistant) on the Home Assistant forums.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkozul%2Fha-floorplan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpkozul%2Fha-floorplan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkozul%2Fha-floorplan/lists"}