Massive Migration! #292

This commit is contained in:
root
2018-01-01 19:00:45 -05:00
commit 1baa895f41
241 changed files with 28076 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
# [![Build Status](https://travis-ci.org/CCOSTAN/Home-AssistantConfig.svg?branch=master)](https://travis-ci.org/CCOSTAN/Home-AssistantConfig) Home-Assistant Config by [@ccostan](http://www.twitter.com/ccostan)
[Home Assistant](https://home-assistant.io/) configuration files (YAMLs)
Be sure to :star: my repo so you can keep up to date on the daily progress!
![Screenshot of SmartHome](https://lh3.googleusercontent.com/-vKGF5gdz_VY/WVpP7qjsmjI/AAAAAAADVZ4/sGyiS1PjouUQxrEbWVfot6raxcElv4r-wCHMYCw/s1600/clip_image001%255B4%255D)
This is the first directory you need for a successful Floorplan installation!
#Still have questions on my Config?
Follow me on twitter : [@CCostan](https://twitter.com/ccostan)
You can also vist my [Blog](http://www.vmwareinfo.com/search/label/iot) for all of my [Home Automation Posts](http://www.vmwareinfo.com/search/label/iot).
<a target='_blank' rel='nofollow' href='https://app.codesponsor.io/link/3MkgeKFUVKPNW45Vtwu9Abd4/CCOSTAN/Home-AssistantConfig'>
<img alt='Sponsor' width='888' height='68' src='https://app.codesponsor.io/embed/3MkgeKFUVKPNW45Vtwu9Abd4/CCOSTAN/Home-AssistantConfig.svg' />
</a>

194
www/custom_ui/floorplan/alarm.css Executable file
View File

@@ -0,0 +1,194 @@
SVG shapes */
svg, svg * {
vector-effect: non-scaling-stroke !important;
pointer-events: all !important;
}
/*
/* Hover over */
/* Interior Garage */
#binary_sensor\.mcu1_gpio12.window-opened {
transform: rotate(270deg);
transform-origin: left;
}
/* Back Door */
#binary_sensor\.mcu2_gpio5.window-opened {
transform: rotate(270deg);
transform-origin: right;
}
#binary_sensor\.kitchen_door_opened.window-opened {
transform: rotate(270deg);
transform-origin: right;
}
#sensor\.dark_sky_minutely_summary {
fill: #231F26 !important;
fill-opacity: 1.0;
}
.entity:hover:not(.static-text):not(.static-temp):not(.static-text-date):not:(.static-text-time) {
stroke: #03A9F4 !important;
stroke-width: 1px !important;
stroke-opacity: 1 !important;
}
.warning-background, .warning-text-background {
fill: #fcf8e3 !important;
fill-opacity: 1 !important;
stroke: #faebcc !important;
stroke-width: 1px !important;
}
.static-text
{
fill: #FFFFA6 !important;
font-family : Helvetica !important;
font-weight : bold !important;
font-size : 15px !important;
}
.static-text-date
{
font-family : Helvetica !important;
font-weight : bold !important;
font-size : 16px !important;
fill : #FFFFA6 !important;
}
.static-text-time
{
font-family : Helvetica !important;
font-weight : bold !important;
font-size : 35px !important;
fill: #FFFFA6 !important;
}
.static-temp
{
font-family: Helvetica !important;
font-size: 22px !important;
fill: #FFFFA6 !important;
}
/* Last motion entity */
.last-motion {
stroke: #808080 !important;
stroke-width: 1px !important;
stroke-opacity: 1 !important;
}
/* Presence */
.presence-on {
fill: #BDF271 !important;
}
.presence-off {
fill: #3D3B3F !important;
}
/* Text Home/Away */
.text-home {
fill: #BDF271 !important;
}
.text-away {
fill: #E7376B !important;
}
/* switches */
.switch-on {
fill: orange !important;
}
.switch-on-blue {
fill: blue !important;
}
.switch-off {
fill: #cccccc !important;
}
/* Buttons */
.button-on {
fill: #FFFFA6 !important;
fill-opacity: 0.25;
}
.button-off {
fill: #3D3B3F !important;
fill-opacity: 0.5;
}
/* Nest Protects */
.protect-on {
fill: green !important;
}
.protect-off {
fill: red !important;
}
/* Windows / Doors / Entry Points */
.window-open {
fill: #c60919 !important;
}
.window-closed {
fill: #00FFFF !important;
}
/* Light */
.light-off {
fill: #231F26 !important;
fill-opacity: 1.0;
stroke: black !important;
stroke-width: 1;
stroke-opacity:0.1;
}
.light-off:hover {
transform-origin: center;
transform: scale(2);
}
.outdoor-light-off {
fill: grey !important;
fill-opacity: 1.0;
stroke: black !important;
stroke-width: 1;
stroke-opacity:0.1;
}
.outdoor-light-off:hover {
transform-origin: center;
transform: scale(2);
}
.light-blue-on {
fill: blue !important;
fill-opacity: 1.0;
stroke: #FFFFA6 !important;
stroke-width: 10;
stroke-opacity: 0.25;
}
.light-blue-on:hover {
transform-origin: center;
transform: scale(3);
}
.light-on {
fill: yellow !important;
fill-opacity: 1.0;
stroke: #FFFFA6 !important;
stroke-width: 10;
stroke-opacity: 0.25;
}
.light-on:hover {
transform-origin: center;
transform: scale(3);
}

1040
www/custom_ui/floorplan/alarm.svg Executable file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -0,0 +1,285 @@
name: Alarm Panel
image: /local/custom_ui/floorplan/alarm.svg
stylesheet: /local/custom_ui/floorplan/alarm.css
rules:
- name: input_booleans
entities:
- input_boolean.guest_mode
- input_boolean.good_night
- group.kitchen_lights
- group.living_room_lights
states:
- state: 'on'
class: 'button-on'
- state: 'off'
class: 'button-off'
action:
service: homeassistant.toggle
- name: thermostats_temp
entities:
- climate.downstairs
- climate.upstairs
text_template: '${entity.attributes.current_temperature ? Math.ceil(entity.attributes.current_temperature) + "°": "undefined"}'
class_template: 'return "static-temp";'
- name: temp_darksky
entities:
- sensor.dark_sky_temperature
text_template: '${entity.state ? Math.ceil(entity.state) + "°": "undefined"}'
class_template: 'return "static-temp";'
- name: temp_round
entities:
- sensor.downstairs_thermostat_humidity
- sensor.upstairs_thermostat_humidity
- sensor.dark_sky_humidity
text_template: '${entity.state ? Math.ceil(entity.state) : "undefined"}'
class_template: 'return "static-temp";'
- name: text_states
entities:
- sensor.last_message
text_template: '${entity.state ? entity.state.replace(/\s{3,}/g,"") : "undefined"}'
class_template: 'return "static-text";'
- name: text_font_date
entities:
- sensor.floorplan_date
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text-date";'
- name: text_font_time
entities:
- sensor.floorplan_time
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text-time";'
- name: Alarm
entities:
- input_boolean.alert_mode
text_template: '${entity.state ? entity.state : "undefined"}'
states:
- state: 'on'
class: 'text-home'
- state: 'off'
class: 'text-away'
- name: Family
entities:
- device_tracker.carlo
- device_tracker.stacey
text_template: '${entity.state ? entity.state.replace("not_home", "away") : "undefined"}'
states:
- state: 'home'
class: 'text-home'
- state: 'not_home'
class: 'text-away'
- name: switches
entities:
- switch.front_landscaping
- switch.back_landscaping
- switch.printer_outlet
- switch.kitchen_accents
- switch.master_bathroom_accents
- switch.front_door_outlet
- switch.foyer_outlet
- switch.living_room_amp
- switch.garage_outlet
states:
- state: 'on'
class: 'switch-on'
- state: 'off'
class: 'switch-off'
action:
service: homeassistant.toggle
- name: custom_switches
entities:
- switch.pool_deck
states:
- state: 'on'
class: 'light-blue-on'
- state: 'off'
class: 'outdoor-light-off'
action:
service: homeassistant.toggle
- name: Lights
entities:
- light.kids_hallway
- light.bedroom_hallway
- light_upstairs_hallway
- light.m1_back_left
- light.m1_back_right
- light.m1_front_left
- light.m1_front_right
- light.m1_slider
- light.office_lamp
- light.den_lamp
- light.f2
- light.f1
- light.s1
- light.s2
- light.s3
- light.s4
- light.d1
- light.d2
- light.k1
- light.k2
- light.k3
- light.k4
- light.k5
- light.k6
- light.sink
- light.fridge
- light.couch_1
- light.tv_light
- light.bedroom
- light.justin_go
- light.paige_go
- light.garage_attic
- light.upstairs_lamp
states:
- state: 'on'
class: 'light-on'
- state: 'off'
class: 'light-off'
action:
service: homeassistant.toggle
- name: Outdoor Lights
entities:
- light.p1_front_left
- light.p1_front_right
- light.p1_back_left
- light.p1_back_right
- light.outdoor_bathroom
- light.outdoor_foyer
- light.outdoor_sconce_1
- light.outdoor_sconce_2
- light.outdoor_sconce_3
- light.led_garage_large
- light.led_garage_small
- light.led_outdoor_den
- light.stone_door
states:
- state: 'on'
class: 'light-on'
- state: 'off'
class: 'outdoor-light-off'
action:
service: homeassistant.toggle
- name: Nest Protects
entities:
- binary_sensor.upstairs_living_room_nest_protect_online
- binary_sensor.hallway_nest_protect_kids_hallway_online
- binary_sensor.justins_room_nest_protect_online
- binary_sensor.kitchen_nest_protect_online
- binary_sensor.master_bedroom_nest_protect_online
- binary_sensor.master_hallway_nest_protect_online
- binary_sensor.paiges_room_nest_protect_paiges_room_online
- binary_sensor.upstairs_bedroom_nest_protect_online
- binary_sensor.office_nest_protect_online
states:
- state: 'off'
class: 'protect-off'
- state: 'on'
class: 'protect-on'
- name: Entry Points
entities:
- binary_sensor.mcu1_gpio4
- binary_sensor.mcu1_gpio5
- binary_sensor.mcu1_gpio10
- binary_sensor.mcu1_gpio12
- binary_sensor.mcu1_gpio13
- binary_sensor.mcu1_gpio14
- binary_sensor.mcu2_gpio4
- binary_sensor.mcu2_gpio5
- binary_sensor.mcu2_gpio9
- binary_sensor.mcu2_gpio10
- binary_sensor.mcu2_gpio12
- binary_sensor.mcu2_gpio13
- binary_sensor.mcu2_gpio14
- binary_sensor.mcu3_gpio4
- binary_sensor.mcu3_gpio5
- binary_sensor.mcu3_gpio10
- binary_sensor.mcu3_gpio14
- binary_sensor.kitchen_door_opened
- binary_sensor.mcu3_light
states:
- state: 'off'
class: 'window-closed'
- state: 'on'
class: 'window-open'
- name: Presence
entities:
- binary_sensor.sleepnumber_carlo_carlo_is_in_bed
- binary_sensor.sleepnumber_carlo_stacey_is_in_bed
states:
- state: 'on'
class: 'presence-on'
- state: 'off'
class: 'presence-off'
- name: Garage Doors
entities:
- cover.large_garage
- cover.small_garage
states:
- state: 'closed'
class: 'window-closed'
- state: 'open'
class: 'window-open'
- name: Dark Sky Sensors
entities:
- sensor.dark_sky_minutely_summary
image_template: '
var imageName = "";
switch (entity.attributes.entity_picture) {
case "/static/images/darksky/weather-sunny.svg":
imageName = "sunny-1";
break;
case "/static/images/darksky/weather-night.svg":
imageName = "night-1";
break;
case "/static/images/darksky/weather-partlycloudy.svg":
imageName = "partlycloudy-day-1";
break;
case "/static/images/darksky/weather-cloudy.svg":
imageName = "partlycloudy-night-1";
break;
case "/static/images/darksky/weather-cloudy.svg":
imageName = "cloudy-day-1";
break;
case "/static/images/darksky/weather-pouring.svg":
imageName = "thunder";
break;
case "/static/images/darksky/weather-snowy.svg":
imageName = "snowy-day-1";
break;
}
return "/local/custom_ui/floorplan/images/weather/" + imageName + ".svg";
'
- name: Camera Images
entities:
- camera.stone_door
image_template: '${entity.attributes.entity_picture}'
# image_refresh_interval: 20 # in seconds - Future options if needed.

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2_1_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 206.4 105.5" style="enable-background:new 0 0 206.4 105.5;" xml:space="preserve">
<title>Radio Green</title>
<rect width="206.4" height="105.7"/>
<g>
<g style="enable-background:new ;">
<path style="fill:#BDF271;" d="M39.1,29.3h14.5c1.5,0,3,0.2,4.3,0.5c1.3,0.3,2.5,0.9,3.5,1.6c1,0.8,1.8,1.8,2.4,3s0.9,2.8,0.9,4.6
c0,2.5-0.7,4.7-2,6.4c-1.3,1.8-3.1,2.8-5.5,3.3v0.1c1.6,0.2,2.9,0.7,3.8,1.4s1.6,1.6,2.1,2.6s0.7,2.2,0.9,3.4
c0.1,1.2,0.2,2.5,0.2,3.7c0,0.7,0,1.5,0,2.2s0,1.4,0.1,2c0.1,0.6,0.2,1.2,0.3,1.7s0.3,1,0.6,1.3h-2.4c-0.5-0.9-0.7-1.9-0.8-3.1
c0-1.2-0.1-2.4-0.1-3.7s0-2.5-0.1-3.8s-0.4-2.4-0.9-3.4s-1.3-1.8-2.5-2.4c-1.1-0.4-2.7-0.7-4.8-0.7H41.2v17.2h-2.1
C39.1,67.2,39.1,29.3,39.1,29.3z M53.6,47.9c1.3,0,2.4-0.2,3.5-0.5s2-0.9,2.8-1.6c0.8-0.7,1.4-1.6,1.9-2.7
c0.5-1.1,0.7-2.4,0.7-3.9c0-1.4-0.2-2.6-0.7-3.6s-1.1-1.8-2-2.5C59,32.5,58,32,57,31.7c-1.1-0.3-2.2-0.4-3.4-0.4H41.2v16.6H53.6z"
/>
<path style="fill:#BDF271;" d="M82.2,29.3h2.3l13.8,37.9H96L91.6,55H74.9l-4.4,12.2h-2.3L82.2,29.3z M90.9,53l-7.5-21.4h-0.1
L75.6,53H90.9z"/>
<path style="fill:#BDF271;" d="M102.8,29.3h11.4c3.1,0,5.7,0.5,7.8,1.6c2.1,1.1,3.7,2.5,5,4.2c1.2,1.8,2.1,3.8,2.6,6
c0.5,2.3,0.8,4.6,0.8,7c0,2.7-0.3,5.2-1,7.5c-0.6,2.3-1.6,4.3-3,6c-1.3,1.7-3,3-5.1,4c-2,1-4.5,1.5-7.2,1.5h-11.3V29.3z
M114.3,65.2c1.6,0,3.3-0.3,4.9-0.8s3.1-1.5,4.5-2.8c1.3-1.3,2.4-3,3.2-5.2s1.2-4.9,1.2-8.2c0-2.6-0.2-4.8-0.7-6.6
s-1.1-3.4-1.9-4.6c-0.8-1.3-1.6-2.2-2.6-3c-1-0.7-2-1.3-3.1-1.7c-1.1-0.4-2.1-0.6-3.2-0.8c-1.1-0.1-2-0.2-2.9-0.2h-8.9v33.9H114.3
z"/>
<path style="fill:#BDF271;" d="M137.4,29.3h2.1v37.9h-2.1V29.3z"/>
<path style="fill:#BDF271;" d="M179.3,48.3c0,2.8-0.4,5.4-1.1,7.8c-0.7,2.4-1.8,4.5-3.2,6.3s-3.1,3.2-5.2,4.2s-4.4,1.5-7,1.5
s-4.9-0.5-7-1.5s-3.8-2.4-5.2-4.2s-2.5-3.9-3.2-6.3c-0.7-2.4-1.1-5-1.1-7.8s0.4-5.4,1.1-7.8c0.7-2.4,1.8-4.5,3.2-6.3
s3.2-3.2,5.2-4.2c2.1-1,4.4-1.5,7-1.5s4.9,0.5,7,1.5s3.8,2.4,5.2,4.2s2.5,3.9,3.2,6.3C178.9,42.9,179.3,45.5,179.3,48.3z
M148.3,48.3c0,2.4,0.3,4.7,1,6.9s1.6,4,2.8,5.7c1.2,1.6,2.8,2.9,4.5,3.8c1.8,1,3.8,1.4,6.1,1.4s4.3-0.5,6.1-1.4
c1.8-1,3.3-2.2,4.5-3.8s2.2-3.5,2.8-5.7c0.7-2.2,1-4.5,1-6.9s-0.3-4.7-1-6.9s-1.6-4-2.8-5.7c-1.2-1.6-2.7-2.9-4.5-3.8
c-1.8-1-3.8-1.4-6.1-1.4s-4.3,0.5-6.1,1.4c-1.8,1-3.3,2.2-4.5,3.8s-2.2,3.5-2.8,5.7C148.6,43.5,148.3,45.8,148.3,48.3z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2_1_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 206.4 105.5" style="enable-background:new 0 0 206.4 105.5;" xml:space="preserve">
<title>Artboard 4</title>
<rect width="206.4" height="105.5"/>
<path style="fill:#BDF271;" d="M30.5,44.6c0-1.5-0.4-2.9-1-4.3c-0.5-1.2-1.3-2.2-2.3-3c-1-0.8-2.2-1.5-3.5-1.8
c-1.4-0.4-2.9-0.6-4.4-0.6c-1.1,0-2.1,0.1-3.1,0.4C15,35.5,14,36,13,36.6c-1,0.6-1.8,1.5-2.4,2.5c-0.7,1.2-1,2.6-0.9,3.9
c-0.1,1.3,0.3,2.6,1,3.7c0.7,1,1.6,1.7,2.7,2.3c1.2,0.6,2.5,1.1,3.8,1.4c1.4,0.4,2.9,0.7,4.3,1s3,0.7,4.4,1.1c1.4,0.4,2.6,1,3.8,1.8
c1.1,0.8,2.1,1.8,2.7,3c0.7,1.4,1.1,3,1,4.6c0.1,1.7-0.3,3.5-1.2,5c-0.7,1.3-1.7,2.4-3,3.3c-1.2,0.9-2.6,1.5-4,1.8
c-1.4,0.4-2.8,0.5-4.2,0.6c-1.9,0-3.9-0.2-5.8-0.7c-1.7-0.4-3.3-1.2-4.7-2.3c-1.4-1.1-2.4-2.6-3.2-4.2c-0.8-2-1.2-4.1-1.1-6.2h2.2
c-0.1,1.8,0.1,3.6,0.8,5.3c0.6,1.4,1.5,2.6,2.7,3.5c1.2,0.9,2.6,1.6,4.1,2c1.6,0.4,3.3,0.6,4.9,0.6c1.1,0,2.2-0.2,3.3-0.4
c1.2-0.3,2.3-0.8,3.3-1.4c1-0.7,1.9-1.6,2.5-2.7c0.7-1.3,1.1-2.7,1-4.1c0.1-1.4-0.3-2.7-1-3.9c-0.7-1-1.6-1.9-2.7-2.4
c-1.2-0.7-2.5-1.2-3.8-1.5c-1.4-0.4-2.9-0.7-4.4-1s-2.9-0.7-4.3-1.1c-1.3-0.4-2.6-1-3.8-1.7c-1.1-0.7-2-1.7-2.7-2.9
c-0.7-1.4-1.1-2.9-1-4.4c0-1.6,0.3-3.2,1.1-4.6c0.7-1.2,1.6-2.3,2.7-3.1c1.1-0.8,2.4-1.4,3.8-1.8c1.4-0.4,2.7-0.6,4.2-0.6
c1.7,0,3.4,0.2,5.1,0.7c1.5,0.4,2.9,1.1,4.1,2.1c1.2,1,2.2,2.2,2.9,3.6c0.8,1.7,1.2,3.5,1.2,5.4H30.5z"/>
<path style="fill:#BDF271;" d="M37.2,52.7c0-2.6,0.4-5.2,1.1-7.7c0.7-2.3,1.8-4.4,3.3-6.3c1.4-1.8,3.2-3.2,5.2-4.2
c2.2-1.1,4.6-1.6,7-1.5c1.8,0,3.6,0.3,5.3,0.9c1.4,0.5,2.6,1.2,3.8,2.2c1,0.8,1.8,1.8,2.5,2.8c0.6,0.9,1.1,1.9,1.5,2.9
c0.3,0.8,0.5,1.5,0.7,2.3c0.1,0.7,0.2,1,0.2,1.1h-2.1c-0.2-1.5-0.7-3-1.4-4.3c-0.7-1.2-1.6-2.3-2.7-3.2c-1.1-0.9-2.3-1.5-3.6-2
c-1.3-0.5-2.8-0.7-4.2-0.7c-2.1,0-4.2,0.5-6.1,1.4c-1.8,0.9-3.3,2.3-4.5,3.8c-1.3,1.7-2.2,3.6-2.8,5.7c-1.3,4.5-1.3,9.3,0,13.8
c0.6,2,1.5,4,2.8,5.7c1.2,1.6,2.8,2.9,4.5,3.8c1.9,1,4,1.5,6.1,1.4c1.7,0,3.3-0.4,4.8-1.1c1.5-0.7,2.8-1.8,3.9-3
c1.1-1.3,2-2.8,2.7-4.4c0.7-1.6,1.1-3.4,1.2-5.1h2.1c-0.2,2.2-0.7,4.3-1.5,6.3c-0.8,1.8-1.8,3.5-3.2,5c-1.3,1.4-2.8,2.5-4.5,3.3
c-1.7,0.8-3.5,1.2-5.4,1.2c-2.4,0-4.8-0.5-7-1.5c-2-1-3.8-2.4-5.2-4.2c-1.5-1.9-2.6-4-3.3-6.3C37.5,58.1,37.1,55.4,37.2,52.7z"/>
<path style="fill:#BDF271;" d="M72.9,33.8H75V51h22.3V33.8h2.2v37.9h-2.2V53H75v18.7h-2.1V33.8z"/>
<path style="fill:#BDF271;" d="M137.2,52.7c0,2.6-0.4,5.3-1.2,7.8c-0.7,2.3-1.8,4.4-3.2,6.3c-2.9,3.7-7.4,5.9-12.2,5.8
c-2.4,0-4.8-0.5-7-1.5c-2-1-3.8-2.4-5.2-4.2c-1.5-1.9-2.6-4-3.3-6.3c-1.5-5.1-1.5-10.5,0-15.5c0.7-2.3,1.8-4.4,3.3-6.3
c1.4-1.8,3.2-3.2,5.2-4.2c2.2-1.1,4.6-1.6,7-1.5c4.7-0.1,9.3,2,12.2,5.8c1.5,1.9,2.6,4,3.2,6.3C136.8,47.5,137.2,50.1,137.2,52.7z
M106.2,52.7c0,2.3,0.3,4.7,1,6.9c0.6,2,1.6,4,2.8,5.6c1.2,1.6,2.8,2.9,4.5,3.8c1.9,1,4,1.5,6.1,1.4c2.1,0,4.2-0.5,6.1-1.4
c1.8-0.9,3.3-2.3,4.5-3.8c1.3-1.7,2.2-3.6,2.8-5.7c1.3-4.5,1.3-9.3,0-13.8c-0.6-2-1.5-4-2.8-5.7c-1.2-1.6-2.8-2.9-4.5-3.8
c-1.9-1-4-1.5-6.1-1.4c-2.1,0-4.2,0.5-6.1,1.4c-1.7,1-3.3,2.3-4.5,3.8c-1.3,1.7-2.2,3.6-2.8,5.7C106.5,48.1,106.1,50.4,106.2,52.7
L106.2,52.7z"/>
<path style="fill:#BDF271;" d="M173.3,52.7c0,2.6-0.4,5.3-1.1,7.8c-0.7,2.3-1.8,4.4-3.2,6.3c-2.9,3.7-7.4,5.9-12.2,5.8
c-2.4,0-4.8-0.5-7-1.5c-2-1-3.8-2.4-5.2-4.2c-1.5-1.9-2.6-4-3.2-6.3c-1.5-5.1-1.5-10.5,0-15.5c0.7-2.3,1.8-4.4,3.2-6.3
c1.4-1.8,3.2-3.2,5.2-4.2c6.6-3.3,14.6-1.5,19.2,4.2c1.5,1.9,2.5,4.1,3.2,6.3C173,47.5,173.4,50.1,173.3,52.7z M142.3,52.7
c0,2.3,0.3,4.7,1,6.9c0.6,2,1.5,4,2.8,5.6c1.2,1.6,2.8,2.9,4.5,3.8c1.9,1,4,1.5,6.1,1.4c2.1,0,4.2-0.5,6.1-1.4
c1.8-0.9,3.3-2.3,4.5-3.8c1.3-1.7,2.2-3.6,2.8-5.7c1.3-4.5,1.3-9.3,0-13.8c-0.6-2-1.5-4-2.8-5.7c-1.2-1.6-2.8-2.9-4.5-3.8
c-1.9-1-4-1.5-6.1-1.4c-2.1,0-4.2,0.5-6.1,1.4c-1.8,0.9-3.3,2.3-4.5,3.8c-1.3,1.7-2.2,3.6-2.8,5.7C142.7,48.1,142.3,50.4,142.3,52.7
L142.3,52.7z"/>
<path style="fill:#BDF271;" d="M177.9,33.8h2.1v35.9h19.8v2h-21.9V33.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1 @@
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 206.4 105.48"><defs><style>.cls-1{fill:#e6e6e6;isolation:isolate;}</style></defs><title>Artboard 1</title><rect width="206.4" height="105.48"/><path id="text128" class="cls-1" d="M34.07,44.62a11,11,0,0,0-1-4.25,8.67,8.67,0,0,0-2.31-3,10,10,0,0,0-3.5-1.83,15.12,15.12,0,0,0-4.41-.61,14.48,14.48,0,0,0-3.15.37,9.49,9.49,0,0,0-3.13,1.3,7.45,7.45,0,0,0-2.37,2.49,7.66,7.66,0,0,0-.92,3.9,6.27,6.27,0,0,0,1,3.72A7.56,7.56,0,0,0,17,49a16.52,16.52,0,0,0,3.81,1.4c1.43.36,2.88.69,4.34,1s2.95.7,4.37,1.14a14.58,14.58,0,0,1,3.81,1.81,8.6,8.6,0,0,1,2.71,3,9.33,9.33,0,0,1,1,4.59,9.8,9.8,0,0,1-1.17,5,10.3,10.3,0,0,1-3,3.29A11.75,11.75,0,0,1,29,72a16.81,16.81,0,0,1-4.17.56,22.17,22.17,0,0,1-5.76-.72,12.53,12.53,0,0,1-4.69-2.33,11.24,11.24,0,0,1-3.15-4.17,14.72,14.72,0,0,1-1.1-6.21h2.15a11.39,11.39,0,0,0,.83,5.28A9.39,9.39,0,0,0,15.83,68a11,11,0,0,0,4.08,2,19.3,19.3,0,0,0,4.93.61,14.54,14.54,0,0,0,3.34-.42,9.81,9.81,0,0,0,3.27-1.44,8.23,8.23,0,0,0,2.49-2.65,7.84,7.84,0,0,0,1-4.14,6.85,6.85,0,0,0-1-3.9,7.7,7.7,0,0,0-2.71-2.44,16.81,16.81,0,0,0-3.81-1.49c-1.41-.37-2.87-.71-4.37-1s-2.91-.69-4.34-1.12a14.15,14.15,0,0,1-3.81-1.72,8.61,8.61,0,0,1-2.69-2.81,8.63,8.63,0,0,1-1-4.44,9.61,9.61,0,0,1,1.05-4.64A9.12,9.12,0,0,1,15,35.2a11.63,11.63,0,0,1,3.79-1.75,16.18,16.18,0,0,1,4.15-.56,18.94,18.94,0,0,1,5.1.66,11.83,11.83,0,0,1,4.15,2.08A10,10,0,0,1,35,39.26a13.74,13.74,0,0,1,1.23,5.36Zm8-10.83h2.69l22,34.76h.1V33.79H69v37.9H66.49l-22.17-35h-.1v35H42.07Zm64.7,19a26.11,26.11,0,0,1-1.13,7.77,19.27,19.27,0,0,1-3.24,6.32,15.33,15.33,0,0,1-5.2,4.22,16.66,16.66,0,0,1-14,0A15.25,15.25,0,0,1,78,66.83a19.08,19.08,0,0,1-3.24-6.32,27.28,27.28,0,0,1,0-15.54A19.08,19.08,0,0,1,78,38.65a15.25,15.25,0,0,1,5.23-4.22,16.66,16.66,0,0,1,14,0,15.33,15.33,0,0,1,5.2,4.22A19.27,19.27,0,0,1,105.64,45,26.11,26.11,0,0,1,106.77,52.74Zm-31,0a23.83,23.83,0,0,0,1,6.9,17.33,17.33,0,0,0,2.83,5.65,14,14,0,0,0,4.54,3.85,12.83,12.83,0,0,0,6.1,1.43,12.67,12.67,0,0,0,6.08-1.43,14.07,14.07,0,0,0,4.52-3.85,17.33,17.33,0,0,0,2.83-5.65,24.78,24.78,0,0,0,0-13.8,17.33,17.33,0,0,0-2.83-5.65,14.07,14.07,0,0,0-4.52-3.85,12.67,12.67,0,0,0-6.08-1.43,12.83,12.83,0,0,0-6.1,1.43,14,14,0,0,0-4.54,3.85,17.33,17.33,0,0,0-2.83,5.65A23.83,23.83,0,0,0,75.76,52.74Zm67.18,0a26.11,26.11,0,0,1-1.12,7.77,19.1,19.1,0,0,1-3.25,6.32,15.2,15.2,0,0,1-5.19,4.22,16.66,16.66,0,0,1-14,0,15.25,15.25,0,0,1-5.23-4.22,19.08,19.08,0,0,1-3.24-6.32,27.28,27.28,0,0,1,0-15.54,19.08,19.08,0,0,1,3.24-6.32,15.25,15.25,0,0,1,5.23-4.22,16.66,16.66,0,0,1,14,0,15.2,15.2,0,0,1,5.19,4.22A19.1,19.1,0,0,1,141.82,45,26.11,26.11,0,0,1,142.94,52.74Zm-31,0a23.83,23.83,0,0,0,1,6.9,17.33,17.33,0,0,0,2.83,5.65,14,14,0,0,0,4.54,3.85,12.8,12.8,0,0,0,6.1,1.43,12.67,12.67,0,0,0,6.08-1.43A14.07,14.07,0,0,0,137,65.29a17.53,17.53,0,0,0,2.83-5.65,24.78,24.78,0,0,0,0-13.8A17.53,17.53,0,0,0,137,40.19a14.07,14.07,0,0,0-4.52-3.85,12.67,12.67,0,0,0-6.08-1.43,12.8,12.8,0,0,0-6.1,1.43,14,14,0,0,0-4.54,3.85,17.33,17.33,0,0,0-2.83,5.65A23.83,23.83,0,0,0,111.94,52.74Zm32.71-19h24.46v2L145.48,69.67h24.07v2H143.24v-2l23.53-33.86H144.65Zm27.93,0H196v2H174.73V51h20v2h-20V69.67h21.53v2H172.58Z"/></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1 @@
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 206.4 105.48"><defs><style>.cls-1{fill:#00adee;}.cls-2{fill:#26b7ed;}.cls-3{fill:#4dc0eb;}.cls-4{fill:#73caea;}.cls-5{fill:#99d3e9;}.cls-6{fill:#c0dce7;}.cls-7{fill:#e6e6e6;}</style></defs><title>Artboard 3</title><rect width="206.4" height="105.48"/><path class="cls-1" d="M15.06,33.84H39.45v2L15.88,69.62h24v2H13.64v-2L37.11,35.86h-22Z"/><path class="cls-2" d="M53.78,33.84H75v1.75L54.5,65H75.37V66.7H52.55V65L73,35.59H53.78Z"/><path class="cls-3" d="M92.5,33.84h18v1.49l-17.41,25h17.74v1.49H91.45V60.28l17.34-25H92.5Z"/><path class="cls-4" d="M121.22,33.84h14.84v1.23L121.72,55.61h14.6v1.22h-16V55.61l14.27-20.54H121.22Z"/><path class="cls-5" d="M149.94,33.84h11.65v1L150.33,50.94H161.8v1H149.26v-1l11.22-16.13H149.94Z"/><path class="cls-6" d="M170.66,33.84h8.47v.7l-8.19,11.73h8.34V47h-9.11v-.69l8.15-11.73h-7.66Z"/><path class="cls-7" d="M187.38,33.84h5.28v.44l-5.1,7.31h5.2V42h-5.69v-.44l5.09-7.31h-4.78Z"/></svg>

After

Width:  |  Height:  |  Size: 1005 B

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2_1_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 206.4 105.5" style="enable-background:new 0 0 206.4 105.5;" xml:space="preserve">
<title>Stop Red</title>
<rect y="-0.8" width="206.4" height="105.5"/>
<g>
<path style="fill:#E7376B;stroke:#E7376B;stroke-width:2;stroke-miterlimit:10;" d="M68.5,39.2c-0.1-1.6-0.4-3.1-1-4.3
s-1.3-2.2-2.3-3s-2.1-1.4-3.5-1.8s-2.8-0.6-4.4-0.6c-1,0-2,0.1-3.1,0.4C53,30.1,52,30.5,51,31.1s-1.8,1.5-2.4,2.5
c-0.6,1-0.9,2.4-0.9,3.9s0.3,2.8,1,3.7c0.7,1,1.6,1.7,2.7,2.3c1.1,0.6,2.4,1.1,3.8,1.4c1.4,0.4,2.9,0.7,4.3,1
c1.5,0.3,3,0.7,4.4,1.1c1.4,0.4,2.7,1,3.8,1.8s2,1.8,2.7,3s1,2.8,1,4.6c0,2-0.4,3.7-1.2,5c-0.8,1.3-1.8,2.4-3,3.3
c-1.2,0.9-2.5,1.5-4,1.8c-1.4,0.4-2.8,0.6-4.2,0.6c-2.1,0-4-0.2-5.8-0.7s-3.4-1.3-4.7-2.3c-1.3-1.1-2.4-2.5-3.1-4.2
c-0.8-1.7-1.1-3.8-1.1-6.2h2.1c-0.1,2.1,0.2,3.9,0.8,5.3c0.7,1.4,1.6,2.6,2.7,3.5c1.2,0.9,2.5,1.6,4.1,2s3.2,0.6,4.9,0.6
c1,0,2.2-0.1,3.3-0.4c1.2-0.3,2.3-0.8,3.3-1.4c1-0.7,1.8-1.6,2.5-2.7c0.7-1.1,1-2.5,1-4.2c0-1.6-0.3-2.9-1-3.9s-1.6-1.8-2.7-2.4
c-1.1-0.6-2.4-1.1-3.8-1.5c-1.4-0.4-2.9-0.7-4.4-1s-2.9-0.7-4.3-1.1s-2.7-1-3.8-1.7s-2-1.7-2.7-2.8c-0.7-1.2-1-2.6-1-4.4
c0-1.8,0.3-3.4,1-4.7s1.6-2.3,2.7-3.1c1.1-0.8,2.4-1.4,3.8-1.8c1.4-0.4,2.8-0.6,4.1-0.6c1.8,0,3.5,0.2,5.1,0.7
c1.6,0.4,3,1.1,4.1,2.1c1.2,0.9,2.1,2.2,2.9,3.6c0.7,1.5,1.1,3.3,1.2,5.4C70.2,39.2,68.5,39.2,68.5,39.2z"/>
<path style="fill:#E7376B;stroke:#E7376B;stroke-width:2;stroke-miterlimit:10;" d="M71.6,30.3v-2h26.7v2H86v36h-2.1v-36
C83.9,30.3,71.6,30.3,71.6,30.3z"/>
<path style="fill:#E7376B;stroke:#E7376B;stroke-width:2;stroke-miterlimit:10;" d="M130.3,47.3c0,2.8-0.4,5.4-1.1,7.8
c-0.7,2.4-1.8,4.5-3.2,6.3s-3.1,3.2-5.2,4.2s-4.4,1.5-7,1.5s-4.9-0.5-7-1.5s-3.8-2.4-5.2-4.2s-2.5-3.9-3.2-6.3
c-0.7-2.4-1.1-5-1.1-7.8s0.4-5.4,1.1-7.8c0.7-2.4,1.8-4.5,3.2-6.3c1.4-1.8,3.2-3.2,5.2-4.2c2.1-1,4.4-1.5,7-1.5s4.9,0.5,7,1.5
s3.8,2.4,5.2,4.2c1.4,1.8,2.5,3.9,3.2,6.3C129.9,42,130.3,44.6,130.3,47.3z M99.3,47.3c0,2.4,0.3,4.8,1,6.9
c0.7,2.2,1.6,4.1,2.8,5.7c1.2,1.6,2.8,2.9,4.5,3.9s3.8,1.4,6.1,1.4c2.3,0,4.3-0.5,6.1-1.4c1.8-1,3.3-2.2,4.5-3.9
c1.2-1.6,2.2-3.5,2.8-5.7c0.7-2.2,1-4.5,1-6.9s-0.3-4.8-1-6.9c-0.7-2.2-1.6-4.1-2.8-5.7c-1.2-1.6-2.7-2.9-4.5-3.9s-3.8-1.4-6.1-1.4
c-2.3,0-4.3,0.5-6.1,1.4s-3.3,2.2-4.5,3.9c-1.2,1.6-2.2,3.5-2.8,5.7C99.6,42.6,99.3,44.9,99.3,47.3z"/>
<path style="fill:#E7376B;stroke:#E7376B;stroke-width:2;stroke-miterlimit:10;" d="M134.9,28.3h14.8c1,0,2.1,0.1,3.2,0.4
c1.2,0.2,2.3,0.8,3.3,1.5c1,0.8,1.9,1.8,2.6,3.2c0.7,1.4,1,3.2,1,5.5c0,3.3-0.9,5.9-2.8,7.7c-1.9,1.8-4.6,2.7-8.1,2.7H137v16.9
h-2.1V28.3z M137,47.4h12.3c1.6,0,2.9-0.3,4-0.8s2-1.2,2.6-2c0.7-0.8,1.1-1.7,1.4-2.7c0.3-1,0.4-2,0.4-3c0-0.7-0.1-1.6-0.3-2.5
c-0.2-1-0.6-1.9-1.2-2.8c-0.6-0.9-1.4-1.7-2.5-2.3c-1.1-0.6-2.5-0.9-4.2-0.9H137V47.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

166
www/custom_ui/floorplan/clock.css Executable file
View File

@@ -0,0 +1,166 @@
/* @import url('https://fonts.googleapis.com/css?family=Black+Ops+One');
SVG shapes */
svg, svg * {
vector-effect: non-scaling-stroke !important;
pointer-events: all !important;
}
/*
/* Hover over */
.entity:hover:not(.static-text):not(.static-temp):not(.static-text-date):not(.static-text-time) {
stroke: #03A9F4 !important;
stroke-width: 1px !important;
stroke-opacity: 1 !important;
}
.warning-background, .warning-text-background {
fill: #fcf8e3 !important;
fill-opacity: 1 !important;
stroke: #faebcc !important;
stroke-width: 1px !important;
}
.static-text
{
font-size : 47px !important;
font-family : Helvetica !important;
color : rgb(128, 128, 128) !important;
}
.static-text-date
{
font-family : Helvetica !important;
font-size : 47px !important;
color : rgb(128, 128, 128) !important;
}
.static-temp
{
font-size: 47.57px !important;
font-family: Helvetica !important;
fill: rgb(128, 128, 128) !important;
}
.static-text-time
{
font-family: "Rockwell Extra Bold", "Rockwell Bold", monospace !important;
font-size : 280px !important;
color : rgb(0, 173, 238) !important;
text-shadow: 0 0 30px #00adee;
text-align: center; !important;
}
.static-text-am_pm
{
font-family: "Rockwell Extra Bold", "Rockwell Bold", monospace !important;
font-size : 60px !important;
color : rgb(0, 173, 238) !important;
text-shadow: 0 0 30px #00adee;
}
/* Last motion entity */
.last-motion {
stroke: #808080 !important;
stroke-width: 1px !important;
stroke-opacity: 1 !important;
}
/* Presence */
.presence-on {
fill: #BDF271 !important;
}
.presence-off {
fill: #3D3B3F !important;
}
/* Text Home/Away */
.text-home {
fill: #BDF271 !important;
}
.text-away {
fill: #E7376B !important;
}
/* switches */
.switch-on {
fill: orange !important;
}
.switch-on-blue {
fill: blue !important;
}
.switch-off {
fill: #cccccc !important;
}
/* Buttons */
.button-on {
fill: #FFFFA6 !important;
fill-opacity: 0.25;
}
.button-off {
fill: #3D3B3F !important;
fill-opacity: 0.5;
}
/* Light */
.light-off {
fill: #231F26 !important;
fill-opacity: 1.0;
stroke: black !important;
stroke-width: 1;
stroke-opacity:0.1;
}
.light-off:hover {
transform-origin: center;
transform: scale(2);
}
.outdoor-light-off {
fill: grey !important;
fill-opacity: 1.0;
stroke: black !important;
stroke-width: 1;
stroke-opacity:0.1;
}
.outdoor-light-off:hover {
transform-origin: center;
transform: scale(2);
}
.light-blue-on {
fill: blue !important;
fill-opacity: 1.0;
stroke: #FFFFA6 !important;
stroke-width: 10;
stroke-opacity: 0.25;
}
.light-blue-on:hover {
transform-origin: center;
transform: scale(3);
}
.light-on {
fill: yellow !important;
fill-opacity: 1.0;
stroke: #FFFFA6 !important;
stroke-width: 10;
stroke-opacity: 0.25;
}
.light-on:hover {
transform-origin: center;
transform: scale(3);
}

200
www/custom_ui/floorplan/clock.svg Executable file
View File

@@ -0,0 +1,200 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="clock_layer" inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" sodipodi:docname="clock.svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1024 600"
style="enable-background:new 0 0 1024 600;" xml:space="preserve">
<pattern y="600" width="5" height="5" patternUnits="userSpaceOnUse" id="rect57_1_" viewBox="0 -5 5 5" style="overflow:visible;">
<g>
<rect y="-5" style="fill:none;" width="5" height="5"/>
<g>
<rect y="-5" style="fill:none;" width="5" height="5"/>
<g>
<rect y="-5" style="fill:none;" width="5" height="5"/>
<rect id="rect43_2_" y="-5" style="fill:none;" width="5" height="5"/>
<g>
<g>
<g>
<defs>
<path id="SVGID_1_" d="M4.9-3C4.9-3,4.8-3,4.9-3H4.3v-1.7c0-0.1,0-0.1-0.1-0.1H0.8c-0.1,0-0.1,0-0.1,0.1V-3H0.2
c0,0-0.1,0-0.1,0.1l0,0c0,0,0,0,0,0.1l0,0l2.3,2.2c0.1,0.1,0.1,0.1,0.2,0l1.1-1.1l0.1-0.1v0.2c0,0.1,0,0.1,0.1,0.1h0.3
c0.1,0,0.1,0,0.1-0.1v-0.7v-0.1c0.2-0.1,0.3-0.3,0.4-0.4v-0.1C4.8-2.9,4.9-2.9,4.9-3z"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="g47_2_" style="clip-path:url(#SVGID_2_);">
<radialGradient id="rect45_3_" cx="-83566.7813" cy="-97872.6094" r="4.43" gradientTransform="matrix(0.56 0 0 0.56 46707.2891 54684.4805)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#17426C"/>
<stop offset="1" style="stop-color:#050F1A"/>
</radialGradient>
<rect id="rect45_2_" y="-5" style="fill:url(#rect45_3_);" width="4.9" height="4.9"/>
</g>
</g>
</g>
</g>
<path id="path367_2_" style="fill:#19476D;" d="M3.6-3.2c0.1,0,0.2,0.1,0.2,0.2l0,0c0,0.1-0.1,0.2-0.2,0.2l0,0
C3.5-2.8,3.4-2.9,3.4-3l0,0l0,0C3.4-3.1,3.5-3.2,3.6-3.2z M1.4-3.2c0.1,0,0.2,0.1,0.2,0.2l0,0l0,0c0,0.1-0.1,0.2-0.2,0.2
S1.2-2.9,1.2-3S1.3-3.2,1.4-3.2L1.4-3.2z M2.3-4.1L1.6-3.4C1.4-3.5,1.1-3.4,1-3.2s0,0.5,0.2,0.6c0.1,0.1,0.3,0.1,0.5,0
c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.3,0-0.4l0.4-0.5v1.5C2.1-2.1,2-1.9,2-1.8s0,0.3,0.1,0.4c0.2,0.2,0.5,0.2,0.7,0l0,0l0,0
C2.9-1.4,3-1.6,3-1.7C3-1.9,2.9-2,2.7-2.1c0-0.4,0-1.5,0-1.5l0.4,0.5c0,0.1,0.1,0.4,0.3,0.5s0.5,0,0.6-0.2
c0.1-0.1,0.1-0.3,0-0.4C3.9-3.4,3.7-3.5,3.4-3.4L2.7-4.1v-0.6H2.3V-4.1z M2.7-1.7c0,0.1-0.1,0.2-0.2,0.2c-0.1,0-0.2-0.1-0.2-0.2
l0,0c0-0.1,0.1-0.2,0.2-0.2C2.6-1.9,2.7-1.8,2.7-1.7z"/>
</g>
</g>
</g>
</pattern>
<g id="BG" inkscape:label="#BG1">
<rect id="rect55" y="-0.5" width="1024" height="600.5"/>
<pattern id="rect57_2_" xlink:href="#rect57_1_" patternTransform="matrix(1 0 0 -1 -3 -33192)">
</pattern>
<rect id="rect57" y="-0.5" style="fill:url(#rect57_2_);" width="1024" height="600"/>
<radialGradient id="rect40_2_" cx="422.59" cy="1980.11" r="468.26" gradientTransform="matrix(1 0 0 0.5 0 -695.07)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="0.191" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="0.4815" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</radialGradient>
<rect id="rect40_1_" style="fill:url(#rect40_2_);" width="1024" height="600"/>
</g>
<text id="sensor.clock_time" inkscape:label="#text92" transform="matrix(0.8191 0 0 1 65.1748 383.8574)" style="fill:#00ADEE;enable-background:new ; font-family:'Helvetica'; font-size:290.3859px;">10:36</text>
<text id="sensor.clock_day" transform="matrix(1.2003 0 0 1 18.3418 520.5859)" style="fill:#808080; font-family:'Helvetica'; font-size:47px;">NedNesDay</text>
<text id="sensor.clock_date" inkscape:label="#text99" transform="matrix(1.2003 0 0 1 18.3418 583.3311)" style="fill:#808080;enable-background:new ; font-family:'Helvetica'; font-size:47px;">November 33</text>
<g id="right_side_layout">
<line id="edge_doorbell_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="121.1" x2="1009.6" y2="121.1"/>
<line id="edge_snooze_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="115.1" x2="1009.6" y2="115.1"/>
<line id="edge_snooze_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="8.1" x2="1009.6" y2="8.1"/>
<line id="edge_doorbell_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="228.1" x2="1009.6" y2="228.1"/>
<line id="edge_doppler_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="234" x2="1009.6" y2="234"/>
<line id="edge_doppler_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="341" x2="1009.6" y2="341"/>
<line id="edge_radio_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="818.7" y1="469" x2="1008.7" y2="469"/>
<line id="edge_radio_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="818.7" y1="556" x2="1008.7" y2="556"/>
</g>
<text id="sensor.clock_am_pm" transform="matrix(0.8191 0 0 1 692.0439 150.0801)" style="fill:#00ADEE; font-family:'Helvetica'; font-size:50px;">XX</text>
<rect id="camera.stone_door" x="819.6" y="122.1" inkscape:label="#rect140" style="fill:#333333;" width="190" height="105">
</rect>
<rect id="sensor.dark_sky_minutely_summary_icon" x="23.3" y="15" inkscape:label="#rect395" style="fill:#666666;" width="70.5" height="62.2">
</rect>
<rect id="input_boolean.school_mode" x="819.6" y="235" inkscape:label="#rect140" style="fill:#333333;" width="190" height="105">
</rect>
<text id="climate.downstairs" inkscape:label="#text136" transform="matrix(1 0 0 1 736.5502 530.4459)" style="fill:#808080;enable-background:new ; font-family:'ArialMT'; font-size:47.57px;">72</text>
<text id="climate.upstairs" inkscape:label="#text136" transform="matrix(1 0 0 1 736.5506 586.0173)" style="fill:#808080;enable-background:new ; font-family:'ArialMT'; font-size:47.57px;">72</text>
<text id="first_floor" inkscape:label="#text136" transform="matrix(0.92 0 0 1 552.4951 529.1865)" style="fill:#808080;enable-background:new ; font-family:'Helvetica'; font-size:48px;">1st Floor</text>
<text id="second_floor" inkscape:label="#text136" transform="matrix(0.92 0 0 1 552.4951 586.0176)" style="fill:#808080;enable-background:new ; font-family:'Helvetica'; font-size:48px;">2ndFloor</text>
<rect id="media_player.alarm_clock" x="818.6" y="470.2" inkscape:label="#rect140" style="fill:#333333;" width="190" height="83.8">
</rect>
<rect id="input_boolean.clock_snooze" x="819.1" y="9.2" inkscape:label="#rect140" style="fill:#333333;" width="190" height="105">
</rect>
<text id="sensor.dark_sky_minutely_summary" transform="matrix(1 0 0 1 188.8361 58.1703)" style="fill:#808080; font-family:'Helvetica'; font-size:48px;">Hell Fire for the next 2 hours</text>
<text id="sensor.dark_sky_temperature" transform="matrix(1 0 0 1 112.8211 58.1696)" style="fill:#808080; font-family:'Helvetica'; font-size:48px;">72</text>
<g>
<g id="powered_by_2_">
<g id="powered_by-2_2_">
<g id="text857_2_">
<path style="fill:#00ADEE;" d="M852.4,582c-0.3-0.9-1-1.7-1.8-2.3c-0.8-0.5-1.8-0.8-2.8-0.8c-0.7,0-1.4,0.1-2.1,0.5
c-0.6,0.4-1.1,0.8-1.5,1.4v-1.7h-1.9v1.1h-9.7c-0.1-0.9-0.9-1.6-1.8-1.6c-1,0-1.9,0.8-1.9,1.9s0.8,1.9,1.9,1.9
c1,0,1.8-0.8,1.9-1.7h9.7v7.8h-6.8c-0.1-1-0.9-1.7-1.8-1.7c-1,0-1.9,0.8-1.9,1.9c0,1,0.8,1.9,1.9,1.9c0.9,0,1.7-0.7,1.8-1.6h6.8
v7.4h2.1v-6.1c0.4,0.5,0.8,0.9,1.4,1.2c0.6,0.2,1.3,0.4,1.9,0.4c0.9,0,1.9-0.3,2.7-0.8c0.9-0.5,1.6-1.3,2-2.3
c0.4-1.1,0.6-2.3,0.6-3.5C853,584.2,852.8,583.1,852.4,582z M830.8,582c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4
c0.8,0,1.4,0.6,1.4,1.4C832.2,581.4,831.5,582,830.8,582z M833.6,590.2c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4
c0.8,0,1.4,0.6,1.4,1.4C835.1,589.5,834.4,590.2,833.6,590.2z M850,589.2L850,589.2c-0.6,0.8-1.5,1.2-2.4,1.2
c-0.9,0-1.8-0.4-2.3-1.2c-0.8-1-1.1-2.3-1.1-3.6c-0.1-1.3,0.2-2.6,1.1-3.6c0.6-0.8,1.5-1.2,2.4-1.3c0.9,0,1.8,0.4,2.3,1.2
c0.7,1,1.1,2.3,1.1,3.6C851.1,586.8,850.7,588.1,850,589.2z"/>
<path id="path1976_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M865,580.6c-1.1-1.1-2.6-1.7-4.2-1.7
c-1.5,0-2.9,0.5-4,1.4c-1.4,1.3-2.1,3.2-1.9,5.1c-0.1,1.8,0.5,3.6,1.8,4.9c1.1,1.2,2.6,1.8,4.2,1.7c1,0,2-0.3,2.9-0.8
c0.9-0.5,1.6-1.3,2.1-2.2c0.6-1.2,0.8-2.5,0.8-3.8C866.7,583.5,866.1,581.9,865,580.6L865,580.6z M863.3,589
c-0.6,0.8-1.6,1.2-2.6,1.2c-1,0.1-2-0.4-2.7-1.2c-0.7-1-1.1-2.3-1.1-3.6c-0.1-1.2,0.3-2.5,1.1-3.5c0.7-0.7,1.7-1.2,2.7-1.2
c1,0,1.9,0.4,2.6,1.2c0.7,1,1.1,2.2,1.1,3.5C864.4,586.7,864,588,863.3,589L863.3,589z"/>
<path id="path1978_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M871.4,591.7l-3.8-12.4h2.2l1.9,7.2l0.8,2.7
c0-0.1,0.3-1.1,0.6-2.6l1.9-7.3h2.2l1.9,7.2l0.6,2.4l0.8-2.4l2.2-7.2h2l-3.8,12.4h-2.2l-1.9-7.4l-0.5-2.2l-2.6,9.6L871.4,591.7z
"/>
<path id="path1980_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M897.2,585.2c0.1-1.7-0.4-3.4-1.5-4.7
c-1.1-1.1-2.6-1.7-4.1-1.7c-1.6,0-3.1,0.6-4.2,1.8c-1.2,1.3-1.8,3.1-1.7,4.9c-0.1,1.7,0.4,3.4,1.5,4.7c1.1,1.2,2.7,1.8,4.3,1.7
c1.3,0,2.5-0.4,3.6-1.1c0.9-0.7,1.6-1.8,1.9-2.9l-2.2-0.3c-0.2,0.8-0.7,1.4-1.4,1.8c-0.6,0.4-1.2,0.6-1.9,0.6
c-1,0-1.9-0.4-2.6-1.2c-0.7-0.9-1.1-2-1.2-3.2h9.3L897.2,585.2z M888,584.3c0-1,0.4-1.9,1.2-2.6c0.6-0.7,1.5-1.1,2.4-1.1
c1,0,1.9,0.5,2.6,1.3c0.5,0.7,0.7,1.5,0.8,2.3L888,584.3z"/>
<path id="path1982_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M899.8,591.7v-12.4h1.9v1.8
c0.3-0.7,0.8-1.3,1.3-1.8c0.4-0.3,0.9-0.4,1.4-0.4c0.8,0,1.5,0.3,2.2,0.6l-0.8,1.9c-0.5-0.2-1-0.4-1.5-0.4
c-0.5,0-0.9,0.1-1.3,0.4c-0.4,0.3-0.7,0.7-0.8,1.2c-0.3,0.8-0.4,1.6-0.4,2.4v6.5h-2.1V591.7z"/>
<path id="path1984_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M918.6,585.2c0.1-1.7-0.4-3.4-1.5-4.7
c-1.1-1.1-2.5-1.7-4.1-1.7c-1.6-0.1-3.2,0.6-4.2,1.8c-1.2,1.3-1.8,3.1-1.7,4.9c-0.1,1.7,0.4,3.4,1.5,4.7
c1.1,1.2,2.7,1.8,4.4,1.7c1.3,0,2.5-0.4,3.6-1.1c0.9-0.7,1.6-1.8,1.9-2.9l-2.2-0.3c-0.2,0.8-0.7,1.4-1.4,1.8
c-0.5,0.4-1.2,0.7-1.9,0.6c-1,0-1.9-0.4-2.6-1.2c-0.7-0.9-1.1-2-1.2-3.2h9.3V585.2z M909.4,584.3c0-1,0.4-1.9,1.2-2.6
c0.6-0.7,1.5-1.1,2.4-1.1c1,0,1.9,0.5,2.6,1.3c0.4,0.7,0.7,1.5,0.8,2.3L909.4,584.3z"/>
<path id="path1986_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M929.2,574.7v6.1c-0.3-0.6-0.8-1-1.4-1.3
c-0.6-0.4-1.3-0.5-2.1-0.5c-1,0-2,0.3-2.8,0.8c-0.9,0.5-1.5,1.3-1.8,2.3c-0.4,1.1-0.7,2.2-0.6,3.3c0,1.1,0.2,2.3,0.6,3.3
c0.4,0.9,1.1,1.8,1.9,2.3c0.8,0.5,1.7,0.8,2.7,0.8c1.4,0.1,2.7-0.6,3.5-1.8v1.8h2.1v-17.1H929.2z M928.3,589
c-1.4,1.7-5.8,2.6-5.8-3.6c-0.1-1.3,0.3-2.6,1.1-3.6c0.5-0.7,1.4-1.1,2.3-1.2c0.9,0,1.9,0.4,2.4,1.2c0.8,1.1,1.1,2.4,1.1,3.7
C929.5,586.8,929.1,588,928.3,589L928.3,589z"/>
<path id="path1988_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M951.6,582.8c-0.3-0.7-0.6-1.4-1.1-2.1
c-0.4-0.6-1-1-1.7-1.3c-0.6-0.4-1.4-0.5-2.1-0.5c-1.4,0-2.6,0.6-3.5,1.7v-6.1h-2.1v17.3h1.9v-1.4c0.8,1.1,2.1,1.8,3.5,1.8
c1.5,0,2.9-0.7,3.8-1.8c1.1-1.4,1.7-3.2,1.5-5C952,584.4,951.9,583.6,951.6,582.8L951.6,582.8z M948.9,589
c-0.6,0.7-1.5,1.1-2.4,1.2c-1.1,0-2.1-0.7-2.7-1.7c-0.5-1-0.7-2.1-0.6-3.2c-0.1-1.2,0.3-2.5,1.1-3.5c0.6-0.7,1.5-1.1,2.4-1.2
c0.9,0,1.7,0.4,2.3,1.2c0.8,1,1.1,2.3,1.1,3.6C950,586.7,949.7,588,948.9,589z"/>
<path id="path1990_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M954.4,596.4l-0.3-1.9
c0.4,0.1,0.8,0.1,1.2,0.1c0.4,0,0.8-0.1,1.2-0.3c0.3-0.2,0.5-0.4,0.6-0.6c0.3-0.5,0.5-1,0.6-1.5c0-0.1,0.1-0.3,0.1-0.5
l-4.7-12.4h2.3l2.6,7.2c0.4,1,0.7,1.9,0.9,2.9c0.2-1,0.5-1.9,0.9-2.8l2.7-7.3h2l-4.7,12.7c-0.3,1-0.7,1.9-1.1,2.8
c-0.3,0.6-0.8,1.1-1.3,1.5c-0.5,0.4-1.1,0.6-1.8,0.5C955.4,596.7,955,596.7,954.4,596.4L954.4,596.4z"/>
</g>
</g>
</g>
<g>
<path style="fill:#00ADEE;" d="M825.8,581.4c-1,0-1.8,0.8-1.8,1.7h-5.1v0.4h5.1c0.1,0.9,0.9,1.6,1.8,1.6c1,0,1.9-0.8,1.9-1.9
C827.7,582.2,826.8,581.4,825.8,581.4z M825.8,584.6c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4s1.4,0.6,1.4,1.4
C827.2,584,826.6,584.6,825.8,584.6z"/>
</g>
<g>
<path style="fill:#00ADEE;" d="M837.8,591c-1,0-1.7,0.7-1.8,1.6h-6.6l-1.9-1.9h-8.5v0.4h8.4l1.9,1.9h6.8c0.1,0.9,0.9,1.6,1.8,1.6
c1,0,1.9-0.8,1.9-1.9C839.6,591.8,838.8,591,837.8,591z M837.8,594.3c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4
c0.8,0,1.4,0.6,1.4,1.4C839.2,593.6,838.6,594.3,837.8,594.3z"/>
</g>
<g>
<path style="fill:#00ADEE;" d="M837.8,582.8c-1,0-1.8,0.7-1.8,1.7h-5.5l-3.3,3.5h-8.5v0.4h8.7l3.3-3.5h5.3
c0.1,0.9,0.9,1.6,1.8,1.6c1,0,1.9-0.8,1.9-1.9C839.6,583.6,838.8,582.8,837.8,582.8z M837.8,586.1c-0.8,0-1.4-0.6-1.4-1.4
c0-0.8,0.6-1.4,1.4-1.4c0.8,0,1.4,0.6,1.4,1.4C839.2,585.4,838.6,586.1,837.8,586.1z"/>
</g>
<g>
<path style="fill:#FFF2DF;" d="M1008,577.8c0,0.3-0.3,0.7-0.7,0.7h-3.3v11.7c0,0.6-0.5,1-1,1h-24.8c-0.6,0-1-0.5-1-1v-11.7h-3.3
c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.2,0.1-0.3,0.2-0.5l16.7-16.7c0.3-0.3,0.7-0.3,0.9,0l8.7,8.7v-1.7
c0-0.3,0.3-0.6,0.6-0.6h2.8c0.3,0,0.6,0.3,0.6,0.6v5.1c0,0.1-0.1,0.3-0.1,0.4l4.2,4.2C1007.9,577.4,1008,577.6,1008,577.8z"/>
<path style="fill:#00ADEE;" d="M999.5,582.7c-0.5,0-0.9,0.3-1.1,0.8h-3.9l2.6-2.5v-2.6l1.8-1.7c0.2,0.1,0.4,0.2,0.6,0.2
c0.6,0,1.2-0.5,1.2-1.2c0-0.6-0.5-1.2-1.2-1.2s-1.2,0.5-1.2,1.2c0,0.2,0,0.3,0.1,0.4l-1.3,1.2v-3.9c0.5-0.2,0.8-0.6,0.8-1.1
c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v3.9l-1.2-1.2c0.1-0.2,0.1-0.3,0.1-0.5
c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.2,0,0.4,0,0.5-0.1l1.8,1.7v2.3l-2.4,2.3l-0.1-1.8
c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1l0.1,2.5l-2.3,2.2v-12.5l2-2
c0.1,0,0.3,0.1,0.4,0.1c0.6,0,1.2-0.5,1.2-1.2c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.2,0.1,0.4,0.2,0.6l-1.8,1.8
l-1.7-1.8c0.1-0.2,0.1-0.3,0.1-0.5c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.2,0,0.4,0,0.5-0.1
l1.9,2v8.7l-3.2-3.1v-2.5c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v1.7
l-2.6-2.5v-2.4c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v2.7l2.9,2.8h-1.9
c-0.2-0.5-0.6-0.8-1.1-0.8c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.5,0,0.9-0.3,1.1-0.8h2.7l3.6,3.5v6.7l-1.9-1.9v-2.5
c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v1.8l-3.1-3.1
c0-0.1,0.1-0.3,0.1-0.4c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.2,0,0.4-0.1,0.6-0.2l3.1,3h-1.9
c-0.2-0.5-0.6-0.8-1.1-0.8c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.5,0,0.9-0.3,1.1-0.8h2.6l2.8,2.8l3-2.8h2.5
c0.1,0.5,0.6,0.9,1.1,0.9c0.6,0,1.2-0.5,1.2-1.2c0-0.6-0.5-1.2-1.2-1.2c-0.5,0-0.9,0.3-1.1,0.7h-2.9l-2.4,2.2v-3l2.8-2.7h4.6
c0.2,0.5,0.6,0.8,1.1,0.8c0.6,0,1.2-0.5,1.2-1.2C1000.6,583.2,1000.1,582.7,999.5,582.7z M999.5,575.1c0.3,0,0.6,0.3,0.6,0.6
c0,0.3-0.3,0.6-0.6,0.6s-0.6-0.3-0.6-0.6C998.9,575.4,999.2,575.1,999.5,575.1z M994.1,576.2c-0.3,0-0.6-0.3-0.6-0.6
c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6C994.6,576,994.4,576.2,994.1,576.2z M996.2,572.3c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6
s-0.3,0.6-0.6,0.6S996.2,572.6,996.2,572.3z M993,580c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6S993,580.3,993,580z
M987.2,570.4c0-0.3,0.3-0.6,0.6-0.6c0.3,0,0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6C987.5,570.9,987.2,570.7,987.2,570.4z M986.1,575.5
c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6c0,0.3-0.3,0.6-0.6,0.6S986.1,575.8,986.1,575.5z M982.7,572.3c0-0.3,0.3-0.6,0.6-0.6
s0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6S982.7,572.6,982.7,572.3z M982.8,579.9c-0.3,0-0.6-0.3-0.6-0.6s0.3-0.6,0.6-0.6
c0.3,0,0.6,0.3,0.6,0.6S983.1,579.9,982.8,579.9z M987.3,584.3c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6
S987.3,584.7,987.3,584.3z M984,588.7c-0.3,0-0.6-0.3-0.6-0.6s0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6S984.3,588.7,984,588.7z
M997.2,587.6c0.3,0,0.6,0.3,0.6,0.6c0,0.3-0.3,0.6-0.6,0.6s-0.6-0.3-0.6-0.6C996.7,587.9,996.9,587.6,997.2,587.6z M993.4,569.8
c0.3,0,0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6s-0.6-0.3-0.6-0.6S993,569.8,993.4,569.8z M983.3,584.3c-0.3,0-0.6-0.3-0.6-0.6
s0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6S983.6,584.3,983.3,584.3z M999.5,584.4c-0.3,0-0.6-0.3-0.6-0.6s0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6
S999.8,584.4,999.5,584.4z"/>
</g>
</g>
<line id="edge_snooze_bottom_1_" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="820.1" y1="454.6" x2="1010.1" y2="454.6"/>
<line id="edge_snooze_top_1_" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="820.1" y1="347.6" x2="1010.1" y2="347.6"/>
<text id="sensor.clock_stacey_alarm_time" transform="matrix(1 0 0 1 839.0565 420.321)" style="fill:#00ADEE; font-family:'Helvetica'; font-size:59.6445px;">00:00</text>
<rect id="floorplan.clock_button" x="820.1" y="348.6" inkscape:label="#rect140" style="opacity:2.000000e-02;fill:#333333;" width="190" height="105">
</rect>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,144 @@
page_id: clock
image: /local/custom_ui/floorplan/clock.svg
stylesheet: /local/custom_ui/floorplan/clock.css
variables:
- name: floorplan.hours
- name: floorplan.minutes
defaults:
hover_over: false
more_info: false
rules:
- element: floorplan.clock_button
action:
service: floorplan.page_navigate
data:
page_id: clock_config
- entity: sensor.clock_stacey_alarm_time
text_template: '${entity.state.slice(0, 5)}'
- entity: input_boolean.clock_snooze
image_template: '/local/custom_ui/floorplan/buttons/${(entity.state === "on") ? "snooze_on" : "snooze"}.svg'
action:
service: homeassistant.toggle
- entity: input_boolean.school_mode
image_template: '/local/custom_ui/floorplan/buttons/${(entity.state === "on") ? "school_on" : "school_off"}.svg'
action:
service: homeassistant.toggle
- entity: media_player.alarm_clock
image_template: '/local/custom_ui/floorplan/buttons/${(entity.state === "playing") ? "stop" : "radio_on"}.svg'
action:
service_template: '${(entity.state === "playing") ? "media_player.media_stop" : "media_player.play_media"}'
data:
media_content_id: http://listen.djcmedia.com:80/americascountryhigh
media_content_type: audio/mp4
- name: thermostats_temp
entities:
- climate.downstairs
- climate.upstairs
text_template: '${entity.attributes.current_temperature ? Math.ceil(entity.attributes.current_temperature) + "°": "undefined"}'
class_template: 'return "static-temp";'
- name: temp_darksky
entities:
- sensor.dark_sky_temperature
text_template: '${entity.state ? Math.ceil(entity.state) + "°": "undefined"}'
class_template: 'return "static-temp";'
- name: text_states
entities:
- sensor.dark_sky_minutely_summary
hover_over: false
more_info: false
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text";'
- name: text_font_date
entities:
- sensor.clock_date
- sensor.clock_day
hover_over: false
more_info: false
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text-date";'
- name: text_font_time
entities:
- sensor.clock_time
hover_over: false
more_info: false
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text-time";'
- name: text_font_am_pm
entities:
- sensor.clock_am_pm
hover_over: false
more_info: false
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text-am_pm";'
# - name: Presence
# entities:
# - binary_sensor.sleepnumber_carlo_carlo_is_in_bed
# - binary_sensor.sleepnumber_carlo_stacey_is_in_bed
# states:
# - state: 'on'
# class: 'presence-on'
# - state: 'off'
# class: 'presence-off'
- name: Dark Sky Sensors
entities:
- entity: sensor.dark_sky_minutely_summary
element: sensor.dark_sky_minutely_summary_icon
image_template: '
var imageName = "";
switch (entity.attributes.entity_picture) {
case "/static/images/darksky/weather-sunny.svg":
imageName = "sunny-1";
break;
case "/static/images/darksky/weather-night.svg":
imageName = "night-1";
break;
case "/static/images/darksky/weather-partlycloudy.svg":
imageName = "partlycloudy-day-1";
break;
case "/static/images/darksky/weather-cloudy.svg":
imageName = "partlycloudy-night-1";
break;
case "/static/images/darksky/weather-cloudy.svg":
imageName = "cloudy-day-1";
break;
case "/static/images/darksky/weather-pouring.svg":
imageName = "thunder";
break;
case "/static/images/darksky/weather-snowy.svg":
imageName = "snowy-day-1";
break;
}
return "/local/custom_ui/floorplan/images/weather/" + imageName + ".svg";
'
- name: Camera Images
entities:
- camera.stone_door
image_template: '${entity.attributes.entity_picture}'

View File

@@ -0,0 +1,219 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="clock_layer" inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" sodipodi:docname="clock.svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1024 600"
style="enable-background:new 0 0 1024 600;" xml:space="preserve">
<pattern y="600" width="5" height="5" patternUnits="userSpaceOnUse" id="rect57_1_" viewBox="0 -5 5 5" style="overflow:visible;">
<g>
<rect y="-5" style="fill:none;" width="5" height="5"/>
<g>
<rect y="-5" style="fill:none;" width="5" height="5"/>
<g>
<rect y="-5" style="fill:none;" width="5" height="5"/>
<rect id="rect43_2_" y="-5" style="fill:none;" width="5" height="5"/>
<g>
<g>
<g>
<defs>
<path id="SVGID_1_" d="M4.9-3C4.9-3,4.8-3,4.9-3H4.3v-1.7c0-0.1,0-0.1-0.1-0.1H0.8c-0.1,0-0.1,0-0.1,0.1V-3H0.2
c0,0-0.1,0-0.1,0.1l0,0c0,0,0,0,0,0.1l0,0l2.3,2.2c0.1,0.1,0.1,0.1,0.2,0l1.1-1.1l0.1-0.1v0.2c0,0.1,0,0.1,0.1,0.1h0.3
c0.1,0,0.1,0,0.1-0.1v-0.7v-0.1c0.2-0.1,0.3-0.3,0.4-0.4v-0.1C4.8-2.9,4.9-2.9,4.9-3z"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="g47_2_" style="clip-path:url(#SVGID_2_);">
<radialGradient id="rect45_3_" cx="-83566.7813" cy="-97872.6094" r="4.43" gradientTransform="matrix(0.56 0 0 0.56 46707.2891 54684.4805)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#17426C"/>
<stop offset="1" style="stop-color:#050F1A"/>
</radialGradient>
<rect id="rect45_2_" y="-5" style="fill:url(#rect45_3_);" width="4.9" height="4.9"/>
</g>
</g>
</g>
</g>
<path id="path367_2_" style="fill:#19476D;" d="M3.6-3.2c0.1,0,0.2,0.1,0.2,0.2l0,0c0,0.1-0.1,0.2-0.2,0.2l0,0
C3.5-2.8,3.4-2.9,3.4-3l0,0l0,0C3.4-3.1,3.5-3.2,3.6-3.2z M1.4-3.2c0.1,0,0.2,0.1,0.2,0.2l0,0l0,0c0,0.1-0.1,0.2-0.2,0.2
S1.2-2.9,1.2-3S1.3-3.2,1.4-3.2L1.4-3.2z M2.3-4.1L1.6-3.4C1.4-3.5,1.1-3.4,1-3.2s0,0.5,0.2,0.6c0.1,0.1,0.3,0.1,0.5,0
c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.3,0-0.4l0.4-0.5v1.5C2.1-2.1,2-1.9,2-1.8s0,0.3,0.1,0.4c0.2,0.2,0.5,0.2,0.7,0l0,0l0,0
C2.9-1.4,3-1.6,3-1.7C3-1.9,2.9-2,2.7-2.1c0-0.4,0-1.5,0-1.5l0.4,0.5c0,0.1,0.1,0.4,0.3,0.5s0.5,0,0.6-0.2
c0.1-0.1,0.1-0.3,0-0.4C3.9-3.4,3.7-3.5,3.4-3.4L2.7-4.1v-0.6H2.3V-4.1z M2.7-1.7c0,0.1-0.1,0.2-0.2,0.2c-0.1,0-0.2-0.1-0.2-0.2
l0,0c0-0.1,0.1-0.2,0.2-0.2C2.6-1.9,2.7-1.8,2.7-1.7z"/>
</g>
</g>
</g>
</pattern>
<g id="BG" inkscape:label="#BG1">
<rect id="rect55" y="-0.5" width="1024" height="600.5"/>
<pattern id="rect57_2_" xlink:href="#rect57_1_" patternTransform="matrix(1 0 0 -1 -3 -33192)">
</pattern>
<rect id="rect57" y="-0.5" style="fill:url(#rect57_2_);" width="1024" height="600"/>
<radialGradient id="rect40_2_" cx="422.59" cy="1980.11" r="468.26" gradientTransform="matrix(1 0 0 0.5 0 -695.07)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="0.191" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="0.4815" style="stop-color:#000000;stop-opacity:0"/>
<stop offset="1" style="stop-color:#000000"/>
</radialGradient>
<rect id="rect40_1_" style="fill:url(#rect40_2_);" width="1024" height="600"/>
</g>
<g id="right_side_layout">
<line id="edge_doorbell_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="121.1" x2="1009.6" y2="121.1"/>
<line id="edge_snooze_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="115.1" x2="1009.6" y2="115.1"/>
<line id="edge_snooze_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="8.1" x2="1009.6" y2="8.1"/>
<line id="edge_doorbell_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="228.1" x2="1009.6" y2="228.1"/>
<line id="edge_doppler_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="234" x2="1009.6" y2="234"/>
<line id="edge_doppler_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="819.6" y1="341" x2="1009.6" y2="341"/>
<line id="edge_radio_top" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="818.7" y1="469" x2="1008.7" y2="469"/>
<line id="edge_radio_bottom" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="818.7" y1="556" x2="1008.7" y2="556"/>
</g>
<rect id="camera.stone_door" x="819.6" y="122.1" inkscape:label="#rect140" style="fill:#333333;" width="190" height="105">
</rect>
<rect id="sensor.dark_sky_minutely_summary_icon" x="23.3" y="15" inkscape:label="#rect395" style="fill:#666666;" width="70.5" height="62.2">
</rect>
<rect id="input_boolean.school_mode" x="819.6" y="235" inkscape:label="#rect140" style="fill:#333333;" width="190" height="105">
</rect>
<rect id="media_player.alarm_clock" x="818.6" y="470.2" inkscape:label="#rect140" style="fill:#333333;" width="190" height="83.8">
</rect>
<rect id="input_boolean.clock_snooze" x="819.1" y="9.2" inkscape:label="#rect140" style="fill:#333333;" width="190" height="105">
</rect>
<text id="sensor.dark_sky_minutely_summary" transform="matrix(1 0 0 1 188.8361 58.1703)" style="fill:#808080; font-family:'Helvetica'; font-size:48px;">Hell Fire for the next 2 hours</text>
<text id="sensor.dark_sky_temperature" transform="matrix(1 0 0 1 112.8211 58.1696)" style="fill:#808080; font-family:'Helvetica'; font-size:48px;">72</text>
<g>
<g id="powered_by_2_">
<g id="powered_by-2_2_">
<g id="text857_2_">
<path style="fill:#00ADEE;" d="M852.4,582c-0.3-0.9-1-1.7-1.8-2.3c-0.8-0.5-1.8-0.8-2.8-0.8c-0.7,0-1.4,0.1-2.1,0.5
c-0.6,0.4-1.1,0.8-1.5,1.4v-1.7h-1.9v1.1h-9.7c-0.1-0.9-0.9-1.6-1.8-1.6c-1,0-1.9,0.8-1.9,1.9s0.8,1.9,1.9,1.9
c1,0,1.8-0.8,1.9-1.7h9.7v7.8h-6.8c-0.1-1-0.9-1.7-1.8-1.7c-1,0-1.9,0.8-1.9,1.9c0,1,0.8,1.9,1.9,1.9c0.9,0,1.7-0.7,1.8-1.6h6.8
v7.4h2.1v-6.1c0.4,0.5,0.8,0.9,1.4,1.2c0.6,0.2,1.3,0.4,1.9,0.4c0.9,0,1.9-0.3,2.7-0.8c0.9-0.5,1.6-1.3,2-2.3
c0.4-1.1,0.6-2.3,0.6-3.5C853,584.2,852.8,583.1,852.4,582z M830.8,582c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4
c0.8,0,1.4,0.6,1.4,1.4C832.2,581.4,831.5,582,830.8,582z M833.6,590.2c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4
c0.8,0,1.4,0.6,1.4,1.4C835.1,589.5,834.4,590.2,833.6,590.2z M850,589.2L850,589.2c-0.6,0.8-1.5,1.2-2.4,1.2
c-0.9,0-1.8-0.4-2.3-1.2c-0.8-1-1.1-2.3-1.1-3.6c-0.1-1.3,0.2-2.6,1.1-3.6c0.6-0.8,1.5-1.2,2.4-1.3c0.9,0,1.8,0.4,2.3,1.2
c0.7,1,1.1,2.3,1.1,3.6C851.1,586.8,850.7,588.1,850,589.2z"/>
<path id="path1976_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M865,580.6c-1.1-1.1-2.6-1.7-4.2-1.7
c-1.5,0-2.9,0.5-4,1.4c-1.4,1.3-2.1,3.2-1.9,5.1c-0.1,1.8,0.5,3.6,1.8,4.9c1.1,1.2,2.6,1.8,4.2,1.7c1,0,2-0.3,2.9-0.8
c0.9-0.5,1.6-1.3,2.1-2.2c0.6-1.2,0.8-2.5,0.8-3.8C866.7,583.5,866.1,581.9,865,580.6L865,580.6z M863.3,589
c-0.6,0.8-1.6,1.2-2.6,1.2c-1,0.1-2-0.4-2.7-1.2c-0.7-1-1.1-2.3-1.1-3.6c-0.1-1.2,0.3-2.5,1.1-3.5c0.7-0.7,1.7-1.2,2.7-1.2
c1,0,1.9,0.4,2.6,1.2c0.7,1,1.1,2.2,1.1,3.5C864.4,586.7,864,588,863.3,589L863.3,589z"/>
<path id="path1978_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M871.4,591.7l-3.8-12.4h2.2l1.9,7.2l0.8,2.7
c0-0.1,0.3-1.1,0.6-2.6l1.9-7.3h2.2l1.9,7.2l0.6,2.4l0.8-2.4l2.2-7.2h2l-3.8,12.4h-2.2l-1.9-7.4l-0.5-2.2l-2.6,9.6L871.4,591.7z
"/>
<path id="path1980_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M897.2,585.2c0.1-1.7-0.4-3.4-1.5-4.7
c-1.1-1.1-2.6-1.7-4.1-1.7c-1.6,0-3.1,0.6-4.2,1.8c-1.2,1.3-1.8,3.1-1.7,4.9c-0.1,1.7,0.4,3.4,1.5,4.7c1.1,1.2,2.7,1.8,4.3,1.7
c1.3,0,2.5-0.4,3.6-1.1c0.9-0.7,1.6-1.8,1.9-2.9l-2.2-0.3c-0.2,0.8-0.7,1.4-1.4,1.8c-0.6,0.4-1.2,0.6-1.9,0.6
c-1,0-1.9-0.4-2.6-1.2c-0.7-0.9-1.1-2-1.2-3.2h9.3L897.2,585.2z M888,584.3c0-1,0.4-1.9,1.2-2.6c0.6-0.7,1.5-1.1,2.4-1.1
c1,0,1.9,0.5,2.6,1.3c0.5,0.7,0.7,1.5,0.8,2.3L888,584.3z"/>
<path id="path1982_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M899.8,591.7v-12.4h1.9v1.8
c0.3-0.7,0.8-1.3,1.3-1.8c0.4-0.3,0.9-0.4,1.4-0.4c0.8,0,1.5,0.3,2.2,0.6l-0.8,1.9c-0.5-0.2-1-0.4-1.5-0.4
c-0.5,0-0.9,0.1-1.3,0.4c-0.4,0.3-0.7,0.7-0.8,1.2c-0.3,0.8-0.4,1.6-0.4,2.4v6.5h-2.1V591.7z"/>
<path id="path1984_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M918.6,585.2c0.1-1.7-0.4-3.4-1.5-4.7
c-1.1-1.1-2.5-1.7-4.1-1.7c-1.6-0.1-3.2,0.6-4.2,1.8c-1.2,1.3-1.8,3.1-1.7,4.9c-0.1,1.7,0.4,3.4,1.5,4.7
c1.1,1.2,2.7,1.8,4.4,1.7c1.3,0,2.5-0.4,3.6-1.1c0.9-0.7,1.6-1.8,1.9-2.9l-2.2-0.3c-0.2,0.8-0.7,1.4-1.4,1.8
c-0.5,0.4-1.2,0.7-1.9,0.6c-1,0-1.9-0.4-2.6-1.2c-0.7-0.9-1.1-2-1.2-3.2h9.3V585.2z M909.4,584.3c0-1,0.4-1.9,1.2-2.6
c0.6-0.7,1.5-1.1,2.4-1.1c1,0,1.9,0.5,2.6,1.3c0.4,0.7,0.7,1.5,0.8,2.3L909.4,584.3z"/>
<path id="path1986_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M929.2,574.7v6.1c-0.3-0.6-0.8-1-1.4-1.3
c-0.6-0.4-1.3-0.5-2.1-0.5c-1,0-2,0.3-2.8,0.8c-0.9,0.5-1.5,1.3-1.8,2.3c-0.4,1.1-0.7,2.2-0.6,3.3c0,1.1,0.2,2.3,0.6,3.3
c0.4,0.9,1.1,1.8,1.9,2.3c0.8,0.5,1.7,0.8,2.7,0.8c1.4,0.1,2.7-0.6,3.5-1.8v1.8h2.1v-17.1H929.2z M928.3,589
c-1.4,1.7-5.8,2.6-5.8-3.6c-0.1-1.3,0.3-2.6,1.1-3.6c0.5-0.7,1.4-1.1,2.3-1.2c0.9,0,1.9,0.4,2.4,1.2c0.8,1.1,1.1,2.4,1.1,3.7
C929.5,586.8,929.1,588,928.3,589L928.3,589z"/>
<path id="path1988_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M951.6,582.8c-0.3-0.7-0.6-1.4-1.1-2.1
c-0.4-0.6-1-1-1.7-1.3c-0.6-0.4-1.4-0.5-2.1-0.5c-1.4,0-2.6,0.6-3.5,1.7v-6.1h-2.1v17.3h1.9v-1.4c0.8,1.1,2.1,1.8,3.5,1.8
c1.5,0,2.9-0.7,3.8-1.8c1.1-1.4,1.7-3.2,1.5-5C952,584.4,951.9,583.6,951.6,582.8L951.6,582.8z M948.9,589
c-0.6,0.7-1.5,1.1-2.4,1.2c-1.1,0-2.1-0.7-2.7-1.7c-0.5-1-0.7-2.1-0.6-3.2c-0.1-1.2,0.3-2.5,1.1-3.5c0.6-0.7,1.5-1.1,2.4-1.2
c0.9,0,1.7,0.4,2.3,1.2c0.8,1,1.1,2.3,1.1,3.6C950,586.7,949.7,588,948.9,589z"/>
<path id="path1990_2_" inkscape:connector-curvature="0" style="fill:#00ADEE;" d="M954.4,596.4l-0.3-1.9
c0.4,0.1,0.8,0.1,1.2,0.1c0.4,0,0.8-0.1,1.2-0.3c0.3-0.2,0.5-0.4,0.6-0.6c0.3-0.5,0.5-1,0.6-1.5c0-0.1,0.1-0.3,0.1-0.5
l-4.7-12.4h2.3l2.6,7.2c0.4,1,0.7,1.9,0.9,2.9c0.2-1,0.5-1.9,0.9-2.8l2.7-7.3h2l-4.7,12.7c-0.3,1-0.7,1.9-1.1,2.8
c-0.3,0.6-0.8,1.1-1.3,1.5c-0.5,0.4-1.1,0.6-1.8,0.5C955.4,596.7,955,596.7,954.4,596.4L954.4,596.4z"/>
</g>
</g>
</g>
<g>
<path style="fill:#00ADEE;" d="M825.8,581.4c-1,0-1.8,0.8-1.8,1.7h-5.1v0.4h5.1c0.1,0.9,0.9,1.6,1.8,1.6c1,0,1.9-0.8,1.9-1.9
C827.7,582.2,826.8,581.4,825.8,581.4z M825.8,584.6c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4s1.4,0.6,1.4,1.4
C827.2,584,826.6,584.6,825.8,584.6z"/>
</g>
<g>
<path style="fill:#00ADEE;" d="M837.8,591c-1,0-1.7,0.7-1.8,1.6h-6.6l-1.9-1.9h-8.5v0.4h8.4l1.9,1.9h6.8c0.1,0.9,0.9,1.6,1.8,1.6
c1,0,1.9-0.8,1.9-1.9C839.6,591.8,838.8,591,837.8,591z M837.8,594.3c-0.8,0-1.4-0.6-1.4-1.4c0-0.8,0.6-1.4,1.4-1.4
c0.8,0,1.4,0.6,1.4,1.4C839.2,593.6,838.6,594.3,837.8,594.3z"/>
</g>
<g>
<path style="fill:#00ADEE;" d="M837.8,582.8c-1,0-1.8,0.7-1.8,1.7h-5.5l-3.3,3.5h-8.5v0.4h8.7l3.3-3.5h5.3
c0.1,0.9,0.9,1.6,1.8,1.6c1,0,1.9-0.8,1.9-1.9C839.6,583.6,838.8,582.8,837.8,582.8z M837.8,586.1c-0.8,0-1.4-0.6-1.4-1.4
c0-0.8,0.6-1.4,1.4-1.4c0.8,0,1.4,0.6,1.4,1.4C839.2,585.4,838.6,586.1,837.8,586.1z"/>
</g>
<g>
<path style="fill:#FFF2DF;" d="M1008,577.8c0,0.3-0.3,0.7-0.7,0.7h-3.3v11.7c0,0.6-0.5,1-1,1h-24.8c-0.6,0-1-0.5-1-1v-11.7h-3.3
c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.3-0.2-0.5c0-0.2,0.1-0.3,0.2-0.5l16.7-16.7c0.3-0.3,0.7-0.3,0.9,0l8.7,8.7v-1.7
c0-0.3,0.3-0.6,0.6-0.6h2.8c0.3,0,0.6,0.3,0.6,0.6v5.1c0,0.1-0.1,0.3-0.1,0.4l4.2,4.2C1007.9,577.4,1008,577.6,1008,577.8z"/>
<path style="fill:#00ADEE;" d="M999.5,582.7c-0.5,0-0.9,0.3-1.1,0.8h-3.9l2.6-2.5v-2.6l1.8-1.7c0.2,0.1,0.4,0.2,0.6,0.2
c0.6,0,1.2-0.5,1.2-1.2c0-0.6-0.5-1.2-1.2-1.2s-1.2,0.5-1.2,1.2c0,0.2,0,0.3,0.1,0.4l-1.3,1.2v-3.9c0.5-0.2,0.8-0.6,0.8-1.1
c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v3.9l-1.2-1.2c0.1-0.2,0.1-0.3,0.1-0.5
c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.2,0,0.4,0,0.5-0.1l1.8,1.7v2.3l-2.4,2.3l-0.1-1.8
c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1l0.1,2.5l-2.3,2.2v-12.5l2-2
c0.1,0,0.3,0.1,0.4,0.1c0.6,0,1.2-0.5,1.2-1.2c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.2,0.1,0.4,0.2,0.6l-1.8,1.8
l-1.7-1.8c0.1-0.2,0.1-0.3,0.1-0.5c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.2,0,0.4,0,0.5-0.1
l1.9,2v8.7l-3.2-3.1v-2.5c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v1.7
l-2.6-2.5v-2.4c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v2.7l2.9,2.8h-1.9
c-0.2-0.5-0.6-0.8-1.1-0.8c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.5,0,0.9-0.3,1.1-0.8h2.7l3.6,3.5v6.7l-1.9-1.9v-2.5
c0.5-0.2,0.8-0.6,0.8-1.1c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.5,0.3,0.9,0.8,1.1v1.8l-3.1-3.1
c0-0.1,0.1-0.3,0.1-0.4c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.2,0,0.4-0.1,0.6-0.2l3.1,3h-1.9
c-0.2-0.5-0.6-0.8-1.1-0.8c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2c0.5,0,0.9-0.3,1.1-0.8h2.6l2.8,2.8l3-2.8h2.5
c0.1,0.5,0.6,0.9,1.1,0.9c0.6,0,1.2-0.5,1.2-1.2c0-0.6-0.5-1.2-1.2-1.2c-0.5,0-0.9,0.3-1.1,0.7h-2.9l-2.4,2.2v-3l2.8-2.7h4.6
c0.2,0.5,0.6,0.8,1.1,0.8c0.6,0,1.2-0.5,1.2-1.2C1000.6,583.2,1000.1,582.7,999.5,582.7z M999.5,575.1c0.3,0,0.6,0.3,0.6,0.6
c0,0.3-0.3,0.6-0.6,0.6s-0.6-0.3-0.6-0.6C998.9,575.4,999.2,575.1,999.5,575.1z M994.1,576.2c-0.3,0-0.6-0.3-0.6-0.6
c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6C994.6,576,994.4,576.2,994.1,576.2z M996.2,572.3c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6
s-0.3,0.6-0.6,0.6S996.2,572.6,996.2,572.3z M993,580c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6S993,580.3,993,580z
M987.2,570.4c0-0.3,0.3-0.6,0.6-0.6c0.3,0,0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6C987.5,570.9,987.2,570.7,987.2,570.4z M986.1,575.5
c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6c0,0.3-0.3,0.6-0.6,0.6S986.1,575.8,986.1,575.5z M982.7,572.3c0-0.3,0.3-0.6,0.6-0.6
s0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6S982.7,572.6,982.7,572.3z M982.8,579.9c-0.3,0-0.6-0.3-0.6-0.6s0.3-0.6,0.6-0.6
c0.3,0,0.6,0.3,0.6,0.6S983.1,579.9,982.8,579.9z M987.3,584.3c0-0.3,0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6
S987.3,584.7,987.3,584.3z M984,588.7c-0.3,0-0.6-0.3-0.6-0.6s0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6S984.3,588.7,984,588.7z
M997.2,587.6c0.3,0,0.6,0.3,0.6,0.6c0,0.3-0.3,0.6-0.6,0.6s-0.6-0.3-0.6-0.6C996.7,587.9,996.9,587.6,997.2,587.6z M993.4,569.8
c0.3,0,0.6,0.3,0.6,0.6s-0.3,0.6-0.6,0.6s-0.6-0.3-0.6-0.6S993,569.8,993.4,569.8z M983.3,584.3c-0.3,0-0.6-0.3-0.6-0.6
s0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6S983.6,584.3,983.3,584.3z M999.5,584.4c-0.3,0-0.6-0.3-0.6-0.6s0.3-0.6,0.6-0.6s0.6,0.3,0.6,0.6
S999.8,584.4,999.5,584.4z"/>
</g>
</g>
<line id="edge_snooze_bottom_1_" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="820.1" y1="454.6" x2="1010.1" y2="454.6"/>
<line id="edge_snooze_top_1_" style="fill:none;stroke:#FFFFFF;stroke-miterlimit:10;" x1="820.1" y1="347.6" x2="1010.1" y2="347.6"/>
<g id="floorplan.hours">
<text transform="matrix(1 0 0 1 133.7388 344.7773)" style="fill:#00ADEE; font-family:'Helvetica'; font-size:215.1912px;">00</text>
</g>
<g id="floorplan.minutes">
<text transform="matrix(1 0 0 1 430.9023 344.7764)" style="fill:#00ADEE; font-family:'Helvetica'; font-size:215.1912px;">00</text>
</g>
<g>
<text transform="matrix(1 0 0 1 374.9932 327)" style="fill:#00ADEE; font-family:'Helvetica'; font-size:202.3689px;">:</text>
</g>
<path id="input_number.alarm_time_hours_up" inkscape:connector-curvature="0" inkscape:label="input_number.alarm_time_hours_up" style="fill:#62BB46;" d="
M122.1,246.1l-0.6-0.6L76,198.8c-1.8-1.8-4.1-2.3-6.4-2.3c-2.3,0-4.7,1.2-6.4,2.3l-45.5,46.7l-0.6,0.6c-0.6,0.6-1.2,1.8-1.2,2.3
c0,2.3,2.3,4.7,5.8,4.7l0,0h96.3l0,0c2.9,0,5.8-2.3,5.8-4.7C122.7,247.8,122.7,246.7,122.1,246.1L122.1,246.1z"/>
<path id="input_number.alarm_time_hours_down" inkscape:connector-curvature="0" inkscape:label="input_number.alarm_time_hours_down" style="fill:#6ABD45;" d="
M17.7,299.5l0.6,0.6l45.5,46.7c1.8,1.8,4.1,2.3,6.4,2.3c2.3,0,4.7-1.2,6.4-2.3l45.5-46.7l0.6-0.6c0.6-0.6,1.2-1.8,1.2-2.3
c0-2.3-2.3-4.7-5.8-4.7l0,0H21.7l0,0c-2.9,0-5.8,2.3-5.8,4.7C16.5,297.8,17.1,298.4,17.7,299.5L17.7,299.5z"/>
<path id="input_number.alarm_time_minutes_up" inkscape:connector-curvature="0" inkscape:label="input_number.alarm_time_minutes_up" style="fill:#6ABD45;" d="
M794.4,246.1l-0.6-0.6l-45.5-46.7c-1.8-1.8-4.1-2.3-6.4-2.3c-2.3,0-4.7,1.2-6.4,2.3l-45.5,46.7l-0.6,0.6c-0.6,0.6-1.2,1.8-1.2,2.3
c0,2.3,2.3,4.7,5.8,4.7l0,0h95.7l0,0c2.9,0,5.8-2.3,5.8-4.7C795.6,247.8,795,246.7,794.4,246.1L794.4,246.1z"/>
<path id="input_number.alarm_time_minutes_down" inkscape:connector-curvature="0" inkscape:label="input_number.alarm_time_minutes_down" style="fill:#6ABD45;" d="
M689.6,299.5l0.6,0.6l45.5,46.7c1.8,1.8,4.1,2.3,6.4,2.3s4.7-1.2,6.4-2.3l45.5-46.7l0.6-0.6c0.6-0.6,1.2-1.8,1.2-2.3
c0-2.3-2.3-4.7-5.8-4.7l0,0h-96.3l0,0c-2.9,0-5.8,2.3-5.8,4.7C688.5,298.4,689.1,299,689.6,299.5L689.6,299.5z"/>
<g id="floorplan.save_alarm_time_button" transform="translate(33.628717,-21.952464)" inkscape:label="input_datetime.alarm_time_set">
<rect id="rect4595_1_" x="287" y="465.7" width="160.5" height="60.9"/>
<text transform="matrix(1 0 0 1 334.6866 505.3866)" style="fill:#FFFFFF; font-family:'Helvetica'; font-size:28.5181px;">Save</text>
<text transform="matrix(1 0 0 1 334.6866 505.3866)" style="fill:none;stroke:#000000;stroke-width:0.265; font-family:'Helvetica'; font-size:28.5181px;">Save</text>
</g>
<text id="sensor.clock_stacey_alarm_time" transform="matrix(1 0 0 1 840.7178 418.582)" style="fill:#00ADEE; font-family:'Helvetica'; font-size:59.6451px;">00:00</text>
<rect id="floorplan.clock_button" x="820.1" y="348.6" inkscape:label="#rect140" style="opacity:2.000000e-02;fill:#333333;" width="190" height="105">
</rect>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,172 @@
page_id: clock_config
image: /local/custom_ui/floorplan/clock_config.svg
stylesheet: /local/custom_ui/floorplan/clock.css
variables:
- name: floorplan.hours
- name: floorplan.minutes
defaults:
hover_over: false
more_info: false
startup:
action:
- service: floorplan.variable_set
data:
variable: floorplan.hours
value_template: 'return parseInt(entities["sensor.clock_stacey_alarm_time"].state.slice(0, 2));'
- service: floorplan.variable_set
data:
variable: floorplan.minutes
value_template: 'return parseInt(entities["sensor.clock_stacey_alarm_time"].state.slice(3, 5));'
rules:
- element: floorplan.clock_button
action:
service: floorplan.page_navigate
data:
page_id: clock
- entity: sensor.clock_stacey_alarm_time
text_template: '${entity.state.slice(0, 5)}'
- entities:
- floorplan.hours
- floorplan.minutes
text_template: '${("0" + entity.state).slice(-2)}'
- entity: floorplan.hours
element: input_number.alarm_time_hours_up
action:
service: floorplan.variable_set
data:
variable: floorplan.hours
value_template: '${(parseInt(entity.state) + 1) % 24}'
- entity: floorplan.hours
element: input_number.alarm_time_hours_down
action:
service: floorplan.variable_set
data:
variable: floorplan.hours
value_template: '${((parseInt(entity.state) - 1) + 24) % 24}'
- entity: floorplan.minutes
element: input_number.alarm_time_minutes_up
action:
service: floorplan.variable_set
data:
variable: floorplan.minutes
value_template: '${((parseInt(entity.state / 5) * 5) + 5) % 60}'
- entity: floorplan.minutes
element: input_number.alarm_time_minutes_down
action:
service: floorplan.variable_set
data:
variable: floorplan.minutes
value_template: '${(((parseInt(entity.state / 5) * 5) - 5) + 60) % 60}'
- element: floorplan.save_alarm_time_button
action:
service: mqtt.publish
data_template: '{
"payload": "${("0"+ entities[`floorplan.hours`].state).slice(-2)}:${("0" + entities[`floorplan.minutes`].state).slice(-2)}",
"topic": "clock/stacey_alarm_time",
"retain": true
}'
- entity: input_boolean.clock_snooze
image_template: '/local/custom_ui/floorplan/buttons/${(entity.state === "on") ? "snooze_on" : "snooze"}.svg'
action:
service: homeassistant.toggle
- entity: input_boolean.school_mode
image_template: '/local/custom_ui/floorplan/buttons/${(entity.state === "on") ? "school_on" : "school_off"}.svg'
action:
service: homeassistant.toggle
- entity: media_player.alarm_clock
image_template: '/local/custom_ui/floorplan/buttons/${(entity.state === "playing") ? "stop" : "radio_on"}.svg'
action:
service_template: '${(entity.state === "playing") ? "media_player.media_stop" : "media_player.play_media"}'
data:
media_content_id: http://listen.djcmedia.com:80/americascountryhigh
media_content_type: audio/mp4
- name: temp_darksky
entities:
- sensor.dark_sky_temperature
text_template: '${entity.state ? Math.ceil(entity.state) + "°": "undefined"}'
class_template: 'return "static-temp";'
- name: text_states
entities:
- sensor.dark_sky_minutely_summary
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text";'
- name: text_font_date
entities:
- sensor.clock_date
- sensor.clock_day
hover_over: false
more_info: false
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text-date";'
- name: text_font_time
entities:
- sensor.clock_time
hover_over: false
more_info: false
text_template: '${entity.state ? entity.state : "undefined"}'
class_template: 'return "static-text-time";'
- name: Dark Sky Sensors
entities:
- entity: sensor.dark_sky_minutely_summary
element: sensor.dark_sky_minutely_summary_icon
image_template: '
var imageName = "";
switch (entity.attributes.entity_picture) {
case "/static/images/darksky/weather-sunny.svg":
imageName = "sunny-1";
break;
case "/static/images/darksky/weather-night.svg":
imageName = "night-1";
break;
case "/static/images/darksky/weather-partlycloudy.svg":
imageName = "partlycloudy-day-1";
break;
case "/static/images/darksky/weather-cloudy.svg":
imageName = "partlycloudy-night-1";
break;
case "/static/images/darksky/weather-cloudy.svg":
imageName = "cloudy-day-1";
break;
case "/static/images/darksky/weather-pouring.svg":
imageName = "thunder";
break;
case "/static/images/darksky/weather-snowy.svg":
imageName = "snowy-day-1";
break;
}
return "/local/custom_ui/floorplan/images/weather/" + imageName + ".svg";
'
- name: Camera Images
entities:
- camera.stone_door
image_template: '${entity.attributes.entity_picture}'

View File

@@ -0,0 +1,19 @@
## This is the main Floorplan configuration page. To define the pages.
## This one is called Floorclock since this is for my Clock application.
## log_level: which can be set to one these: error, warning, info or debug
date_format: MMM-DD-YYYY
#log_level: debug
fully_kiosk:
- name: Alarm Clock
address: 00:FC:8B:4A:D5:CF
motion_sensor: binary_sensor.clock_motion
plugged_sensor: binary_sensor.clock_plugged
screensaver_light: light.clock_screensaver
media_player: media_player.alarm_clock
pages:
- /local/custom_ui/floorplan/clock.yaml
- /local/custom_ui/floorplan/clock_config.yaml

View File

@@ -0,0 +1,21 @@
date_format: MMM-DD-YYYY
#log_level: error
fully_kiosk:
- name: Bedroom Alarm Panel
address: B4:7C:9C:9E:85:90
motion_sensor: binary_sensor.bedroom_motion
plugged_sensor: binary_sensor.bedroom_plugged
screensaver_light: light.bedroom_screensaver
media_player: media_player.bedroom_alarm_panel
# - name: Entry Alarm Panel
# address: 00:FC:8B:4A:D5:CF
# entities:
# - binary_sensor.entry_motion
# - binary_sensor.entry_plugged
# - media_player.entry_alarm_panel
pages:
- /local/custom_ui/floorplan/alarm.yaml

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -0,0 +1,191 @@
<!--
Floorplan for Home Assistant
Version: 1.0.7.51
By Petar Kozul
https://github.com/pkozul/ha-floorplan
-->
<script src="lib/jquery-3.2.1.min.js"></script>
<script src="lib/moment.min.js"></script>
<script src="lib/yaml.min.js"></script>
<!-- As documented here for Google Chrome, removes the need for touchstart -->
<meta name="viewport" content="width=device-width">
<dom-module id="ha-floorplan">
<template>
<style>
#floorplan {
width: 100%;
height: 100%;
}
.loading-container {
text-align: center;
padding: 8px;
}
.loading {
height: 0px;
overflow: hidden;
}
#log {
max-height: 150px;
overflow: auto;
background-color: #eee;
display: none;
padding: 10px;
}
#log ul {
list-style-type: none;
padding-left: 0px;
}
.error {
color: #FF0000;
}
.warning {
color: #FF851B;
}
.info {
color: #0000FF;
}
.debug {
color: #000000;
}
</style>
<template is='dom-if' if='[[isLoading]]'>
<div class='loading-container'>
<paper-spinner active alt='Loading'></paper-spinner>
</div>
</template>
<div id="log">
<a href="#" onclick="$(this).siblings('ul').html('').parent().css('display', 'none');">Clear log</a>
<ul></ul>
</div>
<div id="floorplan" on-tap="stopPropagation"></div>
</template>
</dom-module>
<script>
class HaFloorplan extends window.hassMixins.EventsMixin(Polymer.Element) {
static get is() { return 'ha-floorplan'; }
static get properties() {
return {
hass: {
type: Object,
observer: 'hassChanged'
},
inDialog: {
type: Boolean,
value: false,
},
isPanel: {
type: Boolean,
value: false,
},
config: {
type: Object,
},
isLoading: {
type: Boolean,
value: true,
},
flooplan: {
type: Object,
value: undefined,
},
};
}
connectedCallback() {
super.connectedCallback();
this.initFloorplan();
}
stopPropagation(e) {
e.stopPropagation();
}
initFloorplan() {
this.loadScript('/local/custom_ui/floorplan/lib/floorplan.js')
.then(() => {
this.floorplan = new Floorplan();
let options = {
doc: Polymer.dom(this.root).node,
hass: this.hass,
openMoreInfo: this.openMoreInfo.bind(this),
setIsLoading: this.setIsLoading.bind(this),
config: (this.config && this.config.config) || this.config,
};
this.floorplan.init(options)
.then(() => {
this.setIsLoading(false);
});
})
.catch((error) => {
this.setIsLoading(false);
this.logError(error);
});
}
hassChanged(newHass, oldHass) {
if (this.floorplan) {
this.floorplan.hassChanged(newHass, oldHass);
}
}
loadScript(scriptUrl) {
return new Promise((resolve, reject) => {
let script = document.createElement('script');
script.src = this.cacheBuster(scriptUrl);
script.onload = () => {
return resolve();
};
script.onerror = (err) => {
reject(new URIError(`${err.target.src}`));
};
Polymer.dom(this.root).node.appendChild(script);
});
}
openMoreInfo(entityId) {
this.fire('hass-more-info', { entityId: entityId });
}
setIsLoading(isLoading) {
this.isLoading = isLoading;
}
cacheBuster(url) {
return `${url}${(url.indexOf('?') >= 0) ? '&' : '?'}_=${new Date().getTime()}`;
}
logError(message) {
console.error(message);
let log = Polymer.dom(this.$.log).node;
$(log).find('ul').prepend(`<li class="error">${message}</li>`)
$(log).css('display', 'block');
}
}
customElements.define(HaFloorplan.is, HaFloorplan);
</script>

