reorganization of packages and lovelace - using storage mode with yaml dashboards
(working before upgrade to 118.5 which failed)master
parent
67298f67ef
commit
d172ead1c1
|
@ -1 +1 @@
|
||||||
0.107.7
|
0.118.4
|
|
@ -1,7 +1,7 @@
|
||||||
/.storage/
|
|
||||||
/.vscode/
|
|
||||||
/.cloud/
|
/.cloud/
|
||||||
*.code-workspace
|
|
||||||
*.js.gz
|
*.js.gz
|
||||||
*.log
|
*.log
|
||||||
*.db
|
*.db
|
||||||
|
.gitsecret/keys/random_seed
|
||||||
|
!*.secret
|
||||||
|
secrets.yaml
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
secrets.yaml
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"password": "JDJiJDEyJEROU05qSFRuRE5RRHJ6RUFjQ1pwUy5qcGN3TlNnaDU0ZUdjUnFxdWFZQVFZamEzTnZ3LjBT",
|
||||||
|
"username": "sysadmin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"password": "JDJiJDEyJFd3Tnh0ZlVZb21iQmlKaGs1RnVhai5OSlFLNWNKVU92a2ZNTWVKdEhzb0hQTWF0eDRXTjRl",
|
||||||
|
"username": "trish"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"password": "JDJiJDEyJDR6elRTeWxORHNMclFzSFJ3N0ZiNC4ucmUyUmZ4TEVFRHNJekpmcXNWUm1EOS45cGoveFAy",
|
||||||
|
"username": "irrigation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"password": "JDJiJDEyJDZMclNZSy5pSGY5QVdNZ0JhVWF4UHUwUVdsbGhsRGJHeUhDWlZ0ZHVLdUtOdFdDTGRJVlZl",
|
||||||
|
"username": "test"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"key": "auth_provider.homeassistant",
|
||||||
|
"version": 1
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"areas": [
|
||||||
|
{
|
||||||
|
"id": "5c6c9f7bb2af43a4afa8851308f8e10a",
|
||||||
|
"name": "Living Room"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "82805bb0656b443ea5c7fdc7a762a7aa",
|
||||||
|
"name": "Kitchen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "13ef8995699f4a04b79b02119ba2d2dd",
|
||||||
|
"name": "Bedroom"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"key": "core.area_registry",
|
||||||
|
"version": 1
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "core.config",
|
||||||
|
"data": {
|
||||||
|
"latitude": 44.46097018572946,
|
||||||
|
"longitude": -118.71158838272095,
|
||||||
|
"elevation": 0,
|
||||||
|
"unit_system": "imperial",
|
||||||
|
"location_name": "238 McHaley",
|
||||||
|
"time_zone": "America/Los_Angeles",
|
||||||
|
"external_url": null,
|
||||||
|
"internal_url": null
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,221 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "core.config_entries",
|
||||||
|
"data": {
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"entry_id": "2872c3dbbf1246c2b7aab8c616984183",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "mobile_app",
|
||||||
|
"title": "700T1C",
|
||||||
|
"data": {
|
||||||
|
"app_data": {
|
||||||
|
"push_token": "fCP75bxzpBY:APA91bGOZjg0ObYy1-QJs8VJxqU-AQbNpQ1fz2Gc485DjxBsZ1LAsdLaZTJ3vgbgQ98Qt3jO0Xv4yfaLM4uiGunzKs4_iCrV-KAU2Qul5zN_dmQ6LVqo2PDMPSUZkAqRF7Ip5u9zz88F",
|
||||||
|
"push_url": "https://mobile-apps.home-assistant.io/api/sendPush/android/v1"
|
||||||
|
},
|
||||||
|
"app_id": "io.homeassistant.companion.android",
|
||||||
|
"app_name": "Home Assistant",
|
||||||
|
"app_version": "2.5.0-full (400)",
|
||||||
|
"device_id": "6cb92e1b94d47217",
|
||||||
|
"device_name": "700T1C",
|
||||||
|
"manufacturer": "SAMSUNG ELECTRONICS CO., LTD.",
|
||||||
|
"model": "700T1C",
|
||||||
|
"os_name": "Android",
|
||||||
|
"os_version": "28",
|
||||||
|
"supports_encryption": false,
|
||||||
|
"user_id": "99685dc45d9f40dc8183e11ce5128038",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "registration",
|
||||||
|
"connection_class": "cloud_push",
|
||||||
|
"unique_id": "io.homeassistant.companion.android-6cb92e1b94d47217"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "f2587c6a3ce34da5a1209b077a39d931",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "mqtt",
|
||||||
|
"title": "broker.kebler.net",
|
||||||
|
"data": {
|
||||||
|
"broker": "broker.kebler.net",
|
||||||
|
"discovery": true,
|
||||||
|
"port": 1883
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "user",
|
||||||
|
"connection_class": "local_push",
|
||||||
|
"unique_id": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "9436e71647e64581a19a2cc8172f9a35",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "esphome",
|
||||||
|
"title": "inside_temp_humd",
|
||||||
|
"data": {
|
||||||
|
"host": "10.0.0.180",
|
||||||
|
"password": "",
|
||||||
|
"port": 6053
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "zeroconf",
|
||||||
|
"connection_class": "local_push",
|
||||||
|
"unique_id": "inside_temp_humd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "cf5266d3fa4a4824850935818193ac48",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "esphome",
|
||||||
|
"title": "outside_temp_humd",
|
||||||
|
"data": {
|
||||||
|
"host": "10.0.0.222",
|
||||||
|
"password": "",
|
||||||
|
"port": 6053
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "user",
|
||||||
|
"connection_class": "local_push",
|
||||||
|
"unique_id": "outside_temp_humd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "3ed789ad543542018f094a6d3d209d9a",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "nws",
|
||||||
|
"title": "KGCD",
|
||||||
|
"data": {
|
||||||
|
"api_key": "kebler.net@gmail.com",
|
||||||
|
"latitude": 44.46097018572946,
|
||||||
|
"longitude": -118.71158838272095,
|
||||||
|
"station": "KGCD"
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "user",
|
||||||
|
"connection_class": "cloud_poll",
|
||||||
|
"unique_id": "44.46097018572946_-118.71158838272095"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "b7c6f2ecbb0d48ce83a92d218b4e129c",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "mobile_app",
|
||||||
|
"title": "SM-G935R4",
|
||||||
|
"data": {
|
||||||
|
"app_data": {
|
||||||
|
"push_token": "dR6iDAsFIAI:APA91bHbf9uAX51rcCn1eD8J__in-9K7sqaXbnFgfVxE4wEpNmD3lcwBR0JeG-sVnWx1dUYhj4BRP6BHQy1uFAHWjs890GAIPvYU-AWKRRR-GuDhaWvXnLYX94yLQp80GZMxbpOG9-Ke",
|
||||||
|
"push_url": "https://mobile-apps.home-assistant.io/api/sendPush/android/v1"
|
||||||
|
},
|
||||||
|
"app_id": "io.homeassistant.companion.android",
|
||||||
|
"app_name": "Home Assistant",
|
||||||
|
"app_version": "1.11.0-215 (215)",
|
||||||
|
"device_id": "ea51283736a711a9",
|
||||||
|
"device_name": "SM-G935R4",
|
||||||
|
"manufacturer": "samsung",
|
||||||
|
"model": "SM-G935R4",
|
||||||
|
"os_name": "Android",
|
||||||
|
"os_version": "26",
|
||||||
|
"supports_encryption": false,
|
||||||
|
"user_id": "99685dc45d9f40dc8183e11ce5128038",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "registration",
|
||||||
|
"connection_class": "cloud_push",
|
||||||
|
"unique_id": "io.homeassistant.companion.android-ea51283736a711a9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "ea9548ce249e4e388ef42aa16cedfa29",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "mobile_app",
|
||||||
|
"title": "White Moto G",
|
||||||
|
"data": {
|
||||||
|
"app_data": {
|
||||||
|
"push_token": "f-HooFTWTWad3h8a1EJswU:APA91bE8CUndwczKWO6Cb59jnXddyUwL5zYtFO9CJxhUqBnbOJvPYRaLMeLIC4CIJAdFkZ6ep82_7RxoIVRtYfhP_qOByjOgYImrapNEUjSayCmiyjTZaEH1eCzshzeaauD16NO8THyj",
|
||||||
|
"push_url": "https://mobile-apps.home-assistant.io/api/sendPush/android/v1"
|
||||||
|
},
|
||||||
|
"app_id": "io.homeassistant.companion.android",
|
||||||
|
"app_name": "Home Assistant",
|
||||||
|
"app_version": "1.11.0-215 (215)",
|
||||||
|
"device_id": "764372054dcb3823",
|
||||||
|
"device_name": "XT1064",
|
||||||
|
"manufacturer": "motorola",
|
||||||
|
"model": "XT1064",
|
||||||
|
"os_name": "Android",
|
||||||
|
"os_version": "23",
|
||||||
|
"supports_encryption": false,
|
||||||
|
"user_id": "99685dc45d9f40dc8183e11ce5128038",
|
||||||
|
"webhook_id": "5f53d4c3439e791aab47663319361609868cb300c034204db0e25e40147d27be"
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "registration",
|
||||||
|
"connection_class": "cloud_push",
|
||||||
|
"unique_id": "io.homeassistant.companion.android-764372054dcb3823"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "0f3b31063a5d4293a373c98d6c5d5c77",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "mobile_app",
|
||||||
|
"title": "LGUS215",
|
||||||
|
"data": {
|
||||||
|
"app_data": {
|
||||||
|
"push_token": "dHFyVftSS7GU1tZWdpLnZp:APA91bH9Jy7ZBQ-vmUQwZKk4ymzjrbFyxuXJRcVlNnbPcDMFlbG8zV5VOX2wbbOYW7N72LbSLLYjMbnQy5zDsknYEI7QaNXfcNnGHbF3d7AsD2NrvJ9pYmsde5e3tpTaBYAkBMAqDnSa",
|
||||||
|
"push_url": "https://mobile-apps.home-assistant.io/api/sendPush/android/v1"
|
||||||
|
},
|
||||||
|
"app_id": "io.homeassistant.companion.android",
|
||||||
|
"app_name": "Home Assistant",
|
||||||
|
"app_version": "1.11.0-215 (215)",
|
||||||
|
"device_id": "315c682d3b2d88cc",
|
||||||
|
"device_name": "LGUS215",
|
||||||
|
"manufacturer": "LGE",
|
||||||
|
"model": "LGUS215",
|
||||||
|
"os_name": "Android",
|
||||||
|
"os_version": "24",
|
||||||
|
"supports_encryption": false,
|
||||||
|
"user_id": "99685dc45d9f40dc8183e11ce5128038",
|
||||||
|
"webhook_id": "05937d05f5a6239334725f7b14a462ab0e409dbbe11c2cf4b2f20747f403edf2"
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "registration",
|
||||||
|
"connection_class": "cloud_push",
|
||||||
|
"unique_id": "io.homeassistant.companion.android-315c682d3b2d88cc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry_id": "d00c44239e11a6b5cc8a1f44eb4c23e2",
|
||||||
|
"version": 1,
|
||||||
|
"domain": "hacs",
|
||||||
|
"title": "",
|
||||||
|
"data": {
|
||||||
|
"token": "ab27da1f11e3827fa78258ac8ed11795c6261c34"
|
||||||
|
},
|
||||||
|
"options": {},
|
||||||
|
"system_options": {
|
||||||
|
"disable_new_entities": false
|
||||||
|
},
|
||||||
|
"source": "user",
|
||||||
|
"connection_class": "cloud_poll",
|
||||||
|
"unique_id": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,177 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "core.device_registry",
|
||||||
|
"data": {
|
||||||
|
"devices": [
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"2872c3dbbf1246c2b7aab8c616984183"
|
||||||
|
],
|
||||||
|
"connections": [],
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"mobile_app",
|
||||||
|
"6cb92e1b94d47217"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"manufacturer": "SAMSUNG ELECTRONICS CO., LTD.",
|
||||||
|
"model": "700T1C",
|
||||||
|
"name": "700T1C",
|
||||||
|
"sw_version": "28",
|
||||||
|
"entry_type": null,
|
||||||
|
"id": "515c6f88684b452e86231c4411e3001e",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"f2587c6a3ce34da5a1209b077a39d931"
|
||||||
|
],
|
||||||
|
"connections": [],
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"mqtt",
|
||||||
|
"84f3eb3b8492"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"manufacturer": "espressif",
|
||||||
|
"model": "PLATFORMIO_D1_MINI",
|
||||||
|
"name": "outside_temp_humd",
|
||||||
|
"sw_version": "esphome v1.14.3 Apr 23 2020, 12:14:31",
|
||||||
|
"entry_type": null,
|
||||||
|
"id": "93560a2f0c64414e8c1a69dbbf3bf97f",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"9436e71647e64581a19a2cc8172f9a35"
|
||||||
|
],
|
||||||
|
"connections": [
|
||||||
|
[
|
||||||
|
"mac",
|
||||||
|
"84:f3:eb:3b:77:30"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"identifiers": [],
|
||||||
|
"manufacturer": "espressif",
|
||||||
|
"model": "PLATFORMIO_D1_MINI",
|
||||||
|
"name": "inside_temp_humd",
|
||||||
|
"sw_version": "1.15.3 (Dec 1 2020, 11:20:56)",
|
||||||
|
"entry_type": null,
|
||||||
|
"id": "1883f8cbd6b548b992e9a1974008f81f",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"cf5266d3fa4a4824850935818193ac48"
|
||||||
|
],
|
||||||
|
"connections": [
|
||||||
|
[
|
||||||
|
"mac",
|
||||||
|
"84:f3:eb:3b:84:92"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"identifiers": [],
|
||||||
|
"manufacturer": "espressif",
|
||||||
|
"model": "PLATFORMIO_D1_MINI",
|
||||||
|
"name": "outside_temp_humd",
|
||||||
|
"sw_version": "1.15.3 (Dec 1 2020, 10:59:50)",
|
||||||
|
"entry_type": null,
|
||||||
|
"id": "207200b764c24bb2ac697f37d7c8b4e2",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"b7c6f2ecbb0d48ce83a92d218b4e129c"
|
||||||
|
],
|
||||||
|
"connections": [],
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"mobile_app",
|
||||||
|
"ea51283736a711a9"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"manufacturer": "samsung",
|
||||||
|
"model": "SM-G935R4",
|
||||||
|
"name": "SM-G935R4",
|
||||||
|
"sw_version": "26",
|
||||||
|
"entry_type": null,
|
||||||
|
"id": "379851aebc71474585da2f6ce68a5745",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"ea9548ce249e4e388ef42aa16cedfa29"
|
||||||
|
],
|
||||||
|
"connections": [],
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"mobile_app",
|
||||||
|
"764372054dcb3823"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"manufacturer": "motorola",
|
||||||
|
"model": "XT1064",
|
||||||
|
"name": "XT1064",
|
||||||
|
"sw_version": "23",
|
||||||
|
"entry_type": null,
|
||||||
|
"id": "f16e11491ac04282ab179f5727d4f5dc",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"0f3b31063a5d4293a373c98d6c5d5c77"
|
||||||
|
],
|
||||||
|
"connections": [],
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"mobile_app",
|
||||||
|
"315c682d3b2d88cc"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"manufacturer": "LGE",
|
||||||
|
"model": "LGUS215",
|
||||||
|
"name": "LGUS215",
|
||||||
|
"sw_version": "24",
|
||||||
|
"entry_type": null,
|
||||||
|
"id": "ff1bf04ce1b2439b8a7ebc9237a010d9",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config_entries": [
|
||||||
|
"d00c44239e11a6b5cc8a1f44eb4c23e2"
|
||||||
|
],
|
||||||
|
"connections": [],
|
||||||
|
"identifiers": [
|
||||||
|
[
|
||||||
|
"hacs",
|
||||||
|
"0717a0cd-745c-48fd-9b16-c8534c9704f9-bc944b0f-fd42-4a58-a072-ade38d1444cd"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"manufacturer": "hacs.xyz",
|
||||||
|
"model": "",
|
||||||
|
"name": "HACS",
|
||||||
|
"sw_version": "1.8.0",
|
||||||
|
"entry_type": "service",
|
||||||
|
"id": "da36236384f2c8816377b036cf723ece",
|
||||||
|
"via_device_id": null,
|
||||||
|
"area_id": null,
|
||||||
|
"name_by_user": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"deleted_devices": []
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "core.uuid",
|
||||||
|
"data": {
|
||||||
|
"uuid": "730705095bdc49d696bac6c69892ff3c"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"device_info": {
|
||||||
|
"compilation_time": "Apr 24 2020, 17:23:25",
|
||||||
|
"esphome_version": "1.14.3",
|
||||||
|
"has_deep_sleep": false,
|
||||||
|
"mac_address": "84:F3:EB:3B:84:92",
|
||||||
|
"model": "PLATFORMIO_D1_MINI",
|
||||||
|
"name": "outside_temp_humd",
|
||||||
|
"uses_password": false
|
||||||
|
},
|
||||||
|
"sensor": [
|
||||||
|
{
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false,
|
||||||
|
"icon": "mdi:thermometer",
|
||||||
|
"key": 2259435129,
|
||||||
|
"name": "Outside Temperature",
|
||||||
|
"object_id": "outside_temperature",
|
||||||
|
"unique_id": "outside_temp_humdsensoroutside_temperature",
|
||||||
|
"unit_of_measurement": "\u00b0C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false,
|
||||||
|
"icon": "mdi:water-percent",
|
||||||
|
"key": 1320590942,
|
||||||
|
"name": "Outside Humidity",
|
||||||
|
"object_id": "outside_humidity",
|
||||||
|
"unique_id": "outside_temp_humdsensoroutside_humidity",
|
||||||
|
"unit_of_measurement": "%"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": [],
|
||||||
|
"text_sensor": []
|
||||||
|
},
|
||||||
|
"key": "esphome.28ebec0e77234c51bb89a4a1b26e47b3",
|
||||||
|
"version": 1
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "esphome.9436e71647e64581a19a2cc8172f9a35",
|
||||||
|
"data": {
|
||||||
|
"device_info": {
|
||||||
|
"uses_password": false,
|
||||||
|
"name": "inside_temp_humd",
|
||||||
|
"mac_address": "84:F3:EB:3B:77:30",
|
||||||
|
"compilation_time": "Dec 1 2020, 11:20:56",
|
||||||
|
"model": "PLATFORMIO_D1_MINI",
|
||||||
|
"has_deep_sleep": false,
|
||||||
|
"esphome_version": "1.15.3"
|
||||||
|
},
|
||||||
|
"services": [],
|
||||||
|
"sensor": [
|
||||||
|
{
|
||||||
|
"object_id": "inside_temperature",
|
||||||
|
"key": 920924750,
|
||||||
|
"name": "Inside Temperature",
|
||||||
|
"unique_id": "inside_temp_humdsensorinside_temperature",
|
||||||
|
"icon": "mdi:thermometer",
|
||||||
|
"unit_of_measurement": "\u00b0C",
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"object_id": "inside_humidity",
|
||||||
|
"key": 847076999,
|
||||||
|
"name": "Inside Humidity",
|
||||||
|
"unique_id": "inside_temp_humdsensorinside_humidity",
|
||||||
|
"icon": "mdi:water-percent",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"text_sensor": []
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "esphome.cf5266d3fa4a4824850935818193ac48",
|
||||||
|
"data": {
|
||||||
|
"device_info": {
|
||||||
|
"uses_password": false,
|
||||||
|
"name": "outside_temp_humd",
|
||||||
|
"mac_address": "84:F3:EB:3B:84:92",
|
||||||
|
"compilation_time": "Dec 1 2020, 10:59:50",
|
||||||
|
"model": "PLATFORMIO_D1_MINI",
|
||||||
|
"has_deep_sleep": false,
|
||||||
|
"esphome_version": "1.15.3"
|
||||||
|
},
|
||||||
|
"services": [],
|
||||||
|
"sensor": [
|
||||||
|
{
|
||||||
|
"object_id": "outside_temperature",
|
||||||
|
"key": 2259435129,
|
||||||
|
"name": "Outside Temperature",
|
||||||
|
"unique_id": "outside_temp_humdsensoroutside_temperature",
|
||||||
|
"icon": "mdi:thermometer",
|
||||||
|
"unit_of_measurement": "\u00b0C",
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"object_id": "outside_humidity",
|
||||||
|
"key": 1320590942,
|
||||||
|
"name": "Outside Humidity",
|
||||||
|
"unique_id": "outside_temp_humdsensoroutside_humidity",
|
||||||
|
"icon": "mdi:water-percent",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"text_sensor": []
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"device_info": {
|
||||||
|
"compilation_time": "Feb 28 2020, 20:07:32",
|
||||||
|
"esphome_version": "1.14.3",
|
||||||
|
"has_deep_sleep": false,
|
||||||
|
"mac_address": "84:F3:EB:3B:84:92",
|
||||||
|
"model": "PLATFORMIO_D1_MINI",
|
||||||
|
"name": "outside_temp_humd",
|
||||||
|
"uses_password": false
|
||||||
|
},
|
||||||
|
"sensor": [
|
||||||
|
{
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false,
|
||||||
|
"icon": "mdi:thermometer",
|
||||||
|
"key": 2259435129,
|
||||||
|
"name": "Outside Temperature",
|
||||||
|
"object_id": "outside_temperature",
|
||||||
|
"unique_id": "outside_temp_humdsensoroutside_temperature",
|
||||||
|
"unit_of_measurement": "\u00b0C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"accuracy_decimals": 1,
|
||||||
|
"force_update": false,
|
||||||
|
"icon": "mdi:water-percent",
|
||||||
|
"key": 1320590942,
|
||||||
|
"name": "Outside Humidity",
|
||||||
|
"object_id": "outside_humidity",
|
||||||
|
"unique_id": "outside_temp_humdsensoroutside_humidity",
|
||||||
|
"unit_of_measurement": "%"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": [],
|
||||||
|
"text_sensor": []
|
||||||
|
},
|
||||||
|
"key": "esphome.eeb6ca4d62944fa4b32711e291ba2f63",
|
||||||
|
"version": 1
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"core": {
|
||||||
|
"showAdvanced": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key": "frontend.user_data_99685dc45d9f40dc8183e11ce5128038",
|
||||||
|
"version": 1
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "frontend_theme",
|
||||||
|
"data": {
|
||||||
|
"frontend_default_theme": "Dark Turqoise",
|
||||||
|
"frontend_default_dark_theme": null
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"version": "6",
|
||||||
|
"key": "hacs.critical",
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"repository": "test/test",
|
||||||
|
"reason": "Security issues, known to steal auth tokens.",
|
||||||
|
"link": "https://github.com/hacs/default/pull/2",
|
||||||
|
"acknowledged": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"version": "6",
|
||||||
|
"key": "hacs.hacs",
|
||||||
|
"data": {
|
||||||
|
"view": "Grid",
|
||||||
|
"compact": false,
|
||||||
|
"onboarding_done": false
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"version": "6",
|
||||||
|
"key": "hacs/146194325.hacs",
|
||||||
|
"data": {
|
||||||
|
"archived": false,
|
||||||
|
"authors": [],
|
||||||
|
"category": "plugin",
|
||||||
|
"content_in_root": false,
|
||||||
|
"country": [],
|
||||||
|
"config_flow": false,
|
||||||
|
"default_branch": "master",
|
||||||
|
"description": "\u2747\ufe0f Lovelace button-card for home assistant",
|
||||||
|
"domain": "",
|
||||||
|
"domains": [],
|
||||||
|
"downloads": 5070,
|
||||||
|
"file_name": "button-card.js",
|
||||||
|
"filename": "button-card.js",
|
||||||
|
"first_install": false,
|
||||||
|
"fork": false,
|
||||||
|
"full_name": "custom-cards/button-card",
|
||||||
|
"hacs": null,
|
||||||
|
"hide": false,
|
||||||
|
"hide_default_branch": false,
|
||||||
|
"homeassistant": null,
|
||||||
|
"id": "146194325",
|
||||||
|
"iot_class": null,
|
||||||
|
"installed": true,
|
||||||
|
"installed_commit": "b5de991",
|
||||||
|
"installed_version": "3.4.0",
|
||||||
|
"open_issues": 28,
|
||||||
|
"last_commit": "b5de991",
|
||||||
|
"last_version": "3.4.0",
|
||||||
|
"last_updated": "2020-12-02T14:06:47Z",
|
||||||
|
"manifest_name": null,
|
||||||
|
"new": false,
|
||||||
|
"persistent_directory": null,
|
||||||
|
"pushed_at": "2020-12-02T14:06:47",
|
||||||
|
"releases": true,
|
||||||
|
"render_readme": true,
|
||||||
|
"published_tags": [
|
||||||
|
"3.4.0",
|
||||||
|
"3.3.6",
|
||||||
|
"3.3.5",
|
||||||
|
"3.3.4",
|
||||||
|
"3.3.3"
|
||||||
|
],
|
||||||
|
"selected_tag": null,
|
||||||
|
"show_beta": false,
|
||||||
|
"stargazers_count": 580,
|
||||||
|
"topics": [
|
||||||
|
"home-assistant",
|
||||||
|
"home-assistant-custom",
|
||||||
|
"home-automation",
|
||||||
|
"lovelace",
|
||||||
|
"lovelace-ui"
|
||||||
|
],
|
||||||
|
"zip_release": false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
"version": "6",
|
||||||
|
"key": "hacs/162468030.hacs",
|
||||||
|
"data": {
|
||||||
|
"archived": false,
|
||||||
|
"authors": [],
|
||||||
|
"category": "theme",
|
||||||
|
"content_in_root": false,
|
||||||
|
"country": [],
|
||||||
|
"config_flow": false,
|
||||||
|
"default_branch": "master",
|
||||||
|
"description": "A collection of dark themes for Home Assistant. ",
|
||||||
|
"domain": "",
|
||||||
|
"domains": [],
|
||||||
|
"downloads": 0,
|
||||||
|
"file_name": "dark_themes.yaml",
|
||||||
|
"filename": "dark_themes.yaml",
|
||||||
|
"first_install": false,
|
||||||
|
"fork": false,
|
||||||
|
"full_name": "awolkers/home-assistant-themes",
|
||||||
|
"hacs": null,
|
||||||
|
"hide": false,
|
||||||
|
"hide_default_branch": false,
|
||||||
|
"homeassistant": null,
|
||||||
|
"id": "162468030",
|
||||||
|
"iot_class": null,
|
||||||
|
"installed": true,
|
||||||
|
"installed_commit": "648aef9",
|
||||||
|
"installed_version": null,
|
||||||
|
"open_issues": 0,
|
||||||
|
"last_commit": "648aef9",
|
||||||
|
"last_version": null,
|
||||||
|
"last_updated": "2020-09-16T14:47:00Z",
|
||||||
|
"manifest_name": null,
|
||||||
|
"new": false,
|
||||||
|
"persistent_directory": null,
|
||||||
|
"pushed_at": "2020-09-16T14:47:00",
|
||||||
|
"releases": false,
|
||||||
|
"render_readme": true,
|
||||||
|
"published_tags": [],
|
||||||
|
"selected_tag": null,
|
||||||
|
"show_beta": false,
|
||||||
|
"stargazers_count": 7,
|
||||||
|
"topics": [
|
||||||
|
"dark-mode",
|
||||||
|
"dark-theme",
|
||||||
|
"hacs",
|
||||||
|
"hassio",
|
||||||
|
"home-assistant",
|
||||||
|
"theme"
|
||||||
|
],
|
||||||
|
"zip_release": false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
{
|
||||||
|
"version": "6",
|
||||||
|
"key": "hacs/172733314.hacs",
|
||||||
|
"data": {
|
||||||
|
"archived": false,
|
||||||
|
"authors": [
|
||||||
|
"@ludeeus"
|
||||||
|
],
|
||||||
|
"category": "integration",
|
||||||
|
"content_in_root": false,
|
||||||
|
"country": [],
|
||||||
|
"config_flow": true,
|
||||||
|
"default_branch": "main",
|
||||||
|
"description": "HACS gives you a powerful UI to handle downloads of all your custom needs.",
|
||||||
|
"domain": "hacs",
|
||||||
|
"domains": [],
|
||||||
|
"downloads": 9120,
|
||||||
|
"file_name": "",
|
||||||
|
"filename": "hacs.zip",
|
||||||
|
"first_install": false,
|
||||||
|
"fork": false,
|
||||||
|
"full_name": "hacs/integration",
|
||||||
|
"hacs": "0.19.0",
|
||||||
|
"hide": false,
|
||||||
|
"hide_default_branch": true,
|
||||||
|
"homeassistant": "0.110.0",
|
||||||
|
"id": "172733314",
|
||||||
|
"iot_class": null,
|
||||||
|
"installed": true,
|
||||||
|
"installed_commit": null,
|
||||||
|
"installed_version": "1.8.0",
|
||||||
|
"open_issues": 30,
|
||||||
|
"last_commit": "d41c3f7",
|
||||||
|
"last_version": "1.8.0",
|
||||||
|
"last_updated": "2020-12-08T07:18:56Z",
|
||||||
|
"manifest_name": "HACS",
|
||||||
|
"new": false,
|
||||||
|
"persistent_directory": null,
|
||||||
|
"pushed_at": "2020-12-08T07:18:56",
|
||||||
|
"releases": true,
|
||||||
|
"render_readme": false,
|
||||||
|
"published_tags": [
|
||||||
|
"1.8.0",
|
||||||
|
"1.6.2",
|
||||||
|
"1.6.1",
|
||||||
|
"1.6.0",
|
||||||
|
"1.5.2"
|
||||||
|
],
|
||||||
|
"selected_tag": null,
|
||||||
|
"show_beta": false,
|
||||||
|
"stargazers_count": 1422,
|
||||||
|
"topics": [
|
||||||
|
"community",
|
||||||
|
"hacktoberfest",
|
||||||
|
"hacs",
|
||||||
|
"home-assistant",
|
||||||
|
"integration",
|
||||||
|
"package-manager",
|
||||||
|
"python"
|
||||||
|
],
|
||||||
|
"zip_release": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
"version": "6",
|
||||||
|
"key": "hacs/260526528.hacs",
|
||||||
|
"data": {
|
||||||
|
"archived": false,
|
||||||
|
"authors": [],
|
||||||
|
"category": "plugin",
|
||||||
|
"content_in_root": true,
|
||||||
|
"country": [],
|
||||||
|
"config_flow": false,
|
||||||
|
"default_branch": "master",
|
||||||
|
"description": "Custom Dark Sky Weather plugin for HACS. This creates a rich weather card using the Dark Sky weather plugin.",
|
||||||
|
"domain": "",
|
||||||
|
"domains": [],
|
||||||
|
"downloads": 0,
|
||||||
|
"file_name": "lovelace-darksky-card.js",
|
||||||
|
"filename": "lovelace-darksky-card.js",
|
||||||
|
"first_install": false,
|
||||||
|
"fork": true,
|
||||||
|
"full_name": "clayauld/lovelace-darksky-card",
|
||||||
|
"hacs": null,
|
||||||
|
"hide": false,
|
||||||
|
"hide_default_branch": false,
|
||||||
|
"homeassistant": null,
|
||||||
|
"id": "260526528",
|
||||||
|
"iot_class": null,
|
||||||
|
"installed": true,
|
||||||
|
"installed_commit": "03e6eac",
|
||||||
|
"installed_version": null,
|
||||||
|
"open_issues": 1,
|
||||||
|
"last_commit": "03e6eac",
|
||||||
|
"last_version": null,
|
||||||
|
"last_updated": "2020-11-05T01:35:52Z",
|
||||||
|
"manifest_name": null,
|
||||||
|
"new": false,
|
||||||
|
"persistent_directory": null,
|
||||||
|
"pushed_at": "2020-11-05T01:35:52",
|
||||||
|
"releases": false,
|
||||||
|
"render_readme": "true",
|
||||||
|
"published_tags": [],
|
||||||
|
"selected_tag": null,
|
||||||
|
"show_beta": false,
|
||||||
|
"stargazers_count": 3,
|
||||||
|
"topics": [],
|
||||||
|
"zip_release": false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
"version": "6",
|
||||||
|
"key": "hacs/261262884.hacs",
|
||||||
|
"data": {
|
||||||
|
"archived": false,
|
||||||
|
"authors": [],
|
||||||
|
"category": "plugin",
|
||||||
|
"content_in_root": false,
|
||||||
|
"country": [],
|
||||||
|
"config_flow": false,
|
||||||
|
"default_branch": "master",
|
||||||
|
"description": "\ud83d\udd70\ufe0f Time Picker Card for Home Assistant's Lovelace UI",
|
||||||
|
"domain": "",
|
||||||
|
"domains": [],
|
||||||
|
"downloads": 958,
|
||||||
|
"file_name": "time-picker-card.js",
|
||||||
|
"filename": "time-picker-card.js",
|
||||||
|
"first_install": false,
|
||||||
|
"fork": false,
|
||||||
|
"full_name": "GeorgeSG/lovelace-time-picker-card",
|
||||||
|
"hacs": null,
|
||||||
|
"hide": false,
|
||||||
|
"hide_default_branch": false,
|
||||||
|
"homeassistant": null,
|
||||||
|
"id": "261262884",
|
||||||
|
"iot_class": null,
|
||||||
|
"installed": true,
|
||||||
|
"installed_commit": "c3fa2ce",
|
||||||
|
"installed_version": "1.1.1",
|
||||||
|
"open_issues": 1,
|
||||||
|
"last_commit": "c3fa2ce",
|
||||||
|
"last_version": "1.1.1",
|
||||||
|
"last_updated": "2020-11-22T14:38:10Z",
|
||||||
|
"manifest_name": null,
|
||||||
|
"new": false,
|
||||||
|
"persistent_directory": null,
|
||||||
|
"pushed_at": "2020-11-22T14:38:10",
|
||||||
|
"releases": true,
|
||||||
|
"render_readme": true,
|
||||||
|
"published_tags": [
|
||||||
|
"1.1.1",
|
||||||
|
"1.1.0",
|
||||||
|
"1.0.1",
|
||||||
|
"0.1.1",
|
||||||
|
"0.1.0"
|
||||||
|
],
|
||||||
|
"selected_tag": null,
|
||||||
|
"show_beta": false,
|
||||||
|
"stargazers_count": 43,
|
||||||
|
"topics": [
|
||||||
|
"home-assistant",
|
||||||
|
"homeassistant",
|
||||||
|
"lovelace",
|
||||||
|
"lovelace-card",
|
||||||
|
"lovelace-custom-card"
|
||||||
|
],
|
||||||
|
"zip_release": false
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"hassio_user": "5dc5beb72dbc49d59080804cea6f026c"
|
||||||
|
},
|
||||||
|
"key": "hassio",
|
||||||
|
"version": 1
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "http",
|
||||||
|
"data": {
|
||||||
|
"server_port": 8123,
|
||||||
|
"ssl_profile": "modern",
|
||||||
|
"cors_allowed_origins": [
|
||||||
|
"https://cast.home-assistant.io"
|
||||||
|
],
|
||||||
|
"login_attempts_threshold": -1,
|
||||||
|
"ip_ban_enabled": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,209 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "lovelace.lovelace_learning",
|
||||||
|
"data": {
|
||||||
|
"config": {
|
||||||
|
"title": "238 McHaley",
|
||||||
|
"views": [
|
||||||
|
{
|
||||||
|
"title": "Meterology",
|
||||||
|
"path": "meterology",
|
||||||
|
"icon": "mdi:thermometer-lines",
|
||||||
|
"badges": [],
|
||||||
|
"cards": [
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"show_header_toggle": false,
|
||||||
|
"title": "Outside",
|
||||||
|
"entities": [
|
||||||
|
"sensor.outside_temperature",
|
||||||
|
"sensor.outside_humidity"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"show_header_toggle": false,
|
||||||
|
"title": "Inside",
|
||||||
|
"entities": [
|
||||||
|
"sensor.inside_temperature",
|
||||||
|
"sensor.inside_humidity"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weather-forecast",
|
||||||
|
"entity": "weather.praire_city_weather"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"entity": "sensor.bme_outside_temperature",
|
||||||
|
"icon": "mdi:temperature-fahrenheit",
|
||||||
|
"name": "Outside Temperature",
|
||||||
|
"secondary_info": "last-changed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity": "sensor.bme_outside_humidity",
|
||||||
|
"name": "Humidity",
|
||||||
|
"icon": "mdi:water-percent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity": "sensor.bme_outside_barometric_pressure",
|
||||||
|
"name": "Barometric Pressue",
|
||||||
|
"icon": "mdi:gauge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity": "sensor.bme_outside_dew_point_temperature",
|
||||||
|
"name": "Dew Point Temperature",
|
||||||
|
"icon": "mdi:thermometer-lines"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Outside Conditions",
|
||||||
|
"theme": "Dark Blue",
|
||||||
|
"show_header_toggle": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "iframe",
|
||||||
|
"url": "https://embed.windy.com/embed2.html?lat=44.422&lon=-118.718&detailLat=44.452&detailLon=-118.529&width=650&height=450&zoom=9&level=surface&overlay=radar&product=radar&menu=&message=&marker=&calendar=now&pressure=&type=map&location=coordinates&detail=&metricWind=mph&metricTemp=%C2%B0F&radarRange=-1",
|
||||||
|
"aspect_ratio": "100%",
|
||||||
|
"title": "Live Weather Map"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "iframe",
|
||||||
|
"title": "Local Radar",
|
||||||
|
"aspect_ratio": "100%",
|
||||||
|
"url": "https://www.rainviewer.com/map.html?loc=44.4823,-118.7828,10&oFa=0&oC=1&oU=0&oCS=1&oF=0&oAP=0&rmt=0&c=0&o=83&lm=1&th=1&sm=1&sn=1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weather-forecast",
|
||||||
|
"entity": "weather.praire_city_weather"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom:lovelace-darksky-card",
|
||||||
|
"entity_current_conditions": "sensor.dark_sky_icon",
|
||||||
|
"entity_temperature": "sensor.dark_sky_temperature",
|
||||||
|
"entity_forecast_high_temp_1": "sensor.dark_sky_daytime_high_temperature_1d",
|
||||||
|
"entity_forecast_high_temp_2": "sensor.dark_sky_daytime_high_temperature_2d",
|
||||||
|
"entity_forecast_high_temp_3": "sensor.dark_sky_daytime_high_temperature_3d",
|
||||||
|
"entity_forecast_high_temp_4": "sensor.dark_sky_daytime_high_temperature_4d",
|
||||||
|
"entity_forecast_high_temp_5": "sensor.dark_sky_daytime_high_temperature_5d",
|
||||||
|
"entity_forecast_icon_1": "sensor.dark_sky_icon_1d",
|
||||||
|
"entity_forecast_icon_2": "sensor.dark_sky_icon_2d",
|
||||||
|
"entity_forecast_icon_3": "sensor.dark_sky_icon_3d",
|
||||||
|
"entity_forecast_icon_4": "sensor.dark_sky_icon_4d",
|
||||||
|
"entity_forecast_icon_5": "sensor.dark_sky_icon_5d",
|
||||||
|
"entity_forecast_low_temp_1": "sensor.dark_sky_overnight_low_temperature_0d",
|
||||||
|
"entity_forecast_low_temp_2": "sensor.dark_sky_overnight_low_temperature_1d",
|
||||||
|
"entity_forecast_low_temp_3": "sensor.dark_sky_overnight_low_temperature_2d",
|
||||||
|
"entity_forecast_low_temp_4": "sensor.dark_sky_overnight_low_temperature_3d",
|
||||||
|
"entity_forecast_low_temp_5": "sensor.dark_sky_overnight_low_temperature_4d",
|
||||||
|
"entity_summary_1": "sensor.dark_sky_summary_1d",
|
||||||
|
"entity_summary_2": "sensor.dark_sky_summary_2d",
|
||||||
|
"entity_summary_3": "sensor.dark_sky_summary_3d",
|
||||||
|
"entity_summary_4": "sensor.dark_sky_summary_4d",
|
||||||
|
"entity_summary_5": "sensor.dark_sky_summary_5d",
|
||||||
|
"entity_sun": "sun.sun",
|
||||||
|
"entity_visibility": "sensor.dark_sky_visibility",
|
||||||
|
"entity_daytime_high": "sensor.dark_sky_daytime_high_temperature_0d",
|
||||||
|
"entity_wind_bearing": "sensor.dark_sky_wind_bearing",
|
||||||
|
"entity_wind_speed": "sensor.dark_sky_wind_speed",
|
||||||
|
"entity_humidity": "sensor.dark_sky_humidity",
|
||||||
|
"entity_pressure": "sensor.dark_sky_pressure",
|
||||||
|
"entity_apparent_temp": "sensor.dark_sky_apparent_temperature",
|
||||||
|
"entity_daily_summary": "sensor.dark_sky_daily_summary",
|
||||||
|
"entity_pop": "sensor.dark_sky_precip_probability",
|
||||||
|
"entity_pop_intensity": "sensor.dark_sky_precip_intensity",
|
||||||
|
"entity_pop_1": "sensor.dark_sky_precip_probability_1d",
|
||||||
|
"entity_pop_2": "sensor.dark_sky_precip_probability_2d",
|
||||||
|
"entity_pop_3": "sensor.dark_sky_precip_probability_3d",
|
||||||
|
"entity_pop_4": "sensor.dark_sky_precip_probability_4d",
|
||||||
|
"entity_pop_5": "sensor.dark_sky_precip_probability_5d"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Lights",
|
||||||
|
"path": "lights",
|
||||||
|
"icon": "mdi:lightbulb",
|
||||||
|
"badges": [],
|
||||||
|
"cards": [
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"show_header_toggle": false,
|
||||||
|
"title": "Indoor Security Lights",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"entity": "switch.all_sonoffs",
|
||||||
|
"name": "Lights State (manual override)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity": "input_datetime.security_lights_interior_time_off",
|
||||||
|
"name": "Time Of Day To Turn Off (24HR)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity": "automation.security_lights_interior_time_on",
|
||||||
|
"name": "Lights On At Sunset Automation Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entity": "automation.security_lights_interior_time_off",
|
||||||
|
"name": "Lights Off Automation Enabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"show_header_toggle": false,
|
||||||
|
"title": "Raw Sonoff Control",
|
||||||
|
"entities": [
|
||||||
|
"switch.sonoff_white",
|
||||||
|
"switch.sonoff_brown",
|
||||||
|
"switch.all_sonoffs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom:time-picker-card",
|
||||||
|
"entity": "input_datetime.security_lights_interior_time_off",
|
||||||
|
"hour_mode": 24,
|
||||||
|
"hour_step": 1,
|
||||||
|
"minute_step": 5,
|
||||||
|
"second_step": 5,
|
||||||
|
"name": "lights off at",
|
||||||
|
"layout": {
|
||||||
|
"embedded": true,
|
||||||
|
"name": "header",
|
||||||
|
"align_controls": "center"
|
||||||
|
},
|
||||||
|
"link_values": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "button",
|
||||||
|
"tap_action": {
|
||||||
|
"action": "toggle"
|
||||||
|
},
|
||||||
|
"entity": "switch.outside_north_circuit_1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Electronics Closet",
|
||||||
|
"path": "electronics-closet",
|
||||||
|
"icon": "mdi:door",
|
||||||
|
"badges": [],
|
||||||
|
"cards": [
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"show_header_toggle": false,
|
||||||
|
"title": "Temperature Control",
|
||||||
|
"entities": [
|
||||||
|
"sensor.closet_temperature",
|
||||||
|
"input_number.fan_on_temp",
|
||||||
|
"switch.fan_automation_enabled",
|
||||||
|
"fan.fan_state"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "lovelace.system_setup",
|
||||||
|
"data": {
|
||||||
|
"config": {
|
||||||
|
"views": [
|
||||||
|
{
|
||||||
|
"title": "Main",
|
||||||
|
"path": "main",
|
||||||
|
"badges": [],
|
||||||
|
"cards": [
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"show_header_toggle": false,
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "ESPHome",
|
||||||
|
"url": "/15ef4d2f_esphome",
|
||||||
|
"icon": "mdi:alpha-e-box"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "HACS",
|
||||||
|
"url": "/hacs/entry",
|
||||||
|
"icon": "mdi:alpha-h-box"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Dashboards",
|
||||||
|
"url": "/config/lovelace/dashboards",
|
||||||
|
"icon": "mdi:view-dashboard-variant"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Edit Configuration Files",
|
||||||
|
"url": "/a0d7b954_vscode",
|
||||||
|
"icon": "mdi:playlist-edit"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "entities",
|
||||||
|
"title": "HomeAssistant",
|
||||||
|
"show_header_toggle": false,
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Home Assistant",
|
||||||
|
"url": "https://home-assistant.io",
|
||||||
|
"icon": "mdi:home-assistant"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Configuring Home Assistant",
|
||||||
|
"url": "https://home-assistant.io/getting-started/configuration/",
|
||||||
|
"icon": "mdi:assistant"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Available Components",
|
||||||
|
"url": "https://home-assistant.io/components/",
|
||||||
|
"icon": "mdi:briefcase-check"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Troubleshooting your configuration",
|
||||||
|
"url": "https://home-assistant.io/docs/configuration/troubleshooting/",
|
||||||
|
"icon": "mdi:wrench"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Getting Help",
|
||||||
|
"url": "https://home-assistant.io/help/",
|
||||||
|
"icon": "mdi:help"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weblink",
|
||||||
|
"name": "Home Assistant Forum",
|
||||||
|
"url": "https://community.home-assistant.io",
|
||||||
|
"icon": "mdi:comment-multiple-outline"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "System Setup Navigator"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "lovelace_dashboards",
|
||||||
|
"data": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"require_admin": false,
|
||||||
|
"show_in_sidebar": true,
|
||||||
|
"title": "Learning",
|
||||||
|
"url_path": "lovelace-learning",
|
||||||
|
"mode": "storage",
|
||||||
|
"id": "lovelace_learning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"require_admin": true,
|
||||||
|
"show_in_sidebar": true,
|
||||||
|
"title": "Setup",
|
||||||
|
"url_path": "system-setup",
|
||||||
|
"mode": "storage",
|
||||||
|
"id": "system_setup"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "lovelace_resources",
|
||||||
|
"data": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"url": "/hacsfiles/button-card/button-card.js",
|
||||||
|
"type": "module",
|
||||||
|
"id": "2e6bc398cf194600a54c288f0f39df30"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "/hacsfiles/lovelace-time-picker-card/time-picker-card.js",
|
||||||
|
"type": "module",
|
||||||
|
"id": "320b29e23fa841389e7f288518351f20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "/hacsfiles/lovelace-darksky-card/lovelace-darksky-card.js",
|
||||||
|
"type": "module",
|
||||||
|
"id": "1b05f5d79aba4d86876333158b04a3c9"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,530 @@
|
||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"key": "mobile_app",
|
||||||
|
"data": {
|
||||||
|
"binary_sensor": {
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_is_charging": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "plug",
|
||||||
|
"icon": "mdi:power-plug",
|
||||||
|
"name": "Is Charging",
|
||||||
|
"state": true,
|
||||||
|
"type": "binary_sensor",
|
||||||
|
"unique_id": "is_charging",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deleted_ids": [
|
||||||
|
"e05272f132b2ece8de22ec23b279ff8775479cfe54e60bb4d935111c007480a1",
|
||||||
|
"e689e9489fb188efebd2131925467e20069b7725bbd125ef8f8765986e124d0f",
|
||||||
|
"589b63fea7e219d0ebc4a4804c59f7cfacef9c25c4621300f84eb7614446152c"
|
||||||
|
],
|
||||||
|
"sensor": {
|
||||||
|
"05937d05f5a6239334725f7b14a462ab0e409dbbe11c2cf4b2f20747f403edf2_battery_level": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-90",
|
||||||
|
"name": "Battery Level",
|
||||||
|
"state": 93,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_level",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "05937d05f5a6239334725f7b14a462ab0e409dbbe11c2cf4b2f20747f403edf2"
|
||||||
|
},
|
||||||
|
"05937d05f5a6239334725f7b14a462ab0e409dbbe11c2cf4b2f20747f403edf2_battery_state": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"charger_type": "unknown",
|
||||||
|
"is_charging": false
|
||||||
|
},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-90",
|
||||||
|
"name": "Battery State",
|
||||||
|
"state": "discharging",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_state",
|
||||||
|
"webhook_id": "05937d05f5a6239334725f7b14a462ab0e409dbbe11c2cf4b2f20747f403edf2"
|
||||||
|
},
|
||||||
|
"05937d05f5a6239334725f7b14a462ab0e409dbbe11c2cf4b2f20747f403edf2_wifi_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"bssid": "0c:80:63:06:fc:b0",
|
||||||
|
"frequency": 2462,
|
||||||
|
"ip_address": "10.0.0.50",
|
||||||
|
"is_hidden": false,
|
||||||
|
"link_speed": 72,
|
||||||
|
"signal_level": -1
|
||||||
|
},
|
||||||
|
"icon": "mdi:wifi-strength-off",
|
||||||
|
"name": "Wifi Connection",
|
||||||
|
"state": "zoesplace",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "wifi_connection",
|
||||||
|
"webhook_id": "05937d05f5a6239334725f7b14a462ab0e409dbbe11c2cf4b2f20747f403edf2"
|
||||||
|
},
|
||||||
|
"589b63fea7e219d0ebc4a4804c59f7cfacef9c25c4621300f84eb7614446152c_battery_level": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"charger_type": "N/A",
|
||||||
|
"is_charging": false
|
||||||
|
},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-60",
|
||||||
|
"name": "Battery Level",
|
||||||
|
"state": 67,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_level",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "589b63fea7e219d0ebc4a4804c59f7cfacef9c25c4621300f84eb7614446152c"
|
||||||
|
},
|
||||||
|
"589b63fea7e219d0ebc4a4804c59f7cfacef9c25c4621300f84eb7614446152c_geocoded_location": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Administrative Area": "Oregon",
|
||||||
|
"Country": "United States",
|
||||||
|
"ISO Country Code": "US",
|
||||||
|
"Locality": "Prairie City",
|
||||||
|
"Location": [
|
||||||
|
44.4611229,
|
||||||
|
-118.71172790000001
|
||||||
|
],
|
||||||
|
"Postal Code": "97869",
|
||||||
|
"Sub Administrative Area": "Grant County",
|
||||||
|
"Sub Locality": null,
|
||||||
|
"Sub Thoroughfare": "238",
|
||||||
|
"Thoroughfare": "North McHaley Street"
|
||||||
|
},
|
||||||
|
"icon": "mdi:map",
|
||||||
|
"name": "Geocoded Location",
|
||||||
|
"state": "238 N McHaley St, Prairie City, OR 97869, USA",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "geocoded_location",
|
||||||
|
"webhook_id": "589b63fea7e219d0ebc4a4804c59f7cfacef9c25c4621300f84eb7614446152c"
|
||||||
|
},
|
||||||
|
"589b63fea7e219d0ebc4a4804c59f7cfacef9c25c4621300f84eb7614446152c_wifi_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"bssid": "0c:80:63:06:fc:b0",
|
||||||
|
"frequency": 2437,
|
||||||
|
"ip_address": "10.0.0.203",
|
||||||
|
"is_hidden": false,
|
||||||
|
"link_speed": 28,
|
||||||
|
"signal_level": -74
|
||||||
|
},
|
||||||
|
"icon": "mdi:wifi-strength-1",
|
||||||
|
"name": "Wifi Connection",
|
||||||
|
"state": "zoesplace",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "wifi_connection",
|
||||||
|
"webhook_id": "589b63fea7e219d0ebc4a4804c59f7cfacef9c25c4621300f84eb7614446152c"
|
||||||
|
},
|
||||||
|
"5f53d4c3439e791aab47663319361609868cb300c034204db0e25e40147d27be_battery_level": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery",
|
||||||
|
"name": "Battery Level",
|
||||||
|
"state": 100,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_level",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "5f53d4c3439e791aab47663319361609868cb300c034204db0e25e40147d27be"
|
||||||
|
},
|
||||||
|
"5f53d4c3439e791aab47663319361609868cb300c034204db0e25e40147d27be_battery_state": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"is_charging": true,
|
||||||
|
"charger_type": "ac"
|
||||||
|
},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-charging",
|
||||||
|
"name": "Battery State",
|
||||||
|
"state": "full",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_state",
|
||||||
|
"webhook_id": "5f53d4c3439e791aab47663319361609868cb300c034204db0e25e40147d27be"
|
||||||
|
},
|
||||||
|
"5f53d4c3439e791aab47663319361609868cb300c034204db0e25e40147d27be_wifi_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"bssid": "0c:80:63:91:4c:90",
|
||||||
|
"ip_address": "10.0.0.203",
|
||||||
|
"link_speed": 72,
|
||||||
|
"is_hidden": false,
|
||||||
|
"frequency": 2437,
|
||||||
|
"signal_level": -1
|
||||||
|
},
|
||||||
|
"icon": "mdi:wifi-strength-off",
|
||||||
|
"name": "Wifi Connection",
|
||||||
|
"state": "zoesplace-outside",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "wifi_connection",
|
||||||
|
"webhook_id": "5f53d4c3439e791aab47663319361609868cb300c034204db0e25e40147d27be"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_audio_sensor": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"audio_mode": "normal",
|
||||||
|
"is_headphones": false,
|
||||||
|
"is_mic_muted": false,
|
||||||
|
"is_music_active": false,
|
||||||
|
"is_speakerphone_on": false,
|
||||||
|
"volume_level_alarm": 6,
|
||||||
|
"volume_level_call": 4,
|
||||||
|
"volume_level_music": 0,
|
||||||
|
"volume_level_ring": 5
|
||||||
|
},
|
||||||
|
"icon": "mdi:volume-high",
|
||||||
|
"name": "Audio Sensor",
|
||||||
|
"state": "normal",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "audio_sensor",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_battery_health": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"icon": "mdi:battery-alert",
|
||||||
|
"name": "Battery Health",
|
||||||
|
"state": "unknown",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_health",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_battery_level": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery",
|
||||||
|
"name": "Battery Level",
|
||||||
|
"state": 100,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_level",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_battery_state": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-charging",
|
||||||
|
"name": "Battery State",
|
||||||
|
"state": "full",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_state",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_bluetooth_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"connected_not_paired_devices": "[]",
|
||||||
|
"connected_paired_devices": "[]",
|
||||||
|
"is_bt_on": false,
|
||||||
|
"paired_devices": ""
|
||||||
|
},
|
||||||
|
"icon": "mdi:bluetooth",
|
||||||
|
"name": "Bluetooth Connection",
|
||||||
|
"state": 0,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "bluetooth_connection",
|
||||||
|
"unit_of_measurement": "connection(s)",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_charger_type": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"icon": "mdi:power-plug",
|
||||||
|
"name": "Charger Type",
|
||||||
|
"state": "ac",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "charger_type",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_detected_activity": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"in_vehicle": 10,
|
||||||
|
"on_bicycle": 10,
|
||||||
|
"on_foot": 10,
|
||||||
|
"running": 10,
|
||||||
|
"still": 10,
|
||||||
|
"unknown": 40,
|
||||||
|
"walking": 10
|
||||||
|
},
|
||||||
|
"icon": "mdi:progress-question",
|
||||||
|
"name": "Detected Activity",
|
||||||
|
"state": "unknown",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "detected_activity",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_dnd_sensor": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"icon": "mdi:do-not-disturb",
|
||||||
|
"name": "Do Not Disturb Sensor",
|
||||||
|
"state": "off",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "dnd_sensor",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_last_reboot": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Local Time": "Thu Dec 03 12:36:33 PST 2020",
|
||||||
|
"Time in Milliseconds": 1607027793942
|
||||||
|
},
|
||||||
|
"device_class": "timestamp",
|
||||||
|
"icon": "mdi:restart",
|
||||||
|
"name": "Last Reboot",
|
||||||
|
"state": "2020-12-03T20:36:33Z",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "last_reboot",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_light_sensor": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "illuminance",
|
||||||
|
"icon": "mdi:brightness-5",
|
||||||
|
"name": "Light Sensor",
|
||||||
|
"state": "116",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "light_sensor",
|
||||||
|
"unit_of_measurement": "lx",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_next_alarm": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Local Time": "",
|
||||||
|
"Package": "",
|
||||||
|
"Time in Milliseconds": 0.0
|
||||||
|
},
|
||||||
|
"device_class": "timestamp",
|
||||||
|
"icon": "mdi:alarm",
|
||||||
|
"name": "Next Alarm",
|
||||||
|
"state": "unavailable",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "next_alarm",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_storage_sensor": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Total internal storage": "116GB"
|
||||||
|
},
|
||||||
|
"icon": "mdi:harddisk",
|
||||||
|
"name": "Storage Sensor",
|
||||||
|
"state": 88,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "storage_sensor",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4_wifi_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"bssid": "02:00:00:00:00:00",
|
||||||
|
"frequency": 5180,
|
||||||
|
"ip_address": "10.0.0.250",
|
||||||
|
"is_hidden": true,
|
||||||
|
"link_speed": 300,
|
||||||
|
"signal_level": -1
|
||||||
|
},
|
||||||
|
"icon": "mdi:wifi-strength-off",
|
||||||
|
"name": "Wifi Connection",
|
||||||
|
"state": "<unknown ssid>",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "wifi_connection",
|
||||||
|
"webhook_id": "972369ddfba8b95dfc4b3ab68f74f19e19227919102c4720d1fc38d9fd45a0b4"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_battery_level": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-50",
|
||||||
|
"name": "Battery Level",
|
||||||
|
"state": 58,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_level",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_battery_state": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"battery_health": "good",
|
||||||
|
"charger_type": "unknown",
|
||||||
|
"is_charging": false
|
||||||
|
},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-50",
|
||||||
|
"name": "Battery State",
|
||||||
|
"state": "discharging",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_state",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_bluetooth_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"connected_not_paired_devices": [],
|
||||||
|
"connected_paired_devices": [],
|
||||||
|
"is_bt_on": false,
|
||||||
|
"paired_devices": ""
|
||||||
|
},
|
||||||
|
"icon": "mdi:bluetooth",
|
||||||
|
"name": "Bluetooth Connection",
|
||||||
|
"state": 0,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "bluetooth_connection",
|
||||||
|
"unit_of_measurement": "connection(s)",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_geocoded_location": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Administrative Area": "Oregon",
|
||||||
|
"Country": "United States",
|
||||||
|
"ISO Country Code": "US",
|
||||||
|
"Locality": "Prairie City",
|
||||||
|
"Location": [
|
||||||
|
44.4609349,
|
||||||
|
-118.71165899999998
|
||||||
|
],
|
||||||
|
"Postal Code": "97869",
|
||||||
|
"Sub Administrative Area": "Grant County",
|
||||||
|
"Sub Locality": null,
|
||||||
|
"Sub Thoroughfare": "258",
|
||||||
|
"Thoroughfare": "South McHaley Avenue"
|
||||||
|
},
|
||||||
|
"icon": "mdi:map",
|
||||||
|
"name": "Geocoded Location",
|
||||||
|
"state": "258 S McHaley Ave, Prairie City, OR 97869, USA",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "geocoded_location",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_light_sensor": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {},
|
||||||
|
"device_class": "illuminance",
|
||||||
|
"icon": "mdi:brightness-5",
|
||||||
|
"name": "Light Sensor",
|
||||||
|
"state": "unavailable",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "light_sensor",
|
||||||
|
"unit_of_measurement": "lx",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_next_alarm": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Local Time": "",
|
||||||
|
"Package": "",
|
||||||
|
"Time in Milliseconds": 0
|
||||||
|
},
|
||||||
|
"device_class": "timestamp",
|
||||||
|
"icon": "mdi:alarm",
|
||||||
|
"name": "Next Alarm",
|
||||||
|
"state": "unavailable",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "next_alarm",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_storage_sensor": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Free external storage": "17GB",
|
||||||
|
"Free internal storage": "0GB",
|
||||||
|
"Total external storage": "29GB",
|
||||||
|
"Total internal storage": "24GB"
|
||||||
|
},
|
||||||
|
"icon": "mdi:harddisk",
|
||||||
|
"name": "Storage Sensor",
|
||||||
|
"state": 3,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "storage_sensor",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0_wifi_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"bssid": "0c:80:63:91:4c:91",
|
||||||
|
"frequency": 5180,
|
||||||
|
"ip_address": "10.0.0.81",
|
||||||
|
"is_hidden": false,
|
||||||
|
"is_wifi_on": true,
|
||||||
|
"link_speed": 390,
|
||||||
|
"signal_level": -63
|
||||||
|
},
|
||||||
|
"icon": "mdi:wifi-strength-2",
|
||||||
|
"name": "Wifi Connection",
|
||||||
|
"state": "zoesplace-outside",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "wifi_connection",
|
||||||
|
"webhook_id": "b0bd2f0affedb208d53f95e0f264ec0ba55e5c867ee3a864dd94e29c3f8a8db0"
|
||||||
|
},
|
||||||
|
"e689e9489fb188efebd2131925467e20069b7725bbd125ef8f8765986e124d0f_battery_level": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"charger_type": "AC",
|
||||||
|
"is_charging": true
|
||||||
|
},
|
||||||
|
"device_class": "battery",
|
||||||
|
"icon": "mdi:battery-charging",
|
||||||
|
"name": "Battery Level",
|
||||||
|
"state": 100,
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "battery_level",
|
||||||
|
"unit_of_measurement": "%",
|
||||||
|
"webhook_id": "e689e9489fb188efebd2131925467e20069b7725bbd125ef8f8765986e124d0f"
|
||||||
|
},
|
||||||
|
"e689e9489fb188efebd2131925467e20069b7725bbd125ef8f8765986e124d0f_geocoded_location": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"Administrative Area": "Oregon",
|
||||||
|
"Country": "United States",
|
||||||
|
"ISO Country Code": "US",
|
||||||
|
"Locality": "Prairie City",
|
||||||
|
"Location": [
|
||||||
|
44.4611229,
|
||||||
|
-118.71172790000001
|
||||||
|
],
|
||||||
|
"Postal Code": "97869",
|
||||||
|
"Sub Administrative Area": "Grant County",
|
||||||
|
"Sub Locality": null,
|
||||||
|
"Sub Thoroughfare": "238",
|
||||||
|
"Thoroughfare": "North McHaley Street"
|
||||||
|
},
|
||||||
|
"icon": "mdi:map",
|
||||||
|
"name": "Geocoded Location",
|
||||||
|
"state": "238 N McHaley St, Prairie City, OR 97869, USA",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "geocoded_location",
|
||||||
|
"webhook_id": "e689e9489fb188efebd2131925467e20069b7725bbd125ef8f8765986e124d0f"
|
||||||
|
},
|
||||||
|
"e689e9489fb188efebd2131925467e20069b7725bbd125ef8f8765986e124d0f_wifi_connection": {
|
||||||
|
"added": true,
|
||||||
|
"attributes": {
|
||||||
|
"bssid": "0c:80:63:91:4c:90",
|
||||||
|
"frequency": 2437,
|
||||||
|
"ip_address": "10.0.0.182",
|
||||||
|
"is_hidden": false,
|
||||||
|
"link_speed": 72,
|
||||||
|
"signal_level": -39
|
||||||
|
},
|
||||||
|
"icon": "mdi:wifi-strength-3",
|
||||||
|
"name": "Wifi Connection",
|
||||||
|
"state": "zoesplace-outside",
|
||||||
|
"type": "sensor",
|
||||||
|
"unique_id": "wifi_connection",
|
||||||
|
"webhook_id": "e689e9489fb188efebd2131925467e20069b7725bbd125ef8f8765986e124d0f"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"done": [
|
||||||
|
"user",
|
||||||
|
"core_config",
|
||||||
|
"integration"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"key": "onboarding",
|
||||||
|
"version": 3
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"device_trackers": [
|
||||||
|
"device_tracker.700t1c",
|
||||||
|
"device_tracker.sm_g935r4",
|
||||||
|
"device_tracker.xt1064_2",
|
||||||
|
"device_tracker.lgus215"
|
||||||
|
],
|
||||||
|
"id": "sysadmin",
|
||||||
|
"name": "sysadmin",
|
||||||
|
"user_id": "99685dc45d9f40dc8183e11ce5128038"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"key": "person",
|
||||||
|
"version": 2
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"items": []
|
||||||
|
},
|
||||||
|
"key": "zone",
|
||||||
|
"version": 1
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"*.yaml": "home-assistant"
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
#port: 1883
|
#port: 1883
|
||||||
#username: !secret MQTT_username
|
#username: !secret MQTT_username
|
||||||
#password: !secret MQTT_password
|
#password: !secret MQTT_password
|
||||||
|
#discovery: true
|
||||||
birth_message:
|
birth_message:
|
||||||
topic: "status/ha"
|
topic: "status/ha"
|
||||||
payload: "online"
|
payload: "online"
|
|
@ -0,0 +1,18 @@
|
||||||
|
# lovelace_gen
|
||||||
|
|
||||||
|
# {% zones = [ '1':'Front North', '2':'Front South', '3':'Front Beds'} %}
|
||||||
|
icon: mdi:water
|
||||||
|
cards:
|
||||||
|
- type: vertical-stack
|
||||||
|
cards:
|
||||||
|
- type: markdown
|
||||||
|
content: >
|
||||||
|
# Irrigation
|
||||||
|
# {% for zone in zones %}
|
||||||
|
# - type: entity-button
|
||||||
|
# entity: switch.irrigation_zone_{{ zone }}
|
||||||
|
# icon: mdi:water
|
||||||
|
# name: zones[zone]
|
||||||
|
# tap_action:
|
||||||
|
# action: toggle
|
||||||
|
# {% endfor %}
|
|
@ -0,0 +1,8 @@
|
||||||
|
# lovelace_gen
|
||||||
|
{% if entity.startswith("light") %}
|
||||||
|
type: light
|
||||||
|
{% else %}
|
||||||
|
type: entity-button
|
||||||
|
{% endif %}
|
||||||
|
entity: {{ entity }}
|
||||||
|
name: {{ name }}
|
|
@ -4,7 +4,7 @@ cards:
|
||||||
cards:
|
cards:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
content: >
|
content: >
|
||||||
# Control GPIO Relays on Pine64
|
# Control UCI GPIO Relays
|
||||||
- type: horizontal-stack
|
- type: horizontal-stack
|
||||||
cards:
|
cards:
|
||||||
- type: entity-button
|
- type: entity-button
|
|
@ -0,0 +1,34 @@
|
||||||
|
# lovelace_gen
|
||||||
|
title: MQTT Irrigation Buttons
|
||||||
|
{# icon: mdi:water #}
|
||||||
|
panel: true
|
||||||
|
cards:
|
||||||
|
- type: 'custom:layout-card'
|
||||||
|
min_columns: 2
|
||||||
|
max_columns: 4
|
||||||
|
column_width: 200px
|
||||||
|
cards:
|
||||||
|
- type: entity-button
|
||||||
|
entity: switch.irrigation_pump
|
||||||
|
icon: mdi:water-pump
|
||||||
|
name: well pump
|
||||||
|
tap_action:
|
||||||
|
action: toggle
|
||||||
|
{% set zones = {
|
||||||
|
'1':'Front Yard North',
|
||||||
|
'2':'Front Yard South',
|
||||||
|
'3':'Fr. Beds/Back E. Spigot',
|
||||||
|
'4':'Back Garage Spigot',
|
||||||
|
'5':'Garden North/West',
|
||||||
|
'6':'Garden South',
|
||||||
|
'7':'Back West Spigot'
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
{% for zone,name in zones.items() %}
|
||||||
|
- type: entity-button
|
||||||
|
entity: switch.irrigation_zone_{{ zone }}
|
||||||
|
icon: mdi:water
|
||||||
|
name: {{ name }}
|
||||||
|
tap_action:
|
||||||
|
action: toggle
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,34 @@
|
||||||
|
# lovelace_gen
|
||||||
|
title: Irrigation
|
||||||
|
icon: mdi:water
|
||||||
|
panel: true
|
||||||
|
cards:
|
||||||
|
- type: 'custom:layout-card'
|
||||||
|
min_columns: 2
|
||||||
|
max_columns: 4
|
||||||
|
column_width: 200px
|
||||||
|
cards:
|
||||||
|
- type: entity-button
|
||||||
|
entity: input_boolean.irrigation_pump
|
||||||
|
icon: mdi:water-pump
|
||||||
|
name: well pump
|
||||||
|
tap_action:
|
||||||
|
action: toggle
|
||||||
|
{% set zones = {
|
||||||
|
'1':'Front Yard North',
|
||||||
|
'2':'Front Yard South',
|
||||||
|
'3':'Fr. Beds/Back E. Spigot',
|
||||||
|
'4':'Back Garage Spigot',
|
||||||
|
'5':'Garden North/West',
|
||||||
|
'6':'Garden South',
|
||||||
|
'7':'Back West Spigot'
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
{% for zone,name in zones.items() %}
|
||||||
|
- type: entity-button
|
||||||
|
entity: input_boolean.irrigation_zone_{{ zone }}_state
|
||||||
|
icon: mdi:water
|
||||||
|
name: {{ name }}
|
||||||
|
tap_action:
|
||||||
|
action: toggle
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,70 @@
|
||||||
|
# lovelace_gen
|
||||||
|
title: Irrigation
|
||||||
|
cards:
|
||||||
|
{% set zones = {
|
||||||
|
'1':'Front Yard North',
|
||||||
|
'2':'Front Yard South',
|
||||||
|
'3':'Fr. Beds/Back E. Spigot',
|
||||||
|
'4':'Back Garage Spigot',
|
||||||
|
'5':'Garden North/West',
|
||||||
|
'6':'Garden South',
|
||||||
|
'7':'Back West Spigot'
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
- type: vertical-stack
|
||||||
|
cards:
|
||||||
|
- type: markdown
|
||||||
|
content: >
|
||||||
|
# IRRIGATION SYSTEM STATE
|
||||||
|
theme: solarized_light
|
||||||
|
- type: entities
|
||||||
|
show_header_toggle: false
|
||||||
|
entities:
|
||||||
|
- entity: input_boolean.irrigation_enabled
|
||||||
|
- type: divider
|
||||||
|
- entity: variable.irrigation_next_trigger
|
||||||
|
- entity: variable.irrigation_next_trigger_dt
|
||||||
|
- entity: variable.irrigation_next_schedule_name
|
||||||
|
- entity: variable.irrigation_running_names
|
||||||
|
- entity: variable.irrigation_queue_names
|
||||||
|
- type: divider
|
||||||
|
{% for zone,name in zones.items() %}
|
||||||
|
- entity: input_boolean.irrigation_zone_{{ zone }}_schedule_enabled
|
||||||
|
name: {{ name }}
|
||||||
|
{% endfor %}
|
||||||
|
{% for zone,name in zones.items() %}
|
||||||
|
- type: conditional
|
||||||
|
conditions:
|
||||||
|
- entity: input_boolean.irrigation_zone_{{ zone }}_schedule_enabled
|
||||||
|
state: "on"
|
||||||
|
card:
|
||||||
|
type: vertical-stack
|
||||||
|
cards:
|
||||||
|
- type: markdown
|
||||||
|
content: >
|
||||||
|
## {{ name }} : Zone {{ zone }}
|
||||||
|
theme: slate
|
||||||
|
- type: entities
|
||||||
|
entities:
|
||||||
|
- entity: input_boolean.irrigation_zone_{{ zone }}_state
|
||||||
|
- entity: input_number.irrigation_zone_{{ zone }}_duration
|
||||||
|
- type: divider
|
||||||
|
- entity: variable.irrigation_zone_{{ zone }}_schedule_next_dt
|
||||||
|
- entity: variable.irrigation_zone_{{ zone }}_schedule_countdown
|
||||||
|
- type: entities
|
||||||
|
entities:
|
||||||
|
- type: custom:fold-entity-row
|
||||||
|
head: input_boolean.irrigation_zone_{{ zone }}_schedule_enabled
|
||||||
|
entities:
|
||||||
|
- type: section
|
||||||
|
label: 'Schedule Parameters for {{name}}'
|
||||||
|
- type: divider
|
||||||
|
- type: section
|
||||||
|
label: 'Base Time of Day'
|
||||||
|
- entity: input_number.irrigation_zone_{{ zone }}_schedule_base_hour
|
||||||
|
- entity: input_number.irrigation_zone_{{ zone }}_schedule_base_minute
|
||||||
|
- type: divider
|
||||||
|
- entity: input_select.irrigation_zone_{{ zone }}_schedule_delta
|
||||||
|
|
||||||
|
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,19 @@
|
||||||
|
# lovelace_gen
|
||||||
|
{% set zones = ['1','2','3','4','5','6','7','8'] %}
|
||||||
|
icon: mdi:water
|
||||||
|
cards:
|
||||||
|
- type: vertical-stack
|
||||||
|
cards:
|
||||||
|
- type: markdown
|
||||||
|
content: >
|
||||||
|
# Irrigation
|
||||||
|
- type: horizontal-stack
|
||||||
|
cards:
|
||||||
|
{% for zone in zones %}
|
||||||
|
- type: entity-button
|
||||||
|
entity: switch.irrigation_zone_{{ zone }}
|
||||||
|
icon: mdi:water
|
||||||
|
name: {{ zone }}
|
||||||
|
tap_action:
|
||||||
|
action: toggle
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,30 @@
|
||||||
|
# lovelace_gen
|
||||||
|
{% set zones = {
|
||||||
|
'1':'Front Yard North',
|
||||||
|
'2':'Front Yard South',
|
||||||
|
'3':'Front Yard Beds',
|
||||||
|
'4':'Back Yard East',
|
||||||
|
'5':'Back Yard Garage',
|
||||||
|
'6':'Back Yard West',
|
||||||
|
'7':'Garden East',
|
||||||
|
'8':'Garden West'
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
icon: mdi:water
|
||||||
|
panel: true
|
||||||
|
cards:
|
||||||
|
- type: 'custom:layout-card'
|
||||||
|
{# layout: <layout> #}
|
||||||
|
{# min_height: <min_height> #}
|
||||||
|
min_columns: 2
|
||||||
|
max_columns: 4
|
||||||
|
column_width: 200px
|
||||||
|
cards:
|
||||||
|
{% for zone,name in zones.items() %}
|
||||||
|
- type: entity-button
|
||||||
|
entity: switch.irrigation_zone_{{ zone }}
|
||||||
|
icon: mdi:water
|
||||||
|
name: {{ name }}
|
||||||
|
tap_action:
|
||||||
|
action: toggle
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,29 @@
|
||||||
|
path: tiles
|
||||||
|
title: Tile Test
|
||||||
|
panel: true
|
||||||
|
cards:
|
||||||
|
- type: 'custom:layout-card'
|
||||||
|
layout: auto
|
||||||
|
# min_height: <min_height>
|
||||||
|
# min_columns: 2
|
||||||
|
# max_columns: 20
|
||||||
|
# column_width: 50px
|
||||||
|
# max_width:
|
||||||
|
# min_width: 50px
|
||||||
|
flex_grow: 5
|
||||||
|
# gridcols: <grid-cols>
|
||||||
|
# gridrows: <grid-rows>
|
||||||
|
justify_content: flex-start
|
||||||
|
cards:
|
||||||
|
- type: 'custom:button-card' #
|
||||||
|
entity: sensor.outside_temperature #
|
||||||
|
name: Outside #
|
||||||
|
label: 238 McHaley
|
||||||
|
template: large_value #
|
||||||
|
- type: 'custom:button-card' #
|
||||||
|
entity: sensor.inside_temperature #
|
||||||
|
name: Inside #
|
||||||
|
label: 238 McHaley
|
||||||
|
template: large_value #
|
||||||
|
- type: weather-forecast
|
||||||
|
entity: weather.praire_city_weather
|
|
@ -0,0 +1,58 @@
|
||||||
|
path: tiles
|
||||||
|
title: Tile Test
|
||||||
|
theme: Backend-selected
|
||||||
|
badges: []
|
||||||
|
panel: true
|
||||||
|
cards:
|
||||||
|
- type: 'custom:layout-card'
|
||||||
|
column_width: 100%
|
||||||
|
layout: vertical
|
||||||
|
cards:
|
||||||
|
- type: 'custom:layout-card'
|
||||||
|
layout: grid
|
||||||
|
gridcols: 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px
|
||||||
|
gridrows: 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px 50px
|
||||||
|
cards:
|
||||||
|
- type: 'custom:button-card' #
|
||||||
|
entity: sensor.outside_temperature #
|
||||||
|
gridcol: 1/3 # Your first
|
||||||
|
gridrow: 1/3 # card
|
||||||
|
name: Outside #
|
||||||
|
label: 238 McHaley
|
||||||
|
template: large_value #
|
||||||
|
- type: custom:canvas-gauge-card
|
||||||
|
entity: sensor.outside_humidity
|
||||||
|
name: Humidity (%)
|
||||||
|
card_height: 135
|
||||||
|
gridcol: 4/7
|
||||||
|
gridrow: 1/3
|
||||||
|
gauge:
|
||||||
|
type: "radial-gauge"
|
||||||
|
width: 120
|
||||||
|
height: 120
|
||||||
|
# borderShadowWidth: 0
|
||||||
|
# borderOuterWidth: 0
|
||||||
|
# borderMiddleWidth: 0
|
||||||
|
# borderInnerWidth: 0
|
||||||
|
# minValue: 0
|
||||||
|
# maxValue: 100
|
||||||
|
# startAngle: 90
|
||||||
|
# ticksAngle: 180
|
||||||
|
# valueBox: true
|
||||||
|
# majorTicks:
|
||||||
|
# ["0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100"]
|
||||||
|
# minorTicks: 2
|
||||||
|
# strokeTicks: true
|
||||||
|
# highlights: [{ "from": 80, "to": 100, "color": "rgba(200, 50, 50, .75)" }]
|
||||||
|
# borders: true
|
||||||
|
- type: 'custom:button-card' #
|
||||||
|
entity: sensor.inside_temperature #
|
||||||
|
gridcol: 1/3 # Your first
|
||||||
|
gridrow: 4/7 # card
|
||||||
|
name: Inside #
|
||||||
|
label: 238 McHaley
|
||||||
|
template: large_value #
|
||||||
|
# - type: weather-forecast
|
||||||
|
# entity: weather.praire_city_weather
|
||||||
|
# gridcol: 4/14 # Your first
|
||||||
|
# gridrow: 1/5
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Exampe Scheduler
|
||||||
|
title: Node Red Scheduler
|
||||||
|
cards:
|
||||||
|
- type: iframe
|
||||||
|
url: 'https://giskard.kebler.net:1880/endpoint/ui'
|
||||||
|
aspect_ratio: 100%
|
|
@ -6,6 +6,9 @@ cards:
|
||||||
## Scheduler Example
|
## Scheduler Example
|
||||||
- type: vertical-stack
|
- type: vertical-stack
|
||||||
cards:
|
cards:
|
||||||
|
- type: markdown
|
||||||
|
content: >
|
||||||
|
## Scheduler 2
|
||||||
- type: entities
|
- type: entities
|
||||||
entities:
|
entities:
|
||||||
# - entity: input_datetime.test_schedule_base
|
# - entity: input_datetime.test_schedule_base
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Exampe Scheduler
|
||||||
|
title: Zone1
|
||||||
|
cards:
|
||||||
|
- type: markdown
|
||||||
|
content: >
|
||||||
|
## Scheduler Example
|
||||||
|
- type: vertical-stack
|
||||||
|
cards:
|
||||||
|
- type: entities
|
||||||
|
entities:
|
||||||
|
# - entity: input_datetime.irrigation_zone_1_schedule_base
|
||||||
|
- type: section
|
||||||
|
label: 'Base Time of Day'
|
||||||
|
- entity: input_number.irrigation_zone_1_schedule_base_hour
|
||||||
|
- entity: input_number.irrigation_zone_1_schedule_base_minute
|
||||||
|
- type: divider
|
||||||
|
- entity: input_select.irrigation_zone_1_schedule_repeatin
|
||||||
|
# - entity: variable.irrigation_zone_1_schedule_countdown
|
||||||
|
# - entity: variable.irrigation_zone_1_schedule_next_timestamp
|
||||||
|
- type: divider
|
||||||
|
- entity: variable.irrigation_zone_1_schedule_next
|
||||||
|
- entity: sensor.irrigation_zone_1_schedule_next
|
||||||
|
- entity: variable.irrigation_zone_1_schedule_countdown
|
||||||
|
- type: horizontal-stack
|
||||||
|
cards:
|
||||||
|
- type: entity-button
|
||||||
|
name: Enable Scheduler
|
||||||
|
icon: mdi:timer
|
||||||
|
tap_action:
|
||||||
|
action: call-service
|
||||||
|
service: script.turn_on
|
||||||
|
service_data:
|
||||||
|
entity_id: script.enable_irrigation_zone_1_schedule
|
||||||
|
entity: script.enable_irrigation_zone_1_schedule
|
||||||
|
- type: entity-button
|
||||||
|
name: Disable Scheduler
|
||||||
|
icon: mdi:timer
|
||||||
|
tap_action:
|
||||||
|
action: call-service
|
||||||
|
service: script.turn_on
|
||||||
|
service_data:
|
||||||
|
entity_id: script.disable_irrigation_zone_1_schedule
|
||||||
|
entity: script.disable_irrigation_zone_1_schedule
|
|
@ -0,0 +1,76 @@
|
||||||
|
sensor:
|
||||||
|
- platform: template
|
||||||
|
sensors:
|
||||||
|
alarm_time:
|
||||||
|
friendly_name: "Time"
|
||||||
|
value_template: "{{ '%0.02d:%0.02d' | format(states('input_number.alarmhour') | int, states('input_number.alarmminutes') | int) }}"
|
||||||
|
- platform: time_date
|
||||||
|
display_options:
|
||||||
|
- 'time'
|
||||||
|
- 'date'
|
||||||
|
- 'date_time'
|
||||||
|
- 'time_date'
|
||||||
|
- 'time_utc'
|
||||||
|
|
||||||
|
automation:
|
||||||
|
- alias: 'Wake Me Up'
|
||||||
|
trigger:
|
||||||
|
platform: template
|
||||||
|
value_template: "{{ states.sensor.time.state == states.sensor.alarm_time.state }}"
|
||||||
|
condition:
|
||||||
|
condition: or
|
||||||
|
conditions:
|
||||||
|
- condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.alarmweekday
|
||||||
|
state: 'on'
|
||||||
|
- condition: time
|
||||||
|
weekday:
|
||||||
|
- mon
|
||||||
|
- tue
|
||||||
|
- wed
|
||||||
|
- thu
|
||||||
|
- fri
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.alarmweekday
|
||||||
|
state: 'off'
|
||||||
|
action:
|
||||||
|
service: notify.notify
|
||||||
|
data_template:
|
||||||
|
message: 'Good morning. Time to Wake Up!'
|
||||||
|
title: ''
|
||||||
|
|
||||||
|
group:
|
||||||
|
default_view:
|
||||||
|
view: yes
|
||||||
|
entities:
|
||||||
|
- group.alarmclock
|
||||||
|
|
||||||
|
alarmclock:
|
||||||
|
name: Wake Me Up
|
||||||
|
entities:
|
||||||
|
- automation.wake_me_up
|
||||||
|
- sensor.alarm_time
|
||||||
|
- input_number.alarmhour
|
||||||
|
- input_number.alarmminutes
|
||||||
|
- input_boolean.alarmweekday
|
||||||
|
|
||||||
|
input_boolean:
|
||||||
|
alarmweekday:
|
||||||
|
name: Weekdays Only
|
||||||
|
icon: mdi:calendar
|
||||||
|
|
||||||
|
input_number:
|
||||||
|
alarmhour:
|
||||||
|
name: Hour
|
||||||
|
icon: mdi:timer
|
||||||
|
min: 0
|
||||||
|
max: 23
|
||||||
|
step: 1
|
||||||
|
alarmminutes:
|
||||||
|
name: Minutes
|
||||||
|
icon: mdi:timer
|
||||||
|
min: 0
|
||||||
|
max: 59
|
||||||
|
step: 5
|
|
@ -0,0 +1,78 @@
|
||||||
|
# package of switches to test gpio pins/relays for @uci/gpio example
|
||||||
|
# gpio pins on pine64 in order for relays 1-8 const PINS = [80,73,69,230,229,75,74,70]
|
||||||
|
switch:
|
||||||
|
- platform: mqtt
|
||||||
|
name: "uci Switch 1"
|
||||||
|
state_topic: "relay/status/80"
|
||||||
|
command_topic: "relay/set/80"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
- platform: mqtt
|
||||||
|
name: "pine64 Switch 2"
|
||||||
|
state_topic: "relay/status/73"
|
||||||
|
command_topic: "relay/set/73"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
- platform: mqtt
|
||||||
|
name: "pine64 Switch 3"
|
||||||
|
state_topic: "relay/status/69"
|
||||||
|
command_topic: "relay/set/69"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
- platform: mqtt
|
||||||
|
name: "pine64 Switch 4"
|
||||||
|
state_topic: "relay/status/230"
|
||||||
|
command_topic: "relay/set/230"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
- platform: mqtt
|
||||||
|
name: "pine64 Switch 5"
|
||||||
|
state_topic: "relay/status/229"
|
||||||
|
command_topic: "relay/set/229"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
- platform: mqtt
|
||||||
|
name: "pine64 Switch 6"
|
||||||
|
state_topic: "relay/status/75"
|
||||||
|
command_topic: "relay/set/75"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
- platform: mqtt
|
||||||
|
name: "pine64 Switch 7"
|
||||||
|
state_topic: "relay/status/74"
|
||||||
|
command_topic: "relay/set/74"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
- platform: mqtt
|
||||||
|
name: "pine64 Switch 8"
|
||||||
|
state_topic: "relay/status/70"
|
||||||
|
command_topic: "relay/set/70"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:lightbulb
|
||||||
|
|
||||||
|
|
||||||
|
# copy and paste and uncomment below as a view under views: in ui-lovelace.yaml
|
|
@ -0,0 +1,165 @@
|
||||||
|
# - Day
|
||||||
|
# - Every Other Day
|
||||||
|
# - Every Third Day
|
||||||
|
# - Every Week
|
||||||
|
# values:
|
||||||
|
# - 3
|
||||||
|
# - 6
|
||||||
|
# - 12
|
||||||
|
# - 24
|
||||||
|
# - 48
|
||||||
|
# - 72
|
||||||
|
# - 168
|
||||||
|
|
||||||
|
# sensor:
|
||||||
|
# - platform: template # Derived values
|
||||||
|
# sensors:
|
||||||
|
# irrigation_zone_1_schedule_delta: # computes delta based on choice
|
||||||
|
# entity_id: input_select.irrigation_zone_1_schedule_repeatin
|
||||||
|
# unit_of_measurement: 'hours'
|
||||||
|
# value_template: >
|
||||||
|
# {% for option in state_attr("input_select.irrigation_zone_1_schedule_repeatin", "options") -%}
|
||||||
|
# {% if is_state("input_select.irrigation_zone_1_schedule_repeatin", option) -%}
|
||||||
|
# {{ state_attr("input_select.irrigation_zone_1_schedule_repeatin", 'values')[loop.index - 1] }}
|
||||||
|
# {%- endif %}
|
||||||
|
# {%- endfor %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# format the next timestamp for humans
|
||||||
|
# irrigation_zone_1_schedule_next:
|
||||||
|
# friendly_name: Next run to start at
|
||||||
|
# entity_id: variable.irrigation_zone_1_schedule_next_timestamp
|
||||||
|
# value_template: '{{ states.variable.irrigation_zone_1_schedule_next.state | int | timestamp_custom("%A, %d %h %H:%M") }}'
|
||||||
|
# irrigation_zone_1_schedule_countdown:
|
||||||
|
# friendly_name: Countdown to next run
|
||||||
|
# entity_id: variable.irrigation_zone_1_schedule_countdown
|
||||||
|
# # value_template: '{{ states.variable.irrigation_zone_1_schedule_countdown.state | int | timestamp_custom("%A, %d %h %H:%M") }}'
|
||||||
|
# value_template: >-
|
||||||
|
# {% set time = states.variable.irrigation_zone_1_schedule_countdown.state | int %}
|
||||||
|
# {% set minutes = ((time % 3600) / 60) | int %}
|
||||||
|
# {% set hours = ((time % 86400) / 3600) | int %}
|
||||||
|
# {% set days = (time / 86400) | int %}
|
||||||
|
# {{time}} seconds is {{ days }}:{{ hours }}:{{minutes}} (D:H:M)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# switch:
|
||||||
|
# - platform: mqtt
|
||||||
|
# name: "Scheduler Test Solenoid"
|
||||||
|
# state_topic: "status/irrigation/zone_1"
|
||||||
|
# command_topic: "set/irrigation/zone_1"
|
||||||
|
# payload_on: "ON"
|
||||||
|
# payload_off: "OFF"
|
||||||
|
# qos: 0
|
||||||
|
# retain: true
|
||||||
|
|
||||||
|
|
||||||
|
# script:
|
||||||
|
# enable_irrigation_zone_1_schedule:
|
||||||
|
# sequence:
|
||||||
|
# - event: ENABLE_SCHEDULE
|
||||||
|
# - service: variable.set_variable
|
||||||
|
# data:
|
||||||
|
# variable: irrigation_zone_1_schedule_countdown
|
||||||
|
# value_template: '{{ states.variable.irrigation_zone_1_schedule_next_timestamp.state | int - as_timestamp(now()) }}'
|
||||||
|
# value_template: "{{ as_timestamp(now()) }}"
|
||||||
|
# - service: variable.set_variable
|
||||||
|
# data:
|
||||||
|
# variable: irrigation_zone_1_schedule_dummy_device
|
||||||
|
# value: 'ON'
|
||||||
|
# - service: automation.turn_on
|
||||||
|
# entity_id: automation.irrigation_zone_1_schedule_countdown
|
||||||
|
# - service: automation.turn_on
|
||||||
|
# data:
|
||||||
|
# entity_id: automation.irrigation_zone_1_timer_zero_trigger
|
||||||
|
# disable_irrigation_zone_1_schedule:
|
||||||
|
# sequence:
|
||||||
|
# - service: automation.turn_off
|
||||||
|
# data:
|
||||||
|
# entity_id: automation.irrigation_zone_1_schedule_countdown
|
||||||
|
# - service: variable.set_variable
|
||||||
|
# data:
|
||||||
|
# variable: irrigation_zone_1_schedule_countdown
|
||||||
|
# value: 0
|
||||||
|
# automation:
|
||||||
|
# - alias: irrigation_zone_1_schedule_countdown
|
||||||
|
# initial_state: false
|
||||||
|
# trigger:
|
||||||
|
# platform: time_pattern
|
||||||
|
# seconds: '/1'
|
||||||
|
# action:
|
||||||
|
# - service: variable.set_variable
|
||||||
|
# data:
|
||||||
|
# variable: irrigation_zone_1_schedule_countdown
|
||||||
|
# value_template: '{{ [((variable.state | int) - 1), 0] | max }}'
|
||||||
|
# - alias: irrigation_zone_1_schedule_changed
|
||||||
|
# # initial_state: false
|
||||||
|
# trigger:
|
||||||
|
# platform: state
|
||||||
|
# action:
|
||||||
|
# - service: variable.set_variable
|
||||||
|
# data:
|
||||||
|
# variable: irrigation_zone_1_schedule_countdown
|
||||||
|
# value_template: '{{ states.variable.irrigation_zone_1_schedule_next_timestamp.state | int - as_timestamp(now()) }}'
|
||||||
|
|
||||||
|
|
||||||
|
# - service: automation.turn_off
|
||||||
|
# data:
|
||||||
|
# entity_id: automation.irrigation_zone_1_timer_zero_trigger
|
||||||
|
# - service: variable.set_variable
|
||||||
|
# data:
|
||||||
|
# variable: irrigation_zone_1_timer_device
|
||||||
|
# value: 'OFF'
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
# - alias: irrigation_zone_1_timer_zero_trigger
|
||||||
|
# initial_state: false
|
||||||
|
# trigger:
|
||||||
|
# platform: numeric_state
|
||||||
|
# entity_id: variable.irrigation_zone_1_timer_countdown
|
||||||
|
# below: 1
|
||||||
|
# action:
|
||||||
|
# - service: automation.turn_off
|
||||||
|
# entity_id: automation.irrigation_zone_1_timer_countdown
|
||||||
|
# - service: variable.set_variable
|
||||||
|
# data:
|
||||||
|
# variable: irrigation_zone_1_timer_device
|
||||||
|
# value: 'OFF'
|
||||||
|
# #
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# return corresponding value from input_select option of same name
|
||||||
|
# irrigation_zone_1_schedule_delta:
|
||||||
|
# entity_id: input_select.irrigation_zone_1_schedule_repeatin
|
||||||
|
# value_template: >
|
||||||
|
# {% for option in state_attr("input_select.irrigation_zone_1_schedule_repeatin", "options") -%}
|
||||||
|
# {% if is_state("input_select.irrigation_zone_1_schedule_repeatin", option) -%}
|
||||||
|
# {{ state_attr("input_select.irrigation_zone_1_schedule_repeatin", 'values')[loop.index - 1] }}
|
||||||
|
# {%- endif %}
|
||||||
|
# {%- endfor %}
|
||||||
|
# irrigation_zone_1_schedule_base_timestamp:
|
||||||
|
# entity_id: input_datetime.irrigation_zone_1_schedule_base
|
||||||
|
# value_template: >
|
||||||
|
# {{
|
||||||
|
# as_timestamp(now())
|
||||||
|
# - ( now().second + now().minute | int * 60 + now().hour | int * 3600 )
|
||||||
|
# + state_attr('input_datetime.irrigation_zone_1_schedule_base','hour')|int * 3600
|
||||||
|
# + state_attr('input_datetime.irrigation_zone_1_schedule_base','minute') * 60
|
||||||
|
# }}
|
||||||
|
# value_template: "{{ (state_attr('input_datetime.irrigation_zone_1_schedule_base','hour')|int * 3600 + state_attr('input_datetime.irrigation_zone_1_schedule_base','minute')|int * 60) | timestamp_custom('%A, %d %h %H:%M') }}"
|
||||||
|
# value_template: >
|
||||||
|
# "{{ (state_attr('input_datetime.irrigation_zone_1_schedule_base','hour')|int * 3600 +
|
||||||
|
# state_attr('input_datetime.irrigation_zone_1_schedule_base','minute')|int * 60 +
|
||||||
|
# as_timestamp(now()))
|
||||||
|
# | timestamp_custom("%A, %d %h %H:%M") }}"
|
||||||
|
|
||||||
|
# value_template: "{{ states(input_datetime.irrigation_zone_1_schedule_base) }}"
|
||||||
|
# {{ as_timestamp(now()) + as_timestamp(states.input_datetime.irrigation_zone_1_schedule_base) }}
|
||||||
|
# {{ as_timestamp(now()) + as_timestamp(states.input_datetime.irrigation_zone_1_schedule_base) }}
|
|
@ -0,0 +1,47 @@
|
||||||
|
homeassistant:
|
||||||
|
# Customize for Sprinklers - map relay to sprinkler name/location
|
||||||
|
customize:
|
||||||
|
switch.relay1:
|
||||||
|
friendly_name: Front Yard North
|
||||||
|
# sensor.closet_temperature:
|
||||||
|
# friendly_name: Closet Temperature (C)
|
||||||
|
# input_number.fan_on_temp:
|
||||||
|
# friendly_name: Fan On Set Temperature (C)
|
||||||
|
|
||||||
|
# 8 Relay Board, Topic number is gpio pin
|
||||||
|
switch:
|
||||||
|
- platform: mqtt
|
||||||
|
name: "relay1" # Pine64 gpio 80 is pin 40
|
||||||
|
state_topic: "relays/status/80"
|
||||||
|
command_topic: "relays/set/80"
|
||||||
|
state_on: "on"
|
||||||
|
state_off: "off"
|
||||||
|
payload_on: "on"
|
||||||
|
payload_off: "off"
|
||||||
|
icon: mdi:water
|
||||||
|
|
||||||
|
# This automation script runs when a value is received via MQTT on retained topic: setTemperature
|
||||||
|
# It sets the value slider on the GUI. This slides also had its own automation when the value is changed.
|
||||||
|
automation:
|
||||||
|
# - alias: Closet Fan On Set Temperature slider
|
||||||
|
# trigger:
|
||||||
|
# platform: mqtt
|
||||||
|
# topic: 'closet/status/fan/automation/temp'
|
||||||
|
# action:
|
||||||
|
# service: input_number.set_value
|
||||||
|
# data_template:
|
||||||
|
# entity_id: input_number.fan_on_temp
|
||||||
|
# value: "{{ trigger.payload }}"
|
||||||
|
|
||||||
|
# This second automation script runs when the target temperature slider is moved.
|
||||||
|
# It publishes its value to the same MQTT topic it is also subscribed to.
|
||||||
|
# - alias: Closet Fan Temp Slider Moved
|
||||||
|
# trigger:
|
||||||
|
# platform: state
|
||||||
|
# entity_id: input_number.fan_on_temp
|
||||||
|
# action:
|
||||||
|
# service: mqtt.publish
|
||||||
|
# data_template:
|
||||||
|
# topic: 'closet/fan/automation/temp'
|
||||||
|
# retain: true
|
||||||
|
# payload: "{{ states('input_number.fan_on_temp') }}"
|
|
@ -0,0 +1,131 @@
|
||||||
|
- id: lounge_aircon_manual
|
||||||
|
alias: 'Lounge Room Aircon'
|
||||||
|
hide_entity: True
|
||||||
|
trigger:
|
||||||
|
platform: state
|
||||||
|
entity_id: input_select.lounge_ac_mode
|
||||||
|
action:
|
||||||
|
- service_template: >
|
||||||
|
{% if is_state('input_select.lounge_ac_mode', 'Powerful Heat') %} shell_command.lounge_ac_powerful_heat
|
||||||
|
{% elif is_state('input_select.lounge_ac_mode', 'Normal Heat') %} shell_command.lounge_ac_normal_heat
|
||||||
|
{% elif is_state('input_select.lounge_ac_mode', 'Silent Heat') %} shell_command.lounge_ac_silent_heat
|
||||||
|
{% elif is_state('input_select.lounge_ac_mode', 'Powerful Cool') %} shell_command.lounge_ac_powerful_cool
|
||||||
|
{% elif is_state('input_select.lounge_ac_mode', 'Normal Cool') %} shell_command.lounge_ac_normal_cool
|
||||||
|
{% elif is_state('input_select.lounge_ac_mode', 'Silent Cool') %} shell_command.lounge_ac_silent_cool
|
||||||
|
{% elif is_state('input_select.lounge_ac_mode', 'Dry') %} shell_command.lounge_ac_dry
|
||||||
|
{% elif is_state('input_select.lounge_ac_mode', 'Off') %} shell_command.lounge_ac_off
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
- id: lounge_aircon_auto_am_on
|
||||||
|
alias: 'Lounge Room Aircon Scheduled AM On'
|
||||||
|
trigger:
|
||||||
|
platform: template
|
||||||
|
value_template: "{{ states('sensor.time') == (states.input_datetime.lounge_ac_am_on_time.state[0:5]) }}"
|
||||||
|
condition:
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_am_automation # If automation is required and ...
|
||||||
|
state: 'on'
|
||||||
|
- condition: or
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_workday # If workday is not tested or is a workday
|
||||||
|
state: 'off'
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.workday_sensor
|
||||||
|
state: 'on'
|
||||||
|
action:
|
||||||
|
- service: input_select.select_option
|
||||||
|
data_template:
|
||||||
|
entity_id: input_select.lounge_ac_mode
|
||||||
|
option: >
|
||||||
|
{% if states.sensor.stats_roomt_mean.state < states.input_number.lounge_ac_heat_temp_set.state %}
|
||||||
|
Normal Heat
|
||||||
|
{% elif states.sensor.stats_roomt_mean.state > states.input_number.lounge_ac_cool_temp_set.state %}
|
||||||
|
Normal Cool
|
||||||
|
{% else %}
|
||||||
|
'Off'
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
- id: lounge_aircon_auto_pm_on
|
||||||
|
alias: 'Lounge Room Aircon Scheduled PM On'
|
||||||
|
trigger:
|
||||||
|
platform: template
|
||||||
|
value_template: "{{ states('sensor.time') == (states.input_datetime.lounge_ac_pm_on_time.state[0:5]) }}"
|
||||||
|
condition:
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_pm_automation # If automation is required and ...
|
||||||
|
state: 'on'
|
||||||
|
- condition: or
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_workday # If workday is not tested or is a workday
|
||||||
|
state: 'off'
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.workday_sensor
|
||||||
|
state: 'on'
|
||||||
|
action:
|
||||||
|
- service: input_select.select_option
|
||||||
|
data_template:
|
||||||
|
entity_id: input_select.lounge_ac_mode
|
||||||
|
option: >
|
||||||
|
{% if states.sensor.stats_roomt_mean.state < states.input_number.lounge_ac_heat_temp_set.state %}
|
||||||
|
Normal Heat
|
||||||
|
{% elif states.sensor.stats_roomt_mean.state > states.input_number.lounge_ac_cool_temp_set.state %}
|
||||||
|
Normal Cool
|
||||||
|
{% else %}
|
||||||
|
'Off'
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
- id: lounge_aircon_auto_am_off
|
||||||
|
alias: 'Lounge Room Aircon Scheduled AM Off'
|
||||||
|
trigger:
|
||||||
|
platform: template
|
||||||
|
value_template: "{{ states('sensor.time') == (states.input_datetime.lounge_ac_am_off_time.state[0:5]) }}"
|
||||||
|
condition:
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_am_automation # If automation is required and ...
|
||||||
|
state: 'on'
|
||||||
|
- condition: or
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_workday # If workday is not tested or is a workday
|
||||||
|
state: 'off'
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.workday_sensor
|
||||||
|
state: 'on'
|
||||||
|
action:
|
||||||
|
- service: input_select.select_option
|
||||||
|
data_template:
|
||||||
|
entity_id: input_select.lounge_ac_mode
|
||||||
|
option: 'Off'
|
||||||
|
|
||||||
|
- id: lounge_aircon_auto_pm_off
|
||||||
|
alias: 'Lounge Room Aircon Scheduled PM Off'
|
||||||
|
trigger:
|
||||||
|
platform: template
|
||||||
|
value_template: "{{ states('sensor.time') == (states.input_datetime.lounge_ac_pm_off_time.state[0:5]) }}"
|
||||||
|
condition:
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_pm_automation # If automation is required and ...
|
||||||
|
state: 'on'
|
||||||
|
- condition: or
|
||||||
|
conditions:
|
||||||
|
- condition: state
|
||||||
|
entity_id: input_boolean.lounge_ac_workday # If workday not tested or if workday
|
||||||
|
state: 'off'
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.workday_sensor
|
||||||
|
state: 'on'
|
||||||
|
action:
|
||||||
|
- service: input_select.select_option
|
||||||
|
data_template:
|
||||||
|
entity_id: input_select.lounge_ac_mode
|
||||||
|
option: 'Off'
|
|
@ -1,11 +1,11 @@
|
||||||
homeassistant:
|
# homeassistant:
|
||||||
customize:
|
# customize:
|
||||||
fan.fan_state:
|
# fan.fan_state:
|
||||||
friendly_name: 'Fan State (manual override)'
|
# friendly_name: 'Fan State (manual override)'
|
||||||
sensor.closet_temperature:
|
# sensor.closet_temperature:
|
||||||
friendly_name: 'Closet Temperature (C)'
|
# friendly_name: 'Closet Temperature (C)'
|
||||||
input_number.fan_on_temp:
|
# input_number.fan_on_temp:
|
||||||
friendly_name: 'Fan On Set Temperature (C)'
|
# friendly_name: 'Fan On Set Temperature (C)'
|
||||||
|
|
||||||
switch:
|
switch:
|
||||||
- platform: mqtt
|
- platform: mqtt
|
|
@ -0,0 +1,20 @@
|
||||||
|
sensor:
|
||||||
|
- platform: wundergroundpws
|
||||||
|
api_key: d54bc75310ae4d378bc75310aead372e
|
||||||
|
pws_id: KORPRAIR9
|
||||||
|
# lang: de
|
||||||
|
monitored_conditions:
|
||||||
|
- stationID
|
||||||
|
- solarRadiation
|
||||||
|
- obsTimeLocal
|
||||||
|
- uv
|
||||||
|
- winddir
|
||||||
|
- humidity
|
||||||
|
- dewpt
|
||||||
|
- heatIndex
|
||||||
|
- windChill
|
||||||
|
- precipTotal
|
||||||
|
- precipRate
|
||||||
|
- temp
|
||||||
|
- windGust
|
||||||
|
- windSpeed
|
|
@ -0,0 +1,262 @@
|
||||||
|
sensor:
|
||||||
|
- platform: template
|
||||||
|
sensors:
|
||||||
|
zone_1_timer:
|
||||||
|
value_template: '{{ "{:02d}".format(states.input_number.timer_hours_1.state|int) }}:{{ "{:02d}".format(states.input_number.timer_minutes_1.state|int) }}'
|
||||||
|
friendly_name: "Time"
|
||||||
|
last_run_zone_1:
|
||||||
|
friendly_name: "Last Run"
|
||||||
|
value_template: '{{ (as_timestamp(states.switch.zone_1.last_changed)) | timestamp_custom("%A, %d %h %H:%M") }}'
|
||||||
|
next_run_zone_1:
|
||||||
|
friendly_name: "Next Run"
|
||||||
|
value_template: '{{states.sensor.zone_1_timer_reset_sensor.state}}'
|
||||||
|
time_delta:
|
||||||
|
friendly_name: "Zone 1 Timedelta"
|
||||||
|
value_template: '{{states.input_number.repeat_1.state|int * 3600}}'
|
||||||
|
duration_1:
|
||||||
|
value_template: '{{states.input_number.duration_1.state | int}}mins'
|
||||||
|
friendly_name: "Duration"
|
||||||
|
repeat_1:
|
||||||
|
value_template: '{{ "{:02d}".format(states.input_number.repeat_1.state|int)}}hrs'
|
||||||
|
friendly_name: "Repeat in"
|
||||||
|
rain_sensor:
|
||||||
|
friendly_name: "Rainfall Threshold Sensitivity"
|
||||||
|
value_template: >-
|
||||||
|
{% if states.sensor.pws_precip_1d.state <= states.input_number.pws_precip_1d_sensitivity.state and states.sensor.pws_precip_today_metric.state <= states.input_number.pws_precip_today_metric_sensitivity.state %}
|
||||||
|
dry
|
||||||
|
{% else %}
|
||||||
|
too wet
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
switch mqtt:
|
||||||
|
- platform: mqtt
|
||||||
|
name: "Zone 1"
|
||||||
|
state_topic: "status/irrigation/80"
|
||||||
|
command_topic: "cmnd/irrigation/80"
|
||||||
|
payload_on: "ON"
|
||||||
|
payload_off: "OFF"
|
||||||
|
qos: 0
|
||||||
|
retain: true
|
||||||
|
|
||||||
|
binary_sensor mqtt:
|
||||||
|
- platform: mqtt
|
||||||
|
name: "ZONE 1"
|
||||||
|
device_class: moisture
|
||||||
|
state_topic: "cmnd/irrigation/POWER1"
|
||||||
|
payload_on: "ON"
|
||||||
|
|
||||||
|
sensor mqtt:
|
||||||
|
- platform: mqtt
|
||||||
|
name: "Zone 1 Timer Reset Sensor"
|
||||||
|
state_topic: "cmnd/zone_1_control/TIMER"
|
||||||
|
|
||||||
|
input_boolean:
|
||||||
|
reset_zone_1:
|
||||||
|
name: Reset Next Run Timer
|
||||||
|
initial: off
|
||||||
|
icon: mdi:lock-reset
|
||||||
|
|
||||||
|
input_number:
|
||||||
|
timer_minutes_1:
|
||||||
|
name: "Minutes"
|
||||||
|
initial: 0
|
||||||
|
min: 0
|
||||||
|
max: 55
|
||||||
|
step: 1
|
||||||
|
icon: mdi:timer
|
||||||
|
timer_hours_1:
|
||||||
|
name: "Hour"
|
||||||
|
initial: 6
|
||||||
|
min: 0
|
||||||
|
max: 23
|
||||||
|
step: 1
|
||||||
|
icon: mdi:timer
|
||||||
|
duration_1:
|
||||||
|
name: "Set Duration"
|
||||||
|
initial: 3
|
||||||
|
min: 0
|
||||||
|
max: 15
|
||||||
|
step: 1
|
||||||
|
icon: mdi:camera-timer
|
||||||
|
repeat_1:
|
||||||
|
name: "Set Repeat"
|
||||||
|
initial: 24
|
||||||
|
min: 0
|
||||||
|
max: 48
|
||||||
|
icon: mdi:repeat
|
||||||
|
pws_precip_today_metric_sensitivity:
|
||||||
|
name: "Rainfall mm Sensitivity"
|
||||||
|
initial: 0.1
|
||||||
|
min: 0
|
||||||
|
max: 2
|
||||||
|
step: 0.1
|
||||||
|
icon: mdi:contrast
|
||||||
|
pws_precip_1d_sensitivity:
|
||||||
|
name: "Rainfall Probability Sensitivity"
|
||||||
|
initial: 40
|
||||||
|
min: 0
|
||||||
|
max: 100
|
||||||
|
step: 10
|
||||||
|
icon: mdi:contrast
|
||||||
|
|
||||||
|
group:
|
||||||
|
garden:
|
||||||
|
view: yes
|
||||||
|
control: hidden
|
||||||
|
name: "Garden"
|
||||||
|
entities:
|
||||||
|
- group.solenoids
|
||||||
|
- group.irrigation_timer_1
|
||||||
|
- group.rain_sensor
|
||||||
|
- sensor.pws_precip_today_metric
|
||||||
|
- sensor.pws_precip_1d
|
||||||
|
- binary_sensor.zone_1
|
||||||
|
|
||||||
|
solenoids:
|
||||||
|
view: no
|
||||||
|
name: "Back Garden Irrigation"
|
||||||
|
icon: 'mdi:flower'
|
||||||
|
entities:
|
||||||
|
- switch.zone_1
|
||||||
|
|
||||||
|
|
||||||
|
rain_sensor:
|
||||||
|
view: no
|
||||||
|
name: "Rainfall Sensitivity"
|
||||||
|
icon: mdi:contrast
|
||||||
|
entities:
|
||||||
|
- sensor.rain_sensor
|
||||||
|
- input_number.pws_precip_today_metric_sensitivity
|
||||||
|
- input_number.pws_precip_1d_sensitivity
|
||||||
|
|
||||||
|
irrigation_timer_1:
|
||||||
|
view: no
|
||||||
|
name: "Sprinklers Zone 1"
|
||||||
|
icon: mdi:clock
|
||||||
|
entities:
|
||||||
|
- sensor.last_run_zone_1
|
||||||
|
- sensor.next_run_zone_1
|
||||||
|
- sensor.duration_1
|
||||||
|
- sensor.repeat_1
|
||||||
|
- group.setting_zone_1
|
||||||
|
- automation.activate_zone_1_timer
|
||||||
|
|
||||||
|
setting_zone_1:
|
||||||
|
view: no
|
||||||
|
control: hidden
|
||||||
|
name: "Settings"
|
||||||
|
icon: mdi:settings
|
||||||
|
entities:
|
||||||
|
- sensor.zone_1_timer
|
||||||
|
- input_number.timer_hours_1
|
||||||
|
- input_number.timer_minutes_1
|
||||||
|
- input_number.duration_1
|
||||||
|
- input_number.repeat_1
|
||||||
|
- input_boolean.reset_zone_1
|
||||||
|
|
||||||
|
automation zone_1_1:
|
||||||
|
alias: "Activate Zone 1 Timer"
|
||||||
|
trigger:
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: '/1'
|
||||||
|
condition:
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: '{{(as_timestamp(now()) | timestamp_custom("%A, %d %h %H:%M")) == states.sensor.next_run_zone_1.state}}'
|
||||||
|
- condition: state
|
||||||
|
entity_id: sensor.rain_sensor
|
||||||
|
state: 'dry'
|
||||||
|
action:
|
||||||
|
- service: script.turn_on
|
||||||
|
entity_id: script.activate_irrigation_zone_1
|
||||||
|
|
||||||
|
automation zone_1_2:
|
||||||
|
alias: "Zone 1 Active Notification"
|
||||||
|
hide_entity: False
|
||||||
|
trigger:
|
||||||
|
- platform: state
|
||||||
|
entity_id: switch.zone_1
|
||||||
|
from: 'off'
|
||||||
|
to: 'on'
|
||||||
|
action:
|
||||||
|
- service: notify.pushbullet
|
||||||
|
data:
|
||||||
|
title: "Irrigation Zone 1"
|
||||||
|
message: "Watering has started"
|
||||||
|
|
||||||
|
automation zone_1_3:
|
||||||
|
alias: "Zone 1 Completed Notification"
|
||||||
|
hide_entity: False
|
||||||
|
trigger:
|
||||||
|
- platform: state
|
||||||
|
entity_id: switch.zone_1
|
||||||
|
from: 'on'
|
||||||
|
to: 'off'
|
||||||
|
action:
|
||||||
|
- service: notify.pushbullet
|
||||||
|
data:
|
||||||
|
title: "Irrigation Zone 1"
|
||||||
|
message: "Watering has completed"
|
||||||
|
|
||||||
|
automation zone_1_4:
|
||||||
|
alias: "Zone 1 Timer Reset"
|
||||||
|
trigger:
|
||||||
|
- platform: state
|
||||||
|
entity_id: input_boolean.reset_zone_1
|
||||||
|
from: 'off'
|
||||||
|
to: 'on'
|
||||||
|
action:
|
||||||
|
- service: mqtt.publish
|
||||||
|
data:
|
||||||
|
topic: "cmnd/zone_1_control/TIMER"
|
||||||
|
retain: 1
|
||||||
|
payload_template: >-
|
||||||
|
{%if now().strftime("%H:%M") > states.sensor.zone_1_timer.state %}
|
||||||
|
{{(as_timestamp(now() )+24*3600 ) | timestamp_custom("%A, %d %h ")}}{{states.sensor.zone_1_timer.state}}
|
||||||
|
{%else%}
|
||||||
|
{{(as_timestamp(now() ) ) | timestamp_custom("%A, %d %h ")}}{{states.sensor.zone_1_timer.state}}
|
||||||
|
{%endif%}
|
||||||
|
- delay:
|
||||||
|
seconds: 1
|
||||||
|
- service: input_boolean.turn_off
|
||||||
|
data:
|
||||||
|
entity_id: input_boolean.reset_zone_1
|
||||||
|
|
||||||
|
automation zone_1_5:
|
||||||
|
alias: "Extend Zone 1 Timer When Wet"
|
||||||
|
trigger:
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: '/1'
|
||||||
|
condition:
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: '{{(as_timestamp(now()) | timestamp_custom("%A, %d %h %H:%M")) == states.sensor.next_run_zone_1.state}}'
|
||||||
|
- condition: state
|
||||||
|
entity_id: sensor.rain_sensor
|
||||||
|
state: 'too wet'
|
||||||
|
action:
|
||||||
|
- service: mqtt.publish
|
||||||
|
data:
|
||||||
|
topic: "cmnd/zone_1_control/TIMER"
|
||||||
|
retain: 1
|
||||||
|
payload_template: '{{(as_timestamp(now() )+ states.sensor.time_delta.state | int) | timestamp_custom("%A, %d %h %H:%M") }}'
|
||||||
|
|
||||||
|
script:
|
||||||
|
activate_irrigation_zone_1:
|
||||||
|
alias: "Activate Irrigation Zone 1"
|
||||||
|
sequence:
|
||||||
|
- alias: "Switch on Zone 1"
|
||||||
|
service: switch.turn_on
|
||||||
|
entity_id: switch.zone_1
|
||||||
|
- delay: '00:{{ states.input_number.duration_1.state | int }}:00'
|
||||||
|
- alias: "Switch off Zone 1"
|
||||||
|
service: switch.turn_off
|
||||||
|
entity_id: switch.zone_1
|
||||||
|
- alias: "Update Next Run Time"
|
||||||
|
service: mqtt.publish
|
||||||
|
data:
|
||||||
|
topic: "cmnd/zone_1_control/TIMER"
|
||||||
|
retain: 1
|
||||||
|
payload_template: '{{ (as_timestamp(states.switch.zone_1.last_changed)+ states.sensor.time_delta.state | int) | timestamp_custom("%A, %d %h %H:%M") }}'
|
|
@ -1,4 +1,5 @@
|
||||||
- type: homeassistant
|
# authorization settings - none needed
|
||||||
|
# - type: homeassistant
|
||||||
# - type: trusted_networks
|
# - type: trusted_networks
|
||||||
# trusted_networks:
|
# trusted_networks:
|
||||||
# - 10.0.0.3
|
# - 10.0.0.3
|
||||||
|
|
|
@ -1,8 +1,32 @@
|
||||||
- alias: Update Available Notification
|
# global and startup automations here
|
||||||
|
- id: 'themestartup'
|
||||||
|
alias: 'System - Set Custom Theme at Startup'
|
||||||
trigger:
|
trigger:
|
||||||
platform: state
|
platform: homeassistant
|
||||||
entity_id: updater.updater
|
event: start
|
||||||
action:
|
action:
|
||||||
service: notify.martin
|
service: frontend.set_theme
|
||||||
data:
|
data:
|
||||||
message: "Update for Home Assistant is available."
|
name: 'Dark Turqoise'
|
||||||
|
- alias: Restart Notification
|
||||||
|
trigger:
|
||||||
|
platform: homeassistant
|
||||||
|
event: start
|
||||||
|
action:
|
||||||
|
service: notify.pushsafer
|
||||||
|
data:
|
||||||
|
title: "Home Assistant Has Restarted"
|
||||||
|
message: "Attention [i]italic[/i] Text[br][url=https://ha.238.kebler.net/]Home Assitant 238[/url]"
|
||||||
|
target: ["26583"]
|
||||||
|
data:
|
||||||
|
icon: "20"
|
||||||
|
iconcolor: "#FF00FF"
|
||||||
|
sound: "33"
|
||||||
|
vibration: "0"
|
||||||
|
url: "https://ha.238.kebler.net/"
|
||||||
|
urltitle: "Open Home Assistant"
|
||||||
|
time2live: "10"
|
||||||
|
priority: "2"
|
||||||
|
retry: "60"
|
||||||
|
expire: "600"
|
||||||
|
answer: "1"
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
fan.fan_state:
|
#global friendly names and other customizations can go here
|
||||||
friendly_name: This is a dummy entry to be overwrrten
|
# ex:
|
||||||
|
#fan.fan_state:
|
||||||
|
# friendly_name: This is a dummy entry to be overwrrten
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
# push notifications services here.
|
||||||
|
- name: pushsafer
|
||||||
|
platform: pushsafer
|
||||||
|
private_key: !secret pushsafer_api_key
|
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
# Use this file to store secrets like usernames and passwords.
|
|
||||||
# Learn more at https://home-assistant.io/docs/configuration/secrets/
|
|
||||||
some_password: welcome
|
|
|
@ -2,26 +2,54 @@ homeassistant:
|
||||||
# see packages/aa_system.yaml for basic settings
|
# see packages/aa_system.yaml for basic settings
|
||||||
customize: !include configs/customize.yaml
|
customize: !include configs/customize.yaml
|
||||||
auth_providers: !include configs/auth.yaml
|
auth_providers: !include configs/auth.yaml
|
||||||
|
# mqtt: !include configs/mqtt.yaml # set by integration
|
||||||
packages: !include_dir_named packages
|
packages: !include_dir_named packages
|
||||||
# discovery:
|
# discovery:
|
||||||
|
|
||||||
default_config:
|
default_config:
|
||||||
# CONIG FILES
|
|
||||||
# group: !include configs/groups.yaml
|
|
||||||
automation: !include configs/automations.yaml
|
automation: !include configs/automations.yaml
|
||||||
|
notify: !include configs/notify.yaml
|
||||||
|
# group: !include configs/groups.yaml
|
||||||
# script: !include configs/scripts.yaml
|
# script: !include configs/scripts.yaml
|
||||||
# http: !include configs/http.yaml
|
# http: !include configs/http.yaml
|
||||||
# mqtt: !include configs/mqtt.yaml
|
# mqtt: !include configs/mqtt.yaml
|
||||||
# panel_iframe: !include configs/panel.yaml
|
# panel_iframe: !include configs/panel.yaml
|
||||||
|
python_script:
|
||||||
|
|
||||||
|
# see https://github.com/thomasloven/hass-browser_mod
|
||||||
|
# browser_mod:
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
themes: !include_dir_merge_named themes
|
||||||
|
# not needed browser_mod handles it
|
||||||
|
extra_module_url:
|
||||||
|
# see https://github.com/Villhellm/custom-sidebar
|
||||||
|
- /hacsfiles/custom-sidebar/custom-sidebar.js
|
||||||
|
|
||||||
|
# lovelace_gen:
|
||||||
|
|
||||||
lovelace:
|
lovelace:
|
||||||
mode: yaml
|
mode: storage
|
||||||
|
dashboards: !include lovelace/dashboards.yaml
|
||||||
|
|
||||||
# needed for any time of day related triggers
|
# needed for any time of day related triggers
|
||||||
sensor:
|
# sensor:
|
||||||
- platform: time_date
|
# - platform: time_date
|
||||||
display_options:
|
# display_options:
|
||||||
- 'time'
|
# - 'time'
|
||||||
- 'date'
|
# - 'date'
|
||||||
- 'date_time'
|
# - 'date_time'
|
||||||
- 'date_time_iso'
|
# - 'date_time_iso'
|
||||||
- 'time_date'
|
# - 'time_date'
|
||||||
- 'time_utc'
|
# - 'time_utc'
|
||||||
- 'beat'
|
# - 'beat'
|
||||||
|
# recorder:
|
||||||
|
# exclude:
|
||||||
|
# entities:
|
||||||
|
# - sensor.time
|
||||||
|
# - sensor.time_date
|
||||||
|
# - sensor.date
|
||||||
|
# - sensor.date_time_iso
|
||||||
|
# - sensor.date_time_iso
|
||||||
|
# - sensor.date_time_iso
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from .mod_view import setup_view
|
||||||
|
from .connection import setup_connection
|
||||||
|
from .service import setup_service
|
||||||
|
from .const import (
|
||||||
|
DOMAIN,
|
||||||
|
DATA_DEVICES,
|
||||||
|
DATA_ALIASES,
|
||||||
|
DATA_ADDERS,
|
||||||
|
CONFIG_DEVICES,
|
||||||
|
DATA_CONFIG,
|
||||||
|
DATA_SETUP_COMPLETE,
|
||||||
|
)
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup(hass, config):
|
||||||
|
|
||||||
|
aliases = {}
|
||||||
|
for d in config[DOMAIN].get(CONFIG_DEVICES, {}):
|
||||||
|
name = config[DOMAIN][CONFIG_DEVICES][d].get("name", None)
|
||||||
|
if name:
|
||||||
|
aliases[name] = d.replace('_', '-')
|
||||||
|
|
||||||
|
hass.data[DOMAIN] = {
|
||||||
|
DATA_DEVICES: {},
|
||||||
|
DATA_ALIASES: aliases,
|
||||||
|
DATA_ADDERS: {},
|
||||||
|
DATA_CONFIG: config[DOMAIN],
|
||||||
|
DATA_SETUP_COMPLETE: False,
|
||||||
|
}
|
||||||
|
|
||||||
|
await setup_connection(hass, config)
|
||||||
|
setup_view(hass)
|
||||||
|
|
||||||
|
async_load_platform = hass.helpers.discovery.async_load_platform
|
||||||
|
await async_load_platform("media_player", DOMAIN, {}, config)
|
||||||
|
await async_load_platform("sensor", DOMAIN, {}, config)
|
||||||
|
await async_load_platform("binary_sensor", DOMAIN, {}, config)
|
||||||
|
await async_load_platform("light", DOMAIN, {}, config)
|
||||||
|
await async_load_platform("camera", DOMAIN, {}, config)
|
||||||
|
|
||||||
|
await setup_service(hass)
|
||||||
|
|
||||||
|
hass.data[DOMAIN][DATA_SETUP_COMPLETE] = True
|
||||||
|
|
||||||
|
for device in hass.data[DOMAIN][DATA_DEVICES].values():
|
||||||
|
device.trigger_update()
|
||||||
|
|
||||||
|
return True
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,50 @@
|
||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from homeassistant.const import STATE_UNAVAILABLE, ATTR_BATTERY_CHARGING, ATTR_BATTERY_LEVEL, STATE_ON, STATE_OFF
|
||||||
|
from homeassistant.components.binary_sensor import DEVICE_CLASS_MOTION
|
||||||
|
|
||||||
|
from .helpers import setup_platform, BrowserModEntity
|
||||||
|
|
||||||
|
PLATFORM = 'binary_sensor'
|
||||||
|
|
||||||
|
async def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
||||||
|
return setup_platform(hass, config, async_add_devices, PLATFORM, BrowserModSensor)
|
||||||
|
|
||||||
|
class BrowserModSensor(BrowserModEntity):
|
||||||
|
domain = PLATFORM
|
||||||
|
|
||||||
|
def __init__(self, hass, connection, deviceID, alias=None):
|
||||||
|
super().__init__(hass, connection, deviceID, alias)
|
||||||
|
self.last_seen = None
|
||||||
|
|
||||||
|
def updated(self):
|
||||||
|
self.last_seen = datetime.now()
|
||||||
|
self.schedule_update_ha_state()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
if not self.connection.connection:
|
||||||
|
return STATE_UNAVAILABLE
|
||||||
|
if self.data.get('motion', False):
|
||||||
|
return STATE_ON
|
||||||
|
return STATE_OFF
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_on(self):
|
||||||
|
return not self.data.get('motion', False)
|
||||||
|
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_class(self):
|
||||||
|
return DEVICE_CLASS_MOTION
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_state_attributes(self):
|
||||||
|
return {
|
||||||
|
"type": "browser_mod",
|
||||||
|
"last_seen": self.last_seen,
|
||||||
|
ATTR_BATTERY_LEVEL: self.data.get('battery', None),
|
||||||
|
ATTR_BATTERY_CHARGING: self.data.get('charging', None),
|
||||||
|
**self.data
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,37 @@
|
||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
|
import base64
|
||||||
|
|
||||||
|
from homeassistant.const import STATE_UNAVAILABLE, STATE_ON, STATE_OFF, STATE_IDLE
|
||||||
|
from homeassistant.components.camera import Camera
|
||||||
|
|
||||||
|
from .helpers import setup_platform, BrowserModEntity
|
||||||
|
|
||||||
|
PLATFORM = 'camera'
|
||||||
|
|
||||||
|
async def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
|
||||||
|
return setup_platform(hass, config, async_add_devices, PLATFORM, BrowserModCamera)
|
||||||
|
|
||||||
|
class BrowserModCamera(Camera, BrowserModEntity):
|
||||||
|
domain = PLATFORM
|
||||||
|
|
||||||
|
def __init__(self, hass, connection, deviceID, alias=None):
|
||||||
|
Camera.__init__(self)
|
||||||
|
BrowserModEntity.__init__(self, hass, connection, deviceID, alias)
|
||||||
|
self.last_seen = None
|
||||||
|
|
||||||
|
def updated(self):
|
||||||
|
if self.last_seen is None or (datetime.now() - self.last_seen).seconds > 15:
|
||||||
|
self.last_seen = datetime.now()
|
||||||
|
self.schedule_update_ha_state()
|
||||||
|
|
||||||
|
def camera_image(self):
|
||||||
|
return base64.b64decode(self.data.split(',')[1])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_state_attributes(self):
|
||||||
|
return {
|
||||||
|
"type": "browser_mod",
|
||||||
|
"deviceID": self.deviceID,
|
||||||
|
"last_seen": self.last_seen,
|
||||||
|
}
|
|
@ -0,0 +1,125 @@
|
||||||
|
import logging
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components.websocket_api import (
|
||||||
|
websocket_command,
|
||||||
|
result_message,
|
||||||
|
event_message,
|
||||||
|
async_register_command
|
||||||
|
)
|
||||||
|
|
||||||
|
from .const import WS_CONNECT, WS_UPDATE
|
||||||
|
from .helpers import get_devices, create_entity, get_config, is_setup_complete
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def setup_connection(hass, config):
|
||||||
|
|
||||||
|
@websocket_command({
|
||||||
|
vol.Required("type"): WS_CONNECT,
|
||||||
|
vol.Required("deviceID"): str,
|
||||||
|
})
|
||||||
|
def handle_connect(hass, connection, msg):
|
||||||
|
deviceID = msg["deviceID"]
|
||||||
|
|
||||||
|
device = get_devices(hass).get(deviceID,
|
||||||
|
BrowserModConnection(hass, deviceID))
|
||||||
|
device.connect(connection, msg["id"])
|
||||||
|
get_devices(hass)[deviceID] = device
|
||||||
|
|
||||||
|
connection.send_message(result_message(msg["id"]))
|
||||||
|
|
||||||
|
@websocket_command({
|
||||||
|
vol.Required("type"): WS_UPDATE,
|
||||||
|
vol.Required("deviceID"): str,
|
||||||
|
vol.Optional("data"): dict,
|
||||||
|
})
|
||||||
|
def handle_update(hass, connection, msg):
|
||||||
|
devices = get_devices(hass)
|
||||||
|
deviceID = msg["deviceID"]
|
||||||
|
if deviceID in devices:
|
||||||
|
devices[deviceID].update(msg.get("data", None))
|
||||||
|
|
||||||
|
async_register_command(hass, handle_connect)
|
||||||
|
async_register_command(hass, handle_update)
|
||||||
|
|
||||||
|
|
||||||
|
class BrowserModConnection:
|
||||||
|
def __init__(self, hass, deviceID):
|
||||||
|
self.hass = hass
|
||||||
|
self.deviceID = deviceID
|
||||||
|
self.connection = []
|
||||||
|
|
||||||
|
self.media_player = None
|
||||||
|
self.screen = None
|
||||||
|
self.sensor = None
|
||||||
|
self.fully = None
|
||||||
|
self.camera = None
|
||||||
|
|
||||||
|
def connect(self, connection, cid):
|
||||||
|
self.connection.append((connection, cid))
|
||||||
|
self.trigger_update()
|
||||||
|
|
||||||
|
def disconnect():
|
||||||
|
self.connection.remove((connection, cid))
|
||||||
|
|
||||||
|
connection.subscriptions[cid] = disconnect
|
||||||
|
|
||||||
|
def send(self, command, **kwargs):
|
||||||
|
if self.connection:
|
||||||
|
connection, cid = self.connection[-1]
|
||||||
|
connection.send_message(event_message(cid, {
|
||||||
|
"command": command,
|
||||||
|
**kwargs,
|
||||||
|
}))
|
||||||
|
|
||||||
|
def trigger_update(self):
|
||||||
|
if is_setup_complete(self.hass):
|
||||||
|
self.send("update", **get_config(self.hass, self.deviceID))
|
||||||
|
|
||||||
|
def update(self, data):
|
||||||
|
if data.get('browser'):
|
||||||
|
self.sensor = self.sensor or create_entity(
|
||||||
|
self.hass,
|
||||||
|
'sensor',
|
||||||
|
self.deviceID,
|
||||||
|
self)
|
||||||
|
if self.sensor:
|
||||||
|
self.sensor.data = data.get('browser')
|
||||||
|
|
||||||
|
if data.get('player'):
|
||||||
|
self.media_player = self.media_player or create_entity(
|
||||||
|
self.hass,
|
||||||
|
'media_player',
|
||||||
|
self.deviceID,
|
||||||
|
self)
|
||||||
|
if self.media_player:
|
||||||
|
self.media_player.data = data.get('player')
|
||||||
|
|
||||||
|
if data.get('screen'):
|
||||||
|
self.screen = self.screen or create_entity(
|
||||||
|
self.hass,
|
||||||
|
'light',
|
||||||
|
self.deviceID,
|
||||||
|
self)
|
||||||
|
if self.screen:
|
||||||
|
self.screen.data = data.get('screen')
|
||||||
|
|
||||||
|
if data.get('fully'):
|
||||||
|
self.fully = self.fully or create_entity(
|
||||||
|
self.hass,
|
||||||
|
'binary_sensor',
|
||||||
|
self.deviceID,
|
||||||
|
self)
|
||||||
|
if self.fully:
|
||||||
|
self.fully.data = data.get('fully')
|
||||||
|
|
||||||
|
if data.get('camera'):
|
||||||
|
self.camera = self.camera or create_entity(
|
||||||
|
self.hass,
|
||||||
|
'camera',
|
||||||
|
self.deviceID,
|
||||||
|
self)
|
||||||
|
if self.camera:
|
||||||
|
self.camera.data = data.get('camera')
|
|
@ -0,0 +1,35 @@
|
||||||
|
DOMAIN = "browser_mod"
|
||||||
|
|
||||||
|
FRONTEND_SCRIPT_URL = "/browser_mod.js"
|
||||||
|
|
||||||
|
DATA_EXTRA_MODULE_URL = 'frontend_extra_module_url'
|
||||||
|
|
||||||
|
DATA_DEVICES = "devices"
|
||||||
|
DATA_ALIASES = "aliases"
|
||||||
|
DATA_ADDERS = "adders"
|
||||||
|
DATA_CONFIG = "config"
|
||||||
|
DATA_SETUP_COMPLETE = "setup_complete"
|
||||||
|
|
||||||
|
CONFIG_DEVICES = "devices"
|
||||||
|
CONFIG_PREFIX = "prefix"
|
||||||
|
CONFIG_DISABLE = "disable"
|
||||||
|
CONFIG_DISABLE_ALL = "all"
|
||||||
|
|
||||||
|
WS_ROOT = DOMAIN
|
||||||
|
WS_CONNECT = "{}/connect".format(WS_ROOT)
|
||||||
|
WS_UPDATE = "{}/update".format(WS_ROOT)
|
||||||
|
WS_CAMERA = "{}/camera".format(WS_ROOT)
|
||||||
|
|
||||||
|
USER_COMMANDS = [
|
||||||
|
"debug",
|
||||||
|
"popup",
|
||||||
|
"close-popup",
|
||||||
|
"navigate",
|
||||||
|
"more-info",
|
||||||
|
"set-theme",
|
||||||
|
"lovelace-reload",
|
||||||
|
"window-reload",
|
||||||
|
"blackout",
|
||||||
|
"no-blackout",
|
||||||
|
"toast",
|
||||||
|
]
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue