├── .HA_VERSION ├── .gitignore ├── .gitlab-ci.yml ├── .mdlrc ├── .stubs └── secrets.yaml ├── .yamllint ├── README.md ├── automations ├── circulation_pump_with_lights.yaml ├── coiffeuse_with_aqara.yaml ├── fire_alarm.yaml ├── frontend_day_mode.yaml ├── ios_lock_door.yaml ├── led_shower_with_light_parents_off.yaml ├── led_shower_with_light_parents_on.yaml ├── light_center_off.yaml ├── light_center_on_.yaml ├── light_couch_off.yaml ├── light_couch_on.yaml ├── light_dressing_led_off.yaml ├── light_dressing_led_on.yaml ├── light_flur2_with_motion_off.yaml ├── light_flur2_with_motion_on.yaml ├── light_on_sam_morning.yaml ├── light_reserve_couloir_off.yaml ├── light_reserve_couloir_on.yaml ├── light_sam_off_morning.yaml ├── light_sdb_with_dressing_on.yaml ├── light_stairs_with_bedlight_off.yaml ├── machines │ ├── clothes _dryer │ │ ├── cd_clean.yaml │ │ ├── cd_idle.yaml │ │ └── cd_running.yaml │ ├── dish_washer │ │ ├── dw_clean.yaml │ │ ├── dw_idle.yaml │ │ └── dw_running.yaml │ └── washing_machine │ │ ├── wm_clean.yaml │ │ ├── wm_idle.yaml │ │ └── wm_running.yaml ├── notifiy_rina_arrives_leaves_home.yaml.old ├── nuki_batt_low.yaml ├── nuki_door_locked_notification.yaml ├── nuki_door_unlocked_notification.yaml ├── phone_status_notification.yaml ├── radio_off_when_leaving.yaml ├── radio_off_when_tv_on.yaml ├── switch_on_light_when_coming_home.yaml ├── system_shutdown_notification.yaml ├── system_startup_notification.yaml ├── system_upgrade_aler.yaml ├── weekly_snapshot.yaml ├── welcome_home_andrea.yaml └── welcome_home_rina.yaml ├── configuration.yaml ├── custom_components └── hacs │ ├── .translations │ └── en.json │ ├── __init__.py │ ├── api.py │ ├── config_flow.py │ ├── const.py │ ├── frontend │ ├── __init__.py │ ├── elements │ │ ├── all.min.css.gz │ │ ├── hacs.css │ │ ├── hacs.css.gz │ │ ├── hacs.js.gz │ │ ├── materialize.min.css.gz │ │ ├── materialize.min.js.gz │ │ └── webfonts │ │ │ ├── fa-brands-400.eot.gz │ │ │ ├── fa-brands-400.svg.gz │ │ │ ├── fa-brands-400.ttf.gz │ │ │ ├── fa-brands-400.woff.gz │ │ │ ├── fa-brands-400.woff2.gz │ │ │ ├── fa-regular-400.eot.gz │ │ │ ├── fa-regular-400.svg.gz │ │ │ ├── fa-regular-400.ttf.gz │ │ │ ├── fa-regular-400.woff.gz │ │ │ ├── fa-regular-400.woff2.gz │ │ │ ├── fa-solid-900.eot.gz │ │ │ ├── fa-solid-900.svg.gz │ │ │ ├── fa-solid-900.ttf.gz │ │ │ ├── fa-solid-900.woff.gz │ │ │ └── fa-solid-900.woff2.gz │ └── templates │ │ ├── base.html │ │ ├── error.html │ │ ├── grid.html │ │ ├── grid_new.html │ │ ├── message.html │ │ ├── modal │ │ ├── upgrade_all.html │ │ └── wrong_ha_version.html │ │ ├── overviews.html │ │ ├── repository.html │ │ ├── repository │ │ ├── authors.html │ │ ├── buttons.html │ │ ├── menu.html │ │ ├── note.html │ │ └── versionselect.html │ │ ├── settings.html │ │ ├── settings │ │ ├── buttons.html │ │ ├── custom_repositories.html │ │ ├── dev │ │ │ ├── remove_new_flag.html │ │ │ ├── repositories.html │ │ │ ├── repository.html │ │ │ ├── set_ha_version.html │ │ │ ├── template_test.html │ │ │ └── token.html │ │ ├── developer.html │ │ ├── hacs_info.html │ │ └── hidden_repositories.html │ │ ├── table.html │ │ └── table_new.html │ ├── hacsbase │ ├── __init__.py │ ├── backup.py │ ├── configuration.py │ ├── const.py │ ├── data.py │ ├── exceptions.py │ ├── migration.py │ ├── startup.py │ └── update.py │ ├── handler │ ├── __init__.py │ ├── download.py │ ├── logger.py │ └── template.py │ ├── http.py │ ├── manifest.json │ ├── repositories │ ├── __init__.py │ ├── appdaemon.py │ ├── integration.py │ ├── plugin.py │ ├── python_script.py │ ├── repository.py │ └── theme.py │ ├── sensor.py │ └── services.yaml ├── customize.yaml ├── docs ├── ABB-SA-S4.16.2.1.jpg ├── BE-TA55P2.01.jpg ├── BE-TA55P6.01.jpg ├── DMB1T.png ├── Fibsmokesensor.jpg ├── Floor1D.PNG ├── Floor1N.PNG ├── JRA-S4.230.5.1.jpg ├── MDT_AKH-040002.jpg ├── Nightmode.PNG ├── PD11-KNX.jpg ├── Page1D.PNG ├── Page1N.PNG ├── Page2.png ├── PowersupplyKNX.jpg ├── SA-S12.16.5.1.jpg ├── Synology.jpg ├── TA55P8.01.jpg ├── TXA207C.jpg ├── TYA628C.jpg ├── Visaton.jpg ├── ZAS_White.png ├── be-gt2tw.01_1.jpg ├── behringer-xenyx.jpg ├── chromecast-audio.png ├── daymode.PNG ├── fibaro_intercom.jpg ├── fibaromultisensor.png ├── fibarorgbw.png ├── ip router.jpg ├── lepy.jpg ├── mdtakh080002.jpg ├── nas.PNG ├── page1.PNG ├── presentation.jpg ├── seitlich_rund.png ├── speaker-front.png ├── speaker_back.png ├── theben DM4T.jpg └── txm620d_1.jpg ├── entities ├── cameras │ ├── entree.yaml │ ├── erika.yaml │ ├── garage_back.yaml │ ├── garage_front.yaml │ ├── intercom_synology.yaml │ ├── reserve.yaml │ └── technique.yaml ├── device_trackers │ ├── fritz.yaml │ └── unify.yaml.old ├── groups │ ├── Etages.yaml │ ├── Syno.yaml │ ├── device_location.yaml │ ├── network_devices.yaml │ ├── phone.yaml │ └── radio.yaml ├── input_select │ ├── clothes_dryer.yaml │ ├── dish_washer.yaml │ ├── post_box.yaml │ └── washing_machine.yaml ├── locks │ └── front_door.yaml ├── sensors │ ├── darksky.yaml │ ├── fritzbox_callmonitor.yaml │ ├── fritzbox_netmonitor.yaml │ ├── synologydsm.yaml │ ├── time_date.yaml │ ├── ups.yaml │ ├── version_available.yaml │ └── version_current.yaml ├── tts │ └── google_translate.yaml ├── vera │ └── vera.yaml ├── weather │ └── darksky.yaml └── zones │ ├── parents.yaml │ ├── work_a.yaml │ └── work_r.yaml ├── esphome ├── Switch_DishWasher.yaml ├── circulation_pump.yaml ├── includes │ ├── gosund_sp1.yaml │ └── network.yaml ├── saltlevel_sensor.yaml ├── switch_clothesdryer.yaml ├── switch_radio_parents.yaml ├── switch_washingmachine.yaml └── ventilation.yaml ├── integrations ├── automation.yaml ├── camera.yaml ├── cloud.yaml ├── config.yaml ├── device_tracker.yaml ├── frontend.yaml ├── group.yaml ├── hacs.yaml ├── history.yaml ├── http.yaml ├── influxdb.yaml ├── input_select.yaml ├── ios.yaml ├── knx.yaml ├── lock.yaml ├── logbook.yaml ├── logger.yaml ├── lovelace.yaml ├── map.yaml ├── mobile_app.yaml ├── mqtt.yaml ├── old_packages ├── packages │ ├── a_rolladen.yaml │ ├── alarmte.yaml │ ├── calm.yaml │ ├── gn.yaml.txt │ ├── homekit.yaml │ ├── knx.yaml │ ├── knx_climate.yaml │ ├── knx_groups.yaml │ ├── knx_lights.yaml │ ├── knx_rolladen.yaml │ ├── knx_sensors.yaml │ ├── noel.txt │ ├── radio_new.yaml │ ├── sensor.yaml │ └── wg.yaml ├── panel_iframe.yaml ├── recorder.yaml ├── script.yaml ├── sensor.yaml ├── speedtestdotnet.yaml ├── stream.yaml ├── sun.yaml ├── system_health.yaml ├── tts.yaml ├── updater.yaml ├── vera.yaml ├── weather.yaml └── zone.yaml ├── lovelace ├── floor_plans │ ├── plan_0.yaml │ ├── plan_1.yaml │ └── plan_2.yaml ├── resources │ ├── banner_card.yaml │ ├── button-card.yaml │ ├── card_tools.yaml │ ├── compact_custom_header.yaml │ ├── cover_element.yaml │ ├── decluttering-card.yaml │ ├── layout_card.yaml │ ├── lovelace_swipe_navigation.yaml │ ├── mini_garph_card.yaml │ ├── mini_media_player.yaml │ ├── monster_card.yaml │ ├── plan_coordinates.yaml │ ├── slider_entity_row.yaml │ └── swipe_card.yaml ├── sections │ ├── machine_status.yaml │ └── radio.yaml └── views │ ├── at_and_sc.yaml │ ├── cameras.yaml │ ├── floor_0.yaml │ ├── floor_1.yaml │ ├── floor_2.yaml │ ├── floor_3.yaml │ ├── floor_plans.yaml │ ├── housecontrol.yaml │ ├── network_devices.yaml │ ├── power_usage.yaml │ ├── rgbw_leds.yaml │ └── synology_status.yaml ├── panels └── iframe │ └── grafana.yaml ├── scripts ├── cover_close_with_goodnight.yaml ├── cover_first_floor_close.yaml ├── cover_first_floor_open.yaml ├── cover_kitchen_close.yaml ├── cover_kitchen_open.yaml ├── erika_slepp.yaml ├── good_night.yaml ├── system_reboot.yaml └── tschau.yaml ├── themes ├── PmxMononight.yaml ├── christmas.yaml ├── darkcyan.yaml ├── green.yaml ├── midnight.yaml ├── solarized.yaml └── wood.yaml ├── ui-lovelace.yaml └── www ├── Capture0.PNG ├── Capture1.PNG ├── Capture2.PNG ├── Floor0H.PNG ├── Floor0V.PNG ├── Floor0VN.PNG ├── Floor1H.PNG ├── Floor1V.PNG ├── Floor1VN.PNG ├── Floor2H.PNG ├── Floor2V.PNG ├── Floor2VN.PNG ├── Garage_off.PNG ├── Garage_on.PNG ├── IMG_0786.PNG ├── IMG_0788.PNG ├── IMG_0789.PNG ├── arrow-down.png ├── arrow-up.png ├── back.png ├── background.png ├── circle.png ├── compact-custom-header-editor.js ├── compact-custom-header.js ├── custom-lovelace └── swipe-card │ ├── css │ └── swiper.min.css │ ├── js │ └── swiper.min.js │ └── swipe-card.js ├── entree_off.png ├── entree_on.png ├── exclamation.png ├── ilot_allume.PNG ├── ilot_aus.png ├── layout-card.js ├── mini-graph-card-bundle.js ├── monster-card.js ├── off.png ├── plan-coordinates.js ├── slider-entity-row.js ├── tracker-card.js └── treppe_bis.png /.HA_VERSION: -------------------------------------------------------------------------------- 1 | 0.97.2 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | --- 2 | # Extension ignores 3 | *.log 4 | *.db 5 | *.db-shm 6 | *.db-wal 7 | *.pyc 8 | *.js 9 | 10 | # Directory (contents) ignores 11 | deps 12 | .cloud 13 | .storage 14 | notebooks 15 | www/inside 16 | www/community 17 | www/github 18 | 19 | #custom_components 20 | /glances 21 | /node-red 22 | .Trash-0 23 | 24 | # You can whitelist files/folders with !, these will not be ignored. 25 | !*.yaml 26 | !.gitignore 27 | !*.md 28 | !packages 29 | !group 30 | !components 31 | !docs 32 | !*.jpg 33 | !*.png 34 | !*.PNG 35 | !.stubs/secrets.yaml 36 | # Ignore folders 37 | 38 | #igrnore files 39 | .google.token 40 | .www 41 | .vscode 42 | .theia 43 | .ios.conf 44 | .homekit.state 45 | .spotify-token-cache 46 | .uuid 47 | core 48 | tts 49 | aircast.xml 50 | harmony_living.conf 51 | plex.conf 52 | www/compact-custom-header-editor.js 53 | 54 | # Ensure these YAML files are ignored, otherwise your secret data/credentials will leak. 55 | ip_bans.yaml 56 | /secrets.yaml 57 | /esphome/secrets.yaml 58 | /esphome/includes/secrets.yaml 59 | known_devices.yaml 60 | rln8-16-410.png 61 | rlc-410-5MP.png 62 | -------------------------------------------------------------------------------- /.mdlrc: -------------------------------------------------------------------------------- 1 | rules "~MD033", "~MD013" -------------------------------------------------------------------------------- /.stubs/secrets.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | icloud_username: 0000000000000000000 3 | icloud_password: 00000000000000 4 | HA_PW: 0000000000000000000 5 | 6 | zone_home_elevation: 000 7 | time_zone: Europe/Luxembourg 8 | latitude_kad: 00.0000 9 | longitude_kad: 0.0000 10 | latitude_bbt: 00.0000 11 | longitude_bbt: 0.0000 12 | latitude_koerich: 00.0000 13 | longitude_Koerich: 0.0000 14 | 15 | synology_ip: 192.168.1.1 16 | synology_cam_ip: http://192.168.1.1:8080 17 | synology_username: username 18 | synology_password: password 19 | 20 | unfiy_username: username 21 | unfiy_pwd: password 22 | 23 | fritz_user: username 24 | fritz_password: password 25 | 26 | spotify_id: 00000000000000000000000000000000 27 | spotify_secret: 00000000000000000000000000000000 28 | 29 | unify_id: username 30 | unify_secret: password 31 | unify_siteid: siteid 32 | 33 | influxdb_user: username 34 | influxdb_secret: password 35 | 36 | influx_grafana_user: username 37 | influx_grafana_pwd: password 38 | 39 | influx_glances_user: username 40 | influx_glances_pwd: password 41 | 42 | grafana_user: username 43 | grafana_secret: password 44 | 45 | dks_api_key: 00000000000000000000000000000000 46 | 47 | nuki_token: nukitoken 48 | nuki_ip: 192.168.1.1 49 | fritz_base_url: basurel 50 | 51 | ipwebcamlu: username 52 | ipwebcamlp: pasword 53 | 54 | veraip: http://192.168.1.1:3480/ 55 | mqttip: 192.168.1.1 56 | 57 | xiamomi_gateway: XXXXXXXXXXXXXXXX 58 | 59 | logviwrusr: username 60 | logviwrpwd: password 61 | 62 | noderedusr: username 63 | noderedpwd: password 64 | noderedsecret: nodesecret 65 | 66 | ssh_access_usr: username 67 | ssh_access_pwd: password 68 | 69 | ssh_web_usr: username 70 | ssh_web_pwd: password 71 | 72 | vscode_usr: password 73 | 74 | Wifi_SSID: ssid 75 | Wifi_PWD: password 76 | 77 | wifi_gateway: 192.168.1.1 78 | wifi_subnet: 255.255.255.0 79 | wifi_dns1: 192.168.1.1 80 | 81 | ESP_OTA_PWD: password 82 | ESP_API_PWD: password 83 | 84 | esphome_viessmann_static_ip: 192.168.1.1 85 | esphome_switch_dishwasher_static_ip: 192.168.1.1 86 | esphome_switch_clothesdryer_static_ip: 192.168.1.1 87 | esphome_switch_radio_parents_static_ip: 192.168.1.1 88 | esphome_switch_ventilation_static_ip: 192.168.1.1 89 | esphome_espcam_static_ip: 192.168.1.1 90 | 91 | panel_iframe_grafana_url: https://url.url 92 | github_token: hjkjha3skdfjhs65aékdfhas5dklfjas545ldfkj 93 | 94 | erika_still: http://ksaldflksadjfsdlkfashldkfasldkfjsasllnvaéskdsldf 95 | erika_stream: rtsp://klkjsfhsdkjfdfjfzefdlshfjsdmduebjf526 96 | 97 | entree_still: http://ksaldflksadjfsdlkfashldkfasldkfjsasllnvaéskdsldf 98 | entree_stream: rtsp://klkjsfhsdkjfdfjfzefdlshfjsdmduebjf526 99 | 100 | garage_front_still: http://ksaldflksadjfsdlkfashldkfasldkfjsasllnvaéskdsldf 101 | garage_front_stream: rtsp://klkjsfhsdkjfdfjfzefdlshfjsdmduebjf526 102 | 103 | garage_back_still: http://ksaldflksadjfsdlkfashldkfasldkfjsasllnvaéskdsldf 104 | garage_back_stream: rtsp://klkjsfhsdkjfdfjfzefdlshfjsdmduebjf526 105 | 106 | technique_still: http://ksaldflksadjfsdlkfashldkfasldkfjsasllnvaéskdsldf 107 | technique_stream: rtsp://klkjsfhsdkjfdfjfzefdlshfjsdmduebjf526 108 | 109 | reserve_still: http://ksaldflksadjfsdlkfashldkfasldkfjsasllnvaéskdsldf 110 | reserve_stream: rtsp://klkjsfhsdkjfdfjfzefdlshfjsdmduebjf526 111 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | --- 2 | ignore: | 3 | config/custom_components/ 4 | config/ip_bans.yaml 5 | config/esphomeyaml/*/ 6 | config/notebooks/ 7 | rules: 8 | braces: 9 | level: error 10 | min-spaces-inside: 0 11 | max-spaces-inside: 1 12 | min-spaces-inside-empty: -1 13 | max-spaces-inside-empty: -1 14 | brackets: 15 | level: error 16 | min-spaces-inside: 0 17 | max-spaces-inside: 0 18 | min-spaces-inside-empty: -1 19 | max-spaces-inside-empty: -1 20 | colons: 21 | level: error 22 | max-spaces-before: 0 23 | max-spaces-after: 1 24 | commas: 25 | level: error 26 | max-spaces-before: 0 27 | min-spaces-after: 1 28 | max-spaces-after: 1 29 | comments: 30 | level: error 31 | require-starting-space: true 32 | min-spaces-from-content: 2 33 | comments-indentation: 34 | level: error 35 | document-end: 36 | level: error 37 | present: false 38 | document-start: 39 | level: error 40 | present: true 41 | ignore: | 42 | config/known_devices.yaml 43 | empty-lines: 44 | level: error 45 | max: 1 46 | max-start: 0 47 | max-end: 1 48 | hyphens: 49 | level: error 50 | max-spaces-after: 1 51 | indentation: 52 | level: error 53 | spaces: 2 54 | indent-sequences: true 55 | check-multi-line-strings: false 56 | key-duplicates: 57 | level: error 58 | line-length: 59 | ignore: | 60 | .github/support.yml 61 | .github/settings.yml 62 | level: warning 63 | max: 120 64 | allow-non-breakable-words: true 65 | allow-non-breakable-inline-mappings: true 66 | new-line-at-end-of-file: 67 | level: error 68 | new-lines: 69 | level: error 70 | type: unix 71 | trailing-spaces: 72 | level: error 73 | truthy: 74 | level: error 75 | -------------------------------------------------------------------------------- /automations/circulation_pump_with_lights.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: circulation pump with lights 3 | initial_state: true 4 | id: Circulation_pump_with_lights 5 | trigger: 6 | - platform: state 7 | entity_id: light.spots_cuisine_ilot 8 | to: 'on' 9 | - platform: state 10 | entity_id: light.mirroir_sdb_p 11 | to: 'on' 12 | - platform: state 13 | entity_id: light.lampe_wc 14 | to: 'on' 15 | - platform: state 16 | entity_id: light.LED_SDB_P 17 | to: 'on' 18 | - platform: state 19 | entity_id: light.lumiere_sdb_e 20 | to: 'on' 21 | condition: 22 | - condition: time 23 | after: '05:00:00' 24 | before: '23:59:59' 25 | action: 26 | - service: switch.turn_on 27 | entity_id: switch.circulation_pump_relay 28 | -------------------------------------------------------------------------------- /automations/coiffeuse_with_aqara.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: coiffeuse_with_aqaura 3 | alias: couffeurs light on 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | platform: event 8 | event_type: deconz_event 9 | event_data: 10 | id: switch_rina 11 | event: 1002 12 | action: 13 | - service: light.toggle 14 | entity_id: light.mirroir_parents 15 | -------------------------------------------------------------------------------- /automations/fire_alarm.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Fire Alarm 3 | alias: Trigger fire alarm when smoke detected 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | - platform: state 8 | entity_id: binary_sensor.smoke_sensor_1er_13 9 | to: 'on' 10 | - platform: state 11 | entity_id: binary_sensor.smoke_sensor_2eme_15 12 | to: 'on' 13 | - platform: state 14 | entity_id: binary_sensor.smoke_sensor_rdc_17 15 | to: 'on' 16 | action: 17 | - service: notify.ios_iphoneadonno 18 | data_template: 19 | title: '*BRAND alarm!*' 20 | message: "Firealarm um: {% for state in states.binary_sensor -%}\n {% if state.state\ 21 | \ == 'on' and state.name != 'Wasmachine' and state.name != 'Ping to Vera'\ 22 | \ %}\n {{ state.name }}\n {%- endif -%}\n{% endfor %}\n" 23 | - service: light.turn_on 24 | entity_id: group.all_lights 25 | - service: tts.google_translate_say 26 | entity_id: media_player.chromecast_messages 27 | data: 28 | message: Feuer! Verlasst das Haus! 29 | language: de 30 | - service: tts.google_translate_say 31 | entity_id: media_player.chromecast_messages 32 | data: 33 | message: Incendie Detecté! Quittez la maison! 34 | language: fr 35 | -------------------------------------------------------------------------------- /automations/frontend_day_mode.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Frontend day mode 3 | alias: frontend day mode 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | - platform: time 8 | at: 07:00:00 9 | action: 10 | - service: frontend.set_theme 11 | data: 12 | name: default 13 | - service: switch.turn_on 14 | entity_id: switch.day_night 15 | -------------------------------------------------------------------------------- /automations/ios_lock_door.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: ios_lock_door 3 | alias: 'lock door io app' 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | platform: event 8 | event_type: ios.notification_action_fired 9 | event_data: 10 | actionName: LOCK_DOOR 11 | action: 12 | - service: lock.lock 13 | entity_id: lock.home 14 | -------------------------------------------------------------------------------- /automations/led_shower_with_light_parents_off.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Led_sdb_parentsOff 3 | alias: eteindre led sdb Parents 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | - platform: state 8 | entity_id: light.spots_douche_p 9 | to: 'off' 10 | action: 11 | - service: light.turn_off 12 | entity_id: light.LED_SDB_P 13 | -------------------------------------------------------------------------------- /automations/led_shower_with_light_parents_on.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Led_sdb_parents_on 3 | alias: allumer led sdb Parents 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | - platform: state 8 | entity_id: light.spots_douche_p 9 | to: 'on' 10 | action: 11 | - service: light.turn_on 12 | entity_id: light.LED_SDB_P 13 | - delay: 14 | seconds: 1 15 | - service: light.turn_on 16 | entity_id: light.brightness_62 17 | - service: light.turn_on 18 | entity_id: light.rgbw_sdb_61 19 | -------------------------------------------------------------------------------- /automations/light_center_off.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: Light center 1er off 3 | initial_state: true 4 | trigger: 5 | - platform: state 6 | entity_id: light.spots_sam 7 | to: 'off' 8 | - platform: state 9 | entity_id: light.spots_living 10 | to: 'off' 11 | condition: 12 | condition: and 13 | conditions: 14 | - condition: state 15 | entity_id: light.spots_sam 16 | state: 'off' 17 | - condition: state 18 | entity_id: light.spots_living 19 | state: 'off' 20 | action: 21 | service: light.turn_off 22 | entity_id: light.spots_millieux 23 | -------------------------------------------------------------------------------- /automations/light_center_on_.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: Light center 1er on 3 | initial_state: true 4 | hide_entity: true 5 | trigger: 6 | - platform: state 7 | entity_id: light.spots_sam 8 | to: 'on' 9 | - platform: state 10 | entity_id: light.spots_living 11 | to: 'on' 12 | action: 13 | service: light.turn_on 14 | entity_id: light.spots_millieux 15 | -------------------------------------------------------------------------------- /automations/light_couch_off.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: light couch off 3 | alias: Couch an schierf owes aus 4 | initial_state: true 5 | trigger: 6 | platform: time 7 | at: '23:30:00' 8 | condition: 9 | condition: and 10 | conditions: 11 | - condition: state 12 | entity_id: group.network_devices_mobile 13 | state: not_home 14 | action: 15 | - service: homeassistant.turn_off 16 | entity_id: switch.lampe_canape 17 | - service: switch.turn_off 18 | entity_id: switch.armoire_sam 19 | - service: switch.turn_off 20 | entity_id: switch.prise_sol_escalier 21 | - service: switch.turn_on 22 | entity_id: switch.armoire_cuisine 23 | - service: notify.ios_iphoneadonno 24 | data: 25 | title: Light 26 | message: Switching off lights 27 | -------------------------------------------------------------------------------- /automations/light_couch_on.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: light couch on 3 | alias: Couch an schierf owes Un 4 | initial_state: true 5 | trigger: 6 | platform: numeric_state 7 | entity_id: sun.sun 8 | value_template: '{{ state.attributes.elevation }}' 9 | below: -1 10 | condition: 11 | condition: and 12 | conditions: 13 | # - condition: state 14 | # entity_id: group.network_devices_mobile 15 | # state: not_home 16 | - condition: time 17 | after: '16:00:00' 18 | before: '23:00:00' 19 | action: 20 | - service: homeassistant.turn_on 21 | entity_id: switch.lampe_canape 22 | - service: switch.turn_on 23 | entity_id: switch.armoire_sam 24 | - service: switch.turn_on 25 | entity_id: switch.prise_sol_escalier 26 | - service: switch.turn_on 27 | entity_id: switch.armoire_cuisine 28 | - service: notify.ios_iphoneadonno 29 | data: 30 | title: Light 31 | message: Switching on light living 32 | - service: frontend.set_theme 33 | data: 34 | name: darkcyan 35 | - service: switch.turn_off 36 | entity_id: switch.day_night 37 | -------------------------------------------------------------------------------- /automations/light_dressing_led_off.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: light off LED Dressing 3 | initial_state: true 4 | hide_entity: true 5 | trigger: 6 | - platform: state 7 | entity_id: light.dressing 8 | to: 'off' 9 | condition: 10 | condition: state 11 | entity_id: light.dressing 12 | state: 'off' 13 | action: 14 | service: light.turn_off 15 | entity_id: light.led_dressing 16 | -------------------------------------------------------------------------------- /automations/light_dressing_led_on.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: light on LED Dressing 3 | initial_state: true 4 | hide_entity: true 5 | trigger: 6 | - platform: state 7 | entity_id: light.Dressing 8 | to: 'on' 9 | condition: 10 | condition: time 11 | after: '07:00:00' 12 | before: '23:00:00' 13 | action: 14 | - service: light.turn_on 15 | entity_id: light.led_dressing 16 | -------------------------------------------------------------------------------- /automations/light_flur2_with_motion_off.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | initial_state: true 3 | trigger: 4 | - platform: state 5 | entity_id: binary_sensor.bm_flur_status 6 | to: 'off' 7 | action: 8 | - service: light.turn_off 9 | entity_id: light.couloir_2e 10 | 11 | -------------------------------------------------------------------------------- /automations/light_flur2_with_motion_on.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | initial_state: true 3 | trigger: 4 | - platform: state 5 | entity_id: binary_sensor.bm_flur_status 6 | to: 'on' 7 | condition: 8 | - condition: time 9 | after: '07:00:00' 10 | before: '22:00:00' 11 | action: 12 | - service: light.turn_on 13 | data: 14 | entity_id: light.couloir_2e 15 | brightness: 100 16 | -------------------------------------------------------------------------------- /automations/light_on_sam_morning.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: light sam on morning 3 | alias: light sam on morning 4 | initial_state: true 5 | trigger: 6 | - platform: state 7 | entity_id: light.mirroir_sdb_p 8 | to: 'off' 9 | condition: 10 | condition: and 11 | conditions: 12 | - condition: time 13 | after: 06:00:00 14 | before: 08:00:00 15 | weekday: 16 | - mon 17 | - tue 18 | - wed 19 | - thu 20 | - fri 21 | - condition: sun 22 | before: sunrise 23 | action: 24 | - service: light.turn_on 25 | entity_id: light.lumiere_sam 26 | - service: media_player.volume_set 27 | data_template: 28 | entity_id: media_player.chromecastkeller 29 | volume_level: 0.3 30 | - delay: '00:00:10' 31 | - service: media_player.play_media 32 | data: 33 | entity_id: media_player.chromecastkeller 34 | media_content_id: http://sc-eldolive.newmedia.lu/;stream.mp3 35 | media_content_type: audio/mp4 36 | -------------------------------------------------------------------------------- /automations/light_reserve_couloir_off.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: light off resreve avec couloir cave 3 | initial_state: true 4 | hide_entity: true 5 | trigger: 6 | - platform: state 7 | entity_id: light.cave_couloir 8 | to: 'off' 9 | action: 10 | - service: light.turn_off 11 | entity_id: light.reserve 12 | - service: light.turn_off 13 | entity_id: light.spots_escalier_01_bis 14 | -------------------------------------------------------------------------------- /automations/light_reserve_couloir_on.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: light on couloir avec reserve cave 3 | initial_state: true 4 | hide_entity: true 5 | trigger: 6 | - platform: state 7 | entity_id: light.cave_couloir 8 | to: 'on' 9 | condition: 10 | - condition: numeric_state 11 | entity_id: sun.sun 12 | value_template: '{{ state.attributes.elevation }}' 13 | below: 10 14 | 15 | action: 16 | - service: light.turn_on 17 | entity_id: light.reserve 18 | - service: light.turn_on 19 | entity_id: light.spots_escalier_01_bis 20 | -------------------------------------------------------------------------------- /automations/light_sam_off_morning.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: light sam off morning 3 | alias: light sam off morning 4 | initial_state: true 5 | trigger: 6 | - platform: time 7 | at: 08:00:00 8 | - platform: numeric_state 9 | entity_id: sun.sun 10 | value_template: '{{ state.attributes.elevation }}' 11 | above: 9 12 | condition: 13 | condition: and 14 | conditions: 15 | - condition: time 16 | weekday: 17 | - mon 18 | - tue 19 | - wed 20 | - thu 21 | - fri 22 | action: 23 | - service: light.turn_off 24 | entity_id: light.lumiere_sam 25 | - service: light.turn_off 26 | entity_id: light.spots_cuisine_ilot 27 | -------------------------------------------------------------------------------- /automations/light_sdb_with_dressing_on.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: light on SDB P avec Dressing 3 | initial_state: true 4 | trigger: 5 | - platform: state 6 | entity_id: light.Dressing 7 | to: 'on' 8 | 9 | condition: 10 | condition: or 11 | conditions: 12 | - condition: time 13 | after: '06:00:00' 14 | before: '08:00:00' 15 | - condition: time 16 | after: '22:00:00' 17 | before: '00:00:00' 18 | 19 | action: 20 | service: light.turn_on 21 | entity_id: light.mirroir_sdb_p 22 | -------------------------------------------------------------------------------- /automations/light_stairs_with_bedlight_off.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: switch off Stairs with bed_light 3 | initial_state: true 4 | id: switch_off_lights_with_bedlights 5 | trigger: 6 | - platform: state 7 | entity_id: light.lit_d 8 | to: 'off' 9 | - platform: state 10 | entity_id: light.lit_g 11 | to: 'off' 12 | condition: 13 | condition: and 14 | conditions: 15 | - condition: state 16 | entity_id: light.lit_d 17 | state: 'off' 18 | - condition: state 19 | entity_id: light.lit_g 20 | state: 'off' 21 | action: 22 | service: light.turn_off 23 | entity_id: light.spots_escalier_1_2 24 | -------------------------------------------------------------------------------- /automations/machines/clothes _dryer/cd_clean.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: cd_clean 3 | hide_entity: true 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.seche_linge 7 | to: 'off' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.openclose_13 11 | state: 'off' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.clothes_dryer 16 | option: 'Clean' 17 | -------------------------------------------------------------------------------- /automations/machines/clothes _dryer/cd_idle.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: cd_idle 3 | hide_entity: true 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.openclose_13 7 | to: 'on' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.seche_linge 11 | state: 'off' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.clothes_dryer 16 | option: 'Idle' 17 | -------------------------------------------------------------------------------- /automations/machines/clothes _dryer/cd_running.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: cd_running 3 | hide_entity: true 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.seche_linge 7 | to: 'on' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.openclose_13 11 | state: 'off' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.clothes_dryer 16 | option: 'Running' 17 | -------------------------------------------------------------------------------- /automations/machines/dish_washer/dw_clean.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | hide_entity: true 3 | alias: dw_clean 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.lave_vaisaille 7 | to: 'off' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.openclose_14 11 | state: 'on' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.dish_washer_status 16 | option: 'Clean' 17 | -------------------------------------------------------------------------------- /automations/machines/dish_washer/dw_idle.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | hide_entity: true 3 | alias: dw_idle 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.openclose_14 7 | to: 'off' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.lave_vaisaille 11 | state: 'off' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.dish_washer_status 16 | option: 'Idle' 17 | -------------------------------------------------------------------------------- /automations/machines/dish_washer/dw_running.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: dw_running 3 | hide_entity: true 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.lave_vaisaille 7 | to: 'on' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.openclose_14 11 | state: 'on' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.dish_washer_status 16 | option: 'Running' 17 | -------------------------------------------------------------------------------- /automations/machines/washing_machine/wm_clean.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: wm_clean 3 | hide_entity: true 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.lave_linge 7 | to: 'off' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.openclose_9 11 | state: 'off' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.washing_machine 16 | option: 'Clean' 17 | -------------------------------------------------------------------------------- /automations/machines/washing_machine/wm_idle.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: wm_idle 3 | hide_entity: true 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.openclose_9 7 | to: 'on' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.lave_linge 11 | state: 'off' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.washing_machine 16 | option: 'Idle' 17 | -------------------------------------------------------------------------------- /automations/machines/washing_machine/wm_running.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: wm_running 3 | hide_entity: true 4 | trigger: 5 | platform: state 6 | entity_id: binary_sensor.lave_linge 7 | to: 'on' 8 | condition: 9 | condition: state 10 | entity_id: binary_sensor.openclose_9 11 | state: 'off' 12 | action: 13 | service: input_select.select_option 14 | data: 15 | entity_id: input_select.washing_machine 16 | option: 'Running' 17 | -------------------------------------------------------------------------------- /automations/notifiy_rina_arrives_leaves_home.yaml.old: -------------------------------------------------------------------------------- 1 | # - id: Notify when rina leaves and arrives home 2 | # alias: Notify when rina leaves and arrives home 3 | # initial_state: true 4 | # trigger: 5 | # - platform: state 6 | # entity_id: device_tracker.iphonederina 7 | # action: 8 | # - service: notify.ios_iphoneadonno 9 | # data: 10 | # title: Presence Rina 11 | # message: "{% if is_state(\"device_tracker.iphonederina\", \"home\") %}\n Rina\ 12 | # \ Arrived Home\n{% elif is_state(\"sensor.phone\", \"not_home\") %}\n Rina\ 13 | # \ Left Home\n{% else is_state(\"sensor.phone\", \"not home\") %}\n Rina Left\ 14 | # \ Home \n{% endif %}" -------------------------------------------------------------------------------- /automations/nuki_batt_low.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Nuki battery low 3 | alias: Nuki battery low 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | platform: template 8 | value_template: "{{ states.lock.home.attributes.battery_critical == 'true' }}" 9 | action: 10 | - service: notify.ios_iphoneadonno 11 | data_template: 12 | title: Nuki Battery Warning 13 | message: Nuki battery level critical. Please replace batteries 14 | -------------------------------------------------------------------------------- /automations/nuki_door_locked_notification.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: inform when door is unlocked or locked speakers 3 | alias: doorstaate2 4 | initial_state: true 5 | trigger: 6 | - platform: state 7 | entity_id: lock.home 8 | action: 9 | - service: tts.google_translate_say 10 | entity_id: media_player.chromecast_messages 11 | data_template: 12 | message: > 13 | {% if is_state('lock.home', 'locked' ) %} Porte Verouillée {% else %}Attention! Porte déverouillée! 14 | {% endif %} 15 | language: fr 16 | -------------------------------------------------------------------------------- /automations/nuki_door_unlocked_notification.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: inform when door is unlocked or locked phones 3 | alias: doorstaate 4 | initial_state: true 5 | trigger: 6 | - platform: state 7 | entity_id: lock.home 8 | action: 9 | - service: notify.ios_iphoneadonno 10 | data: 11 | title: Front Door 12 | message: > 13 | {% if is_state('lock.home', 'locked' ) %} Door Locked {% else %} !!Door Unlocked!! {% endif %} 14 | data: 15 | push: 16 | badge: 0 17 | category: 'lockdoor' 18 | # - service: notify.ios_rinas_iphone 19 | # data: 20 | # title: Entrée 21 | # message: > 22 | # {% if is_state('lock.home', 'locked' ) %} Porte Verouillée {% else %} Déverouillée!!! {% endif %} 23 | -------------------------------------------------------------------------------- /automations/phone_status_notification.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Phone Stat notifications 3 | alias: Notify about phone state 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | - platform: state 8 | entity_id: sensor.phone 9 | action: 10 | - service: notify.ios_iphoneadonno 11 | data: 12 | title: Phone 13 | message: "{% if is_state(\"sensor.phone\", \"idle\") %}\n Phone is idle\n{%\ 14 | \ elif is_state(\"sensor.phone\", \"dialing\") %}\n Calling {{ states.sensor.phone.attributes.to_name\ 15 | \ }} ({{ states.sensor.phone.attributes.to }})\n{% elif is_state(\"sensor.phone\"\ 16 | , \"ringing\") %}\n Incoming call from {{ states.sensor.phone.attributes.from_name\ 17 | \ }} ({{ states.sensor.phone.attributes.from }})\n{% else %}\n Talking to\ 18 | \ {{ states.sensor.phone.attributes.with_name }} ({{ states.sensor.phone.attributes.with\ 19 | \ }})\n{% endif %}" 20 | - service: notify.rinas_iphone 21 | data: 22 | title: Phone 23 | message: "{% if is_state(\"sensor.phone\", \"idle\") %}\n Phone is idle\n{%\ 24 | \ elif is_state(\"sensor.phone\", \"dialing\") %}\n Calling {{ states.sensor.phone.attributes.to_name\ 25 | \ }} ({{ states.sensor.phone.attributes.to }})\n{% elif is_state(\"sensor.phone\"\ 26 | , \"ringing\") %}\n Incoming call from {{ states.sensor.phone.attributes.from_name\ 27 | \ }} ({{ states.sensor.phone.attributes.from }})\n{% else %}\n Talking to\ 28 | \ {{ states.sensor.phone.attributes.with_name }} ({{ states.sensor.phone.attributes.with\ 29 | \ }})\n{% endif %}" 30 | - service: tts.google_translate_say 31 | entity_id: media_player.chromecast_messages 32 | data_template: 33 | message: "{% if is_state(\"sensor.phone\", \"ringing\") %}\n Appel entrant\ 34 | \ de {{ states.sensor.phone.attributes.from_name }} ({{ states.sensor.phone.attributes.from\ 35 | \ }})\n{% endif %}" 36 | language: fr 37 | # - service: media_player.volume_set 38 | # data_template: 39 | # entity_id: media_player.chromecastkeller 40 | # volume_level: 0.5 41 | # - service: media_player.volume_set 42 | # data_template: 43 | # entity_id: media_player.chromecastchparents 44 | # volume_level: 0.5 45 | 46 | ######################################################################################################### 47 | -------------------------------------------------------------------------------- /automations/radio_off_when_leaving.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: Radio off when leaving home 3 | initial_state: true 4 | hide_entity: true 5 | trigger: 6 | - platform: state 7 | entity_id: device_tracker.rinas_iphone 8 | from: home 9 | to: not_home 10 | - platform: state 11 | entity_id: device_tracker.iphoneadonno 12 | from: home 13 | to: not_home 14 | condition: 15 | condition: state 16 | entity_id: group.network_devices_mobile 17 | state: not_home 18 | action: 19 | - service: notify.ios_iphoneadonno 20 | data: 21 | title: Goodbye 22 | message: Goodbye 23 | - service: light.turn_off 24 | entity_id: light.hall_entree 25 | - service: media_player.turn_off 26 | data: 27 | entity_id: media_player.chromecastkeller 28 | - service: media_player.turn_off 29 | data: 30 | entity_id: media_player.chromecastchparents 31 | -------------------------------------------------------------------------------- /automations/radio_off_when_tv_on.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: 'Fernseh un radio aus ' 3 | initial_state: true 4 | trigger: 5 | platform: state 6 | entity_id: remote.living 7 | condition: 8 | condition: template 9 | value_template: '{{ trigger.to_state.attributes.current_activity == "Watch TV" 10 | }}' 11 | action: 12 | - service: media_player.turn_off 13 | entity_id: media_player.chromecastkeller 14 | -------------------------------------------------------------------------------- /automations/switch_on_light_when_coming_home.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: Switch on lights when coming home 3 | initial_state: true 4 | trigger: 5 | - platform: state 6 | entity_id: device_tracker.rinas_iphone 7 | to: home 8 | - platform: state 9 | entity_id: device_tracker.iphoneadonno 10 | to: home 11 | condition: 12 | condition: sun 13 | after: sunset 14 | before_offset: '-1:00:00' 15 | action: 16 | - service: notify.ios_iphoneadonno 17 | data: 18 | title: Welcome home 19 | message: Welcome 20 | - service: light.turn_on 21 | entity_id: light.hall_entree 22 | - service: light.turn_on 23 | entity_id: light.lum_ext_avant 24 | - delay: '00:05:00' 25 | - service: light.turn_off 26 | entity_id: light.hall_entree 27 | - service: light.turn_off 28 | entity_id: light.lum_ext_avant 29 | -------------------------------------------------------------------------------- /automations/system_shutdown_notification.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Hass Shutdown Notification 3 | alias: Hass Shutdown Notification 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | - platform: homeassistant 8 | event: shutdown 9 | action: 10 | service: notify.ios_iphoneadonno 11 | data: 12 | title: Shutdown Warning 13 | message: Hassio shutdown 14 | -------------------------------------------------------------------------------- /automations/system_startup_notification.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Hass Startup Notification 3 | alias: Hass Startup Notification 4 | initial_state: true 5 | hide_entity: true 6 | trigger: 7 | - event: start 8 | platform: homeassistant 9 | action: 10 | - data: 11 | message: Hass restarted 12 | title: Restart Hassio 13 | service: notify.ios_iphoneadonno 14 | -------------------------------------------------------------------------------- /automations/system_upgrade_aler.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # This alerts me on my iPhone when a new release 3 | # of Home Assistant for Hass.io is released. 4 | # 5 | alias: system_upgrade_alert 6 | initial_state: true 7 | trigger: 8 | platform: state 9 | entity_id: sensor.version_available 10 | condition: 11 | - condition: template 12 | value_template: >- 13 | {{ 14 | states('sensor.version_available') 15 | != 16 | states('sensor.version_current') 17 | }} 18 | action: 19 | - service: notify.ios_iphoneadonno 20 | data_template: 21 | title: Upgrade time! 22 | message: >- 23 | There is a Home Assistant upgrade for Hass.io pending! 24 | Version {{ states('sensor.version_available') }} just got released! 25 | data: 26 | attachment: 27 | content-type: png 28 | url: https://png2.kisspng.com/20180504/avq/kisspng-computer-icons-starburst-clip-art-the-store-to-upgrade-kuangshuai-5aecf79d6760f6.2104595515254793254235.png 29 | - service: persistent_notification.create 30 | data_template: 31 | title: Upgrade time! 32 | message: >- 33 | There is a Home Assistant upgrade for Hass.io pending! 34 | Version {{ states('sensor.version_available') }} just got released! 35 | notification_id: hassio_upgrade 36 | -------------------------------------------------------------------------------- /automations/weekly_snapshot.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | alias: weeklysnapshot 3 | initial_state: true 4 | id: weeklysnapshot 5 | trigger: 6 | - platform: time 7 | at: 03:00:00 8 | condition: 9 | - condition: time 10 | weekday: 11 | - sun 12 | action: 13 | - service: hassio.snapshot_full 14 | data_template: 15 | name: Automated Backup {{ now().strftime('%Y-%m-%d') }} 16 | -------------------------------------------------------------------------------- /automations/welcome_home_andrea.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Welcome Home Andrea 3 | alias: welcome home Andrea 4 | trigger: 5 | - entity_id: device_tracker.iphoneadonno 6 | platform: state 7 | to: home 8 | condition: 9 | - after: 08:00:00 10 | before: '20:00:00' 11 | condition: time 12 | - condition: state 13 | entity_id: device_tracker.rinas_iphone 14 | state: not home 15 | action: 16 | - data: 17 | language: en 18 | message: Welcome home. Andrea! 19 | entity_id: media_player.chromecast_messages 20 | service: tts.google_translate_say 21 | -------------------------------------------------------------------------------- /automations/welcome_home_rina.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | id: Welcome Home Rina 3 | alias: welcome home Rina 4 | trigger: 5 | - platform: state 6 | entity_id: device_tracker.rinas_iphone 7 | to: home 8 | condition: 9 | - condition: time 10 | after: 08:00:00 11 | before: '20:00:00' 12 | action: 13 | - service: tts.google_translate_say 14 | entity_id: media_player.chromecast_messages 15 | data: 16 | message: Bienvenue. Rina 17 | language: fr 18 | -------------------------------------------------------------------------------- /configuration.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | homeassistant: 3 | packages: !include_dir_named integrations 4 | 5 | discovery: 6 | ignore: 7 | - plex_mediaserver 8 | knx: 9 | -------------------------------------------------------------------------------- /custom_components/hacs/.translations/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "title": "HACS (Home Assistant Community Store)", 4 | "step": { 5 | "user": { 6 | "title": "HACS (Home Assistant Community Store)", 7 | "description": "If you need help with the configuration have a look here: https://custom-components.github.io/hacs/installation/configuration/", 8 | "data": { 9 | "token": "GitHub Personal Access Token", 10 | "sidepanel_title": "Sidepanel title", 11 | "sidepanel_icon": "Sidepanel icon", 12 | "appdaemon": "Enable AppDaemon apps discovery & tracking", 13 | "python_script": "Enable python_scripts discovery & tracking", 14 | "theme": "Enable Themes discovery & tracking" 15 | } 16 | } 17 | }, 18 | "error": { 19 | "auth": "Personal Access Token is not correct." 20 | }, 21 | "abort": { 22 | "single_instance_allowed": "Only a single configuration of HACS is allowed." 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /custom_components/hacs/const.py: -------------------------------------------------------------------------------- 1 | """Constants for HACS""" 2 | NAME_LONG = "HACS (Home Assistant Community Store)" 3 | NAME_SHORT = "HACS" 4 | VERSION = "0.13.2" 5 | DOMAIN = "hacs" 6 | PROJECT_URL = "https://github.com/custom-components/hacs/" 7 | CUSTOM_UPDATER_LOCATIONS = [ 8 | "{}/custom_components/custom_updater.py", 9 | "{}/custom_components/custom_updater/__init__.py", 10 | ] 11 | 12 | ISSUE_URL = f"{PROJECT_URL}issues" 13 | DOMAIN_DATA = f"{NAME_SHORT.lower()}_data" 14 | 15 | ELEMENT_TYPES = ["integration", "plugin"] 16 | 17 | IFRAME = { 18 | "title": "Community", 19 | "icon": "mdi:alpha-c-box", 20 | "url": "/community_overview", 21 | "path": "community", 22 | "require_admin": True, 23 | } 24 | 25 | 26 | # Messages 27 | CUSTOM_UPDATER_WARNING = """ 28 | This cannot be used with custom_updater. 29 | To use this you need to remove custom_updater form {} 30 | """ 31 | 32 | DEV_MODE = "You have 'dev' enabled for HACS, this is not intended for regular use, no support will be given if you break something." 33 | 34 | STARTUP = f""" 35 | ------------------------------------------------------------------- 36 | HACS (Home Assistant Community Store) 37 | 38 | Version: {VERSION} 39 | This is a custom integration 40 | If you have any issues with this you need to open an issue here: 41 | https://github.com/custom-components/hacs/issues 42 | ------------------------------------------------------------------- 43 | """ 44 | -------------------------------------------------------------------------------- /custom_components/hacs/frontend/__init__.py: -------------------------------------------------------------------------------- 1 | """Initialize frontend objects.""" 2 | -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/all.min.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/all.min.css.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/hacs.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/hacs.css.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/hacs.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/hacs.js.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/materialize.min.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/materialize.min.css.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/materialize.min.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/materialize.min.js.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-brands-400.eot.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-brands-400.eot.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-brands-400.svg.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-brands-400.svg.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-brands-400.ttf.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-brands-400.ttf.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-brands-400.woff.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-brands-400.woff.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-brands-400.woff2.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-brands-400.woff2.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-regular-400.eot.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-regular-400.eot.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-regular-400.svg.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-regular-400.svg.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-regular-400.ttf.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-regular-400.ttf.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-regular-400.woff.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-regular-400.woff.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-regular-400.woff2.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-regular-400.woff2.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-solid-900.eot.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-solid-900.eot.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-solid-900.svg.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-solid-900.svg.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-solid-900.ttf.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-solid-900.ttf.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-solid-900.woff.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-solid-900.woff.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/elements/webfonts/fa-solid-900.woff2.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/elements/webfonts/fa-solid-900.woff2.gz -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/base.html: -------------------------------------------------------------------------------- 1 | {% set progressbar = 'block' if hacs.system.status.background_task else 'none' %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 25 |
26 |
27 |

Background task running, this page will reload when it's done.

28 |
29 |
30 |
31 |
32 | 37 | {% if message %} 38 | {% include 'message.html' with context %} 39 | {% endif %} 40 | {% set hacs_repo = hacs.get_by_name("custom-components/hacs") %} 41 | {% if hacs_repo.pending_restart %} 42 | {% set message = "The frontend of HACS have been disabled until you restart Home Assistant." %} 43 | {% include 'message.html' with context %} 44 | {% else %} 45 | {% block content %} 46 | {% endblock %} 47 | {% endif %} 48 |
49 | 50 | 51 | -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/error.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/grid.html: -------------------------------------------------------------------------------- 1 |
2 |
{{ displaytype }}
3 |
4 | {% for repository in repositories.repositories %} 5 | 7 |
8 |
9 | 10 |
11 |
12 | 13 | {% if location == 'store' and repository.status.new %} 14 | NEW 15 | {% else %} 16 | 18 | {% endif %} 19 | {{repository.display_name}} 20 | 21 |
22 |
23 | 24 |

{{repository.information.description}}

25 |
26 |
27 |
28 |
29 | {% endfor %} 30 |
31 |
32 |
33 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/grid_new.html: -------------------------------------------------------------------------------- 1 | {% set repositories = namespace(repositories=[]) %} 2 | {% for repository in hacs.sorted_by_name %} 3 | {% if repository.status.new %} 4 | {% set repositories.repositories = repositories.repositories+[repository] %} 5 | {% endif %} 6 | {% endfor %} 7 | {% if repositories.repositories %} 8 |
9 |
NEW REPOSITORIES (ALL)
10 |
12 | 13 | 15 | Remove the NEW flag for all new items 16 | 17 |
18 |
19 | {% for repository in repositories.repositories %} 20 | 22 |
23 |
24 | 25 |
26 |
27 | 28 | 29 | {{repository.information.category | upper}} 30 | 31 |

32 | {{repository.display_name}} 33 |
34 |
35 |
36 | 37 |

{{repository.information.description}}

38 |
39 |
40 |
41 |
42 | {% endfor %} 43 |
44 |
45 |
46 |
47 | {% endif %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/message.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 | {{message}} 8 | 9 |
10 |
11 |
12 |
13 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/modal/upgrade_all.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/modal/wrong_ha_version.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/overviews.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "base.html" %} 3 | {% block content %} 4 | {% if location == 'store' %} 5 |
6 | 8 |
9 | {% if hacs.configuration.frontend_mode == "Grid" %} 10 | {% include 'grid_new.html' with context %} 11 | {% else %} 12 | {% include 'table_new.html' with context %} 13 | {% endif %} 14 | {% endif %} 15 | 16 | {% for type in hacs.common.categories %} 17 | 18 | {% if type == 'appdaemon' %} 19 | {% set displaytype = 'APPDAEMON APPS' %} 20 | {% elif type == 'python_script' %} 21 | {% set displaytype = 'PYTHON SCRIPTS' %} 22 | {% else %} 23 | {% set displaytype = (type + 's') | upper %} 24 | {% endif %} 25 | 26 | {% set repositories = namespace(repositories=[]) %} 27 | 28 | {% for repository in hacs.sorted_by_name %} 29 | {% if not repository.status.hide %} 30 | {% if repository.information.category == type %} 31 | {% if location == 'overview' %} 32 | {% if repository.status.installed %} 33 | {% set repositories.repositories = repositories.repositories+[repository] %} 34 | {% endif %} 35 | {% else %} 36 | {% if repository.information.uid != "172733314" %} 37 | {% set repositories.repositories = repositories.repositories+[repository] %} 38 | {% endif %} 39 | {% endif %} 40 | {% endif %} 41 | {% endif %} 42 | {% endfor %} 43 | 44 | {% if repositories.repositories %} 45 | {% if hacs.configuration.frontend_mode == "Grid" %} 46 | {% include 'grid.html' with context %} 47 | {% else %} 48 | {% include 'table.html' with context %} 49 | {% endif %} 50 | {% endif %} 51 | 52 | {% endfor %} 53 | 54 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/repository/authors.html: -------------------------------------------------------------------------------- 1 | {% if repository.information.authors %} 2 | {% if repository.information.category == "integration" %} 3 | 4 | 5 | Author(s): 6 | 7 | 8 | {% for author in repository.information.authors %} 9 | {% if "@" in author %} 10 | {% set author = author.split("@")[-1] %} 11 | {% endif %} 12 | @{{author}} 14 | {% endfor %} 15 | 16 | 17 | {% else %} 18 | 19 | 20 | Author: 21 | 22 | 23 | {{repository.information.authors}} 24 | 25 | 26 | {% endif %} 27 | {% endif %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/repository/buttons.html: -------------------------------------------------------------------------------- 1 | {% if not repository.can_install %} 2 | {% include 'modal/wrong_ha_version.html' with context %} 3 | {% endif %} 4 | 5 |
6 | {% if repository.can_install %} 7 |
9 | 10 | 11 | {{repository.main_action}} 12 | 13 |
14 | {% else %} 15 | 16 | {{repository.main_action}} 17 | 18 | {% endif %} 19 | 20 | {% if repository.pending_upgrade and repository.display_version_or_commit == "version" %} 21 | 24 | CHANGELOG 25 | 26 | {% endif %} 27 | 28 | 29 | repository 30 | 31 | 32 | {% if repository.status.installed and repository.information.category == "plugin" %} 33 | {% set name = repository.information.full_name.split("/")[-1] %} 34 | 35 | OPEN PLUGIN 36 | 37 | {% endif %} 38 | 39 | {% if repository.status.installed and repository.information.uid != "172733314" %} 40 |
42 | 43 | 45 | UNINSTALL 46 | 47 |
48 | {% endif %} 49 | 50 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/repository/menu.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/repository/note.html: -------------------------------------------------------------------------------- 1 | {% if repository.additional_info %} 2 |
3 |

4 | {% endif %} 5 | 6 | {% if repository.information.category == "appdaemon" %} 7 | 8 | 9 | When installed, this will be located in '{{repository.content.path.local}}', 10 | you still need to add it to your 'apps.yaml' file. 11 | 12 | 13 | {% elif repository.information.category == "integration" %} 14 | 15 | 16 | When installed, this will be located in '{{repository.content.path.local}}', 17 | you still need to add it to your 'configuration.yaml' file. 18 | 19 | 20 | {% elif repository.information.category == "plugin" %} 21 | {% set name = repository.information.full_name.split("/")[-1] %} 22 | 23 | 24 | When installed, this will be located in '{{repository.content.path.local }}', 25 | you still need to add it to your lovelace configuration ('ui-lovelace.yaml' or the raw UI config editor). 26 | 27 |

28 | 29 | When you add this to your configuration use this: 30 |
31 |
32 |   - url: /community_plugin/{{name}}/{{repository.information.file_name}}
33 |   {%- if repository.information.javascript_type %}
34 |     type: {{repository.information.javascript_type}}
35 |   {%- else %}
36 |     type: Could not determine the type of this plugin, check the repository.
37 |   {%- endif -%}
38 |     
39 | 40 | 41 | 42 | {% endif %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/repository/versionselect.html: -------------------------------------------------------------------------------- 1 | {% set tags = repository.releases.published_tags | sort(True) %} 2 | {% if repository.information.uid == "172733314" %} 3 | {% set tags = namespace(tags=[]) %} 4 | {% for tag in repository.releases.published_tags | sort(True) %} 5 | {% if (tag.split(".")[1] | int) == (repository.versions.installed.split(".")[1] | int) %} 6 | {% set tags.tags = tags.tags + [tag] %} 7 | {% endif %} 8 | {% endfor %} 9 | {% set tags = tags.tags + [repository.information.default_branch] %} 10 | {% else %} 11 | {% set tags = tags + [repository.information.default_branch] %} 12 | {% endif %} 13 | 14 | 15 | {% if repository.status.selected_tag %} 16 | {% set selected_tag = repository.status.selected_tag %} 17 | {% else %} 18 | {% set selected_tag = repository.versions.available %} 19 | {% endif %} 20 | 21 | Available versions: 22 | 23 | 24 |
26 | 27 | 33 |
34 | -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | {% if hacs.configuration.dev %} 4 | {% set message = "You have 'dev' enabled for HACS, this is not intended for regular use, no support will be given if you break something." %} 5 | {% include 'message.html' with context %} 6 | {% endif %} 7 | 8 | {% include 'modal/upgrade_all.html' with context %} 9 | 10 | 11 | {% include 'settings/hacs_info.html' with context %} 12 | {% include 'settings/buttons.html' with context %} 13 | {% include 'settings/custom_repositories.html' with context %} 14 | {% include 'settings/hidden_repositories.html' with context %} 15 | 16 | 17 | {% if hacs.configuration.dev and not hacs.system.status.background_task %} 18 | {% include 'settings/developer.html' with context %} 19 | {% endif %} 20 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/buttons.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
5 | 7 | RELOAD DATA 8 | 9 |
10 | 11 | 13 | UPGRADE ALL 14 | 15 | 16 | 18 | HACS REPO 19 | 20 | 21 | 23 | OPEN ISSUE 24 | 25 | 26 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/custom_repositories.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 42 | 43 | {% if not hacs.system.status.background_task %} 44 |
46 | 48 | 54 | 55 | 59 |
60 | {% endif %} 61 |
62 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/dev/remove_new_flag.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 |
4 |
5 |
6 | 9 |
10 |
11 |
12 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/dev/repositories.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | {% for repository in hacs.store.frontend|sort(attribute='name') %} 4 |
5 | 6 | 9 |
10 | {% endfor %} 11 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/dev/repository.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/custom_components/hacs/frontend/templates/settings/dev/repository.html -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/dev/set_ha_version.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 |
4 |
5 |
6 | 7 | 10 |
11 |
12 |
13 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/dev/template_test.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 |
4 |
5 |
6 | 7 |
8 | 11 | 14 |
15 |
16 |
17 | 18 | {% if hacs.dev_template %} 19 |
20 |
21 | {{ hacs.dev_template }} 22 |
23 |
24 | {% endif %} 25 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/dev/token.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 |
4 |
5 | 6 |
7 |
8 | {% endblock %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/developer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
DEVELOPER TOOLS
4 | {% for button in [ 5 | "remove_new_flag", 6 | "repositories", 7 | "set_ha_version", 8 | "token", 9 | "template_test" 10 | ] %} 11 |
12 | 13 | 16 |
17 | {% endfor %} 18 |
19 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/hacs_info.html: -------------------------------------------------------------------------------- 1 | {% if hacs.get_by_id("172733314").pending_restart %} 2 | {% set pending_restart = " (RESTART PENDING!)" %} 3 | {% else %} 4 | {% set pending_restart = "" %} 5 | {% endif %} 6 | 7 |
8 |
9 |
HACS (Home Assistant Community Store)
10 | 11 | 12 | 15 | 18 | 19 | 20 | 23 | 35 | 36 |
13 | Version: 14 | 16 | {{hacs.version}}{{pending_restart}} 17 |
21 | Display: 22 | 24 |
26 | 33 |
34 |
37 |
38 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/settings/hidden_repositories.html: -------------------------------------------------------------------------------- 1 | {% set repositories = namespace(hidden=False) %} 2 | {% for repository in hacs.repositories_list_repo %} 3 | {% if repository.hide %} 4 | {% set repositories.hidden = True %} 5 | {% endif %} 6 | {% endfor %} 7 | 8 | {% if repositories.hidden %} 9 |
10 |
11 | 40 |
41 |
42 | {% endif %} -------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/table.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
{{ displaytype }}
4 | 5 | 6 | 7 | 8 | 9 | 10 | {% if location == 'overview' %} 11 | 12 | 13 | {% endif %} 14 | 15 | 16 | 17 | {% for repository in repositories.repositories %} 18 | 20 | 25 | {% endif %} 26 | 29 | 30 | {% if location == 'overview' %} 31 | 32 | 33 | {% endif %} 34 | 35 | {% endfor %} 36 | 37 |
StatusNameDescriptionInstalledAvailable
21 | {% if location == 'store' and repository.status.new %} 22 | NEW 23 | {% else %} 24 | 27 | {{repository.display_name}} 28 | {{repository.information.description}}{{repository.display_installed_version}}{{repository.display_available_version}}
38 |
39 |
-------------------------------------------------------------------------------- /custom_components/hacs/frontend/templates/table_new.html: -------------------------------------------------------------------------------- 1 | {% set repositories = namespace(repositories=[]) %} 2 | {% for repository in hacs.sorted_by_name %} 3 | {% if repository.status.new %} 4 | {% set repositories.repositories = repositories.repositories+[repository] %} 5 | {% endif %} 6 | {% endfor %} 7 | {% if repositories.repositories %} 8 |
9 |
10 |
NEW REPOSITORIES (ALL)
11 |
13 | 14 | 16 | Remove the NEW flag for all new items 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% for repository in repositories.repositories %} 29 | 31 | 34 | 37 | 38 | 39 | {% endfor %} 40 | 41 |
CategoryNameDescription
32 | {{repository.information.category | upper}} 33 | 35 | {{repository.display_name}} 36 | {{repository.information.description}}
42 |
43 |
44 | {% endif %} -------------------------------------------------------------------------------- /custom_components/hacs/hacsbase/backup.py: -------------------------------------------------------------------------------- 1 | """Backup.""" 2 | import os 3 | from time import sleep 4 | from shutil import copy2, rmtree 5 | from distutils.dir_util import copy_tree 6 | 7 | from integrationhelper import Logger 8 | 9 | 10 | class Backup: 11 | """Backup.""" 12 | 13 | def __init__(self, local_path): 14 | """initialize.""" 15 | self.logger = Logger("hacs.backup") 16 | self.local_path = local_path 17 | self.backup_path = "/tmp/hacs_backup" 18 | 19 | def create(self): 20 | """Create a backup in /tmp""" 21 | if os.path.exists(self.backup_path): 22 | rmtree(self.backup_path) 23 | while os.path.exists(self.backup_path): 24 | sleep(0.1) 25 | os.makedirs(self.backup_path, exist_ok=True) 26 | 27 | try: 28 | if os.path.isfile(self.local_path): 29 | copy2(self.local_path, self.backup_path) 30 | os.remove(self.local_path) 31 | else: 32 | copy_tree(self.local_path, self.backup_path) 33 | rmtree(self.local_path) 34 | while os.path.exists(self.local_path): 35 | sleep(0.1) 36 | self.logger.debug( 37 | f"Backup for {self.local_path}, created in {self.backup_path}" 38 | ) 39 | except Exception: # pylint: disable=broad-except 40 | pass 41 | 42 | def restore(self): 43 | """Restore from backup.""" 44 | if os.path.isfile(self.local_path): 45 | os.remove(self.local_path) 46 | else: 47 | rmtree(self.local_path) 48 | while os.path.exists(self.local_path): 49 | sleep(0.1) 50 | copy2(self.backup_path, self.local_path) 51 | self.logger.debug(f"Restored {self.local_path}, from backup {self.backup_path}") 52 | 53 | def cleanup(self): 54 | """Cleanup backup files.""" 55 | rmtree(self.backup_path) 56 | while os.path.exists(self.backup_path): 57 | sleep(0.1) 58 | self.logger.debug(f"Backup dir {self.backup_path} cleared") 59 | -------------------------------------------------------------------------------- /custom_components/hacs/hacsbase/configuration.py: -------------------------------------------------------------------------------- 1 | """HACS Configuration.""" 2 | 3 | 4 | class Configuration: 5 | """Configuration class.""" 6 | 7 | def __init__(self, config): 8 | """Initialize.""" 9 | self.config = config 10 | self.frontend_mode = "Grid" 11 | self.config_type = None 12 | self.config_entry = None 13 | 14 | @property 15 | def token(self): 16 | """GitHub Access token.""" 17 | if self.config.get("token") is not None: 18 | return self.config["token"] 19 | return None 20 | 21 | @property 22 | def sidepanel_title(self): 23 | """Sidepanel title.""" 24 | if self.config.get("sidepanel_title") is not None: 25 | return self.config["sidepanel_title"] 26 | return "Community" 27 | 28 | @property 29 | def sidepanel_icon(self): 30 | """Sidepanel icon.""" 31 | if self.config.get("sidepanel_icon") is not None: 32 | return self.config["sidepanel_icon"] 33 | return "mdi:alpha-c-box" 34 | 35 | @property 36 | def dev(self): 37 | """Dev mode active.""" 38 | if self.config.get("dev") is not None: 39 | return self.config["dev"] 40 | return False 41 | 42 | @property 43 | def plugin_path(self): 44 | """Plugin path.""" 45 | if self.config.get("plugin_path") is not None: 46 | return self.config["plugin_path"] 47 | return "www/community/" 48 | 49 | @property 50 | def appdaemon(self): 51 | """Enable appdaemon.""" 52 | if self.config.get("appdaemon") is not None: 53 | return self.config["appdaemon"] 54 | return False 55 | 56 | @property 57 | def appdaemon_path(self): 58 | """Appdaemon apps path.""" 59 | if self.config.get("appdaemon_path") is not None: 60 | return self.config["appdaemon_path"] 61 | return "appdaemon/apps/" 62 | 63 | @property 64 | def python_script(self): 65 | """Enable python_script.""" 66 | if self.config.get("python_script") is not None: 67 | return self.config["python_script"] 68 | return False 69 | 70 | @property 71 | def python_script_path(self): 72 | """python_script path.""" 73 | if self.config.get("python_script_path") is not None: 74 | return self.config["python_script_path"] 75 | return "python_scripts/" 76 | 77 | @property 78 | def theme(self): 79 | """Enable theme.""" 80 | if self.config.get("theme") is not None: 81 | return self.config["theme"] 82 | return False 83 | 84 | @property 85 | def theme_path(self): 86 | """Themes path.""" 87 | if self.config.get("theme_path") is not None: 88 | return self.config["theme_path"] 89 | return "themes/" 90 | -------------------------------------------------------------------------------- /custom_components/hacs/hacsbase/const.py: -------------------------------------------------------------------------------- 1 | """Constants for HACS""" 2 | # pylint: disable=unused-import 3 | from ..const import ELEMENT_TYPES 4 | 5 | STORAGE_VERSION = "5" 6 | STORENAME = "hacs" 7 | 8 | # Messages 9 | NOT_SUPPORTED_HA_VERSION = "You have version '{}' of Home Assistant, but version '{}' of '{}' require version '{}' of Home Assistant, install and upgrades are disabled for this integration untill you upgrade Home Assistant." 10 | 11 | 12 | NO_ELEMENTS = "No elements to show, open the store to install some awesome stuff." 13 | -------------------------------------------------------------------------------- /custom_components/hacs/hacsbase/exceptions.py: -------------------------------------------------------------------------------- 1 | """Custom Exceptions.""" 2 | 3 | 4 | class HacsBaseException(Exception): 5 | """Super basic.""" 6 | 7 | 8 | class HacsUserScrewupException(HacsBaseException): 9 | """Raise this when the user does something they should not do.""" 10 | 11 | 12 | class HacsNotSoBasicException(HacsBaseException): 13 | """Not that basic.""" 14 | 15 | 16 | class HacsDataFileMissing(HacsBaseException): 17 | """Raise this storage datafile is missing.""" 18 | 19 | 20 | class HacsDataNotExpected(HacsBaseException): 21 | """Raise this when data returned from storage is not ok.""" 22 | 23 | 24 | class HacsRepositoryInfo(HacsBaseException): 25 | """Raise this when repository info is missing/wrong.""" 26 | 27 | 28 | class HacsRequirement(HacsBaseException): 29 | """Raise this when repository is missing a requirement.""" 30 | 31 | 32 | class HacsMissingManifest(HacsBaseException): 33 | """Raise this when manifest is missing.""" 34 | 35 | def __init__(self, message="The manifest file is missing in the repository."): 36 | super().__init__(message) 37 | self.message = message 38 | 39 | 40 | class HacsBlacklistException(HacsBaseException): 41 | """Raise this when the repository is currently in the blacklist.""" 42 | 43 | def __init__(self, message="The repository is currently in the blacklist."): 44 | super().__init__(message) 45 | self.message = message 46 | -------------------------------------------------------------------------------- /custom_components/hacs/hacsbase/startup.py: -------------------------------------------------------------------------------- 1 | """HACS Startup.""" 2 | from . import Hacs 3 | 4 | 5 | class HacsStartup(Hacs): 6 | """Startup class.""" 7 | 8 | async def run_startup(self): 9 | """Run startup tasks for HACS.""" 10 | self.logger.critical("Startup!") 11 | if self.configuration.dev: 12 | self.logger.critical("Running in DEV mode!") 13 | if self.developer.devcontainer: 14 | self.logger.critical("Running inside a devcontainer") 15 | self.logger.critical("Some features have been disabled") 16 | self.logger.critical("It will only fetch one repository pr category") 17 | -------------------------------------------------------------------------------- /custom_components/hacs/hacsbase/update.py: -------------------------------------------------------------------------------- 1 | """HACS Updater.""" 2 | from . import Hacs 3 | 4 | 5 | class HacsUpdate(Hacs): 6 | """Update class.""" 7 | -------------------------------------------------------------------------------- /custom_components/hacs/handler/__init__.py: -------------------------------------------------------------------------------- 1 | """Initialize handlers.""" 2 | -------------------------------------------------------------------------------- /custom_components/hacs/handler/download.py: -------------------------------------------------------------------------------- 1 | """Download.""" 2 | import os 3 | import gzip 4 | import shutil 5 | 6 | import aiofiles 7 | import async_timeout 8 | from integrationhelper import Logger 9 | import backoff 10 | from homeassistant.helpers.aiohttp_client import async_get_clientsession 11 | from ..hacsbase.exceptions import HacsNotSoBasicException 12 | 13 | 14 | @backoff.on_exception(backoff.expo, Exception, max_tries=5) 15 | async def async_download_file(hass, url): 16 | """ 17 | Download files, and return the content. 18 | """ 19 | logger = Logger("hacs.download.downloader") 20 | if url is None: 21 | return 22 | 23 | # There is a bug somewhere... TODO: Find that bug.... 24 | if "tags/" in url: 25 | url = url.replace("tags/", "") 26 | 27 | logger.debug(f"Donwloading {url}") 28 | 29 | result = None 30 | 31 | with async_timeout.timeout(5, loop=hass.loop): 32 | request = await async_get_clientsession(hass).get(url) 33 | 34 | # Make sure that we got a valid result 35 | if request.status == 200: 36 | result = await request.read() 37 | else: 38 | raise HacsNotSoBasicException( 39 | "Got status code {} when trying to download {}".format( 40 | request.status, url 41 | ) 42 | ) 43 | 44 | return result 45 | 46 | 47 | async def async_save_file(location, content): 48 | """Save files.""" 49 | logger = Logger("hacs.download.save") 50 | logger.debug(f"Saving {location}") 51 | mode = "w" 52 | encoding = "utf-8" 53 | errors = "ignore" 54 | 55 | if not isinstance(content, str): 56 | mode = "wb" 57 | encoding = None 58 | errors = None 59 | 60 | try: 61 | async with aiofiles.open( 62 | location, mode=mode, encoding=encoding, errors=errors 63 | ) as outfile: 64 | await outfile.write(content) 65 | outfile.close() 66 | 67 | # Create gz for .js files 68 | if os.path.isfile(location): 69 | if location.endswith(".js") or location.endswith(".css"): 70 | with open(location, "rb") as f_in: 71 | with gzip.open(location + ".gz", "wb") as f_out: 72 | shutil.copyfileobj(f_in, f_out) 73 | 74 | except Exception as error: # pylint: disable=broad-except 75 | msg = "Could not write data to {} - {}".format(location, error) 76 | logger.debug(msg) 77 | 78 | return os.path.exists(location) 79 | -------------------------------------------------------------------------------- /custom_components/hacs/handler/logger.py: -------------------------------------------------------------------------------- 1 | """HacsLogger""" 2 | 3 | 4 | class HacsLogger: 5 | """Custom logger class for HACS.""" 6 | 7 | import logging 8 | 9 | prefix = "custom_components.hacs" 10 | 11 | def debug(self, message, part=None): 12 | """Info messages.""" 13 | if part is None: 14 | part = self.prefix 15 | else: 16 | part = "{}.{}".format(self.prefix, part) 17 | self.logging.getLogger(part).debug(message) 18 | 19 | def info(self, message, part=None): 20 | """Info messages.""" 21 | if part is None: 22 | part = self.prefix 23 | else: 24 | part = "{}.{}".format(self.prefix, part) 25 | self.logging.getLogger(part).info(message) 26 | 27 | def warning(self, message, part=None): 28 | """Info messages.""" 29 | if part is None: 30 | part = self.prefix 31 | else: 32 | part = "{}.{}".format(self.prefix, part) 33 | self.logging.getLogger(part).warning(message) 34 | 35 | def error(self, message, part=None): 36 | """Info messages.""" 37 | if part is None: 38 | part = self.prefix 39 | else: 40 | part = "{}.{}".format(self.prefix, part) 41 | self.logging.getLogger(part).error(message) 42 | 43 | def critical(self, message, part=None): 44 | """Info messages.""" 45 | if part is None: 46 | part = self.prefix 47 | else: 48 | part = "{}.{}".format(self.prefix, part) 49 | self.logging.getLogger(part).critical(message) 50 | -------------------------------------------------------------------------------- /custom_components/hacs/handler/template.py: -------------------------------------------------------------------------------- 1 | """Custom template support.""" 2 | # pylint: disable=broad-except 3 | from jinja2 import Template 4 | from integrationhelper import Logger 5 | 6 | 7 | def render_template(content, context): 8 | """Render templates in content.""" 9 | # Fix None issues 10 | if context.releases.last_release_object is not None: 11 | prerelease = context.releases.last_release_object.prerelease 12 | else: 13 | prerelease = False 14 | 15 | # Render the template 16 | try: 17 | render = Template(content) 18 | render = render.render( 19 | installed=context.status.installed, 20 | pending_update=context.pending_upgrade, 21 | prerelease=prerelease, 22 | selected_tag=context.status.selected_tag, 23 | version_available=context.releases.last_release, 24 | version_installed=context.display_installed_version, 25 | ) 26 | return render 27 | except Exception as exception: 28 | Logger("hacs.template").debug(exception) 29 | return content 30 | -------------------------------------------------------------------------------- /custom_components/hacs/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "domain": "hacs", 3 | "name": "HACS (Home Assistant Community Store)", 4 | "documentation": "https://custom-components.github.io/hacs", 5 | "dependencies": [], 6 | "config_flow": true, 7 | "codeowners": [ 8 | "@ludeeus" 9 | ], 10 | "homeassistant": "0.97.0", 11 | "requirements": [ 12 | "aiofiles==0.4.0", 13 | "backoff==1.8.0", 14 | "aiogithubapi==0.2.0", 15 | "integrationhelper==0.2.2" 16 | ] 17 | } -------------------------------------------------------------------------------- /custom_components/hacs/repositories/__init__.py: -------------------------------------------------------------------------------- 1 | """Initialize repositories.""" 2 | from .theme import HacsTheme 3 | from .integration import HacsIntegration 4 | from .python_script import HacsPythonScript 5 | from .appdaemon import HacsAppdaemon 6 | from .plugin import HacsPlugin 7 | -------------------------------------------------------------------------------- /custom_components/hacs/repositories/appdaemon.py: -------------------------------------------------------------------------------- 1 | """Class for appdaemon apps in HACS.""" 2 | from .repository import HacsRepository, register_repository_class 3 | 4 | 5 | @register_repository_class 6 | class HacsAppdaemon(HacsRepository): 7 | """Appdaemon apps in HACS.""" 8 | 9 | category = "appdaemon" 10 | 11 | def __init__(self, full_name): 12 | """Initialize.""" 13 | super().__init__() 14 | self.information.full_name = full_name 15 | self.information.category = self.category 16 | self.content.path.local = self.localpath 17 | 18 | @property 19 | def localpath(self): 20 | """Return localpath.""" 21 | return f"{self.system.config_path}/appdaemon/apps/{self.information.name}" 22 | 23 | async def validate_repository(self): 24 | """Validate.""" 25 | await self.common_validate() 26 | 27 | # Custom step 1: Validate content. 28 | addir = await self.repository_object.get_contents("apps", self.ref) 29 | if not isinstance(addir, list): 30 | self.validate.errors.append("Repostitory structure not compliant") 31 | 32 | self.content.path.remote = addir[0].path 33 | self.information.name = addir[0].name 34 | self.content.objects = await self.repository_object.get_contents( 35 | self.content.path.remote, self.ref 36 | ) 37 | 38 | self.content.files = [] 39 | for filename in self.content.objects: 40 | self.content.files.append(filename.name) 41 | 42 | # Handle potential errors 43 | if self.validate.errors: 44 | for error in self.validate.errors: 45 | if not self.system.status.startup: 46 | self.logger.error(error) 47 | return self.validate.success 48 | 49 | async def registration(self): 50 | """Registration.""" 51 | if not await self.validate_repository(): 52 | return False 53 | 54 | # Run common registration steps. 55 | await self.common_registration() 56 | 57 | # Set local path 58 | self.content.path.local = self.localpath 59 | 60 | async def update_repository(self): 61 | """Update.""" 62 | await self.common_update() 63 | 64 | # Get appdaemon objects. 65 | addir = await self.repository_object.get_contents("apps", self.ref) 66 | self.content.path.remote = addir[0].path 67 | self.information.name = addir[0].name 68 | self.content.objects = await self.repository_object.get_contents( 69 | self.content.path.remote, self.ref 70 | ) 71 | 72 | self.content.files = [] 73 | for filename in self.content.objects: 74 | self.content.files.append(filename.name) 75 | 76 | # Set local path 77 | self.content.path.local = self.localpath 78 | -------------------------------------------------------------------------------- /custom_components/hacs/repositories/python_script.py: -------------------------------------------------------------------------------- 1 | """Class for python_scripts in HACS.""" 2 | from .repository import HacsRepository, register_repository_class 3 | 4 | 5 | @register_repository_class 6 | class HacsPythonScript(HacsRepository): 7 | """python_scripts in HACS.""" 8 | 9 | category = "python_script" 10 | 11 | def __init__(self, full_name): 12 | """Initialize.""" 13 | super().__init__() 14 | self.information.full_name = full_name 15 | self.information.category = self.category 16 | self.content.path.remote = "python_scripts" 17 | self.content.path.local = f"{self.system.config_path}/python_scripts" 18 | self.content.single = True 19 | 20 | async def validate_repository(self): 21 | """Validate.""" 22 | # Run common validation steps. 23 | await self.common_validate() 24 | 25 | # Custom step 1: Validate content. 26 | self.content.objects = await self.repository_object.get_contents( 27 | self.content.path.remote, self.ref 28 | ) 29 | if not isinstance(self.content.objects, list): 30 | self.validate.errors.append("Repostitory structure not compliant") 31 | 32 | self.content.files = [] 33 | for filename in self.content.objects: 34 | self.content.files.append(filename.name) 35 | 36 | # Handle potential errors 37 | if self.validate.errors: 38 | for error in self.validate.errors: 39 | if not self.system.status.startup: 40 | self.logger.error(error) 41 | return self.validate.success 42 | 43 | async def registration(self): 44 | """Registration.""" 45 | if not await self.validate_repository(): 46 | return False 47 | 48 | # Run common registration steps. 49 | await self.common_registration() 50 | 51 | # Set name 52 | self.information.name = self.content.objects[0].name.replace(".py", "") 53 | 54 | async def update_repository(self): 55 | """Update.""" 56 | # Run common update steps. 57 | await self.common_update() 58 | 59 | # Get python_script objects. 60 | self.content.objects = await self.repository_object.get_contents( 61 | self.content.path.remote, self.ref 62 | ) 63 | 64 | self.content.files = [] 65 | for filename in self.content.objects: 66 | self.content.files.append(filename.name) 67 | 68 | # Update name 69 | self.information.name = self.content.objects[0].name.replace(".py", "") 70 | 71 | self.content.files = [] 72 | for filename in self.content.objects: 73 | self.content.files.append(filename.name) 74 | -------------------------------------------------------------------------------- /custom_components/hacs/repositories/theme.py: -------------------------------------------------------------------------------- 1 | """Class for themes in HACS.""" 2 | from .repository import HacsRepository, register_repository_class 3 | 4 | 5 | @register_repository_class 6 | class HacsTheme(HacsRepository): 7 | """Themes in HACS.""" 8 | 9 | category = "theme" 10 | 11 | def __init__(self, full_name): 12 | """Initialize.""" 13 | super().__init__() 14 | self.information.full_name = full_name 15 | self.information.category = self.category 16 | self.content.path.remote = "themes" 17 | self.content.path.local = f"{self.system.config_path}/themes" 18 | self.content.single = True 19 | 20 | async def validate_repository(self): 21 | """Validate.""" 22 | # Run common validation steps. 23 | await self.common_validate() 24 | 25 | # Custom step 1: Validate content. 26 | self.content.objects = await self.repository_object.get_contents( 27 | self.content.path.remote, self.ref 28 | ) 29 | if not isinstance(self.content.objects, list): 30 | self.validate.errors.append("Repostitory structure not compliant") 31 | 32 | self.content.files = [] 33 | for filename in self.content.objects: 34 | self.content.files.append(filename.name) 35 | 36 | # Handle potential errors 37 | if self.validate.errors: 38 | for error in self.validate.errors: 39 | if not self.system.status.startup: 40 | self.logger.error(error) 41 | return self.validate.success 42 | 43 | async def registration(self): 44 | """Registration.""" 45 | if not await self.validate_repository(): 46 | return False 47 | 48 | # Run common registration steps. 49 | await self.common_registration() 50 | 51 | # Set name 52 | self.information.name = self.content.objects[0].name.replace(".yaml", "") 53 | 54 | async def update_repository(self): 55 | """Update.""" 56 | # Run common update steps. 57 | await self.common_update() 58 | 59 | # Get theme objects. 60 | self.content.objects = await self.repository_object.get_contents( 61 | self.content.path.remote, self.ref 62 | ) 63 | 64 | self.content.files = [] 65 | for filename in self.content.objects: 66 | self.content.files.append(filename.name) 67 | 68 | # Update name 69 | self.information.name = self.content.objects[0].name.replace(".yaml", "") 70 | 71 | self.content.files = [] 72 | for filename in self.content.objects: 73 | self.content.files.append(filename.name) 74 | -------------------------------------------------------------------------------- /custom_components/hacs/sensor.py: -------------------------------------------------------------------------------- 1 | """Sensor platform for HACS.""" 2 | # pylint: disable=unused-argument 3 | from integrationhelper import Logger 4 | from homeassistant.helpers.entity import Entity 5 | from .hacsbase import Hacs as hacs 6 | from .const import DOMAIN, VERSION, NAME_LONG, PROJECT_URL 7 | 8 | 9 | async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): 10 | """Setup sensor platform.""" 11 | async_add_entities([HACSSensor()]) 12 | 13 | 14 | async def async_setup_entry(hass, config_entry, async_add_devices): 15 | """Setup sensor platform.""" 16 | async_add_devices([HACSSensor()]) 17 | 18 | 19 | class HACSSensor(Entity): 20 | """HACS Sensor class.""" 21 | 22 | def __init__(self): 23 | """Initialize.""" 24 | self._state = None 25 | self.logger = Logger("hacs.sensor") 26 | self.has_update = [] 27 | self.repositories = [] 28 | 29 | async def async_update(self): 30 | """Update the sensor.""" 31 | if hacs.system.status.background_task: 32 | return 33 | 34 | self.repositories = [] 35 | 36 | for repository in hacs.repositories: 37 | if repository.pending_upgrade: 38 | self.repositories.append(repository) 39 | self._state = len(self.repositories) 40 | 41 | @property 42 | def unique_id(self): 43 | """Return a unique ID to use for this sensor.""" 44 | return ( 45 | "0717a0cd-745c-48fd-9b16-c8534c9704f9-bc944b0f-fd42-4a58-a072-ade38d1444cd" 46 | ) 47 | 48 | @property 49 | def name(self): 50 | """Return the name of the sensor.""" 51 | return "hacs" 52 | 53 | @property 54 | def state(self): 55 | """Return the state of the sensor.""" 56 | return self._state 57 | 58 | @property 59 | def icon(self): 60 | """Return the icon of the sensor.""" 61 | return "mdi:package" 62 | 63 | @property 64 | def unit_of_measurement(self): 65 | """Return the unit of measurement.""" 66 | return "pending update(s)" 67 | 68 | @property 69 | def device_state_attributes(self): 70 | """Return attributes for the sensor.""" 71 | data = [] 72 | for repository in self.repositories: 73 | data.append( 74 | { 75 | "name": repository.information.full_name, 76 | "installed version": repository.display_installed_version, 77 | "available version": repository.display_available_version, 78 | } 79 | ) 80 | return {"repositories": data} 81 | 82 | @property 83 | def device_info(self): 84 | return { 85 | "identifiers": {(DOMAIN, self.unique_id)}, 86 | "name": NAME_LONG, 87 | "sw_version": VERSION, 88 | "manufacturer": PROJECT_URL, 89 | } 90 | -------------------------------------------------------------------------------- /custom_components/hacs/services.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | install: 3 | description: This is NOT intended to be used here, this is intended for developers! 4 | fields: 5 | repository: 6 | description: The repository ID 7 | example: '"123456789"' 8 | register: 9 | description: This is NOT intended to be used here, this is intended for developers! 10 | fields: 11 | repository: 12 | description: The full name of the repository 13 | example: 'developer/repo' 14 | repository_type: 15 | description: The repository type 16 | example: 'plugin' 17 | -------------------------------------------------------------------------------- /customize.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | switch.armoire_cuisine: 3 | friendly_name: Armoire Cuisine 4 | icon: mdi:power-socket-eu 5 | binary_sensor.lave_vaisaille: 6 | friendly_name: "lave vaisselle" 7 | binary_sensor.lave_linge: 8 | friendly_name: "lave linge" 9 | binary_sensor.seche_linge: 10 | friendly_name: "sêche linge" 11 | -------------------------------------------------------------------------------- /docs/ABB-SA-S4.16.2.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/ABB-SA-S4.16.2.1.jpg -------------------------------------------------------------------------------- /docs/BE-TA55P2.01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/BE-TA55P2.01.jpg -------------------------------------------------------------------------------- /docs/BE-TA55P6.01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/BE-TA55P6.01.jpg -------------------------------------------------------------------------------- /docs/DMB1T.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/DMB1T.png -------------------------------------------------------------------------------- /docs/Fibsmokesensor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Fibsmokesensor.jpg -------------------------------------------------------------------------------- /docs/Floor1D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Floor1D.PNG -------------------------------------------------------------------------------- /docs/Floor1N.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Floor1N.PNG -------------------------------------------------------------------------------- /docs/JRA-S4.230.5.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/JRA-S4.230.5.1.jpg -------------------------------------------------------------------------------- /docs/MDT_AKH-040002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/MDT_AKH-040002.jpg -------------------------------------------------------------------------------- /docs/Nightmode.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Nightmode.PNG -------------------------------------------------------------------------------- /docs/PD11-KNX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/PD11-KNX.jpg -------------------------------------------------------------------------------- /docs/Page1D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Page1D.PNG -------------------------------------------------------------------------------- /docs/Page1N.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Page1N.PNG -------------------------------------------------------------------------------- /docs/Page2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Page2.png -------------------------------------------------------------------------------- /docs/PowersupplyKNX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/PowersupplyKNX.jpg -------------------------------------------------------------------------------- /docs/SA-S12.16.5.1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/SA-S12.16.5.1.jpg -------------------------------------------------------------------------------- /docs/Synology.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Synology.jpg -------------------------------------------------------------------------------- /docs/TA55P8.01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/TA55P8.01.jpg -------------------------------------------------------------------------------- /docs/TXA207C.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/TXA207C.jpg -------------------------------------------------------------------------------- /docs/TYA628C.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/TYA628C.jpg -------------------------------------------------------------------------------- /docs/Visaton.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/Visaton.jpg -------------------------------------------------------------------------------- /docs/ZAS_White.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/ZAS_White.png -------------------------------------------------------------------------------- /docs/be-gt2tw.01_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/be-gt2tw.01_1.jpg -------------------------------------------------------------------------------- /docs/behringer-xenyx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/behringer-xenyx.jpg -------------------------------------------------------------------------------- /docs/chromecast-audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/chromecast-audio.png -------------------------------------------------------------------------------- /docs/daymode.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/daymode.PNG -------------------------------------------------------------------------------- /docs/fibaro_intercom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/fibaro_intercom.jpg -------------------------------------------------------------------------------- /docs/fibaromultisensor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/fibaromultisensor.png -------------------------------------------------------------------------------- /docs/fibarorgbw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/fibarorgbw.png -------------------------------------------------------------------------------- /docs/ip router.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/ip router.jpg -------------------------------------------------------------------------------- /docs/lepy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/lepy.jpg -------------------------------------------------------------------------------- /docs/mdtakh080002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/mdtakh080002.jpg -------------------------------------------------------------------------------- /docs/nas.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/nas.PNG -------------------------------------------------------------------------------- /docs/page1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/page1.PNG -------------------------------------------------------------------------------- /docs/presentation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/presentation.jpg -------------------------------------------------------------------------------- /docs/seitlich_rund.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/seitlich_rund.png -------------------------------------------------------------------------------- /docs/speaker-front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/speaker-front.png -------------------------------------------------------------------------------- /docs/speaker_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/speaker_back.png -------------------------------------------------------------------------------- /docs/theben DM4T.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/theben DM4T.jpg -------------------------------------------------------------------------------- /docs/txm620d_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/docs/txm620d_1.jpg -------------------------------------------------------------------------------- /entities/cameras/entree.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: generic 3 | name: Entree 4 | framerate: 25 5 | still_image_url: !secret entree_still 6 | stream_source: !secret entree_stream 7 | -------------------------------------------------------------------------------- /entities/cameras/erika.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: generic 3 | name: Erika 4 | framerate: 25 5 | still_image_url: !secret erika_still 6 | stream_source: !secret erika_stream 7 | -------------------------------------------------------------------------------- /entities/cameras/garage_back.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: generic 3 | name: Garage 4 | framerate: 25 5 | still_image_url: !secret garage_back_still 6 | stream_source: !secret garage_back_stream 7 | -------------------------------------------------------------------------------- /entities/cameras/garage_front.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: generic 3 | name: garagef 4 | framerate: 25 5 | still_image_url: !secret garage_front_still 6 | stream_source: !secret garage_front_stream 7 | -------------------------------------------------------------------------------- /entities/cameras/intercom_synology.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: synology 3 | url: !secret synology_cam_ip 4 | username: !secret synology_username 5 | password: !secret synology_password 6 | timeout: 15 7 | verify_ssl: false 8 | -------------------------------------------------------------------------------- /entities/cameras/reserve.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: generic 3 | name: Reserve 4 | framerate: 25 5 | still_image_url: !secret reserve_still 6 | stream_source: !secret reserve_stream 7 | -------------------------------------------------------------------------------- /entities/cameras/technique.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: generic 3 | name: Technique 4 | framerate: 25 5 | still_image_url: !secret technique_still 6 | stream_source: !secret technique_stream 7 | -------------------------------------------------------------------------------- /entities/device_trackers/fritz.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: fritz 3 | interval_seconds: 30 4 | # consider_home: 180 5 | -------------------------------------------------------------------------------- /entities/device_trackers/unify.yaml.old: -------------------------------------------------------------------------------- 1 | 2 | # platform: unifi 3 | # username: !secret unify_id 4 | # password: !secret unify_secret 5 | # site_id: !secret unify_siteid 6 | # detection_time: 240 7 | # verify_ssl: false -------------------------------------------------------------------------------- /entities/groups/Syno.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Syno_MISC: 3 | name: Syno General 4 | entities: 5 | - sensor.memory_usage_real 6 | - sensor.network_up 7 | - sensor.network_down 8 | 9 | Disk_status: 10 | name: Disk Status 11 | icon: mdi:chart-pie 12 | entities: 13 | - sensor.status_sda 14 | - sensor.status_sdb 15 | - sensor.status_sdc 16 | - sensor.status_sdd 17 | 18 | Smart_status: 19 | name: S.M.A.R.T Status 20 | entities: 21 | - sensor.status_smart_sda 22 | - sensor.status_smart_sdb 23 | - sensor.status_smart_sdc 24 | - sensor.status_smart_sdd 25 | 26 | Disk_Temperatures: 27 | name: Temperatures 28 | entities: 29 | - sensor.temperature_sda 30 | - sensor.temperature_sdb 31 | - sensor.temperature_sdc 32 | - sensor.temperature_sdd 33 | 34 | CPU_info: 35 | name: CPU Load 36 | entities: 37 | - sensor.cpu_load_total 38 | - sensor.cpu_load_user 39 | - sensor.cpu_load_other 40 | - sensor.cpu_load_system 41 | 42 | volume_info: 43 | name: Disk Volume 44 | entities: 45 | - sensor.total_size_volume_1 46 | - sensor.used_space_volume_1 47 | - sensor.volume_used_volume_1 48 | -------------------------------------------------------------------------------- /entities/groups/device_location.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Device_location: 3 | name: Device Location 4 | entities: 5 | - device_tracker.ipaddeadonno 6 | - device_tracker.iphone 7 | - device_tracker.andreasapple_watch 8 | -------------------------------------------------------------------------------- /entities/groups/network_devices.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Network_devices_AP: 3 | name: Access Points 4 | entities: 5 | - sensor.apbureau 6 | - sensor.apchambrarr 7 | - sensor.aplocaltech 8 | 9 | Network_devices_Tablets: 10 | name: Tablets 11 | entities: 12 | - sensor.ipad_1 13 | - sensor.lenovoliving 14 | - sensor.xorokeller 15 | - sensor.xorokummer 16 | - camera.lenovo 17 | - camera.entree 18 | 19 | Network_devices_PCs: 20 | name: PCs 21 | entities: 22 | - sensor.rinalt 23 | - sensor.swordlt 24 | 25 | Network_devices_mobile: 26 | name: Mobile Devices 27 | entities: 28 | - device_tracker.andreasplewatch 29 | - device_tracker.iphonederina 30 | - device_tracker.iphoneadonno 31 | 32 | Network_devices_misc: 33 | name: Network Devices Misc 34 | entities: 35 | - device_tracker.xp710 36 | - device_tracker.syno 37 | - device_tracker.knxip 38 | - device_tracker.fourmicro 39 | - device_tracker.fourvapeur 40 | - device_tracker.tvbox_living 41 | - device_tracker.chaudiere 42 | - device_tracker.hassiotest 43 | - binary_sensor.porte_1ard1 44 | 45 | Network_devices_router: 46 | name: Router 47 | entities: 48 | - sensor.fritz_box 49 | - sensor.isp_connection 50 | - sensor.speedtest_download 51 | - sensor.speedtest_upload 52 | - sensor.speedtest_ping 53 | -------------------------------------------------------------------------------- /entities/groups/phone.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | phone: 3 | name: Telephone 4 | icon: mdi:phone-classic 5 | entities: 6 | - sensor.phone_line_status 7 | -------------------------------------------------------------------------------- /entities/groups/radio.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | Residence Radio: 3 | name: Haus Radio 4 | entities: 5 | - switch.RDOLiving 6 | - input_number.volume_radio_living 7 | - switch.rdochparents 8 | - input_number.volume_radio_parents 9 | # - input_slider.volume_radio_haus 10 | -------------------------------------------------------------------------------- /entities/input_select/clothes_dryer.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | clothes_dryer: 3 | name: clothes_dryer_status 4 | options: 5 | - Running 6 | - Idle 7 | - Clean 8 | -------------------------------------------------------------------------------- /entities/input_select/dish_washer.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | dish_washer_status: 3 | name: dish_washer_status 4 | options: 5 | - Running 6 | - Idle 7 | - Clean 8 | -------------------------------------------------------------------------------- /entities/input_select/post_box.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | postbox: 3 | name: postbox_status 4 | options: 5 | - Mail-empty 6 | - Mail 7 | - Box 8 | -------------------------------------------------------------------------------- /entities/input_select/washing_machine.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | washing_machine: 3 | name: wahsing_machine_status 4 | options: 5 | - Running 6 | - Idle 7 | - Clean 8 | -------------------------------------------------------------------------------- /entities/locks/front_door.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: nuki 3 | host: !secret nuki_ip 4 | port: 8080 5 | token: !secret nuki_token 6 | -------------------------------------------------------------------------------- /entities/sensors/darksky.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: darksky 3 | api_key: !secret dks_api_key 4 | monitored_conditions: 5 | - summary 6 | - icon 7 | - nearest_storm_distance 8 | - temperature 9 | - cloud_cover 10 | - humidity 11 | - ozone 12 | -------------------------------------------------------------------------------- /entities/sensors/fritzbox_callmonitor.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: fritzbox_callmonitor 3 | name: Phone 4 | username: !secret fritz_user 5 | password: !secret fritz_password 6 | phonebook: 0 7 | prefixes: 8 | - '+49' 9 | - '+4989' 10 | - '089' 11 | - '+352' 12 | -------------------------------------------------------------------------------- /entities/sensors/fritzbox_netmonitor.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: fritzbox_netmonitor 3 | -------------------------------------------------------------------------------- /entities/sensors/synologydsm.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: synologydsm 3 | host: !secret synology_ip 4 | username: !secret synology_username 5 | password: !secret synology_password 6 | monitored_conditions: 7 | - cpu_total_load 8 | - memory_real_usage 9 | - network_up 10 | - disk_status 11 | - disk_smart_status 12 | - disk_temp 13 | - network_down 14 | - volume_size_used 15 | - volume_size_total 16 | - cpu_system_load 17 | - cpu_user_load 18 | - cpu_other_load 19 | - volume_percentage_used 20 | - volume_device_type 21 | - volume_disk_temp_avg 22 | -------------------------------------------------------------------------------- /entities/sensors/time_date.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The time and date (time_date) sensor platform. 3 | # Has the time in various formats, the date, or both. 4 | # 5 | # This is usefull for displaying and automation purposes. 6 | # 7 | # https://www.home-assistant.io/components/time_date/ 8 | # 9 | platform: time_date 10 | display_options: 11 | - 'time' 12 | - 'date' 13 | - 'date_time' 14 | - 'date_time_iso' 15 | - 'time_date' 16 | - 'time_utc' 17 | - 'beat' 18 | -------------------------------------------------------------------------------- /entities/sensors/ups.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: nut 3 | name: UPS Name 4 | host: 192.168.1.201 5 | port: 3493 6 | alias: ups_name 7 | username: admin 8 | password: sdfh514dfsh65 9 | resources: 10 | - ups.load 11 | - ups.realpower.nominal 12 | - input.voltage 13 | - battery.runtime 14 | -------------------------------------------------------------------------------- /entities/sensors/version_available.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The version sensor platform is displaying the 3 | # available version online. 4 | # 5 | # https://www.home-assistant.io/components/sensor.version/ 6 | # 7 | platform: version 8 | name: version_available 9 | source: hassio 10 | image: qemux86-64 11 | -------------------------------------------------------------------------------- /entities/sensors/version_current.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The version sensor platform is displaying the 3 | # current version. 4 | # 5 | # https://www.home-assistant.io/components/sensor.version/ 6 | # 7 | platform: version 8 | name: version_current 9 | -------------------------------------------------------------------------------- /entities/tts/google_translate.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The Google Text-to-Speech platform use Google Text-to-Speech engine to 3 | # read a text with a natural sounding voice(s). 4 | # 5 | # https://www.home-assistant.io/components/google_translate/ 6 | # 7 | platform: google_translate 8 | service_name: google_translate_say 9 | 10 | # Set the default voice language. 11 | language: 'en' 12 | 13 | # Cache voice files to a local storage. 14 | cache: true 15 | 16 | # Path to a location for caching the tts files. 17 | cache_dir: /tmp/tts 18 | 19 | # Time to hold (in seconds) the voice data inside memory for fast play 20 | # on a media player. (min 60, max 57600) 21 | time_memory: 300 22 | -------------------------------------------------------------------------------- /entities/vera/vera.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | vera_controller_url: !secret veraip 3 | exclude: [39, 40, 45, 48, 47, 48, 42, 44, 51, 52, 56] 4 | -------------------------------------------------------------------------------- /entities/weather/darksky.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | platform: darksky 3 | api_key: !secret dks_api_key 4 | -------------------------------------------------------------------------------- /entities/zones/parents.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Koerich 3 | latitude: !secret latitude_koerich 4 | longitude: !secret longitude_Koerich 5 | icon: mdi:home-variant 6 | -------------------------------------------------------------------------------- /entities/zones/work_a.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Kadaster 3 | latitude: !secret latitude_kad 4 | longitude: !secret longitude_kad 5 | icon: mdi:worker 6 | -------------------------------------------------------------------------------- /entities/zones/work_r.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: BBT 3 | latitude: !secret latitude_bbt 4 | longitude: !secret longitude_bbt 5 | radius: 100 6 | icon: mdi:school 7 | -------------------------------------------------------------------------------- /esphome/Switch_DishWasher.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | substitutions: 3 | plug_name: switch_dishwasher 4 | ip_address: !secret esphome_switch_dishwasher_static_ip 5 | 6 | <<: !include includes/gosund_sp1.yaml 7 | 8 | sensor: 9 | - platform: hlw8012 10 | sel_pin: 11 | number: GPIO12 12 | inverted: true 13 | cf_pin: GPIO04 14 | cf1_pin: GPIO05 15 | current: 16 | name: "${plug_name}_Amperage" 17 | unit_of_measurement: A 18 | filters: 19 | - calibrate_linear: 20 | # Map 0.0 (from sensor) to 0.0 (true value) 21 | - 0.0 -> 0.0 22 | - 10.4 -> 8.233 23 | - 0.2 -> 0.155 24 | 25 | voltage: 26 | name: "${plug_name}_Voltage" 27 | unit_of_measurement: V 28 | filters: 29 | - calibrate_linear: 30 | # Map 0.0 (from sensor) to 0.0 (true value) 31 | - 619.5 -> 241.7 32 | - 611.9 -> 236.3 33 | 34 | power: 35 | name: "${plug_name}_Wattage" 36 | unit_of_measurement: W 37 | filters: 38 | - calibrate_linear: 39 | # Map 0.0 (from sensor) to 0.0 (true value) 40 | - 0.0 -> 2.0 41 | - 113.8 -> 21.2 42 | - 11450 -> 1960 43 | 44 | id: "${plug_name}_Wattage" 45 | change_mode_every: 4 46 | update_interval: 5s 47 | - platform: total_daily_energy 48 | name: "${plug_name}_Total Daily Energy" 49 | power_id: "${plug_name}_Wattage" 50 | filters: 51 | # Multiplication factor from W to kW is 0.001 52 | - multiply: 0.001 53 | unit_of_measurement: kWh 54 | 55 | binary_sensor: 56 | - platform: template 57 | name: Lave Vaisaille 58 | filters: 59 | - delayed_off: 20s 60 | lambda: |- 61 | return id(${plug_name}_Wattage).state > 5; 62 | -------------------------------------------------------------------------------- /esphome/circulation_pump.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | substitutions: 3 | plug_name: circulation_pump 4 | ip_address: !secret esphome_viessmann_static_ip 5 | 6 | esphome: 7 | name: ${plug_name} 8 | platform: ESP8266 9 | board: esp01_1m 10 | 11 | <<: !include includes/network.yaml 12 | 13 | logger: 14 | baud_rate: 0 15 | 16 | uart: 17 | rx_pin: RX 18 | baud_rate: 4800 19 | 20 | # Enable Home Assistant API 21 | api: 22 | password: !secret ESP_API_PWD 23 | reboot_timeout: 24 | hours: 1 25 | ota: 26 | password: !secret ESP_OTA_PWD 27 | 28 | time: 29 | - platform: homeassistant 30 | id: homeassistant_time 31 | 32 | sensor: 33 | - platform: wifi_signal 34 | name: ${plug_name}_wifi_signal 35 | update_interval: 10s 36 | - platform: uptime 37 | name: ${plug_name}_uptime 38 | - platform: cse7766 39 | current: 40 | name: "${plug_name}_current" 41 | voltage: 42 | name: "${plug_name}_voltage" 43 | power: 44 | name: "${plug_name}_power" 45 | 46 | text_sensor: 47 | - platform: version 48 | name: ${plug_name}_esphome_version 49 | 50 | switch: 51 | - platform: restart 52 | name: ${plug_name}_restart 53 | - platform: gpio 54 | name: ${plug_name}_relay 55 | id: relay 56 | pin: GPIO12 57 | # restore_mode: ALWAYS_ON 58 | on_turn_on: 59 | - light.turn_on: led 60 | - delay: 180s 61 | - switch.turn_off: relay 62 | on_turn_off: 63 | - light.turn_off: led 64 | 65 | binary_sensor: 66 | - platform: gpio 67 | id: button 68 | pin: 69 | number: GPIO0 70 | mode: INPUT_PULLUP 71 | inverted: true 72 | on_press: 73 | - switch.toggle: relay 74 | 75 | output: 76 | - platform: esp8266_pwm 77 | id: blue_led 78 | pin: 79 | number: GPIO13 80 | inverted: true 81 | 82 | light: 83 | - platform: monochromatic 84 | output: blue_led 85 | id: led 86 | -------------------------------------------------------------------------------- /esphome/includes/gosund_sp1.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | esphome: 3 | name: ${plug_name} 4 | platform: ESP8266 5 | board: esp8285 6 | # Enable logging 7 | logger: 8 | # Enable Web server 9 | <<: !include network.yaml 10 | 11 | api: 12 | password: !secret ESP_API_PWD 13 | ota: 14 | password: !secret ESP_OTA_PWD 15 | time: 16 | - platform: homeassistant 17 | id: homeassistant_time 18 | 19 | binary_sensor: 20 | - platform: gpio 21 | pin: 22 | number: GPIO3 23 | inverted: true 24 | name: "${plug_name}_button" 25 | 26 | switch: 27 | - platform: gpio 28 | name: "${plug_name}_Relay" 29 | pin: GPIO14 30 | restore_mode: ALWAYS_ON 31 | - platform: gpio 32 | name: "${plug_name}_LED_Blue" 33 | pin: GPIO1 34 | inverted: true 35 | restore_mode: ALWAYS_OFF 36 | - platform: gpio 37 | name: "${plug_name}_LED_Red" 38 | pin: GPIO13 39 | inverted: true 40 | restore_mode: ALWAYS_OFF 41 | sensor: 42 | # Extra sensor to keep track of plug uptime 43 | - platform: uptime 44 | name: ${plug_name}_Uptime Sensor 45 | -------------------------------------------------------------------------------- /esphome/includes/network.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | web_server: 3 | port: 80 4 | # Enable Home Assistant API 5 | wifi: 6 | ssid: !secret Wifi_SSID 7 | password: !secret Wifi_PWD 8 | manual_ip: 9 | static_ip: ${ip_address} 10 | gateway: !secret wifi_gateway 11 | subnet: !secret wifi_subnet 12 | dns1: !secret wifi_dns1 13 | # use_address: 192.168.1.105 14 | -------------------------------------------------------------------------------- /esphome/saltlevel_sensor.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | esphome: 3 | name: saltlevel_sensor 4 | platform: ESP8266 5 | board: d1_mini 6 | 7 | wifi: 8 | ssid: !secret Wifi_SSID 9 | password: !secret Wifi_PWD 10 | 11 | # Enable logging 12 | logger: 13 | 14 | # Enable Home Assistant API 15 | 16 | api: 17 | password: !secret ESP_API_PWD 18 | reboot_timeout: 19 | hours: 1 20 | ota: 21 | password: !secret ESP_OTA_PWD 22 | 23 | time: 24 | - platform: homeassistant 25 | id: homeassistant_time 26 | switch: 27 | - platform: restart 28 | name: "Saltlevel Sensor Restart" 29 | sensor: 30 | - platform: ultrasonic 31 | trigger_pin: D1 32 | echo_pin: D2 33 | name: "Saltlevel" 34 | # update_interval: 12h 35 | update_interval: 10s 36 | 37 | - platform: dht 38 | pin: D3 39 | model: DHT11 40 | temperature: 41 | name: "Garage Temperature" 42 | humidity: 43 | name: "Garage Humidity" 44 | update_interval: 10s 45 | -------------------------------------------------------------------------------- /esphome/switch_clothesdryer.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | substitutions: 3 | plug_name: switch_clothesdryer 4 | ip_address: !secret esphome_switch_clothesdryer_static_ip 5 | 6 | <<: !include includes/gosund_sp1.yaml 7 | 8 | sensor: 9 | - platform: hlw8012 10 | sel_pin: 11 | number: GPIO12 12 | inverted: true 13 | cf_pin: GPIO04 14 | cf1_pin: GPIO05 15 | current: 16 | name: "${plug_name}_Amperage" 17 | unit_of_measurement: A 18 | filters: 19 | - calibrate_linear: 20 | # Map 0.0 (from sensor) to 0.0 (true value) 21 | - 0.0 -> 0.01 22 | - 10.5 -> 8.2 23 | 24 | voltage: 25 | name: "${plug_name}_Voltage" 26 | unit_of_measurement: V 27 | filters: 28 | - calibrate_linear: 29 | # Map 0.0 (from sensor) to 0.0 (true value) 30 | - 0.0 -> 0.0 31 | - 622.5 -> 240.8 32 | - 617.0 -> 238.8 33 | - 612.7 -> 237.4 34 | 35 | power: 36 | name: "${plug_name}_Wattage" 37 | unit_of_measurement: W 38 | filters: 39 | - calibrate_linear: 40 | # Map 0.0 (from sensor) to 0.0 (true value) 41 | - 0.0 -> 1.4 42 | - 4.1 -> 2.0 43 | - 10463 -> 1800 44 | 45 | id: "${plug_name}_Wattage" 46 | change_mode_every: 4 47 | update_interval: 10s 48 | - platform: total_daily_energy 49 | name: "${plug_name}_Total Daily Energy" 50 | power_id: "${plug_name}_Wattage" 51 | filters: 52 | # Multiplication factor from W to kW is 0.001 53 | - multiply: 0.001 54 | unit_of_measurement: kWh 55 | 56 | binary_sensor: 57 | - platform: template 58 | name: Seche Linge 59 | filters: 60 | - delayed_off: 100s 61 | lambda: |- 62 | return id(${plug_name}_Wattage).state > 8; 63 | -------------------------------------------------------------------------------- /esphome/switch_radio_parents.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | substitutions: 3 | plug_name: switch_radio_parents 4 | # Higher value gives lower watt readout 5 | current_res: "0.00221" 6 | # Lower value gives lower voltage readout 7 | voltage_div: "955" 8 | ip_address: !secret esphome_switch_radio_parents_static_ip 9 | 10 | <<: !include includes/gosund_sp1.yaml 11 | 12 | sensor: 13 | - platform: hlw8012 14 | sel_pin: 15 | number: GPIO12 16 | inverted: true 17 | cf_pin: GPIO04 18 | cf1_pin: GPIO05 19 | current: 20 | name: "${plug_name}_Amperage" 21 | unit_of_measurement: A 22 | # filters: 23 | # - calibrate_linear: 24 | # # Map 0.0 (from sensor) to 0.0 (true value) 25 | # - 0.0 -> 0.0 26 | 27 | voltage: 28 | name: "${plug_name}_Voltage" 29 | unit_of_measurement: V 30 | # filters: 31 | # - calibrate_linear: 32 | # Map 0.0 (from sensor) to 0.0 (true value) 33 | 34 | power: 35 | name: "${plug_name}_Wattage" 36 | unit_of_measurement: W 37 | # filters: 38 | # - calibrate_linear: 39 | # Map 0.0 (from sensor) to 0.0 (true value) 40 | 41 | id: "${plug_name}_Wattage" 42 | change_mode_every: 4 43 | update_interval: 10s 44 | - platform: total_daily_energy 45 | name: "${plug_name}_Total Daily Energy" 46 | power_id: "${plug_name}_Wattage" 47 | filters: 48 | # Multiplication factor from W to kW is 0.001 49 | - multiply: 0.001 50 | unit_of_measurement: kWh 51 | -------------------------------------------------------------------------------- /esphome/switch_washingmachine.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | substitutions: 3 | plug_name: switch_washingmachine 4 | ip_address: !secret esphome_switch_washingmachine_static_ip 5 | 6 | <<: !include includes/gosund_sp1.yaml 7 | 8 | sensor: 9 | - platform: hlw8012 10 | sel_pin: 11 | number: GPIO12 12 | inverted: true 13 | cf_pin: GPIO04 14 | cf1_pin: GPIO05 15 | current: 16 | name: "${plug_name}_Amperage" 17 | unit_of_measurement: A 18 | filters: 19 | - calibrate_linear: 20 | # Map 0.0 (from sensor) to 0.0 (true value) 21 | - 0.0 -> 0.01 22 | - 10.0 -> 8.22 23 | 24 | voltage: 25 | name: "${plug_name}_Voltage" 26 | unit_of_measurement: V 27 | filters: 28 | - calibrate_linear: 29 | # Map 0.0 (from sensor) to 0.0 (true value) 30 | - 0.0 -> 0.0 31 | - 588.8 -> 241.8 32 | - 580 -> 236 33 | 34 | power: 35 | name: "${plug_name}_Wattage" 36 | unit_of_measurement: W 37 | filters: 38 | - calibrate_linear: 39 | # Map 0.0 (from sensor) to 0.0 (true value) 40 | - 0.0 -> 1.4 41 | - 41.4 -> 9 42 | - 10674 -> 1942 43 | 44 | id: "${plug_name}_Wattage" 45 | change_mode_every: 4 46 | update_interval: 10s 47 | - platform: total_daily_energy 48 | name: "${plug_name}_Total Daily Energy" 49 | power_id: "${plug_name}_Wattage" 50 | filters: 51 | # Multiplication factor from W to kW is 0.001 52 | - multiply: 0.001 53 | unit_of_measurement: kWh 54 | 55 | binary_sensor: 56 | - platform: template 57 | name: Lave Linge 58 | filters: 59 | - delayed_off: 20s 60 | lambda: |- 61 | return id(${plug_name}_Wattage).state > 8; 62 | -------------------------------------------------------------------------------- /esphome/ventilation.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | substitutions: 3 | plug_name: switch_ventilation 4 | # Higher value gives lower watt readout 5 | current_res: "0.00226" 6 | # Lower value gives lower voltage readout 7 | voltage_div: "930" 8 | ip_address: !secret esphome_switch_ventilation_static_ip 9 | 10 | <<: !include includes/gosund_sp1.yaml 11 | 12 | sensor: 13 | - platform: hlw8012 14 | sel_pin: 15 | number: GPIO12 16 | inverted: true 17 | cf_pin: GPIO04 18 | cf1_pin: GPIO05 19 | current: 20 | name: "${plug_name}_Amperage" 21 | unit_of_measurement: A 22 | filters: 23 | - calibrate_linear: 24 | # # Map 0.0 (from sensor) to 0.0 (true value) 25 | - 0.0 -> 0.0 26 | - 10.4 -> 8.26 27 | 28 | voltage: 29 | name: "${plug_name}_Voltage" 30 | unit_of_measurement: V 31 | filters: 32 | - calibrate_linear: 33 | # # Map 0.0 (from sensor) to 0.0 (true value) 34 | - 0.0 -> 0.0 35 | - 607.6 -> 241.1 36 | - 598.4 -> 237.5 37 | 38 | power: 39 | name: "${plug_name}_Wattage" 40 | unit_of_measurement: W 41 | filters: 42 | - calibrate_linear: 43 | # Map 0.0 (from sensor) to 0.0 (true value) 44 | - 0.0 -> 1.3 45 | - 113.8 -> 21.2 46 | - 11118 -> 1936 47 | 48 | id: "${plug_name}_Wattage" 49 | change_mode_every: 4 50 | update_interval: 2s 51 | - platform: total_daily_energy 52 | name: "${plug_name}_Total Daily Energy" 53 | power_id: "${plug_name}_Wattage" 54 | filters: 55 | # Multiplication factor from W to kW is 0.001 56 | - multiply: 0.001 57 | unit_of_measurement: kWh 58 | 59 | binary_sensor: 60 | - platform: template 61 | name: Ventitlation 62 | filters: 63 | - delayed_off: 10s 64 | lambda: |- 65 | return id(${plug_name}_Wattage).state > 5; 66 | -------------------------------------------------------------------------------- /integrations/automation.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # This handles the loading of my automations 3 | # 4 | # https://www.home-assistant.io/docs/automation/ 5 | # 6 | automation: !include_dir_list ../automations 7 | -------------------------------------------------------------------------------- /integrations/camera.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The camera component allows you to use IP cameras with Home Assistant. 3 | # This loads up all my camera configurations 4 | # 5 | # https://www.home-assistant.io/components/camera/ 6 | # 7 | camera: !include_dir_list ../entities/cameras 8 | -------------------------------------------------------------------------------- /integrations/cloud.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The Home Assistant Cloud allows you to quickly integrate your local 3 | # Home Assistant with various cloud services like Amazon Alexa and Google Home. 4 | # 5 | # https://www.home-assistant.io/components/cloud/ 6 | # 7 | cloud: 8 | -------------------------------------------------------------------------------- /integrations/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The config component enables a set of additional capabilities to manage and 3 | # configure certain parts of Home Assistant straight from the frontend. 4 | # 5 | # https://www.home-assistant.io/components/config/ 6 | # 7 | config: 8 | base_url: !secret fritz_base_url 9 | -------------------------------------------------------------------------------- /integrations/device_tracker.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Home Assistant can get information from various devices. These can be used, 3 | # for example, to track the location of your mobile phone. 4 | # 5 | # This configuration loads up my device trackers 6 | # 7 | # https://www.home-assistant.io/components/device_tracker/ 8 | # 9 | device_tracker: !include_dir_list ../entities/device_trackers 10 | -------------------------------------------------------------------------------- /integrations/frontend.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Configures the official Home Assistant frontend. 3 | # 4 | # https://www.home-assistant.io/components/frontend/ 5 | # 6 | frontend: 7 | # Version of the JavaScript to serve to clients. 8 | javascript_version: auto 9 | 10 | # List of additional resources to load (latest javascript) 11 | extra_html_url: [] 12 | 13 | # List of additional resource to load (es5 javascript) 14 | extra_html_url_es5: [] 15 | 16 | # We can define additional/custom themes for the frontend here. 17 | themes: !include_dir_merge_named ../themes 18 | -------------------------------------------------------------------------------- /integrations/group.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Groups allow the user to combine multiple entities into one. 3 | # This loads up my custom created groups 4 | # 5 | # https://www.home-assistant.io/components/group/ 6 | # 7 | group: !include_dir_merge_named ../entities/groups 8 | -------------------------------------------------------------------------------- /integrations/hacs.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | hacs: 3 | token: !secret github_token 4 | -------------------------------------------------------------------------------- /integrations/history.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The history component will track everything that is going on within 3 | # Home Assistant and allows the user to browse through it. 4 | # 5 | # https://www.home-assistant.io/components/history/ 6 | # 7 | history: 8 | -------------------------------------------------------------------------------- /integrations/http.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | http: 3 | ip_ban_enabled: true 4 | login_attempts_threshold: 5 5 | use_x_forwarded_for: true 6 | trusted_proxies: 172.30.33.8 7 | -------------------------------------------------------------------------------- /integrations/influxdb.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # I store a lot of sensor data into InfluxDB, which allows me to query 3 | # a longer history with ease. I use the Community Hass.io add-on for this, 4 | # combined with the Community Hass.io Grafana add-on for the graphs. 5 | # 6 | # https://github.com/hassio-addons/addon-influxdb 7 | # https://github.com/hassio-addons/addon-grafana 8 | # https://www.home-assistant.io/components/influxdb/ 9 | # 10 | influxdb: 11 | 12 | # This is the Hass.io add-on slug, allowing a direct connection to the addon. 13 | host: a0d7b954-influxdb 14 | port: 8086 15 | 16 | # The database name to store all the metrics in. 17 | database: homeassistant2 18 | 19 | # Authentication credentials. 20 | username: !secret influxdb_user 21 | password: !secret influxdb_secret 22 | 23 | # Max number of retries in case of a failure. 24 | max_retries: 3 25 | 26 | # The list of attribute names which should be reported as tags 27 | # and not fields to InfluxDB. 28 | # I've added `device_class` tag and the Z-Wave `node_id`. 29 | 30 | # I like to specify (whitelist) each thing I'd like to put 31 | # into InfluxDB, to keep the database as clean as possible. 32 | 33 | # include: 34 | # entities: !include_dir_merge_list ../influxdb 35 | -------------------------------------------------------------------------------- /integrations/input_select.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | input_select: !include_dir_merge_named ../entities/input_select 3 | -------------------------------------------------------------------------------- /integrations/ios.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The Home Assistant for iOS app offers a companion app for iOS which 3 | # is deeply integrated into both Home Assistant and iOS. 4 | # 5 | # https://www.home-assistant.io/components/ios/ 6 | # https://www.home-assistant.io/docs/ecosystem/ios/ 7 | # 8 | ios: 9 | push: 10 | categories: 11 | - name: 'rollo' 12 | identifier: 'rollo' 13 | actions: 14 | - identifier: 'STOP_ROLLO' 15 | title: 'Stop' 16 | destructive: true 17 | activationMode: 'background' 18 | - name: 'quiet' 19 | identifier: 'quiet' 20 | actions: 21 | - identifier: 'QUIET_DISABLE' 22 | title: 'Disable' 23 | activationMode: 'background' 24 | - name: 'lockdoor' 25 | identifier: 'lockdoor' 26 | actions: 27 | - identifier: 'LOCK_DOOR' 28 | title: 'Lock The Door' 29 | destructive: true 30 | activationMode: 'background' 31 | -------------------------------------------------------------------------------- /integrations/knx.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | knx: 3 | -------------------------------------------------------------------------------- /integrations/lock.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | lock: !include_dir_list ../entities/locks 3 | -------------------------------------------------------------------------------- /integrations/logbook.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The logbook component provides a different perspective on the history of 3 | # your house by showing all the changes that happened to your house in 4 | # reverse chronological order. 5 | # 6 | # https://www.home-assistant.io/components/logbook/ 7 | # 8 | logbook: 9 | -------------------------------------------------------------------------------- /integrations/logger.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | logger: 3 | default: warn 4 | logs: 5 | pychromecast.socket_client: fatal 6 | -------------------------------------------------------------------------------- /integrations/lovelace.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Lovelace component for confuring the UI. 3 | # 4 | # I use Lovelace in manual YAML mode. Pro: I can have my Lovelace in Git 5 | # with easy. Cons: I do not have access to the Lovelace UI editor. 6 | # 7 | # https://www.home-assistant.io/lovelace/ 8 | # https://www.home-assistant.io/lovelace/yaml-mode/ 9 | # 10 | lovelace: 11 | mode: yaml 12 | -------------------------------------------------------------------------------- /integrations/map.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # This offers a map on the frontend to display the location of tracked devices. 3 | # 4 | # https://www.home-assistant.io/components/map/ 5 | # 6 | map: 7 | -------------------------------------------------------------------------------- /integrations/mobile_app.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # 3 | # The Mobile App component allows Home Assistant mobile apps to easily 4 | # integrate with Home Assistant. 5 | # 6 | # https://www.home-assistant.io/components/mobile_app/ 7 | # 8 | mobile_app: 9 | -------------------------------------------------------------------------------- /integrations/mqtt.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | mqtt: 3 | broker: !secret mqttip 4 | -------------------------------------------------------------------------------- /integrations/old_packages: -------------------------------------------------------------------------------- 1 | ../components/packages -------------------------------------------------------------------------------- /integrations/packages/gn.yaml.txt: -------------------------------------------------------------------------------- 1 | script: 2 | 3 | goodnight: 4 | alias: Good Night 5 | sequence: 6 | - service: light.turn_off 7 | entity_id: hall_entree 8 | - service: light.turn_off 9 | entity_id: cave_couloir 10 | - service: light.turn_off 11 | entity_id: garage 12 | - service: light.turn_off 13 | entity_id: wc_cave 14 | - service: light.turn_off 15 | entity_id: technique 16 | - service: light.turn_off 17 | entity_id: spots_escalier_0-1 18 | #1er# 19 | - service: light.turn_off 20 | entity_id: buro 21 | - service: light.turn_off 22 | entity_id: led_sam 23 | - service: light.turn_off 24 | entity_id: led_living 25 | - service: light.turn_off 26 | entity_id: led_cuisine 27 | - service: light.turn_off 28 | entity_id: lampe_wc 29 | - service: light.turn_off 30 | entity_id: spots_escalier_0-1_bis 31 | - service: light.turn_off 32 | entity_id: couloir_premier 33 | - service: light.turn_off 34 | entity_id: lumiere_sam 35 | - service: light.turn_off 36 | entity_id: spots_sam 37 | - service: light.turn_off 38 | entity_id: spots_living 39 | - service: light.turn_off 40 | entity_id: centre_living 41 | - service: light.turn_off 42 | entity_id: spots_cuisine 43 | - service: light.turn_off 44 | entity_id: spots_cuisine_ilot 45 | - service: homeassistant.turn_off 46 | entity_id: light_sam 47 | - service: homeassistant.turn_off 48 | entity_id: light_living 49 | - service: media_player.turn_off 50 | data: 51 | entity_id: media_player.chromecastkeller -------------------------------------------------------------------------------- /integrations/packages/homekit.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The HomeKit component allows you to forward entities from Home Assistant 3 | # to Apple HomeKit, so they can be controlled from Apple’s Home app and Siri. 4 | # 5 | # https://www.home-assistant.io/components/homekit 6 | # 7 | homekit: 8 | filter: 9 | include_domains: 10 | - light 11 | # - switch 12 | # - cover 13 | - lock 14 | - media_player 15 | -------------------------------------------------------------------------------- /integrations/packages/knx.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | switch: 3 | 4 | - platform: knx 5 | name: day_night 6 | address: '4/2/16' 7 | 8 | ############################# 9 | ### RDC /cave 10 | ############################# 11 | 12 | - platform: knx 13 | name: Prise Devant 14 | address: '1/5/0' 15 | state_address: '1/5/1' 16 | - platform: knx 17 | name: Prise Arriere 18 | address: '1/5/2' 19 | state_address: '1/5/3' 20 | 21 | ############################# 22 | ### 1etage 23 | ############################# 24 | 25 | - platform: knx 26 | name: Armoire Sam 27 | address: '2/5/0' 28 | state_address: '2/5/1' 29 | - platform: knx 30 | name: Armoire Cuisine 31 | address: '2/5/2' 32 | state_address: '2/5/3' 33 | - platform: knx 34 | name: Lampe Canape 35 | address: '2/5/4' 36 | state_address: '2/5/5' 37 | - platform: knx 38 | name: "Armoire TV" 39 | address: '2/5/6' 40 | state_address: '2/5/7' 41 | - platform: knx 42 | name: Terrasse 43 | address: '2/5/8' 44 | state_address: '2/5/9' 45 | - platform: knx 46 | name: Prise sol Escalier 47 | address: '2/5/10' 48 | state_address: '2/5/11' 49 | - platform: knx 50 | name: Prise Buero arriere 51 | address: '2/5/12' 52 | state_address: '2/5/13' 53 | 54 | ############################# 55 | ### 2etage 56 | ############################# 57 | 58 | - platform: knx 59 | name: prise Ch enfant arr 60 | address: '3/5/0' 61 | state_address: '3/5/1' 62 | 63 | - platform: knx 64 | name: prise Ch enfant av 65 | address: '3/5/2' 66 | state_address: '3/5/3' 67 | 68 | ############################# 69 | ### 3etage /Combles 70 | ############################# 71 | -------------------------------------------------------------------------------- /integrations/packages/knx_groups.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | group: 3 | Rolladen Premier: 4 | name: Rolladen 1er 5 | entities: 6 | - cover.1er_etage 7 | - automation.fermer_jalousies_au_soir 8 | - cover.kueche_links_a 9 | - cover.kueche_links_m 10 | - cover.kueche_rechts_m 11 | - cover.kueche_rechts_a 12 | - cover.living 13 | - cover.buero 14 | 15 | Rolladen Keller: 16 | name: Rolladen cave 17 | entities: 18 | - cover.cave 19 | - automation.fermer_jalousies_au_soir 20 | - cover.local_technique_porte 21 | - cover.local_technique_fenetre 22 | - cover.garage_fenetre 23 | - cover.garage_porte 24 | Rolladen Chambres: 25 | name: Rolladen 2eme 26 | entities: 27 | - cover.2eme_etage 28 | - automation.fermer_jalousies_au_soir 29 | - cover.chac_enfant_route 30 | - cover.chac_enfant_arriere 31 | - cover.sdb_parents 32 | - cover.chac_parents 33 | 34 | Light 1er: 35 | name: Light 36 | entities: 37 | - light.spots_escalier_01 38 | - light.spots_escalier_01_bis 39 | - light.spots_escalier_12 40 | - light.couloir_1er 41 | - light.spots_Millieux 42 | - light.buro 43 | - light.lampe_wc 44 | 45 | Light Living: 46 | name: Living 47 | entities: 48 | - light.centre_Living 49 | - light.spots_living 50 | - light.led_living 51 | - switch.lampe_canape 52 | - switch.armoire_tv 53 | 54 | Light sam: 55 | name: Salle A Manger 56 | entities: 57 | - light.spots_sam 58 | - light.lumiere_sam 59 | - light.led_sam 60 | - switch.armoire_sam 61 | 62 | Light cuisine: 63 | name: Cuisine 64 | entities: 65 | - light.spots_cuisine 66 | - light.spots_cuisine_ilot 67 | - light.led_cuisine 68 | - switch.armoire_cuisine 69 | 70 | sdb_enfants: 71 | name: SDB Enfants 72 | entities: 73 | - light.Mirroir_SDB_Enfants 74 | - light.Lumiere_SDB_E 75 | 76 | chambre_parents: 77 | name: Parents 78 | entities: 79 | - light.LED_Parents 80 | - light.Lit_G 81 | - light.Lit_D 82 | - light.Spots_Parents 83 | - light.led_dressing 84 | - light.mirroir_parents 85 | - light.dressing 86 | 87 | sdb_parents: 88 | name: SDB Parents 89 | entities: 90 | - light.Spots_SDB_P 91 | - light.Spots_Douche_P 92 | - light.Mirroir_SDB_P 93 | - light.LED_SDB_P 94 | - climate.SDB_Parents 95 | 96 | chambre_enfant_avant: 97 | name: Enfant Av 98 | entities: 99 | - light.chambre_av 100 | 101 | chambre_enfant_arriere: 102 | name: Enfant Ar 103 | entities: 104 | - light.chambre_ar 105 | -------------------------------------------------------------------------------- /integrations/packages/knx_sensors.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | sensor: 3 | - platform: knx 4 | name: Helligkeit Treppe oben 5 | state_address: '4/2/15' 6 | type: 'illuminance' 7 | 8 | # Example configuration.yaml entry 9 | binary_sensor: 10 | - platform: knx 11 | state_address: '4/2/19' 12 | name: Bm_flur_status 13 | 14 | -------------------------------------------------------------------------------- /integrations/packages/noel.txt: -------------------------------------------------------------------------------- 1 | automation: 2 | - alias: arbre de noel soir on 3 | initial_state: True 4 | trigger: 5 | platform: numeric_state 6 | entity_id: sun.sun 7 | value_template: '{{ state.attributes.elevation }}' 8 | below: -1 9 | action: 10 | - service: switch.turn_on 11 | entity_id: switch.prise_sol_escalier 12 | - service: switch.turn_on 13 | entity_id: switch.prise_devant 14 | - service: notify.ios_iphoneadonno 15 | data: 16 | title: "Arbre on soir" 17 | message: Arbre on soir 18 | 19 | 20 | - alias: arbre de noel soir off 21 | initial_state: True 22 | trigger: 23 | platform: time 24 | at: '01:00:00' 25 | action: 26 | - service: switch.turn_off 27 | entity_id: switch.prise_sol_escalier 28 | - service: switch.turn_off 29 | entity_id: switch.prise_devant 30 | 31 | 32 | - alias: arbre de noel matin off 33 | initial_state: True 34 | trigger: 35 | platform: numeric_state 36 | entity_id: sun.sun 37 | value_template: '{{ state.attributes.elevation }}' 38 | above: 1 39 | condition: 40 | condition: time 41 | weekday: 42 | - mon 43 | - tue 44 | - wed 45 | - thu 46 | - fri 47 | action: 48 | - service: switch.turn_off 49 | entity_id: switch.prise_sol_escalier 50 | - service: switch.turn_off 51 | entity_id: switch.prise_devant 52 | - service: notify.ios_iphoneadonno 53 | data: 54 | title: "Arbre off morning" 55 | message: Arbre off morning 56 | 57 | - alias: arbre de noel matin on 58 | initial_state: True 59 | trigger: 60 | platform: time 61 | at: '06:00:00' 62 | condition: 63 | condition: and 64 | conditions: 65 | - condition: time 66 | weekday: 67 | - mon 68 | - tue 69 | - wed 70 | - thu 71 | - fri 72 | - condition: sun 73 | before: sunrise 74 | before_offset: "-1:00:00" 75 | 76 | action: 77 | - service: switch.turn_on 78 | entity_id: switch.prise_sol_escalier 79 | - service: switch.turn_on 80 | entity_id: switch.prise_devant -------------------------------------------------------------------------------- /integrations/packages/sensor.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Sensors are gathering information about states and conditions. 3 | # 4 | # This loads up my sensor configurations 5 | # 6 | # https://www.home-assistant.io/components/sensor/ 7 | # 8 | sensor: !include_dir_list ../sensors 9 | -------------------------------------------------------------------------------- /integrations/packages/wg.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | ######################################################################################################### 3 | automation: 4 | - id: Welcome Sergio 5 | alias: welcome Sergio 6 | initial_state: true 7 | hide_entity: true 8 | trigger: 9 | - platform: state 10 | entity_id: device_tracker.iphonedesergio_3 11 | to: home 12 | condition: 13 | - condition: time 14 | after: 08:00:00 15 | before: '20:00:00' 16 | - condition: state 17 | entity_id: switch.quiet_mode 18 | state: 'off' 19 | action: 20 | - service: tts.google_translate 21 | entity_id: media_player.chromecast_messages 22 | data: 23 | message: Benvenuto. Sergio 24 | language: it 25 | - service: notify.ios_iphoneadonno 26 | data: 27 | title: "Intruder" 28 | message: Sergio is connected to the WIFI 29 | 30 | # - id: Welcome Caroline 31 | # alias: welcome Caroline 32 | # initial_state: True 33 | # hide_entity: true 34 | # trigger: 35 | # - platform: state 36 | # entity_id: device_tracker.iphonedesergio_3 37 | # to: home 38 | # condition: 39 | # - condition: time 40 | # after: 08:00:00 41 | # before: '20:00:00' 42 | # - condition: state 43 | # entity_id: switch.quiet_mode 44 | # state: 'off' 45 | # action: 46 | # - service: tts.google_translate 47 | # entity_id: media_player.chromecast_messages 48 | # data: 49 | # message: Benvenuto. Sergio 50 | # language: it 51 | # - service: notify.ios_iphoneadonno 52 | # data: 53 | # title: "Intruder" 54 | # message: Sergio is connected to the WIFI 55 | -------------------------------------------------------------------------------- /integrations/panel_iframe.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The panel_iframe support allows you to add additional panels to your 3 | # Home Assistant frontend. The panels are listed in the sidebar and can 4 | # contain external resources like the web frontend of your router, 5 | # your monitoring system, or your media server. 6 | # 7 | # This configration loads up all my panels 8 | # 9 | # https://www.home-assistant.io/components/panel_iframe/ 10 | # 11 | panel_iframe: !include_dir_merge_named ../../panels/iframes 12 | -------------------------------------------------------------------------------- /integrations/recorder.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The recorder component is storing details in a database which 3 | # then are handled by the history component. 4 | # 5 | # https://www.home-assistant.io/components/recorder/ 6 | # 7 | recorder: 8 | # The number of days of history to keep in the recorder database 9 | purge_keep_days: 3 10 | 11 | # How often (in days) the purge task runs 12 | purge_interval: 1 13 | 14 | exclude: 15 | entities: 16 | - sun.sun # Don't record sun data 17 | - sensor.date 18 | - sensor.time 19 | -------------------------------------------------------------------------------- /integrations/script.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The script component allows users to specify a sequence of actions to be 3 | # executed by Home Assistant when turned on. 4 | # 5 | # This loads up my custom scripts. 6 | # 7 | # https://www.home-assistant.io/components/script/ 8 | # 9 | script: !include_dir_merge_named ../scripts 10 | -------------------------------------------------------------------------------- /integrations/sensor.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Sensors are gathering information about states and conditions. 3 | # 4 | # This loads up my sensor configurations 5 | # 6 | # https://www.home-assistant.io/components/sensor/ 7 | # 8 | sensor: !include_dir_list ../entities/sensors 9 | -------------------------------------------------------------------------------- /integrations/speedtestdotnet.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The speedtestdotnet integration uses the Speedtest.net 3 | # web service to measure network bandwidth performance. 4 | # 5 | # https://www.home-assistant.io/components/speedtestdotnet/ 6 | # 7 | speedtestdotnet: 8 | scan_interval: 9 | minutes: 15 10 | -------------------------------------------------------------------------------- /integrations/stream.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The stream component provides a way to proxy live streams through 3 | # Home Assistant. 4 | # 5 | # https://www.home-assistant.io/components/stream/ 6 | # 7 | stream: 8 | -------------------------------------------------------------------------------- /integrations/sun.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The sun component will use your current location to track if the sun is 3 | # above or below the horizon. 4 | # 5 | # https://www.home-assistant.io/components/sun/ 6 | # 7 | sun: 8 | # The (physical) elevation of your location, in meters above sea level. 9 | elevation: !secret zone_home_elevation 10 | -------------------------------------------------------------------------------- /integrations/system_health.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The System Health component provides an API to offer information 3 | # on the system and its components. 4 | # 5 | # https://www.home-assistant.io/components/system_health/ 6 | # 7 | system_health: 8 | -------------------------------------------------------------------------------- /integrations/tts.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Text-to-Speech (TTS) enables Home Assistant to speak to you. 3 | # This loads up my TTS service configurations 4 | # 5 | # https://www.home-assistant.io/components/tts/ 6 | # 7 | tts: !include_dir_list ../entities/tts 8 | -------------------------------------------------------------------------------- /integrations/updater.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # The updater component will check daily for new releases. 3 | # It will show a badge in the frontend if a new version is found. 4 | # As Hass.io has its own schedule for release it doesn’t make sense 5 | # to use this component on Hass.io. Nevertheless, I'm still including it, 6 | # since I like to know something is upcoming :) 7 | # 8 | # https://www.home-assistant.io/components/updater/ 9 | # 10 | # For more information, please see: 11 | # https://home-assistant.io/blog/2016/10/25/explaining-the-updater/ 12 | # 13 | updater: 14 | # I chose to share some information with the Home Assistant developers. 15 | # It will help them to prioritize the development. 16 | # That why this option is enabled. 17 | reporting: true 18 | 19 | # I'm also reporting a list of components that I'm using. 20 | include_used_components: true 21 | -------------------------------------------------------------------------------- /integrations/vera.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | vera: # !include_dir_list ../entities/vera 3 | vera_controller_url: !secret veraip 4 | exclude: [39, 40, 45, 48, 47, 48, 42, 44, 51, 52, 56] 5 | -------------------------------------------------------------------------------- /integrations/weather.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # 3 | # This handles the loading of my weather platforms. 4 | # 5 | # https://www.home-assistant.io/components/weather/ 6 | # 7 | weather: !include_dir_list ../entities/weather 8 | -------------------------------------------------------------------------------- /integrations/zone.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Zones allow you to specify certain regions on earth (for now). 3 | # 4 | # https://www.home-assistant.io/components/zone/ 5 | # 6 | zone: !include_dir_list ../entities/zones 7 | -------------------------------------------------------------------------------- /lovelace/resources/banner_card.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/banner-card/banner-card.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/resources/button-card.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/button-card/button-card.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/resources/card_tools.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/lovelace-card-tools/card-tools.js 3 | type: js 4 | -------------------------------------------------------------------------------- /lovelace/resources/compact_custom_header.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/compact-custom-header/compact-custom-header.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/resources/cover_element.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/cover-element/cover-element-bundle.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/resources/decluttering-card.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/decluttering-card/decluttering-card.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/resources/layout_card.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/lovelace-layout-card/layout-card.js 3 | type: js 4 | -------------------------------------------------------------------------------- /lovelace/resources/lovelace_swipe_navigation.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/lovelace-swipe-navigation/swipe-navigation.js 3 | type: js 4 | -------------------------------------------------------------------------------- /lovelace/resources/mini_garph_card.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/mini-graph-card/mini-graph-card-bundle.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/resources/mini_media_player.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/mini-media-player/mini-media-player-bundle.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/resources/monster_card.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/monster-card/monster-card.js 3 | type: js 4 | -------------------------------------------------------------------------------- /lovelace/resources/plan_coordinates.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/plan-coordinates/plan-coordinates.js 3 | type: js 4 | -------------------------------------------------------------------------------- /lovelace/resources/slider_entity_row.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/lovelace-slider-entity-row/slider-entity-row.js 3 | type: js 4 | -------------------------------------------------------------------------------- /lovelace/resources/swipe_card.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | url: /community_plugin/swipe-card/swipe-card.js 3 | type: module 4 | -------------------------------------------------------------------------------- /lovelace/sections/machine_status.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | cards: 3 | - type: custom:button-card 4 | entity: input_select.washing_machine 5 | show_state: false 6 | show_icon: true 7 | show_name: false 8 | state: 9 | - value: 'Clean' 10 | icon: mdi:washing-machine 11 | color: rgb(255, 0, 0) 12 | styles: 13 | icon: 14 | - animation: blink 2s ease infinite 15 | - value: 'Running' 16 | icon: mdi:washing-machine 17 | color: rgb(152,251,152) 18 | - value: 'Idle' 19 | icon: mdi:washing-machine 20 | color: rgb(169,169,169) 21 | tap_action: 22 | action: more-info 23 | 24 | - type: custom:button-card 25 | entity: input_select.clothes_dryer 26 | show_icon: true 27 | show_name: false 28 | state: 29 | - value: 'Clean' 30 | icon: mdi:tumble-dryer 31 | color: rgb(255, 0, 0) 32 | styles: 33 | icon: 34 | - animation: blink 2s ease infinite 35 | - value: 'Running' 36 | icon: mdi:tumble-dryer 37 | color: rgb(152,251,152) 38 | - value: 'Idle' 39 | icon: mdi:tumble-dryer 40 | color: rgb(169,169,169) 41 | tap_action: 42 | action: more-info 43 | - type: custom:button-card 44 | entity: input_select.dish_washer_status 45 | show_icon: true 46 | show_name: false 47 | state: 48 | - value: 'Clean' 49 | icon: mdi:dishwasher 50 | color: rgb(255, 0, 0) 51 | styles: 52 | icon: 53 | - animation: blink 2s ease infinite 54 | - value: 'Running' 55 | icon: mdi:dishwasher 56 | color: rgb(152,251,152) 57 | - value: 'Idle' 58 | icon: mdi:dishwasher 59 | color: rgb(169,169,169) 60 | tap_action: 61 | action: more-info 62 | - type: custom:button-card 63 | entity: input_select.postbox 64 | show_icon: true 65 | show_name: false 66 | state: 67 | - value: 'Mail-empty' 68 | icon: mdi:mailbox-outline 69 | color: rgb(169,169,169) 70 | - value: 'Mail' 71 | icon: mdi:email-alert 72 | color: rgb(255, 0, 0) 73 | - value: 'Box' 74 | icon: mdi:package-variant-closed 75 | color: rgb(152,251,152) 76 | tap_action: 77 | action: more-info 78 | - type: custom:button-card 79 | entity: switch.switch_ventilation_relay 80 | show_icon: true 81 | show_name: false 82 | state: 83 | - value: 'on' 84 | icon: mdi:fan 85 | color: rgb(152,251,152) 86 | spin: true 87 | - value: 'off' 88 | icon: mdi:fan-off 89 | # color: rgb(152,251,152) 90 | tap_action: 91 | action: toggle 92 | 93 | type: horizontal-stack 94 | -------------------------------------------------------------------------------- /lovelace/sections/radio.yaml: -------------------------------------------------------------------------------- 1 | # --- 2 | # type: custom:banner-card 3 | # heading: "Radio" 4 | # entities: 5 | # - switch.rdoliving 6 | # - input_number.volume_radio_living 7 | # - switch.rdochparents 8 | # - input_number.volume_radio_parents 9 | --- 10 | entities: 11 | - switch.rdoliving 12 | - input_number.volume_radio_living 13 | - switch.rdochparents 14 | - input_number.volume_radio_parents 15 | title: Radio 16 | type: entities 17 | -------------------------------------------------------------------------------- /lovelace/views/cameras.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | badges: [] 3 | title: cameras 4 | icon: mdi:camera 5 | cards: 6 | - camera_view: live 7 | entity: camera.entree 8 | type: picture-entity 9 | - camera_view: live 10 | entity: camera.reserve 11 | type: picture-entity 12 | - camera_view: live 13 | entity: camera.erika 14 | type: picture-entity 15 | - camera_view: live 16 | entity: camera.technique 17 | type: picture-entity 18 | - camera_view: live 19 | entity: camera.garage 20 | type: picture-entity 21 | - camera_view: live 22 | entity: camera.garagef 23 | type: picture-entity 24 | -------------------------------------------------------------------------------- /lovelace/views/floor_0.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | icon: 'mdi:numeric-0-box-multiple-outline' 3 | id: 1 4 | title: Cave 5 | cards: 6 | 7 | - entities: 8 | - entity: cover.cave 9 | name: Cave Global 10 | - label: Local Technique 11 | style: 12 | height: 3px 13 | type: section 14 | - entity: cover.local_technique_fenetre 15 | icon: 'mdi:format-align-justify' 16 | name: Local Technique Fenêtre 17 | type: 'custom:slider-entity-row' 18 | - entity: binary_sensor.local_technique_fenetre 19 | - entity: cover.local_technique_porte 20 | icon: 'mdi:format-align-justify' 21 | name: Local Technique Porte 22 | type: 'custom:slider-entity-row' 23 | - entity: binary_sensor.local_technique_porte 24 | - label: Garage 25 | style: 26 | height: 3px 27 | type: section 28 | - entity: cover.garage_fenetre 29 | icon: 'mdi:format-align-justify' 30 | name: Garage Fenêtre 31 | type: 'custom:slider-entity-row' 32 | - entity: binary_sensor.garage_porte 33 | - entity: cover.garage_porte 34 | icon: 'mdi:format-align-justify' 35 | name: Garage Porte 36 | type: 'custom:slider-entity-row' 37 | - entity: binary_sensor.garage_fenetre 38 | - entity: binary_sensor.garage 39 | - entity: binary_sensor.reserve 40 | - entity: binary_sensor.entree 41 | show_header_toggle: false 42 | theme: Backend-selected 43 | title: Rolladen 44 | type: entities 45 | - cards: 46 | - entities: 47 | - entity: light.hall_entree 48 | name: Eingang 49 | - entity: light.cave_couloir 50 | name: Flur 51 | - entity: light.technique 52 | name: Technik 53 | - entity: light.wc_cave 54 | name: WC 55 | type: entities 56 | - entities: 57 | - entity: light.reserve 58 | name: Reserve 59 | - entity: light.garage 60 | name: Garage 61 | - entity: light.lum_ext_avant 62 | name: Front 63 | - entity: light.lamp_ext_arr 64 | name: Garten 65 | - entity: light.spots_escalier_0_1 66 | icon: 'mdi:stairs' 67 | name: Treppen 0 - 1 68 | - entity: light.spots_escalier_0_1_bis 69 | icon: /local/treppe_bis.png 70 | name: Treppen 0 - 1 Lamper 71 | type: entities 72 | type: horizontal-stack 73 | - entities: 74 | - entity: switch.circulation_pump_relay 75 | - entity: sensor.circulation_pump_power 76 | - entity: sensor.circulation_pump_current 77 | - entity: sensor.circulation_pump_voltage 78 | - entity: sensor.circulation_pump_wifi_signal 79 | - entity: switch.circulation_pump_restart 80 | show_header_toggle: false 81 | title: Circulation-Viessmann 82 | type: entities 83 | -------------------------------------------------------------------------------- /lovelace/views/floor_3.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | cards: 3 | - !include ../sections/radio.yaml 4 | - cards: 5 | - entities: 6 | - entity: light.escalier_lumieres_centrale 7 | icon: 'mdi:ceiling-light' 8 | name: Escalier 9 | - entity: light.combles 10 | icon: 'mdi:spotlight-beam' 11 | name: Speicher 12 | - entity: light.local_technique 13 | icon: 'mdi:water-pump' 14 | name: Technik 15 | icon: ceiling-light 16 | title: Licht 17 | type: entities 18 | 19 | type: vertical-stack 20 | icon: 'mdi:numeric-3-box-multiple-outline' 21 | id: 4 22 | title: 3rd 23 | -------------------------------------------------------------------------------- /lovelace/views/floor_plans.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | icon: 'mdi:floor-plan' 3 | id: 0 4 | panel: true 5 | title: Floorplan 6 | cards: 7 | - type: 'custom:layout-card' 8 | layout: horizontal 9 | cards: 10 | - cards: 11 | - !include ../sections/machine_status.yaml 12 | - card: 13 | entities: 14 | - entity: light.lit_d 15 | name: Andrea 16 | tap_action: 17 | action: toggle 18 | - entity: light.lit_g 19 | name: Rina 20 | tap_action: 21 | action: toggle 22 | type: glance 23 | conditions: 24 | - entity: switch.quiet_mode 25 | state: 'on' 26 | type: conditional 27 | - camera_view: live 28 | entity: camera.intercom 29 | type: picture-entity 30 | - entities: 31 | - entity: device_tracker.iphoneadonno 32 | name: Andrea 33 | - entity: device_tracker.rinas_iphone 34 | name: Rina 35 | title: Presence 36 | type: glance 37 | - !include ../sections/radio.yaml 38 | - type: custom:banner-card 39 | heading: "Temperatures" 40 | row_size: 4 41 | entities: 42 | - sensor.eingang 43 | - sensor.buero 44 | - sensor.living 45 | - sensor.kueche 46 | - sensor.kind2 47 | - sensor.flur_og 48 | - sensor.kind1 49 | - sensor.eltern 50 | - sensor.sdb_eltern 51 | - sensor.sdb_kinder 52 | - sensor.speicher 53 | type: vertical-stack 54 | - !include ../floor_plans/plan_0.yaml 55 | - !include ../floor_plans/plan_1.yaml 56 | - !include ../floor_plans/plan_2.yaml 57 | -------------------------------------------------------------------------------- /lovelace/views/housecontrol.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | icon: 'mdi:wrench' 3 | badges: [] 4 | cards: 5 | 6 | - entity: sensor.saltlevel 7 | max: 0.45 8 | min: 0.03 9 | name: Salt Level 10 | severity: 11 | green: 0 12 | red: 0.38 13 | yellow: 0.26 14 | theme: default 15 | type: gauge 16 | -------------------------------------------------------------------------------- /lovelace/views/network_devices.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | icon: 'mdi:network' 3 | title: Network Devices 4 | cards: 5 | 6 | - entities: 7 | - entity: device_tracker.aplocaltechnique 8 | name: Cave 9 | - entity: device_tracker.apbureau 10 | name: Living 11 | - entity: device_tracker.apchambrearr 12 | name: Deuxième 13 | title: Access Points 14 | type: glance 15 | - cards: 16 | - content: ' ' 17 | title: Speedtest 18 | type: markdown 19 | - entity: sensor.speedtest_ping 20 | hours_to_show: 48 21 | line_color: '#039be5' 22 | name: Ping 23 | type: sensor 24 | - cards: 25 | - entity: sensor.speedtest_download 26 | hours_to_show: 48 27 | line_color: '#039be5' 28 | name: Down 29 | type: sensor 30 | - entity: sensor.speedtest_upload 31 | hours_to_show: 48 32 | line_color: '#039be5' 33 | name: UP 34 | type: sensor 35 | type: horizontal-stack 36 | type: vertical-stack 37 | - entities: 38 | - entity: device_tracker.ipaddeadonno 39 | name: iPad 40 | title: Tablettes 41 | type: glance 42 | -------------------------------------------------------------------------------- /lovelace/views/power_usage.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | badges: 3 | - binary_sensor.lave_linge 4 | - binary_sensor.seche_linge 5 | - binary_sensor.lave_vaisaille 6 | - binary_sensor.ventitlation 7 | cards: 8 | 9 | - cards: 10 | - entities: 11 | - sensor.switch_clothesdryer_wattage 12 | hours_to_show: 4 13 | points_per_hour: 30 14 | type: 'custom:mini-graph-card' 15 | - entities: 16 | - sensor.switch_washingmachine_wattage 17 | hours_to_show: 4 18 | points_per_hour: 60 19 | type: 'custom:mini-graph-card' 20 | - entities: 21 | - sensor.switch_dishwasher_wattage 22 | hours_to_show: 24 23 | type: 'custom:mini-graph-card' 24 | - entities: 25 | - sensor.switch_ventilation_wattage 26 | hours_to_show: 24 27 | type: 'custom:mini-graph-card' 28 | type: vertical-stack 29 | icon: 'mdi:power' 30 | title: powerusage 31 | -------------------------------------------------------------------------------- /lovelace/views/rgbw_leds.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | cards: 3 | 4 | - entities: 5 | - light.blue_65 6 | - light.blue_liv_35 7 | - light.rgbw_liv_31 8 | - light.rgbw_controller_sam_25 9 | - light.rgbw_sdb_61 10 | title: RGBW 11 | type: entities 12 | icon: 'mdi:led-strip' 13 | id: RGBW 14 | title: ARGBW 15 | -------------------------------------------------------------------------------- /panels/iframe/grafana.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # Adds an iframe panel to the Home Assistant frontend for the Grafana add-on. 3 | # This allows me to access Grafana straight from Home Asssitant's UI 4 | # 5 | # https://github.com/hassio-addons/addon-grafana#embedding-into-home-assistant 6 | # https://www.home-assistant.io/components/panel_iframe/ 7 | grafana: 8 | title: Grafana 9 | icon: mdi:chart-timeline 10 | url: !secret panel_iframe_grafana_url 11 | -------------------------------------------------------------------------------- /scripts/cover_close_with_goodnight.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | # rollo_close_gn: 3 | # alias: rollo close at goodnight 4 | # sequence: 5 | # - service: notify.ios_iphoneadonno 6 | # data: 7 | # title: "Closing Binds" 8 | # message: Closing blinds 9 | # data: 10 | # push: 11 | # badge: 0 12 | # category: 'rollo' 13 | # ############cave# 14 | # - service: cover.set_cover_position 15 | # data: 16 | # entity_id: cover.cave 17 | # position: 0 18 | # #############1er# 19 | # - service: cover.set_cover_position 20 | # data: 21 | # entity_id: cover.kueche_links_a 22 | # position: 22 23 | # - service: cover.set_cover_position 24 | # data: 25 | # entity_id: cover.kueche_links_m 26 | # position: 22 27 | # - service: cover.set_cover_position 28 | # data: 29 | # entity_id: cover.kueche_rechts_m 30 | # position: 22 31 | # - service: cover.set_cover_position 32 | # data: 33 | # entity_id: cover.kueche_rechts_a 34 | # position: 22 35 | # - service: cover.set_cover_position 36 | # data: 37 | # entity_id: cover.living 38 | # position: 45 39 | # - service: cover.set_cover_position 40 | # data: 41 | # entity_id: cover.buero 42 | # position: 22 43 | # ############2eme# 44 | # - service: cover.set_cover_position 45 | # data: 46 | # entity_id: cover.chac_enfant_route 47 | # position: 22 48 | # - service: cover.set_cover_position 49 | # data: 50 | # entity_id: cover.chac_enfant_arriere 51 | # position: 22 52 | # - service: cover.set_cover_position 53 | # data: 54 | # entity_id: cover.sdb_parents 55 | # position: 22 56 | # - service: cover.set_cover_position 57 | # data: 58 | # entity_id: cover.chac_parents 59 | # position: 10 60 | -------------------------------------------------------------------------------- /scripts/cover_first_floor_close.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | close1st: 3 | alias: close1st 4 | sequence: 5 | - service: cover.set_cover_position 6 | data: 7 | entity_id: cover.cuisine 8 | position: 22 9 | - service: cover.set_cover_position 10 | data: 11 | entity_id: cover.buero 12 | posistion: 22 13 | - service: cover.set_cover_position 14 | data: 15 | entity_id: cover.living 16 | position: 45 17 | -------------------------------------------------------------------------------- /scripts/cover_first_floor_open.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | open1st: 3 | alias: open1st 4 | sequence: 5 | - service: cover.open_cover 6 | entity_id: cover.1er_etage 7 | -------------------------------------------------------------------------------- /scripts/cover_kitchen_close.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | zuhi: 3 | alias: zuhi 4 | sequence: 5 | - service: cover.set_cover_position 6 | data: 7 | entity_id: cover.cuisine 8 | position: 22 9 | -------------------------------------------------------------------------------- /scripts/cover_kitchen_open.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | aufhi: 3 | alias: aufhi 4 | sequence: 5 | - service: cover.open_cover 6 | entity_id: cover.cuisine 7 | 8 | -------------------------------------------------------------------------------- /scripts/erika_slepp.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | erika_sleep: 3 | alias: erika sleep 4 | sequence: 5 | - delay: # supports milliseconds, seconds, minutes, hours, days 6 | seconds: 3 7 | - service: light.turn_on 8 | data: 9 | entity_id: 10 | - light.lit_d 11 | - light.lit_g 12 | - service: cover.set_cover_position 13 | data: 14 | entity_id: cover.chac_enfant_route 15 | position: 22 16 | - service: cover.set_cover_position 17 | data: 18 | entity_id: cover.chac_enfant_arriere 19 | position: 22 20 | - service: cover.set_cover_position 21 | data: 22 | entity_id: cover.sdb_parents 23 | position: 22 24 | - service: cover.set_cover_position 25 | data: 26 | entity_id: cover.chac_parents 27 | position: 10 28 | -------------------------------------------------------------------------------- /scripts/good_night.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | good_night: 3 | alias: good night 4 | sequence: 5 | - service: light.turn_off 6 | data: 7 | entity_id: group.all_lights 8 | - service: switch.turn_off 9 | data: 10 | entity_id: 11 | - switch.armoire_cuisine 12 | - switch.armoire_tv 13 | - switch.lampe_canape 14 | - switch.armoire_sam 15 | - switch.rdoliving 16 | - switch.prise_sol_escalier 17 | - switch.rdochparents 18 | - switch.terrasse 19 | - delay: # supports milliseconds, seconds, minutes, hours, days 20 | seconds: 3 21 | - service: light.turn_on 22 | data: 23 | entity_id: 24 | - light.lit_d 25 | - light.lit_g 26 | - light.spots_escalier_1_2 27 | - service: automation.trigger 28 | data: 29 | entity_id: automation.fermer_jalousies_au_soir 30 | - service: lock.lock 31 | entity_id: lock.home 32 | -------------------------------------------------------------------------------- /scripts/system_reboot.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | reboothouse: 3 | alias: neustart 4 | sequence: 5 | - service: homeassistant.restart 6 | -------------------------------------------------------------------------------- /scripts/tschau.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | tschau: 3 | alias: tschau 4 | sequence: 5 | - service: light.turn_off 6 | data: 7 | entity_id: group.all_lights 8 | - service: switch.turn_off 9 | data: 10 | entity_id: 11 | - switch.armoire_tv 12 | - switch.rdoliving 13 | - switch.rdochparents 14 | - switch.terrasse 15 | - service: cover.set_cover_position 16 | data: 17 | entity_id: cover.cave 18 | position: 0 19 | - delay: 20 | seconds: 3 21 | - service: light.turn_on 22 | entity_id: light.cave_couloir 23 | -------------------------------------------------------------------------------- /themes/PmxMononight.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | PmxMononight: 3 | # MyVariables 4 | base-hue: '220' # Controls the base (and accent) color hue (0-360) | 0=Red 60=Yellow 120=Green 180=Cyan 240=Blue 300=Magenta 360=Red 5 | base-sat: '16%' # Controls the saturation of the theme (0%-100%) | 0%=Grey 100%=Full Saturation 6 | # MyVar 7 | huesat: 'var(--base-hue), var(--base-sat),' 8 | # Primary Color 9 | primary-color: 'hsl(var(--huesat) 20%)' 10 | # Backgrounds 11 | primary-background-color: 'var(--primary-color)' 12 | secondary-background-color: 'hsl(var(--huesat) 16%)' 13 | paper-listbox-background-color: 'var(--primary-color)' 14 | paper-card-background-color: 'hsl(var(--huesat) 12%)' 15 | paper-dialog-background-color: 'var(--paper-card-background-color)' 16 | table-row-background-color: 'hsl(var(--huesat) 12%)' 17 | table-row-alternative-background-color: 'hsl(var(--huesat) 10%)' 18 | # Devider 19 | divider-color: 'hsla(0, 0%, 0%, 0)' 20 | dark-divider-opacity: '0' 21 | light-divider-opacity: '0' 22 | # Text colors 23 | primary-text-color: 'hsl(var(--huesat) 60%)' 24 | text-primary-color: 'hsl(var(--huesat) 60%)' 25 | secondary-text-color: 'hsl(var(--huesat) 60%)' 26 | disabled-text-color: 'hsl(var(--huesat) 70%)' 27 | sidebar-text_-_color: 'hsl(var(--huesat) 90%)' 28 | sidebar-text-color: 'hsl(var(--huesat) 90%)' 29 | paper-card-header-color: 'hsl(var(--base-hue), 90%, 50%)' 30 | # Text Adjustments 31 | paper-font-headline_-_letter-spacing: '-0.5px' 32 | paper-font-headline_-_font-weight: '500' 33 | paper-font-body1_-_font-weight: '500' 34 | # Nav Menu 35 | paper-listbox-color: 'hsl(var(--huesat) 50%)' 36 | paper-grey-50: 'hsl(var(--huesat) 50%)' 37 | paper-grey-200: 'hsla(var(--huesat) 26%)' 38 | # Paper card 39 | paper-item-icon-color: 'hsl(var(--huesat) 30%)' 40 | paper-item-icon-active-color: 'var(--paper-item-icon-color)' 41 | paper-item-icon_-_color: 'var(--paper-item-icon-color)' 42 | paper-item-selected_-_background-color: 'hsla(0, 0%, 0%, 0.2)' 43 | paper-tabs-selection-bar-color: 'hsla(0, 0%, 0%, 0.2)' 44 | # Labels 45 | label-badge-red: 'hsla(0, 0%, 0%, 0)' 46 | label-badge-border-color: 'var(--label-badge-red)' 47 | label-badge-background-color: 'var(--paper-card-background-color)' 48 | label-badge-text-color: 'var(--primary-text-color)' 49 | # Shadows 50 | shadow-elevation-2dp_-_box-shadow: 'inset 0px 0px 0px 4px hsl(var(--huesat) 18%)' 51 | shadow-elevation-16dp_-_box-shadow: 'inset 0px 0px 0px 4px hsl(var(--huesat) 28%)' 52 | # Switches 53 | paper-toggle-button-checked-button-color: 'hsl(var(--base-hue), 90%, 50%)' 54 | paper-toggle-button-checked-bar-color: 'hsl(var(--huesat) 25%)' 55 | paper-toggle-button-unchecked-button-color: 'hsl(var(--huesat) 25%)' 56 | paper-toggle-button-unchecked-bar-color: 'hsl(var(--huesat) 5%)' 57 | # Sliders 58 | paper-slider-knob-color: 'hsl(var(--base-hue), 90%, 50%)' 59 | paper-slider-knob-start-color: 'hsl(var(--base-hue), 80%, 25%)' 60 | paper-slider-pin-color: 'hsl(var(--base-hue), 90%, 50%)' 61 | paper-slider-active-color: 'hsl(var(--base-hue), 90%, 50%)' 62 | paper-slider-container-color: 'hsl(var(--huesat) 28%)' 63 | paper-slider-secondary-color: 'hsl(var(--huesat) 90%)' 64 | paper-slider-disabled-active-color: 'hsl(var(--base-hue), 80%, 25%)' 65 | paper-slider-disabled-secondary-color: 'hsl(var(--base-hue), 80%, 25%)' 66 | paper-dialog-color: 'hsl(var(--base-hue), 20%, 80%)' 67 | -------------------------------------------------------------------------------- /themes/darkcyan.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | darkcyan: 3 | # Main colors that can be changed 4 | primary-color: "#00bcd4" 5 | disabled-text-color: "#545454" 6 | divider-color: "rgba(255, 255, 255, 0.12)" 7 | paper-card-background-color: "#4e4e4e" 8 | paper-grey-200: "#191919" 9 | paper-item-icon-color: "#d3d3d3" 10 | paper-listbox-background-color: "#202020" 11 | paper-listbox-color: "#FFFFFF" 12 | primary-background-color: "#303030" 13 | primary-text-color: "#cfcfcf" 14 | secondary-background-color: "#2b2b2b" 15 | secondary-text-color: "#04a7bc" 16 | # Colors based on variables, see above 17 | label-badge-background-color: "var(--secondary-background-color)" 18 | label-badge-text-color: "var(--text-primary-color)" 19 | paper-card-header-color: "#var(--paper-item-icon-color)" 20 | paper-grey-50: "var(--primary-text-color)" 21 | paper-item-icon-active-color: "var(--primary-color)" 22 | paper-item-icon_-_color: "var(--primary-text-color)" 23 | paper-slider-active-color: "var(--primary-color)" 24 | paper-slider-knob-color: "var(--primary-color)" 25 | paper-slider-knob-start-color: "var(--primary-color)" 26 | paper-slider-pin-color: "var(--primary-color)" 27 | paper-slider-secondary-color: "var(--light-primary-color)" 28 | paper-toggle-button-checked-ink-color: "var(--dark-primary-color)" 29 | paper-toggle-button-checked-button-color: "var(--primary-color)" 30 | paper-toggle-button-checked-bar-color: "var(--light-primary-color)" 31 | paper-toggle-button-unchecked-bar-color: "var(--primary-text-color)" 32 | -------------------------------------------------------------------------------- /themes/green.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | green: 3 | primary-color: "#6CA518" 4 | -------------------------------------------------------------------------------- /themes/solarized.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | solarized: 3 | primary-color: "#2aa198" 4 | disabled-text-color: "#859900" 5 | divider-color: "#586e75" # "rgba(255, 255, 255, 0.12)" 6 | paper-card-background-color: "#002b36" 7 | paper-grey-200: "#586e75" 8 | paper-item-icon-color: "#b58900" 9 | paper-listbox-background-color: "#002b36" 10 | paper-listbox-color: "#b58900" 11 | primary-background-color: "#073642" 12 | primary-text-color: "#839496" 13 | secondary-background-color: "#073642" 14 | secondary-text-color: "#859900" 15 | text-primary-color: "#839496" 16 | label-badge-background-color: "var(--secondary-background-color)" 17 | label-badge-text-color: "var(--text-primary-color)" 18 | paper-card-header-color: "#cb4b16" 19 | paper-grey-50: "#b58900" 20 | paper-item-icon-active-color: "#dc322f" 21 | paper-item-icon_-_color: "#FF00FF" # no clue 22 | paper-slider-active-color: "#dc322f" 23 | paper-slider-knob-color: "#dc322f" 24 | paper-slider-knob-start-color: "#b58900" 25 | paper-slider-pin-color: "#FF00FF" # no clue 26 | paper-slider-secondary-color: "#dc322f" 27 | paper-toggle-button-checked-ink-color: "#dc322f" 28 | paper-toggle-button-checked-button-color: "#dc322f" 29 | paper-toggle-button-checked-bar-color: "#cb4b16" 30 | paper-toggle-button-unchecked-bar-color: "#b58900" 31 | table-row-background-color: "#002b36" 32 | table-row-alternative-background-color: "#073642" 33 | google-red: "#dc322f" 34 | google-green: "#859900" 35 | google-blue: "#268bd2" 36 | google-yellow: "#b58900" 37 | accent-color: "#cb4b16" 38 | paper-green: "#859900" 39 | paper-blue: "#268bd2" 40 | paper-orange: "#cb4b16" 41 | -------------------------------------------------------------------------------- /themes/wood.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | wood: 3 | primary-color: "#6B3A1F" 4 | disabled-text-color: "#A58456" 5 | divider-color: "#EDE4D8" # "rgba(255, 255, 255, 0.15)" 6 | dark-primary-color: "#592A13" 7 | 8 | primary-background-color: "#C4AD92" 9 | primary-text-color: "#FFFFFF" 10 | secondary-background-color: "#675335" 11 | secondary-text-color: "#6B3A1F" 12 | text-primary-color: "#693A23" 13 | 14 | label-badge-background-color: "var(--primary-background-color)" 15 | label-badge-text-color: "var(--text-primary-color)" 16 | 17 | paper-card-background-color: "#A58456" 18 | paper-grey-50: "#6B3A1F" 19 | paper-grey-200: "#DDD4C8" 20 | paper-item-icon-color: "#6B3A1F" 21 | paper-listbox-background-color: "#A58456" 22 | paper-listbox-color: "#6B3A1F" 23 | 24 | paper-card-header-color: "#EDE4D8" 25 | 26 | paper-item-icon-active-color: "#F7C02A" 27 | paper-item-icon_-_color: "#FF00FF" 28 | 29 | paper-slider-active-color: "#A56521" 30 | paper-slider-knob-color: "#A56521" 31 | paper-slider-knob-start-color: "#6B3A1F" 32 | paper-slider-pin-color: "#FF00FF" 33 | paper-slider-secondary-color: "#A06020" 34 | 35 | paper-toggle-button-checked-ink-color: "#A56521" 36 | paper-toggle-button-checked-button-color: "#A56521" 37 | paper-toggle-button-checked-bar-color: "#EDE4D8" 38 | paper-toggle-button-unchecked-bar-color: "#EDE4D8" 39 | 40 | table-row-background-color: "#A58456" 41 | table-row-alternative-background-color: "#C67A2E" 42 | 43 | google-red: "#A56521" 44 | google-green: "#A58456" 45 | google-blue: "#268BD2" 46 | google-yellow: "#6B3A1F" 47 | accent-color: "#EDE4D8" 48 | paper-green: "#A58456" 49 | paper-blue: "#268BD2" 50 | paper-orange: "#EDE4D8" 51 | -------------------------------------------------------------------------------- /ui-lovelace.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | title: Home 3 | background: center / cover no-repeat url("/local/background.png") fixed 4 | excluded_entities: null 5 | resources: !include_dir_list lovelace/resources 6 | cch: 7 | options: clock 8 | 9 | views: 10 | - !include lovelace/views/floor_plans.yaml 11 | - !include lovelace/views/floor_0.yaml 12 | - !include lovelace/views/floor_1.yaml 13 | - !include lovelace/views/floor_2.yaml 14 | - !include lovelace/views/floor_3.yaml 15 | - !include lovelace/views/at_and_sc.yaml 16 | - !include lovelace/views/synology_status.yaml 17 | - !include lovelace/views/network_devices.yaml 18 | - !include lovelace/views/housecontrol.yaml 19 | - !include lovelace/views/power_usage.yaml 20 | - !include lovelace/views/rgbw_leds.yaml 21 | - !include lovelace/views/cameras.yaml 22 | -------------------------------------------------------------------------------- /www/Capture0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Capture0.PNG -------------------------------------------------------------------------------- /www/Capture1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Capture1.PNG -------------------------------------------------------------------------------- /www/Capture2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Capture2.PNG -------------------------------------------------------------------------------- /www/Floor0H.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor0H.PNG -------------------------------------------------------------------------------- /www/Floor0V.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor0V.PNG -------------------------------------------------------------------------------- /www/Floor0VN.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor0VN.PNG -------------------------------------------------------------------------------- /www/Floor1H.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor1H.PNG -------------------------------------------------------------------------------- /www/Floor1V.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor1V.PNG -------------------------------------------------------------------------------- /www/Floor1VN.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor1VN.PNG -------------------------------------------------------------------------------- /www/Floor2H.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor2H.PNG -------------------------------------------------------------------------------- /www/Floor2V.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor2V.PNG -------------------------------------------------------------------------------- /www/Floor2VN.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Floor2VN.PNG -------------------------------------------------------------------------------- /www/Garage_off.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Garage_off.PNG -------------------------------------------------------------------------------- /www/Garage_on.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/Garage_on.PNG -------------------------------------------------------------------------------- /www/IMG_0786.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/IMG_0786.PNG -------------------------------------------------------------------------------- /www/IMG_0788.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/IMG_0788.PNG -------------------------------------------------------------------------------- /www/IMG_0789.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/IMG_0789.PNG -------------------------------------------------------------------------------- /www/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/arrow-down.png -------------------------------------------------------------------------------- /www/arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/arrow-up.png -------------------------------------------------------------------------------- /www/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/back.png -------------------------------------------------------------------------------- /www/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/background.png -------------------------------------------------------------------------------- /www/circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/circle.png -------------------------------------------------------------------------------- /www/entree_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/entree_off.png -------------------------------------------------------------------------------- /www/entree_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/entree_on.png -------------------------------------------------------------------------------- /www/exclamation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/exclamation.png -------------------------------------------------------------------------------- /www/ilot_allume.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/ilot_allume.PNG -------------------------------------------------------------------------------- /www/ilot_aus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/ilot_aus.png -------------------------------------------------------------------------------- /www/off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/off.png -------------------------------------------------------------------------------- /www/plan-coordinates.js: -------------------------------------------------------------------------------- 1 | class PlanCoordinates extends HTMLElement { 2 | 3 | constructor() { 4 | super(); 5 | this.attachShadow({ mode: 'open' }); 6 | } 7 | 8 | setConfig(config) { 9 | const root = this.shadowRoot; 10 | if (root.lastChild) root.removeChild(root.lastChild); 11 | this.style.display = 'none'; 12 | const card = document.createElement('div'); 13 | card.id = "plan-coordinates" 14 | const content = document.createElement('div'); 15 | const style = document.createElement('style'); 16 | style.textContent = ` 17 | #plan-coordinates { 18 | position: absolute; 19 | right: 0px; 20 | top: 16px; 21 | z-index: 1000; 22 | } 23 | #content { 24 | background-color: var(--paper-card-background-color); 25 | border: 1px solid var(--label-badge-blue); 26 | padding: 16px; 27 | } 28 | `; 29 | content.id = "content"; 30 | card.appendChild(content); 31 | root.appendChild(style); 32 | root.appendChild(card); 33 | document.addEventListener("mousemove", el => { 34 | let calc_top = 16 - (document.body.querySelector('home-assistant').getBoundingClientRect().top); 35 | card.style.top = `${calc_top}px`; 36 | if (el.path[0] && el.path[0].tagName == 'IMG') { 37 | this.style.display = 'block'; 38 | const percentX = Math.ceil((el.clientX - el.path[0].x) * 100 / el.path[0].width); 39 | const percentY = Math.ceil((el.clientY - el.path[0].y) * 100 / el.path[0].height); 40 | content.innerHTML = `left: ${percentX}%
top: ${percentY}%`; 41 | } 42 | }); 43 | document.addEventListener('scroll', el => { 44 | let calc_top = 16 - (document.body.querySelector('home-assistant').getBoundingClientRect().top); 45 | card.style.top = `${calc_top}px`; 46 | }, true); 47 | } 48 | set hass(hass) { 49 | } 50 | 51 | getCardSize() { 52 | return 1; 53 | } 54 | } 55 | customElements.define('plan-coordinates', PlanCoordinates); -------------------------------------------------------------------------------- /www/treppe_bis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adonno/Home-AssistantConfig/8038c0143c6a990e409951202bb1bda149fcbaf7/www/treppe_bis.png --------------------------------------------------------------------------------