Binary file not shown.

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 156" style="enable-background:new 0 0 250 156;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#DFEFF1;}
</style>
<path class="wst0" d="M247.6,127.1c-6.2,17.3-22.7,28.9-41.1,28.9h-179c-7.7-0.3-14.7-3.5-19.9-9c-5.2-5.5-7.8-12.7-7.5-20.3
c0.6-15,12.7-27.1,27.4-27.4l1.5,0l0.2-1.5c2.3-22.3,20.8-39.1,43.1-39.1h1.5l0.2-1.5c5-35.9,38.2-61.3,74-56.6
c27,3.7,48.7,23,55.3,49.3c1.6,6.4,2.8,14.2,2.2,15.6l0.5,0.3c-19.2,0.3-37,12.3-43.7,31.4l1.6,0.5l1.6,0.5c0.3-0.8,0.6-1.6,0.9-2.3
c6.5-15.7,21.5-25.8,37.9-26.7c5.5-0.3,11.2,0.4,16.8,2.4C243.5,79.4,255.5,104.3,247.6,127.1z"/>
</svg>

After

Width:  |  Height:  |  Size: 867 B

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 158 250" style="enable-background:new 0 0 158 250;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#F7F5BC;}
</style>
<path class="wst0" d="M158,125c0,69-56,125-125,125c-11.4,0-22.5-1.6-33-4.5c53-14.5,92-62.9,92-120.5S53,18.9,0,4.5
C10.5,1.6,21.6,0,33,0C102.1,0,158,56,158,125z"/>
</svg>

After

Width:  |  Height:  |  Size: 575 B

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 155.4" style="enable-background:new 0 0 250 155.4;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#FFD150;}
.st1{fill:#DFEFF1;}
</style>
<g>
<path class="wst0" d="M12,103.4C-6.4,81-3.4,47.8,19.1,29.1C38.1,13.4,65.9,13,85.3,28.4v75H12z"/>
<path class="st1" d="M247.6,126.6c-6.2,17.2-22.6,28.8-40.9,28.8H28.3c-7.7-0.3-14.6-3.5-19.8-9S0.7,133.7,1,126.2
c0.6-14.9,12.7-27,27.3-27.3h1.5l0.2-1.5C32.3,75.2,50.7,58.4,73,58.4h1.5l0.2-1.5c5-35.8,38.1-61.1,73.7-56.4
c26.9,3.7,48.5,22.9,55.1,49.1c1.6,6.4,2.8,14.1,2.2,15.5l0.5,0.3c-19.1,0.3-36.9,12.3-43.5,31.3l1.6,0.5l1.6,0.5
c0.3-0.8,0.6-1.6,0.9-2.3c6.5-15.6,21.4-25.7,37.8-26.6c5.5-0.3,11.2,0.4,16.7,2.4C243.5,79.1,255.4,103.9,247.6,126.6z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 998 B

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 144.2" style="enable-background:new 0 0 250 144.2;" xml:space="preserve">
<path style="fill:#DFEFF1;" d="M247.8,118.8c-5.8,16.1-21.2,27-38.4,27l-167.5,0c-7.2-0.3-13.7-3.3-18.6-8.4s-7.3-11.9-7-19
c0.6-14,11.9-25.3,25.6-25.6h1.4l0.2-1.4c2.2-20.8,19.4-36.6,40.4-36.6h1.4l0.2-1.4c4.7-33.6,35.8-57.4,69.2-52.9
c25.2,3.5,45.5,21.5,51.7,46.1c1.5,6,2.6,13.2,2.1,14.5l0.5,0.3c-17.9,0.3-34.6,11.5-40.8,29.4l1.5,0.5l1.5,0.5
c0.3-0.8,0.6-1.5,0.8-2.2c6.1-14.6,20.1-24.1,35.5-25c5.2-0.3,10.5,0.4,15.7,2.3C243.9,74.2,255.1,97.5,247.8,118.8z"/>
<path style="fill:#F7F5BC;" d="M78.8,114.6c-3.8,0.8-7.7,1.3-11.8,1.3c-30.4,0-55-24.6-55-55c0-30.4,24.6-55,55-55
c4,0,8,0.4,11.8,1.3c-24.7,5.4-43.2,27.4-43.2,53.8S54.1,109.2,78.8,114.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 1007 B

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 152.3" style="enable-background:new 0 0 250 152.3;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#FFD150;}
.st1{fill:#DFEFF1;}
</style>
<g>
<path class="wst0" d="M97,33.9c5.1,5.7,8.8,12.6,10.5,20.3v52.7H52.2v0.3c-7.1-1.9-13.4-5.4-18.5-10l-13.3,13.3l-2-2l13.3-13.3
c-7.8-8-12.4-18.7-12.7-29.9H0v-2.9h19c0.1-3.3,0.6-6.6,1.5-10c2-7.1,5.5-13.4,10.2-18.6L17.2,20.4l2-2l13.5,13.4
C40.6,24.1,51,19.4,62.2,19V0H65v19c3.4,0.1,6.8,0.6,10.3,1.5c7.6,2,14.4,6,19.8,11.3l13.5-13.2l2,2.1L97,33.9z"/>
<path class="st1" d="M248,128c-5.2,14.5-19.1,24.3-34.5,24.3H62.9c-6.5-0.3-12.4-2.9-16.7-7.6s-6.6-10.7-6.3-17.1
c0.5-12.6,10.7-22.8,23-23h1.3l0.2-1.3c1.9-18.7,17.5-32.9,36.2-32.9h1.3l0.2-1.3c4.2-30.2,32.1-51.5,62.2-47.6
c22.7,3.1,40.9,19.3,46.5,41.4c1.3,5.4,2.4,11.9,1.8,13.1l0.4,0.3c-16.1,0.3-31.1,10.3-36.7,26.4l1.3,0.4l1.3,0.4
c0.3-0.7,0.5-1.3,0.8-1.9c5.5-13.2,18.1-21.7,31.9-22.4c4.6-0.3,9.4,0.3,14.1,2C244.5,87.9,254.6,108.8,248,128z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 218.2" style="enable-background:new 0 0 250 218.2;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#91EAF9;}
.st1{fill:#DFEFF1;}
</style>
<g>
<path class="wst0" d="M79.5,161.6c-1.9,0-3.4-1.5-3.4-3.4v-38.7c0-1.9,1.5-3.4,3.4-3.4s3.4,1.5,3.4,3.4v38.7
C82.9,160.1,81.4,161.6,79.5,161.6z"/>
<path class="wst0" d="M79.5,192.5c-1.9,0-3.4-1.5-3.4-3.4v-17c0-1.9,1.5-3.4,3.4-3.4s3.4,1.5,3.4,3.4v17
C82.9,190.9,81.4,192.5,79.5,192.5z"/>
<path class="wst0" d="M109.1,218.2c-1.9,0-3.4-1.5-3.4-3.4v-60.4c0-1.9,1.5-3.4,3.4-3.4c1.9,0,3.4,1.5,3.4,3.4v60.4
C112.4,216.7,110.9,218.2,109.1,218.2z"/>
<path class="wst0" d="M168.4,177.9c-1.9,0-3.4-1.5-3.4-3.4v-55c0-1.9,1.5-3.4,3.4-3.4s3.4,1.5,3.4,3.4v55
C171.8,176.3,170.3,177.9,168.4,177.9z"/>
<path class="wst0" d="M168.4,209.8c-1.9,0-3.4-1.5-3.4-3.4v-18c0-1.9,1.5-3.4,3.4-3.4s3.4,1.5,3.4,3.4v18
C171.8,208.2,170.3,209.8,168.4,209.8z"/>
<path class="wst0" d="M138.9,197.2c-1.9,0-3.4-1.5-3.4-3.4v-27.5c0-1.9,1.5-3.4,3.4-3.4s3.4,1.5,3.4,3.4v27.5
C142.3,195.7,140.8,197.2,138.9,197.2z"/>
<path class="st1" d="M247.6,127.1c-6.2,17.3-22.7,28.9-41.1,28.9h-179c-7.7-0.3-14.7-3.5-19.9-9s-7.8-12.7-7.5-20.3
c0.6-15,12.7-27.1,27.4-27.4h1.5l0.2-1.5c2.3-22.3,20.8-39.1,43.1-39.1h1.5l0.2-1.5c5-35.9,38.2-61.3,74-56.6
c27,3.7,48.7,23,55.3,49.3c1.6,6.4,2.8,14.2,2.2,15.6l0.5,0.3c-19.2,0.3-37,12.3-43.7,31.4l1.6,0.5l1.6,0.5
c0.3-0.8,0.6-1.6,0.9-2.3c6.5-15.7,21.5-25.8,37.9-26.7c5.5-0.3,11.2,0.4,16.8,2.4C243.5,79.4,255.5,104.3,247.6,127.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 218.6" style="enable-background:new 0 0 250 218.6;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#91EAF9;}
.st1{fill:#DFEFF1;}
</style>
<g>
<path class="wst0" d="M94.9,161.9c-1.9,0-3.4-1.5-3.4-3.4v-38.7c0-1.9,1.5-3.4,3.4-3.4c1.9,0,3.4,1.5,3.4,3.4v38.7
C98.3,160.4,96.8,161.9,94.9,161.9z"/>
<path class="wst0" d="M94.9,192.8c-1.9,0-3.4-1.5-3.4-3.4v-17c0-1.9,1.5-3.4,3.4-3.4c1.9,0,3.4,1.5,3.4,3.4v17
C98.3,191.3,96.8,192.8,94.9,192.8z"/>
<path class="wst0" d="M124.4,218.6c-1.9,0-3.4-1.5-3.4-3.4v-60.4c0-1.9,1.5-3.4,3.4-3.4s3.4,1.5,3.4,3.4v60.4
C127.8,217,126.3,218.6,124.4,218.6z"/>
<path class="wst0" d="M153.9,197.5c-1.9,0-3.4-1.5-3.4-3.4v-27.5c0-1.9,1.5-3.4,3.4-3.4s3.4,1.5,3.4,3.4v27.5
C157.3,196,155.8,197.5,153.9,197.5z"/>
<path class="st1" d="M247.6,127.1c-6.2,17.3-22.7,28.9-41.1,28.9h-179c-7.7-0.3-14.7-3.5-19.9-9s-7.8-12.7-7.5-20.3
c0.6-15,12.7-27.1,27.4-27.4h1.5l0.2-1.5c2.3-22.3,20.8-39.1,43.1-39.1h1.5l0.2-1.5c5-35.9,38.2-61.3,74-56.6
c27,3.7,48.7,23,55.3,49.3c1.6,6.4,2.8,14.2,2.2,15.6l0.5,0.3c-19.2,0.3-37,12.3-43.7,31.4l1.6,0.5l1.6,0.5
c0.3-0.8,0.6-1.6,0.9-2.3c6.5-15.7,21.5-25.8,37.9-26.7c5.5-0.3,11.2,0.4,16.8,2.4C243.5,79.4,255.5,104.3,247.6,127.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 106.7" style="enable-background:new 0 0 250 106.7;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#DFEFF1;}
.st1{fill:#4EDD81;}
.st2{fill:#AEA1EA;}
.st3{fill:#F23B74;}
.st4{fill:#91EAF9;}
</style>
<g>
<path class="wst0" d="M223.3,102.4c2.5-54.2-39.5-99.9-93.4-102.3S29.7,39.6,27.3,93.9c0,3.4,0,6.4,0,9.8l58.5-0.6
c0.6-21.8,18.7-39.2,40.4-38.6c20.8,0.3,38,17.2,38.6,38.3L223.3,102.4z"/>
<path class="st1" d="M59.4,103.3h-6.1C53.3,63.5,85.5,31,125,31c39.7,0,72,32.2,72,71.7h-6.1c0-36.2-29.5-65.6-65.9-65.6
C88.8,37.2,59.4,66.9,59.4,103.3z"/>
<path class="st2" d="M68,103.4c-0.2-15.3,5.7-29.7,16.5-40.6c10.7-10.8,25.1-16.9,40.5-17c0.2,0,0.4,0,0.6,0
c31.2,0,56.7,25.4,57,57l-6.1,0.1c-0.3-28.3-23.3-51.2-51.4-50.9c-13.7,0.1-26.6,5.5-36.2,15.2c-9.6,9.7-14.8,22.6-14.7,36.2
L68,103.4z"/>
<path class="st3" d="M45,103.3h-6.1v-4.3c0.5-23.1,9.9-44.6,26.6-60.7c16.7-16.1,38.7-24.6,61.7-24.2c23,0.5,44.5,9.9,60.5,26.6
c15.9,16.7,24.5,38.6,24,61.7l-6.1-0.1c0.4-21.4-7.5-41.8-22.3-57.3c-14.8-15.5-34.8-24.3-56.2-24.7c-21.4-0.5-41.8,7.6-57.3,22.5
S45.5,77.7,45,99.1V103.3z"/>
<path class="st4" d="M3.1,106.7c-1.7,0-3.1-1.4-3.1-3c0-1.7,1.4-3.1,3-3.1l243.9-1.2c0,0,0,0,0,0c1.7,0,3.1,1.4,3.1,3
c0,1.7-1.4,3.1-3,3.1L3.1,106.7C3.1,106.7,3.1,106.7,3.1,106.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 206.2" style="enable-background:new 0 0 250 206.2;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#CCFEFF;}
.st1{fill:#DFEFF1;}
</style>
<g>
<path class="wst0" d="M174,157.2c0,1.6-1.3,2.9-2.9,2.9h-8l2.5,2.5c1.1,1.1,1.1,3,0,4.1c-0.5,0.6-1.3,0.8-2,0.8
c-0.7,0-1.5-0.3-2-0.8l-6.6-6.6h-22.8L148,176h9.5c1.6,0,2.9,1.3,2.9,2.9c0,1.6-1.3,2.9-2.9,2.9h-3.8l5.9,5.9c1.1,1.2,1.1,3,0,4.1
c-0.6,0.6-1.3,0.8-2,0.8c-0.7,0-1.5-0.3-2-0.8l-5.6-5.7v3.6c0,1.6-1.3,2.9-2.9,2.9c-1.6,0-2.9-1.3-2.9-2.9v-9.4l-16.3-16.5v23
l6.6,6.6c1.1,1.1,1.1,3,0,4.1c-0.5,0.6-1.3,0.8-2,0.8c-0.7,0-1.5-0.3-2-0.8l-2.5-2.5v8.3c0,1.6-1.3,2.9-2.9,2.9s-2.9-1.3-2.9-2.9
V195l-2.5,2.5c-1.1,1.1-3,1.1-4.1,0s-1.1-3,0-4.1l6.6-6.6v-22.7l-16.3,16.3v9.3c0,1.6-1.3,2.9-2.9,2.9s-2.9-1.3-2.9-2.9v-3.6
l-5.6,5.6c-0.6,0.6-1.3,0.8-2,0.8c-0.7,0-1.5-0.3-2-0.8c-1.1-1.1-1.1-3,0-4.1l11.5-11.5l16.2-16.2H95l-6.6,6.6
c-0.5,0.6-1.3,0.8-2,0.8c-0.7,0-1.5-0.3-2-0.8c-1.1-1.1-1.1-3,0-4.1l2.5-2.5h-8c-1.6,0-2.9-1.3-2.9-2.9c0-1.6,1.3-2.9,2.9-2.9h92.3
C172.7,154.3,174,155.6,174,157.2z"/>
<path class="st1" d="M247.6,127.1c-6.2,17.3-22.7,28.9-41.1,28.9h-179c-7.7-0.3-14.7-3.5-19.9-9s-7.8-12.7-7.5-20.3
c0.6-15,12.7-27.1,27.4-27.4h1.5l0.2-1.5c2.3-22.3,20.8-39.1,43.1-39.1h1.5l0.2-1.5c5-35.9,38.2-61.3,74-56.6
c27,3.7,48.7,23,55.3,49.3c1.6,6.4,2.8,14.2,2.2,15.6l0.5,0.3c-19.2,0.3-37,12.3-43.7,31.4l1.6,0.5l1.6,0.5
c0.3-0.8,0.6-1.6,0.9-2.3c6.5-15.7,21.5-25.8,37.9-26.7c5.5-0.3,11.2,0.4,16.8,2.4C243.5,79.4,255.5,104.3,247.6,127.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 250" style="enable-background:new 0 0 250 250;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#FFD150;}
</style>
<title>Weather_Icons_1B</title>
<path class="wst0" d="M246.2,121.2h-35.8c-0.9-20.1-8.7-38.3-21.1-52.5l25-25.4c1.5-1.5,1.5-3.9,0-5.4c-1.5-1.5-3.9-1.5-5.4,0
l-24.9,25.2c-14.6-13.9-34.1-22.8-55.7-23.6c0,0,0-0.1,0-0.1V3.8c0-2.1-1.7-3.8-3.8-3.8s-3.8,1.7-3.8,3.8v35.7c0,0,0,0.1,0,0.1
c-21.2,1-40.3,9.7-54.7,23.4L41.1,38c-1.5-1.5-3.9-1.5-5.4,0s-1.5,3.9,0,5.4l25.2,25.2C48.4,82.7,40.5,101,39.6,121.2H3.8
c-2.1,0-3.8,1.7-3.8,3.8s1.7,3.8,3.8,3.8h35.8c0.9,21.4,9.8,40.8,23.6,55.3L38,209.3c-1.5,1.5-1.5,3.9,0,5.4
c0.7,0.7,1.7,1.1,2.7,1.1c1,0,1.9-0.4,2.7-1.1l25.4-25.4c14.1,12.3,32.2,20.1,52.1,21.1c0,0,0,0.1,0,0.1v35.7c0,2.1,1.7,3.8,3.8,3.8
s3.8-1.7,3.8-3.8v-35.7c0,0,0-0.1,0-0.1c20.9-0.8,39.9-9.1,54.3-22.3c0,0,0,0,0,0l25.5,25.5c0.7,0.7,1.7,1.1,2.7,1.1
c1,0,1.9-0.4,2.7-1.1c1.5-1.5,1.5-3.9,0-5.4l-25.5-25.5c0,0,0,0,0,0c13.1-14.3,21.4-33.2,22.3-53.9h35.8c2.1,0,3.8-1.7,3.8-3.8
S248.3,121.2,246.2,121.2z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 252 133.6" style="enable-background:new 0 0 252 133.6;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#FFD150;}
.st1{fill:#91EAF9;}
</style>
<g id="Solid">
<path class="wst0" d="M215.9,40.5c-1.5-1.5-3.9-1.5-5.4,0l-22.6,22.6c-15.2-14.6-35.6-23.9-58.1-24.8V5.9c0-2.1-1.7-3.8-3.8-3.8
s-3.8,1.7-3.8,3.8v32.5c-22.1,1-42.2,10.1-57.3,24.4L42.2,40.1c-1.5-1.5-3.9-1.5-5.4,0c-1.5,1.5-1.5,3.9,0,5.4l22.7,22.7
c-14.1,15.8-22.7,36.7-22.7,59.5c0,2.1,1.7,3.8,3.8,3.8c2.1,0,3.8-1.7,3.8-3.8h163.4c0,2.1,1.7,3.8,3.8,3.8s3.8-1.7,3.8-3.8
c0-22.7-8.4-43.4-22.3-59.1l22.7-22.7C217.4,44.4,217.4,42,215.9,40.5z"/>
<g>
<path class="st1" d="M247.1,131.6H4.9c-2.1,0-3.9-1.7-3.9-3.9c0-2.1,1.7-3.9,3.9-3.9h242.2c2.1,0,3.9,1.7,3.9,3.9
C251,129.9,249.3,131.6,247.1,131.6z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 129.6" style="enable-background:new 0 0 250 129.6;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#FFD150;}
.st1{fill:#91EAF9;}
</style>
<g id="Solid">
<path class="wst0" d="M215,38.5c-1.5-1.5-3.9-1.5-5.4,0L187,61.1c-15.2-14.6-35.6-23.9-58.2-24.8V3.8c0-2.1-1.7-3.8-3.8-3.8
s-3.8,1.7-3.8,3.8v32.5C99,37.3,79,46.5,63.9,60.8L41.2,38.1c-1.5-1.5-3.9-1.5-5.4,0c-1.5,1.5-1.5,3.9,0,5.4l22.8,22.8
c-14.1,15.8-22.7,36.7-22.7,59.5c0,2.1,1.7,3.8,3.8,3.8s3.8-1.7,3.8-3.8h163.5c0,2.1,1.7,3.8,3.8,3.8c2.1,0,3.8-1.7,3.8-3.8
c0-22.7-8.4-43.4-22.3-59.2L215,43.9C216.5,42.4,216.5,40,215,38.5z"/>
<path class="st1" d="M246.2,129.6H3.8c-2.1,0-3.8-1.7-3.8-3.8s1.7-3.8,3.8-3.8h242.4c2.1,0,3.8,1.7,3.8,3.8
S248.3,129.6,246.2,129.6z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 215.3" style="enable-background:new 0 0 250 215.3;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#FFD150;}
.st1{fill:#DFEFF1;}
</style>
<g>
<path class="wst0" d="M151.3,158.7L116.7,214c-0.5,0.8-1.5,1.4-2.4,1.4c-0.3,0-0.6-0.1-0.9-0.2c-1.3-0.4-2.1-1.7-1.9-3.1l4.3-35.5
H99.7c-1.1,0-2-0.6-2.5-1.5c-0.5-0.9-0.5-2,0.1-2.9l34.9-55.3c0.7-1.2,2.1-1.6,3.4-1.2c1.3,0.4,2,1.7,1.9,3.1l-4.3,35.5h15.7
c1.1,0,2,0.6,2.5,1.5C151.9,156.7,151.8,157.8,151.3,158.7z"/>
<path class="st1" d="M247.6,127.1c-6.2,17.3-22.7,28.9-41.1,28.9h-179c-7.7-0.3-14.7-3.5-19.9-9s-7.8-12.7-7.5-20.3
c0.6-15,12.7-27.1,27.4-27.4h1.5l0.2-1.5c2.3-22.3,20.8-39.1,43.1-39.1h1.5l0.2-1.5c5-35.9,38.2-61.3,74-56.6
c27,3.7,48.7,23,55.3,49.3c1.6,6.4,2.8,14.2,2.2,15.6l0.5,0.3c-19.2,0.3-37,12.3-43.7,31.4l1.6,0.5l1.6,0.5
c0.3-0.8,0.6-1.6,0.9-2.3c6.5-15.7,21.5-25.8,37.9-26.7c5.5-0.3,11.2,0.4,16.8,2.4C243.5,79.4,255.5,104.3,247.6,127.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 250 197" style="enable-background:new 0 0 250 197;" xml:space="preserve">
<style type="text/css">
.wst0{fill:#DFEFF1;}
</style>
<g>
<path class="wst0" d="M3.2,101.7c-1.8,0-3.2-1.4-3.2-3.2s1.4-3.2,3.2-3.2h203.5c20.6-0.3,36.8-16.6,36.8-37.1
c-0.3-20.6-16.6-36.8-37.1-36.8c-20.6,0.3-36.8,16.6-36.8,37.1c0,1.8-1.4,3.2-3.2,3.2s-3.2-1.4-3.2-3.2c0-24.1,19-43.3,43.2-43.6
c24.1,0,43.3,19,43.7,43.2c0,24.1-19,43.3-43.2,43.7H3.2z"/>
<path class="wst0" d="M108.5,62H20.7c-1.8,0-3.2-1.4-3.2-3.2c0-1.8,1.4-3.2,3.2-3.2h87.9c13.8,0,24.5-10.8,24.5-24.5
c0-13.5-11-24.5-24.5-24.5C95,6.5,84,17.5,84,31c0,1.8-1.4,3.2-3.2,3.2c-1.8,0-3.2-1.4-3.2-3.2c0-17.1,13.9-31,31-31s31,13.9,31,31
C139.5,48.4,125.9,62,108.5,62z"/>
<path class="wst0" d="M167,197c-17.1,0-31-13.9-31-31c0-1.8,1.4-3.2,3.2-3.2c1.8,0,3.2,1.4,3.2,3.2c0,13.5,11,24.5,24.5,24.5
c13.8,0,24.5-10.8,24.5-24.5s-10.8-24.5-24.5-24.5H19.1c-1.8,0-3.2-1.4-3.2-3.2c0-1.8,1.4-3.2,3.2-3.2H167c17.4,0,31,13.6,31,31
C198,183.4,184.4,197,167,197z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,591 @@
/*
Floorplan Fully Kiosk for Home Assistant
Version: 1.0.7.42
By Petar Kozul
https://github.com/pkozul/ha-floorplan
*/
'use strict';
(function () {
if (typeof window.FullyKiosk === 'function') {
return;
}
class FullyKiosk {
constructor(floorplan) {
this.version = '1.0.7.42';
this.floorplan = floorplan;
this.authToken = (window.localStorage && window.localStorage.authToken) ? window.localStorage.authToken : '';
this.fullyInfo = {};
this.fullyState = {};
this.iBeacons = {};
}
/***************************************************************************************************************************/
/* Initialization
/***************************************************************************************************************************/
init() {
this.logInfo('VERSION', `Fully Kiosk v${this.version}`);
if (typeof fully === "undefined") {
this.logInfo('FULLY_KIOSK', `Fully Kiosk is not running or not enabled. You can enable it via Settings > Other Settings > Enable Website Integration (PLUS).`);
return;
}
let macAddress = fully.getMacAddress().toLowerCase();
let device = this.floorplan.config && this.floorplan.config.fully_kiosk &&
this.floorplan.config.fully_kiosk.find(x => x.address.toLowerCase() == macAddress);
if (!device) {
return;
}
if (!navigator.geolocation) {
this.logInfo('FULLY_KIOSK', "Geolocation is not supported or not enabled. You can enable it via Settings > Web Content Settings > Enable Geolocation Access (PLUS) and on the device via Google Settings > Location > Fully Kiosk Browser.");
}
this.fullyInfo = this.getFullyInfo(device);
this.updateFullyState();
this.updateCurrentPosition();
this.initAudio();
this.addAudioEventHandlers();
this.addFullyEventHandlers();
this.subscribeHomeAssistantEvents();
this.sendMotionState();
this.sendPluggedState();
this.sendScreensaverState();
this.sendMediaPlayerState();
}
initAudio() {
this.audio = new Audio();
this.isAudioPlaying = false;
}
getFullyInfo(device) {
return {
motionBinarySensorEntityId: device.motion_sensor,
pluggedBinarySensorEntityId: device.plugged_sensor,
screensaverLightEntityId: device.screensaver_light,
mediaPlayerEntityId: device.media_player,
startUrl: fully.getStartUrl(),
currentLocale: fully.getCurrentLocale(),
ipAddressv4: fully.getIp4Address(),
ipAddressv6: fully.getIp6Address(),
macAddress: fully.getMacAddress(),
wifiSSID: fully.getWifiSsid(),
serialNumber: fully.getSerialNumber(),
deviceId: fully.getDeviceId(),
isMotionDetected: false,
isScreensaverOn: false,
supportsGeolocation: (navigator.geolocation != undefined),
};
}
updateFullyState() {
this.fullyState.batteryLevel = fully.getBatteryLevel();
this.fullyState.screenBrightness = fully.getScreenBrightness();
this.fullyState.isScreenOn = fully.getScreenOn();
this.fullyState.isPluggedIn = fully.isPlugged();
}
/***************************************************************************************************************************/
/* Set up event handlers
/***************************************************************************************************************************/
addAudioEventHandlers() {
this.audio.addEventListener('play', this.onAudioPlay.bind(this));
this.audio.addEventListener('playing', this.onAudioPlaying.bind(this));
this.audio.addEventListener('pause', this.onAudioPause.bind(this));
this.audio.addEventListener('ended', this.onAudioEnded.bind(this));
this.audio.addEventListener('volumechange', this.onAudioVolumeChange.bind(this));
}
addFullyEventHandlers() {
window['onFullyEvent'] = (e) => { window.dispatchEvent(new Event(e)); }
window['onFullyIBeaconEvent'] = (e, uuid, major, minor, distance) => {
let event = new CustomEvent(e, {
detail: { uuid: uuid, major: major, minor: minor, distance: distance, timestamp: new Date() }
});
window.dispatchEvent(event);
}
window.addEventListener('fully.screenOn', this.onScreenOn.bind(this));
window.addEventListener('fully.screenOff', this.onScreenOff.bind(this));
window.addEventListener('fully.networkDisconnect', this.onNetworkDisconnect.bind(this));
window.addEventListener('fully.networkReconnect', this.onNetworkReconnect.bind(this));
window.addEventListener('fully.internetDisconnect', this.onInternetDisconnect.bind(this));
window.addEventListener('fully.internetReconnect', this.onInternetReconnect.bind(this));
window.addEventListener('fully.unplugged', this.onUnplugged.bind(this));
window.addEventListener('fully.pluggedAC', this.onPluggedAC.bind(this));
window.addEventListener('fully.pluggedUSB', this.onPluggedUSB.bind(this));
window.addEventListener('fully.onScreensaverStart', this.onScreensaverStart.bind(this));
window.addEventListener('fully.onScreensaverStop', this.onScreensaverStop.bind(this));
window.addEventListener('fully.onBatteryLevelChanged', this.onBatteryLevelChanged.bind(this));
window.addEventListener('fully.onMotion', this.onMotion.bind(this));
window.addEventListener('fully.onMovement', this.onMovement.bind(this));
window.addEventListener('fully.onIBeacon', this.onIBeacon.bind(this));
fully.bind('screenOn', 'onFullyEvent("fully.screenOn");')
fully.bind('screenOff', 'onFullyEvent("fully.screenOff");')
fully.bind('networkDisconnect', 'onFullyEvent("fully.networkDisconnect");')
fully.bind('networkReconnect', 'onFullyEvent("fully.networkReconnect");')
fully.bind('internetDisconnect', 'onFullyEvent("fully.internetDisconnect");')
fully.bind('internetReconnect', 'onFullyEvent("fully.internetReconnect");')
fully.bind('unplugged', 'onFullyEvent("fully.unplugged");')
fully.bind('pluggedAC', 'onFullyEvent("fully.pluggedAC");')
fully.bind('pluggedUSB', 'onFullyEvent("fully.pluggedUSB");')
fully.bind('onScreensaverStart', 'onFullyEvent("fully.onScreensaverStart");')
fully.bind('onScreensaverStop', 'onFullyEvent("fully.onScreensaverStop");')
fully.bind('onBatteryLevelChanged', 'onFullyEvent("fully.onBatteryLevelChanged");')
fully.bind('onMotion', 'onFullyEvent("fully.onMotion");') // Max. one per second
fully.bind('onMovement', 'onFullyEvent("fully.onMovement");')
fully.bind('onIBeacon', 'onFullyIBeaconEvent("fully.onIBeacon", "$id1", "$id2", "$id3", $distance);')
}
/***************************************************************************************************************************/
/* Fully Kiosk events
/***************************************************************************************************************************/
onScreenOn() {
this.logDebug('FULLY_KIOSK', 'Screen turned on');
}
onScreenOff() {
this.logDebug('FULLY_KIOSK', 'Screen turned off');
}
onNetworkDisconnect() {
this.logDebug('FULLY_KIOSK', 'Network disconnected');
}
onNetworkReconnect() {
this.logDebug('FULLY_KIOSK', 'Network reconnected');
}
onInternetDisconnect() {
this.logDebug('FULLY_KIOSK', 'Internet disconnected');
}
onInternetReconnect() {
this.logDebug('FULLY_KIOSK', 'Internet reconnected');
}
onUnplugged() {
this.logDebug('FULLY_KIOSK', 'Unplugged AC');
this.fullyState.isPluggedIn = false;
this.sendPluggedState();
}
onPluggedAC() {
this.logDebug('FULLY_KIOSK', 'Plugged AC');
this.fullyState.isPluggedIn = true;
this.sendPluggedState();
}
onPluggedUSB() {
this.logDebug('FULLY_KIOSK', 'Unplugged USB');
this.logDebug('FULLY_KIOSK', 'Device plugged into USB');
}
onScreensaverStart() {
this.fullyState.isScreensaverOn = true;
this.logDebug('FULLY_KIOSK', 'Screensaver started');
this.sendScreensaverState();
}
onScreensaverStop() {
this.fullyState.isScreensaverOn = false;
this.logDebug('FULLY_KIOSK', 'Screensaver stopped');
this.sendScreensaverState();
}
onBatteryLevelChanged() {
this.logDebug('FULLY_KIOSK', 'Battery level changed');
}
onMotion() {
this.fullyState.isMotionDetected = true;
this.logDebug('FULLY_KIOSK', 'Motion detected');
this.sendMotionState();
}
onMovement() {
this.logDebug('FULLY_KIOSK', 'Movement detected');
if (this.fullyInfo.supportsGeolocation) {
this.updateCurrentPosition()
.then(() => {
this.sendMotionState();
});
}
}
onIBeacon(e) {
let iBeacon = e.detail;
this.logDebug('FULLY_KIOSK', `iBeacon (${JSON.stringify(iBeacon)})`);
let iBeaconId = iBeacon.uuid;
iBeaconId += (iBeacon.major ? `_${iBeacon.major}` : '');
iBeaconId += (iBeacon.minor ? `_${iBeacon.minor}` : '');
this.iBeacons[iBeaconId] = iBeacon;
this.sendMotionState();
this.sendIBeaconState(iBeacon);
}
/***************************************************************************************************************************/
/* HTML5 Audio
/***************************************************************************************************************************/
onAudioPlay() {
this.isAudioPlaying = true;
this.sendMediaPlayerState();
}
onAudioPlaying() {
this.isAudioPlaying = true;
this.sendMediaPlayerState();
}
onAudioPause() {
this.isAudioPlaying = false;
this.sendMediaPlayerState();
}
onAudioEnded() {
this.isAudioPlaying = false;
this.sendMediaPlayerState();
}
onAudioVolumeChange() {
this.sendMediaPlayerState();
}
/***************************************************************************************************************************/
/* Send state to Home Assistant
/***************************************************************************************************************************/
sendMotionState() {
if (!this.fullyInfo.motionBinarySensorEntityId) {
return;
}
clearTimeout(this.sendMotionStateTimer);
let timeout = this.fullyState.isMotionDetected ? 5000 : 10000;
let state = this.fullyState.isMotionDetected ? "on" : "off";
this.PostToHomeAssistant(`/api/states/${this.fullyInfo.motionBinarySensorEntityId}`, this.newPayload(state), () => {
this.sendMotionStateTimer = setTimeout(() => {
this.fullyState.isMotionDetected = false;
this.sendMotionState();
// Send other states as well
this.sendPluggedState();
this.sendScreensaverState();
this.sendMediaPlayerState();
}, timeout);
});
}
sendPluggedState() {
if (!this.fullyInfo.pluggedBinarySensorEntityId) {
return;
}
let state = this.fullyState.isPluggedIn ? "on" : "off";
this.PostToHomeAssistant(`/api/states/${this.fullyInfo.pluggedBinarySensorEntityId}`, this.newPayload(state));
}
sendScreensaverState() {
if (!this.fullyInfo.screensaverLightEntityId) {
return;
}
let state = this.fullyState.isScreensaverOn ? "on" : "off";
this.PostToHomeAssistant(`/api/states/${this.fullyInfo.screensaverLightEntityId}`, this.newPayload(state));
}
sendMediaPlayerState() {
if (!this.fullyInfo.mediaPlayerEntityId) {
return;
}
let state = this.isAudioPlaying ? "playing" : "idle";
this.PostToHomeAssistant(`/api/fully_kiosk/media_player/${this.fullyInfo.mediaPlayerEntityId}`, this.newPayload(state));
}
sendIBeaconState(iBeacon) {
if (!this.fullyInfo.motionBinarySensorEntityId) {
return;
}
let payload = {
mac: undefined,
dev_id: iBeacon.uuid.replace(/-/g, '_'),
host_name: undefined,
location_name: this.fullyInfo.macAddress,
gps: this.position ? [this.position.coords.latitude, this.position.coords.longitude] : undefined,
gps_accuracy: undefined,
battery: undefined,
uuid: iBeacon.uuid,
major: iBeacon.major,
minor: iBeacon.minor,
};
//this.PostToHomeAssistant(`/api/services/device_tracker/see`, payload);
let fullyId = this.fullyInfo.macAddress.replace(/[:-]/g, "_");
payload = { topic: `room_presence/${fullyId}`, payload: `{ \"id\": \"${iBeacon.uuid}\", \"distance\": ${iBeacon.distance} }` };
this.floorplan.hass.callService('mqtt', 'publish', payload);
}
newPayload(state) {
this.updateFullyState();
let payload = {
state: state,
brightness: this.fullyState.screenBrightness,
attributes: {
volume_level: this.audio.volume,
media_content_id: this.audio.src,
address: this.fullyInfo.macAddress,
mac_address: this.fullyInfo.macAddress,
serial_number: this.fullyInfo.serialNumber,
device_id: this.fullyInfo.deviceId,
battery_level: this.fullyState.batteryLevel,
screen_brightness: this.fullyState.screenBrightness,
_isScreenOn: this.fullyState.isScreenOn,
_isPluggedIn: this.fullyState.isPluggedIn,
_isMotionDetected: this.fullyState.isMotionDetected,
_isScreensaverOn: this.fullyState.isScreensaverOn,
_latitude: this.position && this.position.coords.latitude,
_longitude: this.position && this.position.coords.longitude,
_iBeacons: JSON.stringify(Object.keys(this.iBeacons).map(iBeaconId => this.iBeacons[iBeaconId])),
}
};
return payload;
}
/***************************************************************************************************************************/
/* Geolocation
/***************************************************************************************************************************/
setScreenBrightness(brightness) {
fully.setScreenBrightness(brightness);
}
startScreensaver() {
this.logInfo('FULLY_KIOSK', `Starting screensaver`);
fully.startScreensaver();
}
stopScreensaver() {
this.logInfo('FULLY_KIOSK', `Stopping screensaver`);
fully.stopScreensaver();
}
playTextToSpeech(text) {
this.logInfo('FULLY_KIOSK', `Playing text-to-speech: ${text}`);
fully.textToSpeech(text);
}
playMedia(mediaUrl) {
this.audio.src = mediaUrl;
this.logInfo('FULLY_KIOSK', `Playing media: ${this.audio.src}`);
this.audio.play();
}
pauseMedia() {
this.logInfo('FULLY_KIOSK', `Pausing media: ${this.audio.src}`);
this.audio.pause();
}
setVolume(level) {
this.audio.volume = level;
}
PostToHomeAssistant(url, payload, onSuccess) {
let options = {
type: 'POST',
url: url,
headers: { "X-HA-Access": this.authToken },
data: JSON.stringify(payload),
success: function (result) {
this.logDebug('FULLY_KIOSK', `Posted state: ${url} ${JSON.stringify(payload)}`);
if (onSuccess) {
onSuccess();
}
}.bind(this),
error: function (error) {
this.handleError(new URIError(`Error posting state: ${url}`));
}.bind(this)
};
jQuery.ajax(options);
}
subscribeHomeAssistantEvents() {
/*
this.floorplan.hass.connection.subscribeEvents((event) => {
},
'state_changed');
*/
this.floorplan.hass.connection.subscribeEvents((event) => {
if (this.fullyInfo.screensaverLightEntityId && (event.data.domain === 'light')) {
if (event.data.service_data.entity_id.toString() === this.fullyInfo.screensaverLightEntityId) {
switch (event.data.service) {
case 'turn_on':
this.startScreensaver();
break;
case 'turn_off':
this.stopScreensaver();
break;
}
let brightness = event.data.service_data.brightness;
if (brightness) {
this.setScreenBrightness(brightness);
}
}
}
else if (this.fullyInfo.mediaPlayerEntityId && (event.data.domain === 'media_player')) {
let targetEntityId;
let serviceEntityId = event.data.service_data.entity_id;
if (Array.isArray(serviceEntityId)) {
targetEntityId = serviceEntityId.find(entityId => (entityId === this.fullyInfo.mediaPlayerEntityId));
}
else {
targetEntityId = (serviceEntityId === this.fullyInfo.mediaPlayerEntityId) ? serviceEntityId : undefined;
}
if (targetEntityId) {
switch (event.data.service) {
case 'play_media':
this.playMedia(event.data.service_data.media_content_id);
break;
case 'media_play':
this.playMedia();
break;
case 'media_pause':
case 'media_stop':
this.pauseMedia();
break;
case 'volume_set':
this.setVolume(event.data.service_data.volume_level);
break;
default:
this.logWarning('FULLY_KIOSK', `Service not supported: ${event.data.service}`);
break;
}
}
}
/*
if ((event.data.domain === 'tts') && (event.data.service === 'google_say')) {
if (this.fullyInfo.mediaPlayerEntityId === event.data.service_data.entity_id) {
this.logDebug('FULLY_KIOSK', 'Playing TTS using Fully Kiosk');
this.playTextToSpeech(event.data.service_data.message);
}
}
*/
},
'call_service');
}
/***************************************************************************************************************************/
/* Geolocation
/***************************************************************************************************************************/
updateCurrentPosition() {
if (!navigator.geolocation) {
return Promise.resolve(undefined);
}
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(
(position) => {
this.logDebug('FULLY_KIOSK', `Current location: latitude: ${position.coords.latitude}, longitude: ${position.coords.longitude}`);
this.position = position;
resolve(position);
},
(err) => {
this.logError('FULLY_KIOSK', 'Unable to retrieve location');
reject(err);
});
})
}
/***************************************************************************************************************************/
/* Errors / logging
/***************************************************************************************************************************/
handleError(message) {
this.floorplan.handleError(message);
}
logError(area, message) {
this.floorplan.logError(message);
}
logWarning(area, message) {
this.floorplan.logWarning(area, message);
}
logInfo(area, message) {
this.floorplan.logInfo(area, message);
}
logDebug(area, message) {
this.floorplan.logDebug(area, message);
}
/***************************************************************************************************************************/
/* Utility functions
/***************************************************************************************************************************/
debounce(func, wait, immediate) {
let timeout;
return function () {
let context = this, args = arguments;
let later = function () {
timeout = null;
if (!immediate) func.apply(context, args);
};
let callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
}
window.FullyKiosk = FullyKiosk;
}).call(this);

File diff suppressed because one or more lines are too long

7
www/custom_ui/floorplan/lib/moment.min.js vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
www/custom_ui/floorplan/lib/yaml.min.js vendored Executable file

File diff suppressed because one or more lines are too long