├── .env.busix.example
├── .env.crontab.example
├── .env.dpodcast.example
├── .env.firefly.example
├── .env.grafana.example
├── .env.home-assistant.example
├── .env.influxdb.example
├── .env.local.example
├── .env.nextcloud.example
├── .env.pihole.example
├── .env.plex.example
├── .env.postgresql.example
├── .github
├── FUNDING.yml
└── workflows
│ └── github-pages.yml
├── .gitignore
├── .ruby-version
├── .tool-versions
├── Brewfile
├── LICENSE
├── README.md
├── RFMapping.md
├── Vagrantfile
├── appdaemon
├── .gitkeep
├── apps
│ ├── adaptive_room_heating.py
│ ├── air_purifier_ai.py
│ ├── apps.yaml
│ ├── battery.py
│ ├── cover.py
│ ├── humidifier.py
│ ├── spotify_light.py
│ └── temperature_lamp.py
└── dashboards
│ └── Hello.dash
├── bin
├── ddns.py
├── lovelace-gen.py
├── smart-house
└── smart-house-provision
├── btc-explorer
└── Dockerfile
├── docker-compose.health.yaml
├── docker-compose.media.yaml
├── docker-compose.support.yaml
├── docker-compose.yaml
├── docker-compose.zwave.yaml
├── docs
├── DIY
│ ├── CatFeeder
│ │ ├── README.md
│ │ ├── base.jpg
│ │ ├── bowl.jpg
│ │ ├── fc.jpg
│ │ ├── final.jpg
│ │ ├── header.jpg
│ │ ├── index.md
│ │ ├── parts.jpg
│ │ ├── printing.jpg
│ │ ├── ration_container.jpg
│ │ ├── servo_holder.jpg
│ │ ├── tc.jpg
│ │ └── ultimate-3d-printed-pet-feeder-v4.zip
│ ├── LedStrips
│ │ └── index.md
│ └── RiggadLamp
│ │ ├── header.jpg
│ │ └── index.md
├── Hardware
│ └── index.md
├── HomeAssistant
│ ├── AppDaemon.md
│ ├── Components.md
│ ├── Lovelace
│ │ ├── afternoon.png
│ │ ├── air_purifier.gif
│ │ ├── evening.png
│ │ ├── index.md
│ │ ├── kkm.png
│ │ ├── linak.gif
│ │ ├── night.png
│ │ ├── public_transit.png
│ │ ├── vacuum.png
│ │ └── vacuum_zones.jpg
│ ├── PresenceDetection.md
│ ├── Screens
│ │ ├── bathroom.png
│ │ ├── bedroom.png
│ │ ├── cameras.png
│ │ ├── corridor.png
│ │ ├── dashboard.png
│ │ ├── index.md
│ │ ├── kitchen.png
│ │ ├── living_room.png
│ │ ├── networking.png
│ │ ├── work.png
│ │ └── work_desk.png
│ ├── Vacuum
│ │ ├── header.jpg
│ │ ├── index.md
│ │ ├── vacuum.png
│ │ └── vacuum_zones.jpg
│ ├── VoiceControl
│ │ ├── header.jpg
│ │ └── index.md
│ └── lovelace-presence.png
├── References.md
├── Services
│ ├── FirefoxSyncServer.md
│ └── UpTimeRobot.md
├── SmartHouse.xml
├── Software
│ ├── Backup.md
│ ├── Bitcoin.md
│ ├── ControlScript.md
│ ├── Degoogling.md
│ ├── Development.md
│ ├── Encryption.md
│ ├── EspHome.md
│ ├── GettingStarted.md
│ ├── Nextcloud.md
│ ├── Nginx.md
│ ├── Overview.md
│ ├── PiHole.md
│ ├── Ports.md
│ ├── TvDashboard.md
│ └── Upgrading.md
├── header.jpg
├── index.md
└── logo.svg
├── ff-sync
└── Dockerfile
├── glances
└── glances.conf
├── helpers.md
├── home-assistant
├── .gitkeep
├── automations.yaml
├── automations
│ ├── adguard.yaml
│ ├── agd.yaml
│ ├── alexa.yaml
│ ├── bathroom.yaml
│ ├── blinds.yaml
│ ├── cat.yaml
│ ├── cooking.yaml
│ ├── corridor.yaml
│ ├── disasters.yaml
│ ├── external.yaml
│ ├── fan.yaml
│ ├── health.yaml
│ ├── home-assistant.yaml
│ ├── humidifier.yaml
│ ├── lights.yaml
│ ├── media_player.yaml
│ ├── octoprint.yaml
│ ├── pizza.yml
│ ├── power-saving.yaml
│ ├── presence.yaml
│ ├── privacy.yaml
│ ├── security.yaml
│ ├── sun.yaml
│ ├── system.yaml
│ ├── torrents.yaml
│ ├── trains.yaml
│ ├── tv.yaml
│ ├── vacuum.yaml
│ ├── weather.yaml
│ └── work.yaml
├── blueprints
│ ├── automation
│ │ └── homeassistant
│ │ │ ├── motion_light.yaml
│ │ │ └── notify_leaving_zone.yaml
│ └── script
│ │ └── homeassistant
│ │ └── confirmable_notification.yaml
├── components
│ ├── alexa.yaml
│ ├── alexa_media.yaml
│ ├── binary_sensor.yaml
│ ├── calendar.yaml
│ ├── camera.yaml
│ ├── climate.yaml
│ ├── cover.yaml
│ ├── customize.yaml
│ ├── fan.yaml
│ ├── frontend.yaml
│ ├── history.yaml
│ ├── homeassistant.yaml
│ ├── http.yaml
│ ├── hue.yaml
│ ├── image_processing.yaml
│ ├── influxdb.yaml
│ ├── input_boolean.yaml
│ ├── input_number.yaml
│ ├── input_select.yaml
│ ├── led_strip_effects.yaml
│ ├── life360.yaml
│ ├── light.yaml
│ ├── logbook.yaml
│ ├── logger.yaml
│ ├── matrix.yaml
│ ├── media_player.yaml
│ ├── mqtt.yaml
│ ├── notify.yaml
│ ├── octoprint.yaml
│ ├── panel_custom.yaml
│ ├── panel_iframe.yaml
│ ├── person.yaml
│ ├── recorder.yaml
│ ├── rest_commands.yaml
│ ├── shell_command.yaml
│ ├── speedtestdotnet.yaml
│ ├── switch.yaml
│ ├── telegram.yaml
│ ├── themes
│ │ ├── darkblue.yaml
│ │ └── google.yaml
│ ├── torrent.yaml
│ ├── utility_meter.yaml
│ ├── vacuum.yaml
│ ├── weather.yaml
│ ├── webostv.yaml
│ ├── zones.yaml.example
│ └── zwave.yaml
├── configuration.yaml
├── custom_components
│ ├── alexa_media
│ │ ├── .translations
│ │ │ ├── ar.json
│ │ │ ├── de.json
│ │ │ ├── en.json
│ │ │ ├── es.json
│ │ │ ├── fr.json
│ │ │ ├── it.json
│ │ │ ├── nb.json
│ │ │ ├── nl.json
│ │ │ ├── pl.json
│ │ │ ├── pt-BR.json
│ │ │ ├── pt.json
│ │ │ ├── pt_BR.json
│ │ │ ├── pt_PT.json
│ │ │ ├── ru.json
│ │ │ └── zh-Hans.json
│ │ ├── __init__.py
│ │ ├── alarm_control_panel.py
│ │ ├── alexa_entity.py
│ │ ├── alexa_media.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── helpers.py
│ │ ├── light.py
│ │ ├── manifest.json
│ │ ├── media_player.py
│ │ ├── notify.py
│ │ ├── sensor.py
│ │ ├── services.py
│ │ ├── services.yaml
│ │ ├── strings.json
│ │ ├── switch.py
│ │ └── translations
│ │ │ ├── ar.json
│ │ │ ├── de.json
│ │ │ ├── en.json
│ │ │ ├── es.json
│ │ │ ├── fr.json
│ │ │ ├── it.json
│ │ │ ├── nb.json
│ │ │ ├── nl.json
│ │ │ ├── pl.json
│ │ │ ├── pt-BR.json
│ │ │ ├── pt.json
│ │ │ ├── pt_BR.json
│ │ │ ├── pt_PT.json
│ │ │ ├── ru.json
│ │ │ └── zh-Hans.json
│ ├── attributes
│ │ ├── __init__.py
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── burze_dzis_net
│ │ ├── __init__.py
│ │ ├── binary_sensor.py
│ │ └── manifest.json
│ ├── car_wash
│ │ ├── __init__.py
│ │ ├── binary_sensor.py
│ │ ├── const.py
│ │ ├── manifest.json
│ │ └── translations
│ │ │ ├── binary_sensor.de.json
│ │ │ ├── binary_sensor.en.json
│ │ │ ├── binary_sensor.it.json
│ │ │ ├── binary_sensor.pl.json
│ │ │ ├── binary_sensor.ru.json
│ │ │ └── binary_sensor.uk.json
│ ├── cracow_air_quality
│ │ ├── __init__.py
│ │ └── sensor.py
│ ├── emby_upcoming_media
│ │ ├── __init__.py
│ │ ├── client.py
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── google_geocode
│ │ ├── Google_Geocode_Screenshot.png
│ │ ├── README.md
│ │ ├── google_geocode.markdown
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── grocy
│ │ ├── __init__.py
│ │ ├── binary_sensor.py
│ │ ├── breaking_changes
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── entity.py
│ │ ├── grocy_data.py
│ │ ├── helpers.py
│ │ ├── manifest.json
│ │ ├── sensor.py
│ │ ├── services.py
│ │ ├── services.yaml
│ │ └── translations
│ │ │ ├── en.json
│ │ │ └── hr.json
│ ├── hacs
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── diagnostics.py
│ │ ├── entity.py
│ │ ├── enums.py
│ │ ├── exceptions.py
│ │ ├── frontend.py
│ │ ├── hacs_frontend
│ │ │ ├── __init__.py
│ │ │ ├── c.004a7b01.js
│ │ │ ├── c.004a7b01.js.gz
│ │ │ ├── c.05e9df28.js
│ │ │ ├── c.05e9df28.js.gz
│ │ │ ├── c.0732ee74.js
│ │ │ ├── c.0732ee74.js.gz
│ │ │ ├── c.15331ea4.js
│ │ │ ├── c.15331ea4.js.gz
│ │ │ ├── c.175b9792.js
│ │ │ ├── c.175b9792.js.gz
│ │ │ ├── c.1b450c80.js
│ │ │ ├── c.1b450c80.js.gz
│ │ │ ├── c.21c042d4.js
│ │ │ ├── c.24bd2446.js
│ │ │ ├── c.24bd2446.js.gz
│ │ │ ├── c.250c89dd.js
│ │ │ ├── c.250c89dd.js.gz
│ │ │ ├── c.362d16d4.js
│ │ │ ├── c.362d16d4.js.gz
│ │ │ ├── c.3c651323.js
│ │ │ ├── c.3c651323.js.gz
│ │ │ ├── c.4053bced.js
│ │ │ ├── c.4053bced.js.gz
│ │ │ ├── c.47f687e9.js
│ │ │ ├── c.47f687e9.js.gz
│ │ │ ├── c.4a97632a.js
│ │ │ ├── c.4a97632a.js.gz
│ │ │ ├── c.4c31e630.js
│ │ │ ├── c.4c31e630.js.gz
│ │ │ ├── c.50bfd408.js
│ │ │ ├── c.50bfd408.js.gz
│ │ │ ├── c.56433b09.js
│ │ │ ├── c.56433b09.js.gz
│ │ │ ├── c.587d89ba.js
│ │ │ ├── c.587d89ba.js.gz
│ │ │ ├── c.58a9b586.js
│ │ │ ├── c.58a9b586.js.gz
│ │ │ ├── c.5b87ad2c.js
│ │ │ ├── c.5b87ad2c.js.gz
│ │ │ ├── c.5ba288d8.js
│ │ │ ├── c.5ba288d8.js.gz
│ │ │ ├── c.5ede7966.js
│ │ │ ├── c.5ede7966.js.gz
│ │ │ ├── c.63dc92d5.js
│ │ │ ├── c.63dc92d5.js.gz
│ │ │ ├── c.656daa82.js
│ │ │ ├── c.6711bf6c.js
│ │ │ ├── c.6711bf6c.js.gz
│ │ │ ├── c.6b0f0543.js
│ │ │ ├── c.6b0f0543.js.gz
│ │ │ ├── c.743a15a1.js
│ │ │ ├── c.743a15a1.js.gz
│ │ │ ├── c.7ee871d3.js
│ │ │ ├── c.7ee871d3.js.gz
│ │ │ ├── c.822f38be.js
│ │ │ ├── c.822f38be.js.gz
│ │ │ ├── c.88ebfd3e.js
│ │ │ ├── c.88ebfd3e.js.gz
│ │ │ ├── c.8e28b461.js
│ │ │ ├── c.8e28b461.js.gz
│ │ │ ├── c.8f19de42.js
│ │ │ ├── c.8f19de42.js.gz
│ │ │ ├── c.936d9772.js
│ │ │ ├── c.936d9772.js.gz
│ │ │ ├── c.99c1c4ba.js
│ │ │ ├── c.99c1c4ba.js.gz
│ │ │ ├── c.9d5cd8b6.js
│ │ │ ├── c.9d5cd8b6.js.gz
│ │ │ ├── c.9d6aaabf.js
│ │ │ ├── c.9d6aaabf.js.gz
│ │ │ ├── c.a0bc44e3.js
│ │ │ ├── c.a0bc44e3.js.gz
│ │ │ ├── c.ad739743.js
│ │ │ ├── c.ad739743.js.gz
│ │ │ ├── c.b054aba2.js
│ │ │ ├── c.b054aba2.js.gz
│ │ │ ├── c.b720c549.js
│ │ │ ├── c.b720c549.js.gz
│ │ │ ├── c.ba01fa51.js
│ │ │ ├── c.ba01fa51.js.gz
│ │ │ ├── c.ba5bc454.js
│ │ │ ├── c.ba5bc454.js.gz
│ │ │ ├── c.bc53dda1.js
│ │ │ ├── c.bc53dda1.js.gz
│ │ │ ├── c.bca0f55d.js
│ │ │ ├── c.bca0f55d.js.gz
│ │ │ ├── c.c176780d.js
│ │ │ ├── c.c176780d.js.gz
│ │ │ ├── c.c4815b5a.js
│ │ │ ├── c.c4815b5a.js.gz
│ │ │ ├── c.c608beec.js
│ │ │ ├── c.c608beec.js.gz
│ │ │ ├── c.c7df5815.js
│ │ │ ├── c.c7df5815.js.gz
│ │ │ ├── c.c98162aa.js
│ │ │ ├── c.c98162aa.js.gz
│ │ │ ├── c.d2d70fc0.js
│ │ │ ├── c.d2d70fc0.js.gz
│ │ │ ├── c.da8de431.js
│ │ │ ├── c.da8de431.js.gz
│ │ │ ├── c.db2e6bb6.js
│ │ │ ├── c.db2e6bb6.js.gz
│ │ │ ├── c.dba55e54.js
│ │ │ ├── c.dba55e54.js.gz
│ │ │ ├── c.e23b0d0b.js
│ │ │ ├── c.e23b0d0b.js.gz
│ │ │ ├── c.e65e9eeb.js
│ │ │ ├── c.e65e9eeb.js.gz
│ │ │ ├── c.e7b530de.js
│ │ │ ├── c.e7b530de.js.gz
│ │ │ ├── c.ee4824b8.js
│ │ │ ├── c.ee4824b8.js.gz
│ │ │ ├── c.ef5e31a4.js
│ │ │ ├── c.ef5e31a4.js.gz
│ │ │ ├── c.f0a99f33.js
│ │ │ ├── c.f0a99f33.js.gz
│ │ │ ├── c.f2cbe48c.js
│ │ │ ├── c.f2cbe48c.js.gz
│ │ │ ├── c.f3416703.js
│ │ │ ├── c.f3416703.js.gz
│ │ │ ├── c.fbd8d2ba.js
│ │ │ ├── c.fbd8d2ba.js.gz
│ │ │ ├── c.fe747ba2.js
│ │ │ ├── c.fe747ba2.js.gz
│ │ │ ├── entrypoint.js
│ │ │ ├── entrypoint.js.gz
│ │ │ ├── main-a0d7432d.js
│ │ │ ├── main-a0d7432d.js.gz
│ │ │ ├── manifest.json
│ │ │ └── version.py
│ │ ├── iconset.js
│ │ ├── manifest.json
│ │ ├── repositories
│ │ │ ├── __init__.py
│ │ │ ├── appdaemon.py
│ │ │ ├── base.py
│ │ │ ├── integration.py
│ │ │ ├── netdaemon.py
│ │ │ ├── plugin.py
│ │ │ ├── python_script.py
│ │ │ └── theme.py
│ │ ├── sensor.py
│ │ ├── system_health.py
│ │ ├── translations
│ │ │ └── en.json
│ │ ├── update.py
│ │ ├── utils
│ │ │ ├── __init__.py
│ │ │ ├── backup.py
│ │ │ ├── configuration_schema.py
│ │ │ ├── data.py
│ │ │ ├── decode.py
│ │ │ ├── decorator.py
│ │ │ ├── default.repositories
│ │ │ ├── filters.py
│ │ │ ├── json.py
│ │ │ ├── logger.py
│ │ │ ├── path.py
│ │ │ ├── queue_manager.py
│ │ │ ├── regex.py
│ │ │ ├── store.py
│ │ │ ├── template.py
│ │ │ ├── validate.py
│ │ │ ├── version.py
│ │ │ └── workarounds.py
│ │ ├── validate
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── archived.py
│ │ │ ├── base.py
│ │ │ ├── brands.py
│ │ │ ├── description.py
│ │ │ ├── hacsjson.py
│ │ │ ├── images.py
│ │ │ ├── information.py
│ │ │ ├── integration_manifest.py
│ │ │ ├── issues.py
│ │ │ ├── manager.py
│ │ │ └── topics.py
│ │ └── websocket
│ │ │ ├── __init__.py
│ │ │ ├── critical.py
│ │ │ ├── repositories.py
│ │ │ └── repository.py
│ ├── harvest
│ │ ├── __init__.py
│ │ └── sensor.py
│ ├── it_will_rain
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── kkm
│ │ ├── __init__.py
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── localtuya
│ │ ├── __init__.py
│ │ ├── binary_sensor.py
│ │ ├── climate.py
│ │ ├── cloud_api.py
│ │ ├── common.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── cover.py
│ │ ├── diagnostics.py
│ │ ├── discovery.py
│ │ ├── fan.py
│ │ ├── light.py
│ │ ├── manifest.json
│ │ ├── number.py
│ │ ├── pytuya
│ │ │ └── __init__.py
│ │ ├── select.py
│ │ ├── sensor.py
│ │ ├── services.yaml
│ │ ├── strings.json
│ │ ├── switch.py
│ │ ├── translations
│ │ │ ├── en.json
│ │ │ ├── it.json
│ │ │ └── pt-BR.json
│ │ └── vacuum.py
│ ├── lunching
│ │ ├── __init__.py
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── mmpk
│ │ ├── __init__.py
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── nodered
│ │ ├── __init__.py
│ │ ├── binary_sensor.py
│ │ ├── button.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── discovery.py
│ │ ├── manifest.json
│ │ ├── sensor.py
│ │ ├── services.yaml
│ │ ├── switch.py
│ │ ├── translations
│ │ │ ├── de.json
│ │ │ ├── dk.json
│ │ │ ├── en.json
│ │ │ ├── fr.json
│ │ │ ├── nb.json
│ │ │ ├── pt-BR.json
│ │ │ └── sv.json
│ │ ├── utils.py
│ │ └── websocket.py
│ ├── rocketlaunchlive
│ │ ├── __init__.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── manifest.json
│ │ ├── sensor.py
│ │ ├── strings.json
│ │ └── translations
│ │ │ └── en.json
│ ├── samsung_multi_room
│ │ ├── __init__.py
│ │ ├── manifest.json
│ │ └── media_player.py
│ ├── smartthinq_sensors
│ │ ├── __init__.py
│ │ ├── binary_sensor.py
│ │ ├── climate.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── device_helpers.py
│ │ ├── diagnostics.py
│ │ ├── fan.py
│ │ ├── humidifier.py
│ │ ├── manifest.json
│ │ ├── sensor.py
│ │ ├── services.yaml
│ │ ├── switch.py
│ │ ├── translations
│ │ │ ├── el.json
│ │ │ ├── en.json
│ │ │ ├── es.json
│ │ │ ├── hr.json
│ │ │ ├── it.json
│ │ │ ├── nb.json
│ │ │ ├── pl.json
│ │ │ ├── pt-BR.json
│ │ │ ├── pt.json
│ │ │ └── sk.json
│ │ └── wideq
│ │ │ ├── __init__.py
│ │ │ ├── ac.py
│ │ │ ├── airpurifier.py
│ │ │ ├── const.py
│ │ │ ├── core_async.py
│ │ │ ├── core_exceptions.py
│ │ │ ├── core_util.py
│ │ │ ├── dehumidifier.py
│ │ │ ├── device.py
│ │ │ ├── device_info.py
│ │ │ ├── dishwasher.py
│ │ │ ├── factory.py
│ │ │ ├── fan.py
│ │ │ ├── range.py
│ │ │ ├── refrigerator.py
│ │ │ ├── styler.py
│ │ │ └── washerDryer.py
│ ├── spacex
│ │ ├── __init__.py
│ │ ├── binary_sensor.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── manifest.json
│ │ ├── sensor.py
│ │ ├── strings.json
│ │ └── translations
│ │ │ └── en.json
│ ├── spotify_cover_sensor
│ │ ├── __init__.py
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── tauron_amiplus
│ │ ├── manifest.json
│ │ └── sensor.py
│ ├── tuya_v2
│ │ ├── __init__.py
│ │ ├── aes_cbc.py
│ │ ├── alarm_control_panel.py
│ │ ├── base.py
│ │ ├── binary_sensor.py
│ │ ├── climate.py
│ │ ├── config_flow.py
│ │ ├── const.py
│ │ ├── cover.py
│ │ ├── fan.py
│ │ ├── humidifier.py
│ │ ├── light.py
│ │ ├── manifest.json
│ │ ├── number.py
│ │ ├── scene.py
│ │ ├── select.py
│ │ ├── sensor.py
│ │ ├── strings.json
│ │ ├── switch.py
│ │ ├── translations
│ │ │ ├── de.json
│ │ │ ├── en.json
│ │ │ ├── es.json
│ │ │ ├── fr.json
│ │ │ ├── hi.json
│ │ │ ├── hu.json
│ │ │ ├── id.json
│ │ │ ├── it.json
│ │ │ ├── kn.json
│ │ │ ├── nl.json
│ │ │ ├── pt.json
│ │ │ ├── zh-Hans.json
│ │ │ └── zh-Hant.json
│ │ └── vacuum.py
│ ├── xiaomi_cloud_map_extractor
│ │ ├── __init__.py
│ │ ├── camera.py
│ │ ├── common
│ │ │ ├── __init__.py
│ │ │ ├── image_handler.py
│ │ │ ├── map_data.py
│ │ │ ├── map_data_parser.py
│ │ │ ├── vacuum.py
│ │ │ ├── vacuum_v2.py
│ │ │ └── xiaomi_cloud_connector.py
│ │ ├── const.py
│ │ ├── dreame
│ │ │ ├── __init__.py
│ │ │ ├── image_handler.py
│ │ │ ├── map_data_parser.py
│ │ │ └── vacuum.py
│ │ ├── manifest.json
│ │ ├── roidmi
│ │ │ ├── __init__.py
│ │ │ ├── image_handler.py
│ │ │ ├── map_data_parser.py
│ │ │ └── vacuum.py
│ │ ├── services.yaml
│ │ ├── types.py
│ │ ├── unsupported
│ │ │ ├── __init__.py
│ │ │ └── vacuum.py
│ │ ├── viomi
│ │ │ ├── __init__.py
│ │ │ ├── image_handler.py
│ │ │ ├── map_data_parser.py
│ │ │ ├── parsing_buffer.py
│ │ │ └── vacuum.py
│ │ └── xiaomi
│ │ │ ├── __init__.py
│ │ │ ├── image_handler.py
│ │ │ ├── map_data_parser.py
│ │ │ └── vacuum.py
│ └── yahoofinance
│ │ ├── __init__.py
│ │ ├── const.py
│ │ ├── coordinator.py
│ │ ├── manifest.json
│ │ ├── sensor.py
│ │ └── services.yaml
├── docker-entrypoint.sh
├── groups.yaml
├── known_devices.yaml.example
├── lovelace
│ ├── balcony.yaml
│ ├── batchroom.yaml
│ ├── bedroom.yaml
│ ├── briefing.yaml
│ ├── cameras.yaml
│ ├── corridor.yaml
│ ├── dashboard.yaml
│ ├── desk.yaml
│ ├── invest.yaml
│ ├── kitchen.yaml
│ ├── living_room.yaml
│ ├── main.yaml
│ ├── network.yaml
│ ├── smart-home.yaml
│ ├── system.yaml
│ └── work.yaml
├── panels
│ ├── vacuum_plan.html
│ └── zwavegraph2.html
├── scenes
│ ├── tv.yaml
│ └── work.yaml
├── scripts
│ ├── grocy.yaml
│ ├── switch_off_mac_mini.sh
│ └── vacuum.yaml
├── sensors
│ ├── air_purifier.yaml
│ ├── currency.yaml
│ ├── deluge.yaml
│ ├── fail2ban.yaml
│ ├── food.yaml
│ ├── fuel.yaml
│ ├── kkm.yaml
│ ├── money.yaml
│ ├── places.yaml
│ ├── power.yaml
│ ├── qnap.yaml
│ ├── scale.yaml
│ ├── sonarr.yaml
│ ├── space.yaml
│ ├── spotify.yaml
│ ├── statistics.yaml
│ ├── system.yaml
│ ├── time.yaml
│ ├── trackers.yaml
│ ├── transit.yaml
│ ├── vacuum.yaml
│ ├── weather.yaml
│ └── work.yaml
├── themes
│ ├── caule-themes-pack-1
│ │ ├── aqua.jpg
│ │ ├── blue.jpg
│ │ ├── caule-themes-pack-1.yaml
│ │ ├── clear-night.svg
│ │ ├── cloudy.svg
│ │ ├── coral.jpg
│ │ ├── fog.svg
│ │ ├── gray.jpg
│ │ ├── green.jpg
│ │ ├── hail.svg
│ │ ├── lightning-rainy.svg
│ │ ├── lightning.svg
│ │ ├── orange.jpg
│ │ ├── partlycloudy.svg
│ │ ├── pink.jpg
│ │ ├── pouring.svg
│ │ ├── purple.jpg
│ │ ├── rainy.svg
│ │ ├── rose.jpg
│ │ ├── snowy-rainy.svg
│ │ ├── snowy.svg
│ │ ├── sunny.svg
│ │ ├── windy-variant.svg
│ │ ├── windy.svg
│ │ └── yellow.jpg
│ └── google_dark_theme
│ │ └── google_dark_theme.yaml
├── www
│ ├── community
│ │ ├── lovelace-battery-entity-row
│ │ │ ├── battery-entity-row.js
│ │ │ └── battery-entity-row.js.gz
│ │ ├── lovelace-card-tools
│ │ │ ├── card-tools.js
│ │ │ ├── card-tools.js.gz
│ │ │ ├── webpack.config.js
│ │ │ └── webpack.config.js.gz
│ │ ├── lovelace-layout-card
│ │ │ ├── layout-card.js
│ │ │ ├── layout-card.js.gz
│ │ │ ├── rollup.config.js
│ │ │ └── rollup.config.js.gz
│ │ ├── lovelace-xiaomi-vacuum-map-card
│ │ │ ├── xiaomi-vacuum-map-card.js
│ │ │ └── xiaomi-vacuum-map-card.js.gz
│ │ ├── mini-graph-card
│ │ │ ├── mini-graph-card-bundle.js
│ │ │ └── mini-graph-card-bundle.js.gz
│ │ ├── mini-media-player
│ │ │ ├── mini-media-player-bundle.js
│ │ │ └── mini-media-player-bundle.js.gz
│ │ └── weather-card
│ │ │ ├── icons
│ │ │ ├── cloudy-day-1.svg
│ │ │ ├── cloudy-day-2.svg
│ │ │ ├── cloudy-day-3.svg
│ │ │ ├── cloudy-night-1.svg
│ │ │ ├── cloudy-night-2.svg
│ │ │ ├── cloudy-night-3.svg
│ │ │ ├── cloudy.svg
│ │ │ ├── day.svg
│ │ │ ├── night.svg
│ │ │ ├── rainy-1.svg
│ │ │ ├── rainy-2.svg
│ │ │ ├── rainy-3.svg
│ │ │ ├── rainy-4.svg
│ │ │ ├── rainy-5.svg
│ │ │ ├── rainy-6.svg
│ │ │ ├── rainy-7.svg
│ │ │ ├── snowy-1.svg
│ │ │ ├── snowy-2.svg
│ │ │ ├── snowy-3.svg
│ │ │ ├── snowy-4.svg
│ │ │ ├── snowy-5.svg
│ │ │ ├── snowy-6.svg
│ │ │ ├── thunder.svg
│ │ │ ├── weather-sprite.svg
│ │ │ ├── weather.svg
│ │ │ ├── weather_sagittarius.svg
│ │ │ └── weather_sunset.svg
│ │ │ ├── weather-card-editor.js
│ │ │ ├── weather-card-editor.js.gz
│ │ │ ├── weather-card.js
│ │ │ └── weather-card.js.gz
│ ├── custom-lovelace
│ │ ├── air-purifier
│ │ │ ├── card.js
│ │ │ ├── idle.png
│ │ │ ├── standby.gif
│ │ │ └── working.gif
│ │ ├── card-tools.js
│ │ ├── compact-custom-header-editor.js
│ │ ├── compact-custom-header.js
│ │ ├── courtain
│ │ │ └── card.js
│ │ ├── light-card.js
│ │ ├── linak-desk
│ │ │ ├── card.js
│ │ │ ├── table_bottom.png
│ │ │ ├── table_middle.png
│ │ │ └── table_top.png
│ │ ├── qr-card
│ │ │ ├── card.js
│ │ │ └── qrcode.js
│ │ ├── thermostat-card
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── VERSION
│ │ │ ├── changelog.md
│ │ │ ├── thermostat-card.js
│ │ │ └── thermostat-card.lib.js
│ │ ├── thermostat
│ │ │ ├── card.js
│ │ │ └── lib.js
│ │ ├── transit
│ │ │ └── card.js
│ │ └── vacuum
│ │ │ ├── card.js
│ │ │ ├── robot_bg.png
│ │ │ └── robot_bg_disable.png
│ ├── custom_ui
│ │ ├── .gitkeep
│ │ ├── dynamic-wallpaper.js
│ │ ├── kkm-card.js
│ │ └── monster-card.js
│ ├── food_off.gif
│ ├── food_on.gif
│ ├── icons
│ │ └── weather_icons
│ │ │ └── animated
│ │ │ ├── cloudy-day-1.svg
│ │ │ ├── cloudy-day-2.svg
│ │ │ ├── cloudy-day-3.svg
│ │ │ ├── cloudy-night-1.svg
│ │ │ ├── cloudy-night-2.svg
│ │ │ ├── cloudy-night-3.svg
│ │ │ ├── cloudy.svg
│ │ │ ├── day.svg
│ │ │ ├── night.svg
│ │ │ ├── rainy-1.svg
│ │ │ ├── rainy-2.svg
│ │ │ ├── rainy-3.svg
│ │ │ ├── rainy-4.svg
│ │ │ ├── rainy-5.svg
│ │ │ ├── rainy-6.svg
│ │ │ ├── rainy-7.svg
│ │ │ ├── snowy-1.svg
│ │ │ ├── snowy-2.svg
│ │ │ ├── snowy-3.svg
│ │ │ ├── snowy-4.svg
│ │ │ ├── snowy-5.svg
│ │ │ ├── snowy-6.svg
│ │ │ ├── thunder.svg
│ │ │ ├── weather-sprite.svg
│ │ │ ├── weather.svg
│ │ │ ├── weather_sagittarius.svg
│ │ │ └── weather_sunset.svg
│ ├── js
│ │ └── lovelace-swiper.js
│ ├── kiosk
│ │ └── kiosk.js
│ ├── ping.txt
│ ├── presence
│ │ ├── arek
│ │ │ ├── away.png
│ │ │ ├── codesthq.png
│ │ │ └── home.png
│ │ └── ola
│ │ │ ├── away.png
│ │ │ ├── codesthq.png
│ │ │ └── home.png
│ ├── wallpapers
│ │ ├── afternoon.png
│ │ ├── evening.png
│ │ ├── morning.png
│ │ └── night.png
│ ├── working_off.gif
│ └── working_on.gif
└── zwave_device_config.yaml
├── mkdocs.yml
├── mosquitto
└── mosquitto.conf
├── nextcloud
├── Dockerfile
├── Upgrade.md
├── supervisord.conf
└── www.conf
├── node-red
└── Dockerfile
├── notes
├── Dockerfile
└── entrypoint
├── orion
├── Dockerfile
├── config.example.json
└── entrypoint.sh
├── panel
├── index.html
├── logo.svg
├── main.js
├── package.json
├── renderer.js
├── wakeup.js
└── yarn.lock
├── postgresql
└── init-user-db.sh
├── provision
├── .gitkeep
├── install_roles.yml
├── inventory.ini.example
├── inventory.vagrant.ini
├── playbook.yml
├── playbooks
│ ├── anarchopi
│ │ ├── adguard
│ │ │ ├── adguard.yaml
│ │ │ └── ads.conf.j2
│ │ ├── anarchopi.yaml
│ │ ├── bin
│ │ │ └── unlock-hard-drive
│ │ ├── bitcoind
│ │ │ ├── bitcoin.yaml
│ │ │ ├── bitcoind.service
│ │ │ └── btc_explorer.conf.j2
│ │ ├── electrum
│ │ │ ├── backup.j2
│ │ │ ├── electrs.service
│ │ │ ├── electrum.conf.j2
│ │ │ └── electrum.yaml
│ │ ├── ipfs
│ │ │ ├── ipfs.conf.j2
│ │ │ ├── ipfs.service
│ │ │ └── ipfs.yaml
│ │ ├── lnd
│ │ │ ├── lnd.service
│ │ │ └── lnd.yaml
│ │ └── torrents
│ │ │ ├── torrents.conf.j2
│ │ │ └── torrents.yaml
│ ├── blog
│ │ ├── blog.conf.j2
│ │ └── blog.yaml
│ ├── cat_feeder
│ │ ├── cat-motion.service
│ │ ├── cat.yaml
│ │ ├── glances.service
│ │ ├── led.service
│ │ ├── motioneye.conf
│ │ ├── motioneye.service
│ │ └── servo.service
│ ├── ci
│ │ ├── ci.conf.j2
│ │ └── ci.yaml
│ ├── decibel_meter
│ │ ├── asound.conf
│ │ ├── configure-driver.sh
│ │ ├── decibel_meter.yaml
│ │ ├── glances.service
│ │ └── meter.service
│ ├── detox
│ │ ├── detox.conf.j2
│ │ └── detox.yaml
│ ├── docker
│ │ ├── docker-netshare.service
│ │ └── docker.yaml
│ ├── doh_dns
│ │ ├── doh_dns.confg.j2
│ │ └── doh_dns.yaml
│ ├── errbit
│ │ ├── errbit.conf.j2
│ │ └── errbit.yaml
│ ├── esphome
│ │ ├── esphome.conf.j2
│ │ └── esphome.yaml
│ ├── ethereum
│ │ ├── ethereum.conf.j2
│ │ └── ethereum.yaml
│ ├── firewall.yaml
│ ├── git
│ │ ├── git.conf.j2
│ │ └── git.yaml
│ ├── gotify
│ │ ├── gotify.conf.j2
│ │ └── gotify.yaml
│ ├── grafana
│ │ ├── grafana.conf.j2
│ │ └── grafana.yaml
│ ├── grocy
│ │ ├── grocy.conf.j2
│ │ └── grocy.yaml
│ ├── home-assistant
│ │ ├── home-assistant.conf.j2
│ │ └── home-assistant.yaml
│ ├── housekeeping.yaml
│ ├── master_of_stonks
│ │ ├── master_of_stonks.yaml
│ │ └── mos.j2
│ ├── mastodon
│ │ ├── mastodon.conf.j2
│ │ └── mastodon.yaml
│ ├── matrix
│ │ ├── im.conf.j2
│ │ └── matrix.yaml
│ ├── media
│ │ ├── audiobook.conf.j2
│ │ ├── glances.service
│ │ ├── media.conf.j2
│ │ ├── media.yaml
│ │ ├── plex.conf.j2
│ │ └── sonarr.conf.j2
│ ├── nextcloud
│ │ ├── nextcloud.conf.j2
│ │ ├── nextcloud.yaml
│ │ └── oo.conf.j2
│ ├── node-red
│ │ ├── node-red.conf.j2
│ │ └── node-red.yaml
│ ├── notes
│ │ ├── notes.conf.j2
│ │ └── notes.yaml
│ ├── packages.yaml
│ ├── photos
│ │ ├── photos.conf.j2
│ │ └── photos.yaml
│ ├── rss_bridge
│ │ ├── rss_bridge.conf.j2
│ │ └── rss_bridge.yaml
│ ├── simplelogin
│ │ ├── pgsql-relay-domains.cf.j2
│ │ ├── pgsql-transport-maps.cf.j2
│ │ ├── simple-login.conf.j2
│ │ └── simplelogin.yaml
│ ├── smart-house-unlock
│ ├── smasher
│ │ ├── smasher.conf.j2
│ │ └── smasher.yaml
│ ├── speedtest
│ │ ├── speedtest.conf.j2
│ │ └── speedtest.yaml
│ ├── transfer
│ │ ├── transfer.conf.j2
│ │ └── transfer.yaml
│ ├── vacuum
│ │ ├── upload_map.sh
│ │ ├── vacuum.yaml
│ │ └── watch_map.sh
│ ├── youtube
│ │ ├── youtube.conf.j2
│ │ └── youtube.yaml
│ ├── ytd
│ │ ├── ytd.conf.j2
│ │ └── ytd.yaml
│ └── zwave
│ │ ├── zwave.service.j2
│ │ └── zwave.yaml
├── templates
│ ├── .env.local.j2
│ ├── 404.html
│ ├── etc
│ │ ├── default
│ │ │ └── cloudflared.j2
│ │ ├── dnsmasq.d
│ │ │ └── 02-localhosts.conf.j2
│ │ ├── fail2ban
│ │ │ ├── filter.d
│ │ │ │ ├── ha.conf
│ │ │ │ ├── mosquitto-auth.conf
│ │ │ │ ├── nginx-badbots.conf
│ │ │ │ ├── nginx-forbidden.conf
│ │ │ │ ├── nginx-http-auth.conf
│ │ │ │ └── nginx-noscript.conf
│ │ │ └── jail.d
│ │ │ │ └── ha.conf
│ │ ├── nginx
│ │ │ └── sites-enabled
│ │ │ │ ├── .gitkeep
│ │ │ │ ├── airsonic.conf.j2
│ │ │ │ ├── default.conf.j2
│ │ │ │ ├── firefly.conf.j2
│ │ │ │ ├── monio.conf.j2
│ │ │ │ ├── podcast.conf.j2
│ │ │ │ └── rss.conf.j2
│ │ ├── pihole
│ │ │ └── lan.list.j2
│ │ └── systemd
│ │ │ ├── bt-mqtt-gateway.service
│ │ │ └── resolved.conf
│ ├── home
│ │ └── pi
│ │ │ └── mqtt2rf
│ │ │ └── config.yaml.j2
│ ├── lib
│ │ └── systemd
│ │ │ └── system
│ │ │ ├── cloudflared.service.j2
│ │ │ ├── health.service.j2
│ │ │ ├── kiosk.service.j2
│ │ │ ├── media.service.j2
│ │ │ ├── smart-house.service.j2
│ │ │ └── support.service.j2
│ └── var
│ │ └── www
│ │ └── html
│ │ ├── 403.html
│ │ └── index.html
└── vars.yml.example
├── requirements.txt
├── scripts
├── health.sh
├── media.sh
├── pihole.sh
├── smart-house.sh
├── support.sh
└── zwave.sh
├── tor
├── Dockerfile
└── torrc
├── vacuum
├── .gitignore
├── Dockerfile
├── bin
│ ├── build
│ ├── run
│ └── upload
├── index.js
├── map.js
├── package.json
├── public
│ ├── .gitkeep
│ └── index.html
└── yarn.lock
├── youtube
└── Dockerfile
└── zwave
├── Dockerfile
├── docker-entrypoint.sh
└── options.js
/.env.busix.example:
--------------------------------------------------------------------------------
1 | DATABASE_URL=postgres://postgres:postgres@database:5434
2 | REDIS_URL=redis://localhost:6380/11
3 |
4 | SECRET_KEY_BASE=sadasd
5 | RAILS_MAX_THREADS=25
6 | SIDEKIQ_CONCURRENCY=50
7 | SIDEKIQ_BASIC_AUTH_PASSWORD="yolo"
8 | RAILS_LOG_TO_STDOUT=true
9 |
--------------------------------------------------------------------------------
/.env.crontab.example:
--------------------------------------------------------------------------------
1 | CLOUDFLARE_KEY=
2 | CLOUDFLARE_EMAIL=
3 | MAIN_DOMAIN=test.local
4 | HOME_ASSISTANT_SUBDOMAIN=kartofel
5 | HOME_ASSISTANT_VPNDOMAIN=yolo
6 | HOME_ASSISTANT_IPFSDOMAIN=gejtway
7 |
--------------------------------------------------------------------------------
/.env.dpodcast.example:
--------------------------------------------------------------------------------
1 | YOUTUBE_API_KEY=XXXX
2 | VIDEOS_TO_TAKE=5
3 | REDIS_URL=redis://redis:6379/7
4 | IPFS_GATEWAY=https://ipfs.io/
5 | IPFS_API_ENDPOINT=/dns4/ipfs/tcp/5001/http
6 | IPNS_KEY_NAME=podcasts
7 | IPNS_KEY_HASH=Qme29vjdyVTdrJnZj857hr4gZN
8 |
--------------------------------------------------------------------------------
/.env.firefly.example:
--------------------------------------------------------------------------------
1 | APP_URL=https://go.test
2 | TRUSTED_PROXIES=**
3 | FF_DB_HOST=database
4 | FF_DB_CONNECTION=pgsql
5 | FF_DB_NAME=firefly
6 | FF_DB_USER=firefly
7 | FF_DB_PASSWORD=xxxxx
8 | FF_APP_KEY=xxxxx
9 | FF_APP_ENV=local
10 |
--------------------------------------------------------------------------------
/.env.grafana.example:
--------------------------------------------------------------------------------
1 | GF_SECURITY_ADMIN_PASSWORD=password
2 | GF_SECURITY_ADMIN_USER=admin
3 | GF_INSTALL_PLUGINS=grafana-clock-panel,briangann-gauge-panel,natel-plotly-panel,grafana-simple-json-datasource
--------------------------------------------------------------------------------
/.env.influxdb.example:
--------------------------------------------------------------------------------
1 | INFLUXDB_REPORTING_DISABLED=false
2 | INFLUXDB_DB=home_assistant
3 | INFLUXDB_HTTP_AUTH_ENABLED=true
4 | INFLUXDB_ADMIN_USER=home_assistant
5 | INFLUXDB_ADMIN_PASSWORD=password
6 |
--------------------------------------------------------------------------------
/.env.local.example:
--------------------------------------------------------------------------------
1 | HOME_ASSISTANT_URL=
2 | RSYNC_PASSWORD=
3 |
--------------------------------------------------------------------------------
/.env.nextcloud.example:
--------------------------------------------------------------------------------
1 | POSTGRES_HOST=database
2 | POSTGRES_USER=nextcloud
3 | POSTGRES_DB=xxxx
4 | POSTGRES_PASSWORD=xxxxx
5 |
--------------------------------------------------------------------------------
/.env.pihole.example:
--------------------------------------------------------------------------------
1 | WEBPASSWORD=password
2 | DNS1=1.1.1.1
3 | DNS2=1.0.0.1
4 | ServerIP=127.0.0.1
5 |
--------------------------------------------------------------------------------
/.env.plex.example:
--------------------------------------------------------------------------------
1 | TZ=Warsaw
2 | PLEX_CLAIM=claim-AAAAAAAAA
--------------------------------------------------------------------------------
/.env.postgresql.example:
--------------------------------------------------------------------------------
1 | POSTGRES_USER=postgres
2 | POSTGRES_PASSWORD=postgres
3 | POSTGRES_DB=homeassistant
4 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: https://www.buymeacoffee.com/r6sWkVoeU
13 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.3.7
2 |
--------------------------------------------------------------------------------
/.tool-versions:
--------------------------------------------------------------------------------
1 | ruby 2.5.0
2 |
--------------------------------------------------------------------------------
/Brewfile:
--------------------------------------------------------------------------------
1 | brew 'fswatch'
2 |
--------------------------------------------------------------------------------
/Vagrantfile:
--------------------------------------------------------------------------------
1 | Vagrant.configure(2) do |config|
2 | config.vm.box = "macbury/bionic64"
3 | config.vm.box_version = "1.07"
4 |
5 | config.ssh.forward_agent = true
6 | config.ssh.insert_key = false
7 |
8 | config.vm.network "forwarded_port", guest: 80, host: 7000
9 | config.vm.network "forwarded_port", guest: 443, host: 443
10 |
11 | config.vm.provider "virtualbox" do |v|
12 | v.memory = 2524
13 | v.cpus = 2
14 | v.gui = true
15 | end
16 | end
17 |
--------------------------------------------------------------------------------
/appdaemon/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/appdaemon/.gitkeep
--------------------------------------------------------------------------------
/appdaemon/dashboards/Hello.dash:
--------------------------------------------------------------------------------
1 | #
2 | # Main arguments, all optional
3 | #
4 | title: Hello Panel
5 | widget_dimensions: [120, 120]
6 | widget_margins: [5, 5]
7 | columns: 8
8 |
9 | label:
10 | widget_type: label
11 | text: Hello World
12 |
13 | layout:
14 | - label(2x2)
15 |
--------------------------------------------------------------------------------
/btc-explorer/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:8 as builder
2 |
3 | RUN apt-get -yqq install git \
4 | && git clone --depth 1 --single-branch --branch master https://github.com/janoside/btc-rpc-explorer \
5 | && cd /btc-rpc-explorer \
6 | && npm install
7 |
8 | FROM node:8-alpine
9 | WORKDIR /btc-rpc-explorer
10 | COPY --from=builder /btc-rpc-explorer .
11 | CMD npm start
12 | EXPOSE 3002
--------------------------------------------------------------------------------
/docker-compose.health.yaml:
--------------------------------------------------------------------------------
1 | # Small laboratory
2 | version: '3.5'
3 |
4 | services:
5 | speedtest:
6 | image: macbury/speedtest:latest
7 | env_file:
8 | - '.env.speedtest'
9 | ports:
10 | - 6888:80
11 |
--------------------------------------------------------------------------------
/docker-compose.media.yaml:
--------------------------------------------------------------------------------
1 | # All media services, that don't need to be always online
2 | version: '3.5'
3 |
4 | services:
5 | sonarr:
6 | image: linuxserver/sonarr
7 | ports:
8 | - 8989:8989
9 | environment:
10 | PUID: 0
11 | PGID: 0
12 | TZ: "Europe/Warsaw"
13 | volumes:
14 | - .docker/data/snarr:/config
15 | - /mnt/MoviesAndTV:/tv
16 | - /home/downloads:/downloads
17 |
18 | plex:
19 | network_mode: host
20 | image: plexinc/pms-docker:latest
21 | env_file:
22 | - .env.plex
23 | volumes:
24 | - .docker/data/plex/config:/config
25 | - .docker/data/plex/transcode:/transcode
26 | - /mnt:/data
27 |
--------------------------------------------------------------------------------
/docker-compose.zwave.yaml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | zwave:
4 | build:
5 | context: ./zwave
6 | dockerfile: Dockerfile
7 | network_mode: host
8 | security_opt:
9 | - seccomp:unconfined
10 | devices:
11 | - "/dev/ttyACM0"
12 | volumes:
13 | - .docker/data/zwavejs/cache:/cache
14 | ports:
15 | - "9312:3000"
16 | restart: unless-stopped
17 | env_file:
18 | - '.env.zwave'
19 |
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/README.md:
--------------------------------------------------------------------------------
1 | https://www.youtube.com/watch?v=sCOkuyH7CPo
2 |
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/base.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/base.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/bowl.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/bowl.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/fc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/fc.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/final.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/final.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/header.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/parts.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/parts.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/printing.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/printing.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/ration_container.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/ration_container.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/servo_holder.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/servo_holder.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/tc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/tc.jpg
--------------------------------------------------------------------------------
/docs/DIY/CatFeeder/ultimate-3d-printed-pet-feeder-v4.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/CatFeeder/ultimate-3d-printed-pet-feeder-v4.zip
--------------------------------------------------------------------------------
/docs/DIY/LedStrips/index.md:
--------------------------------------------------------------------------------
1 | ## Page in progress :P
2 | Desk led strip: 39
3 | Pin: D3
4 |
5 | https://www.home-assistant.io/components/light.mqtt/
6 | https://github.com/macbury/mqtt_led_strip
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/docs/DIY/RiggadLamp/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/DIY/RiggadLamp/header.jpg
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/afternoon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/afternoon.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/air_purifier.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/air_purifier.gif
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/evening.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/evening.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/kkm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/kkm.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/linak.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/linak.gif
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/night.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/night.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/public_transit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/public_transit.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/vacuum.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/vacuum.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Lovelace/vacuum_zones.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Lovelace/vacuum_zones.jpg
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/bathroom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/bathroom.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/bedroom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/bedroom.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/cameras.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/cameras.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/corridor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/corridor.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/dashboard.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/index.md:
--------------------------------------------------------------------------------
1 | ### Dashboard
2 | [](dashboard.png)
3 | ### Living Room
4 | [](living_room.png)
5 | ### Work Desk
6 | [](work_desk.png)
7 | ### Bedroom
8 | [](bedroom.png)
9 | ### Kitchen
10 | [](kitchen.png)
11 | ### Bathroom
12 | [](bathroom.png)
13 | ### Corridor
14 | [](corridor.png)
15 | ### Monitoring
16 | [](cameras.png)
17 | ### Work
18 | [](work.png)
19 | ### Network
20 | [](networking.png)
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/kitchen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/kitchen.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/living_room.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/living_room.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/networking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/networking.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/work.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/work.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Screens/work_desk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Screens/work_desk.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Vacuum/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Vacuum/header.jpg
--------------------------------------------------------------------------------
/docs/HomeAssistant/Vacuum/vacuum.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Vacuum/vacuum.png
--------------------------------------------------------------------------------
/docs/HomeAssistant/Vacuum/vacuum_zones.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/Vacuum/vacuum_zones.jpg
--------------------------------------------------------------------------------
/docs/HomeAssistant/VoiceControl/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/VoiceControl/header.jpg
--------------------------------------------------------------------------------
/docs/HomeAssistant/lovelace-presence.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/HomeAssistant/lovelace-presence.png
--------------------------------------------------------------------------------
/docs/Services/FirefoxSyncServer.md:
--------------------------------------------------------------------------------
1 | https://mozilla-services.readthedocs.io/en/latest/howtos/run-sync-1.5.html
2 | identity.sync.tokenserver.uri: http://localhost:5000/token/1.0/sync/1.5
--------------------------------------------------------------------------------
/docs/Software/Backup.md:
--------------------------------------------------------------------------------
1 | Nothing fancy here. Everyday at 2:00 am cron job triggers backup using command `smart-house backup`. All processes are stopped and everything is compressed to one zip file that is later transferred to my QNAP NAS.
--------------------------------------------------------------------------------
/docs/Software/Bitcoin.md:
--------------------------------------------------------------------------------
1 | # Reference
2 | https://stadicus.github.io/RaspiBolt/
--------------------------------------------------------------------------------
/docs/Software/Degoogling.md:
--------------------------------------------------------------------------------
1 | # Removing google from my life
2 |
3 | These are services that I'm using to replace Google/Apple/Microsoft or other BigTech solutions
4 |
5 | * Search engine - [DuckDuckGo](https://duckduckgo.com/)
6 | * E-Mail - [ProtonMail](https://protonmail.com/)
7 | * YouTube - [Invidious](https://invidio.us/)
8 | * RSS Reader - [Miniflux](https://miniflux.app/)
9 | * AppleID/Random Email - [SimpleLogin](https://simplelogin.io/)
10 | * Netflix - [Plex](https://www.plex.tv/)
11 | * Android Notifications - [Gotify](https://gotify.net/)
12 | * Google Contacts/Calendars - [NextCloud](https://nextcloud.com/)
13 | * Google Drive - [QNap](https://www.qnap.com/solution/smb-solution-qsync/en-us/)
14 | * Password manager - [Enpass](https://www.enpass.io/)
15 | * Bookmarks/History - [FireFox Sync Server](https://mozilla-services.readthedocs.io/en/latest/howtos/run-sync-1.5.html)
--------------------------------------------------------------------------------
/docs/Software/Encryption.md:
--------------------------------------------------------------------------------
1 | Most of credentials is stored in plain .env files, and they are pretty sensitive(duh). Most configurations of HomeAssistant is based on installing everything yolo on RaspberryPi without and counting on that most bouglars will ignore this small box.
2 |
3 | My setup is stored on encrypted LUKS partition under `/smart-house`. After reboot, to decrypt partition I have small script named `smart-house-unlock` that asks for password, decrypts partition and starts all services.
--------------------------------------------------------------------------------
/docs/Software/Nextcloud.md:
--------------------------------------------------------------------------------
1 | docker exec --user www-data support_nextcloud_1 php occ upgrade
--------------------------------------------------------------------------------
/docs/Software/Nginx.md:
--------------------------------------------------------------------------------
1 | [Nginx](https://nginx.org/) is very nice web server used to proxy all traffic from docker containers. SSL certificates are provided by [Lets Encrypt](https://letsencrypt.org/).
--------------------------------------------------------------------------------
/docs/Software/Ports.md:
--------------------------------------------------------------------------------
1 | Port mapping for services that are running in docker
2 |
3 | | Service name | Port |
4 | | -------------: | ------------- |
5 | | Redis | 6379 |
6 | | MQTT | 4105 |
7 | | NextCloud | 4111 |
8 | | Influxdb | 18086 |
9 | | Postgresql | 4101 |
10 | | Home-Assistant | 4102 |
11 | | Grafana | 4100 |
12 | | PiHole | 4104 |
13 | | Glances | 4108 |
14 | | Portainer | 4112 |
15 | | Plex | 32400 |
16 | | Lidarr | 8990 |
17 | | Sonarr | 8989 |
18 | | Transmission | 8112,51413 |
19 | | Calendar | 4111 |
20 | | Plex | 32400, 3005, 5353, 1900, 8324, 32469, 32410, 32412, 32413, 32414 |
21 | | YTDL | 9292 |
22 | | Jupyter Notebook | 10000 |
23 | | Firefly iii | 10001 |
24 | | vacuum endpoint | 10005 |
25 | | busix | 10008 |
--------------------------------------------------------------------------------
/docs/Software/TvDashboard.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/Software/TvDashboard.md
--------------------------------------------------------------------------------
/docs/Software/Upgrading.md:
--------------------------------------------------------------------------------
1 | Most of upgrades are done by downloading or building new docker container.
2 |
3 | ### Upgrading Home Assistant
4 | Edit version of docker image in first line of Dockerfile inside `home-assistant` directory. Then run command:
5 |
6 | ```bash
7 | smart-house upgrade
8 | smart-house restart
9 | ```
10 |
11 | If everything still works, commit changes and tag the release:
12 |
13 | ```bash
14 | git commit -a -m "New upgrade"
15 | git tag v0.93.2
16 | git push origin master
17 | git push origin v0.93.2
18 | ```
19 |
20 | ### Upgrading rest of stuff
21 |
22 | Edit `docker-compose.yaml`, increase version for image. Because we have our dns server inside Docker container the best thing to do is to run pull first, and then restart all containers:
23 |
24 | ```bash
25 | smart-house docker-compose pull name-of-upgraded-service
26 | smart-house restart
27 | ```
--------------------------------------------------------------------------------
/docs/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/docs/header.jpg
--------------------------------------------------------------------------------
/ff-sync/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mozilla/syncserver:latest
2 |
3 | USER root
4 | RUN apk --no-cache update && apk add --no-cache postgresql-libs && apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev
5 | RUN pip install psycopg2
6 | USER app
--------------------------------------------------------------------------------
/helpers.md:
--------------------------------------------------------------------------------
1 | # Create big file
2 |
3 | I can then remove it if I run out of disk space and try to remove stuff from database etc.
4 |
5 | truncate -s 1GB /smart-house/tmp/lock.data
6 |
--------------------------------------------------------------------------------
/home-assistant/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/.gitkeep
--------------------------------------------------------------------------------
/home-assistant/automations/adguard.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/automations/adguard.yaml
--------------------------------------------------------------------------------
/home-assistant/automations/agd.yaml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/home-assistant/automations/alexa.yaml:
--------------------------------------------------------------------------------
1 | - alias: Inform about alexa timer off
2 | trigger:
3 | platform: event
4 | event_type: ifttt_webhook_received
5 | event_data:
6 | action: alexa_timer_off
7 | action:
8 | - service: notify.all
9 | data:
10 | message: 'Alexa timer finished countdown!'
--------------------------------------------------------------------------------
/home-assistant/automations/bathroom.yaml:
--------------------------------------------------------------------------------
1 | - alias: Close blinds in living room
2 | trigger:
3 | platform: event
4 | event_type: xiaomi_aqara.click
5 | event_data:
6 | entity_id: binary_sensor.bathroom_left_button
7 | click_type: single
8 | action:
9 | - service: cover.close_cover
10 | data:
11 | entity_id: cover.living_room
12 |
--------------------------------------------------------------------------------
/home-assistant/automations/blinds.yaml:
--------------------------------------------------------------------------------
1 | - alias: Open blinds if humans come home
2 | trigger:
3 | - platform: state
4 | entity_id: group.family
5 | to: 'home'
6 | from: 'not_home'
7 | condition:
8 | condition: and
9 | conditions:
10 | - condition: state
11 | entity_id: sun.sun
12 | state: above_horizon
13 | action:
14 | - service: cover.open_cover
15 | data:
16 | entity_id: cover.living_room
17 |
18 | - alias: Close blinds if it is too bright
19 | trigger:
20 | - platform: state
21 | entity_id: binary_sensor.too_bright
22 | to: 'on'
23 | from: 'off'
24 | action:
25 | - service: cover.close_cover
26 | data:
27 | entity_id: cover.living_room
28 |
--------------------------------------------------------------------------------
/home-assistant/automations/disasters.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/automations/disasters.yaml
--------------------------------------------------------------------------------
/home-assistant/automations/external.yaml:
--------------------------------------------------------------------------------
1 | ../automations.yaml
--------------------------------------------------------------------------------
/home-assistant/automations/health.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/automations/health.yaml
--------------------------------------------------------------------------------
/home-assistant/automations/home-assistant.yaml:
--------------------------------------------------------------------------------
1 | - alias: 'Set theme at startup and notify about that event'
2 | initial_state: 'on'
3 | trigger:
4 | - platform: homeassistant
5 | event: start
6 | action:
7 | - service: frontend.set_theme
8 | data:
9 | name: darkblue
10 | - service: automation.turn_on
11 | data:
12 | entity_id: all
13 | - delay: '00:00:45'
14 | - service: notify.all
15 | data:
16 | title: 'Home Assistant'
17 | message: 'Home assistant finished booting'
18 | - service: automation.turn_on
19 | data:
20 | entity_id: all
21 |
22 | - alias: Update notifications
23 | trigger:
24 | - platform: state
25 | entity_id: updater.updater
26 | action:
27 | service: notify.all
28 | data_template:
29 | title: 'New Home Assistant Release'
30 | message: "Home Assistant {{ states.updater.updater.state }} is now available."
--------------------------------------------------------------------------------
/home-assistant/automations/humidifier.yaml:
--------------------------------------------------------------------------------
1 | - alias: Send notification about humidifier water is out
2 | trigger:
3 | - platform: numeric_state
4 | entity_id: sensor.living_room_humidifier_current
5 | below: 0.01
6 | for:
7 | minutes: 10
8 | condition:
9 | condition: and
10 | conditions:
11 | - condition: state
12 | entity_id: 'switch.living_room_humidifier'
13 | state: 'on'
14 | - condition: numeric_state
15 | entity_id: sensor.living_room_humidifier_current
16 | below: 0.01
17 | action:
18 | - service: notify.all
19 | data:
20 | message: 'Living room humidifier needs refill!'
--------------------------------------------------------------------------------
/home-assistant/automations/media_player.yaml:
--------------------------------------------------------------------------------
1 | - alias: 'Change spotify source to soundbar if alexa starts play music'
2 | trigger:
3 | platform: state
4 | entity_id: media_player.living_room
5 | to: 'playing'
6 | action:
7 | - service: media_player.turn_on
8 | entity_id: media_player.soundbar
9 | - service: media_player.select_source
10 | data:
11 | entity_id: media_player.spotify
12 | source: 'wifi'
13 | - service: media_player.select_source
14 | data:
15 | entity_id: media_player.spotify
16 | source: 'Soundbar'
17 | - service: media_player.volume_set
18 | data:
19 | entity_id: media_player.soundbar
20 | volume_level: 0.25
--------------------------------------------------------------------------------
/home-assistant/automations/octoprint.yaml:
--------------------------------------------------------------------------------
1 | - alias: Send notification if print is completed
2 | trigger:
3 | - platform: state
4 | entity_id: sensor.octoprint_current_state
5 | from: 'Printing'
6 | to: 'Operational'
7 | action:
8 | - service: notify.all
9 | data:
10 | message: 'Print is complete!'
11 |
--------------------------------------------------------------------------------
/home-assistant/automations/pizza.yml:
--------------------------------------------------------------------------------
1 | - alias: Switch off pizza mode after 4 hours
2 | trigger:
3 | platform: state
4 | entity_id: input_boolean.pizza
5 | for:
6 | hours: 4
7 | action:
8 | service: input_boolean.turn_off
9 | entity_id: input_boolean.pizza
--------------------------------------------------------------------------------
/home-assistant/automations/privacy.yaml:
--------------------------------------------------------------------------------
1 | - alias: Clear Alexa History
2 | trigger:
3 | platform: time_pattern
4 | minutes: '/15'
5 | action:
6 | - service: alexa_media.clear_history
--------------------------------------------------------------------------------
/home-assistant/automations/system.yaml:
--------------------------------------------------------------------------------
1 | - alias: Switch rack fan if system is too hot
2 | trigger:
3 | platform: numeric_state
4 | entity_id: sensor.corridor_pawlacz_temperature
5 | above: 28
6 | for:
7 | minutes: 5
8 | action:
9 | - service: switch.turn_on
10 | entity_id: switch.rack_fan
11 |
12 | - alias: Switch rack fan if system is cool
13 | trigger:
14 | platform: numeric_state
15 | entity_id: sensor.corridor_pawlacz_temperature
16 | below: 28
17 | for:
18 | minutes: 5
19 | action:
20 | - service: switch.turn_off
21 | entity_id: switch.rack_fan
22 |
23 | - alias: Restart router
24 | trigger:
25 | platform: time
26 | at: '02:50:00'
27 | action:
28 | - service: switch.turn_off
29 | entity_id: switch.router
30 | - delay: '0:00:10'
31 | - service: switch.turn_on
32 | entity_id: switch.router
--------------------------------------------------------------------------------
/home-assistant/automations/torrents.yaml:
--------------------------------------------------------------------------------
1 | - alias: Notify about completed torrent
2 | trigger:
3 | platform: event
4 | event_type: transmission_downloaded_torrent
5 | action:
6 | service: notify.all
7 | data_template:
8 | title: "Transmission"
9 | message: "Torrent downloaded!"
10 |
11 | # - alias: 'Add torrent'
12 | # trigger:
13 | # - platform: event
14 | # event_type: telegram_command
15 | # event_data:
16 | # command: '/t'
17 | # chat_id: 66368059
18 | # action:
19 | # - service: notify.telegram_arek
20 | # data_template:
21 | # message: Hold on, adding yer stuff...
22 | # - service: transmission.add_torrent
23 | # data_template:
24 | # torrent: '{{ trigger.event.data.args | join(" ") }}'
--------------------------------------------------------------------------------
/home-assistant/automations/tv.yaml:
--------------------------------------------------------------------------------
1 | - alias: Change soundbar source after TV is switched on
2 | trigger:
3 | platform: state
4 | entity_id: media_player.tv
5 | from: 'off'
6 | to: 'on'
7 | action:
8 | - delay: '00:00:05'
9 | - service: media_player.volume_set
10 | data:
11 | entity_id: media_player.soundbar
12 | volume_level: 0.40
13 |
14 | - alias: Adjust volume after PS4 boots up
15 | trigger:
16 | platform: state
17 | entity_id: media_player.playstation
18 | to: 'playing'
19 | action:
20 | - service: media_player.volume_set
21 | data:
22 | entity_id: media_player.soundbar
23 | volume_level: 0.45
--------------------------------------------------------------------------------
/home-assistant/components/alexa.yaml:
--------------------------------------------------------------------------------
1 | smart_home:
2 | endpoint: https://api.amazonalexa.com/v3/events
3 | client_id: !env_var HOME_ASSISTANT_ALEXA_CLIENT_ID
4 | client_secret: !env_var HOME_ASSISTANT_ALEXA_CLIENT_SECRET
5 | filter:
6 | include_domains:
7 | - light
8 | - scene
9 | include_entities:
10 | - script.consume_pepsi
11 | - switch.living_room_humidifier
12 | - cover.living_room
13 | - media_player.tv
14 | - switch.pizza
15 | - switch.adguard_protection
16 | - media_player.playstation
17 | - media_player.soundbar
18 | - switch.macmini
19 | - script.find_vacuum
20 | - script.clean_kitchen
21 | - script.clean_bedroom
22 | - script.clean_corridor
23 | - script.clean_living_room
24 | - script.clean_bathroom
25 | - script.stop_cleaning
26 | - script.start_cleaning
27 | - script.feed_the_cat
--------------------------------------------------------------------------------
/home-assistant/components/alexa_media.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/components/alexa_media.yaml
--------------------------------------------------------------------------------
/home-assistant/components/binary_sensor.yaml:
--------------------------------------------------------------------------------
1 | - platform: iss
2 | show_on_map: false
3 |
4 | - platform: workday
5 | country: PL
6 |
7 |
--------------------------------------------------------------------------------
/home-assistant/components/calendar.yaml:
--------------------------------------------------------------------------------
1 | - platform: caldav
2 | username: !env_var HOME_ASSISTANT_CALENDAR_USER
3 | password: !env_var HOME_ASSISTANT_CALENDAR_PASSWORD
4 | url: !env_var HOME_ASSISTANT_CALENDAR_URL
--------------------------------------------------------------------------------
/home-assistant/components/camera.yaml:
--------------------------------------------------------------------------------
1 | - platform: xiaomi_cloud_map_extractor
2 | name: Vacuum Map
3 | host: 192.168.1.131
4 | country: "sg"
5 | token: !env_var HOME_ASSISTANT_VACUUM_TOKEN
6 | username: !env_var HOME_ASSISTANT_XIAOMI_USERNAME
7 | password: !env_var HOME_ASSISTANT_XIAOMI_PASSWORD
8 | draw: ['all']
9 | colors:
10 | color_map_outside: [0,0,0,0]
11 | attributes:
12 | - calibration_points
13 | - charger
14 | - cleaned_rooms
15 | - country
16 | - goto
17 | - goto_path
18 | - goto_predicted_path
19 | - image
20 | - is_empty
21 | - map_name
22 | - no_go_areas
23 | - no_mopping_areas
24 | - obstacles
25 | - ignored_obstacles
26 | - obstacles_with_photo
27 | - ignored_obstacles_with_photo
28 | - path
29 | - room_numbers
30 | - rooms
31 | - vacuum_position
32 | - vacuum_room
33 | - vacuum_room_name
34 | - walls
35 | - zones
36 |
--------------------------------------------------------------------------------
/home-assistant/components/climate.yaml:
--------------------------------------------------------------------------------
1 | - platform: zwave
2 |
3 | - platform: generic_thermostat
4 | name: Kitchen Thermostat
5 | heater: switch.kitchen_heater
6 | target_sensor: sensor.kitchen_temperature
7 | away_temp: 20
8 | keep_alive:
9 | minutes: 10
10 |
11 |
--------------------------------------------------------------------------------
/home-assistant/components/cover.yaml:
--------------------------------------------------------------------------------
1 | - platform: template
2 | covers:
3 | living_room:
4 | device_class: blind
5 | friendly_name: "Cover"
6 | optimistic: true
7 | open_cover:
8 | service: cover.set_cover_position
9 | data:
10 | entity_id: cover.living_room_controller
11 | position: 100
12 | close_cover:
13 | service: cover.set_cover_position
14 | data:
15 | entity_id: cover.living_room_controller
16 | position: 0
--------------------------------------------------------------------------------
/home-assistant/components/fan.yaml:
--------------------------------------------------------------------------------
1 | - platform: xiaomi_miio
2 | name: living_room_air_purifier
3 | host: 192.168.1.223
4 | token: !env_var HOME_ASSISTANT_LIVING_ROOM_AIR_PURIFIER_TOKEN
5 |
6 | - platform: xiaomi_miio
7 | name: Living Room Humidifier
8 | host: 192.168.1.136
9 | token: !env_var HOME_ASSISTANT_XIAOMI_LIVING_ROOM_HUMIDIFIER
10 |
11 | - platform: xiaomi_miio
12 | name: bedroom_air_purifier
13 | host: 192.168.1.48
14 | token: !env_var HOME_ASSISTANT_BEDROOM_AIR_PURIFIER_TOKEN
--------------------------------------------------------------------------------
/home-assistant/components/frontend.yaml:
--------------------------------------------------------------------------------
1 | javascript_version: latest
2 |
--------------------------------------------------------------------------------
/home-assistant/components/history.yaml:
--------------------------------------------------------------------------------
1 | exclude:
2 | entities:
3 | - sensor.time_left_to_food
4 | - sensor.to_work_transit
5 | - sensor.back_from_work_transit
6 | - sensor.date_time
7 | - sensor.internet_time
8 | - sensor.time
9 | - sensor.time_date
10 | - sensor.time_utc
11 | - sensor.uptime
12 | - automation.ping_aqara_gateway
13 | - automation.refresh_courtains_if_they_draw_power
14 | domains:
15 | - calendar
16 | - zwave
--------------------------------------------------------------------------------
/home-assistant/components/homeassistant.yaml:
--------------------------------------------------------------------------------
1 | auth_providers:
2 | - type: homeassistant
3 | name: !env_var HOME_ASSISTANT_NAME
4 | currency: PLN
5 | latitude: !env_var HOME_ASSISTANT_LAT
6 | longitude: !env_var HOME_ASSISTANT_LNG
7 | elevation: !env_var HOME_ASSISTANT_ELEVATION
8 | unit_system: metric
9 | time_zone: Europe/Warsaw
10 | customize: !include customize.yaml
11 | whitelist_external_dirs:
12 | - /tmp
13 |
14 | external_url: !env_var HOME_ASSISTANT_EXTERNAL_URL
15 | internal_url: !env_var HOME_ASSISTANT_INTERNAL_URL
16 |
--------------------------------------------------------------------------------
/home-assistant/components/http.yaml:
--------------------------------------------------------------------------------
1 | # api_password: !env_var HOME_ASSISTANT_API_PASSWORD
2 | base_url: !env_var HOME_ASSISTANT_URL
3 | use_x_forwarded_for: true
4 | trusted_proxies:
5 | - 127.0.0.1
6 | - ::1
7 | ip_ban_enabled: false
8 | login_attempts_threshold: 20
9 | cors_allowed_origins:
10 | - https://cast.home-assistant.io
--------------------------------------------------------------------------------
/home-assistant/components/hue.yaml:
--------------------------------------------------------------------------------
1 | bridges:
2 | - host: 192.168.0.23
3 | allow_unreachable: true
4 | allow_hue_groups: true
5 | filename: hue_main.conf
--------------------------------------------------------------------------------
/home-assistant/components/image_processing.yaml:
--------------------------------------------------------------------------------
1 | - platform: tensorflow
2 | source:
3 | - entity_id: camera.main_square
4 | - entity_id: camera.wawel
5 | file_out:
6 | - "/tmp/{{ camera_entity.split('.')[1] }}_latest.jpg"
7 | model:
8 | graph: /tensorflow/frozen_inference_graph.pb
9 | labels: /tensorflow/object_detection/data/mscoco_label_map.pbtxt
10 | model_dir: /tensorflow
11 | categories:
12 | - person
13 | - cat
--------------------------------------------------------------------------------
/home-assistant/components/influxdb.yaml:
--------------------------------------------------------------------------------
1 | host: localhost
2 | port: 18086
3 | database: !env_var INFLUXDB_DB
4 | username: !env_var INFLUXDB_ADMIN_USER
5 | password: !env_var INFLUXDB_ADMIN_PASSWORD
6 | tags:
7 | source: homeassistant
8 | include:
9 | domains:
10 | - sensor
11 |
12 |
--------------------------------------------------------------------------------
/home-assistant/components/input_boolean.yaml:
--------------------------------------------------------------------------------
1 | comeback:
2 | name: "Wracam"
3 | initial: off
4 |
5 | pizza:
6 | name: 'Pizza'
7 | icon: mdi:pizza
8 | initial: off
9 |
10 | giggid:
11 | name: 'giggid'
12 | icon: mdi:account-arrow-left
13 | initial: off
14 |
--------------------------------------------------------------------------------
/home-assistant/components/input_number.yaml:
--------------------------------------------------------------------------------
1 | living_room_target_temperature:
2 | name: 'Target temperature'
3 | min: 4
4 | max: 28
5 | initial: 24.0
6 | step: 0.5
--------------------------------------------------------------------------------
/home-assistant/components/input_select.yaml:
--------------------------------------------------------------------------------
1 | who_cooks:
2 | name: Who cooks today
3 | options:
4 | - Arek
5 | - Ola
6 | initial: Arek
7 | icon: mdi:panda
8 |
--------------------------------------------------------------------------------
/home-assistant/components/led_strip_effects.yaml:
--------------------------------------------------------------------------------
1 | - SingleColor
2 | - SinColor
3 | - RainbowColor
4 | - DualColor
5 | - FireEffect
--------------------------------------------------------------------------------
/home-assistant/components/life360.yaml:
--------------------------------------------------------------------------------
1 | accounts:
2 | - username: !env_var HOME_ASSISTANT_LIFE360_USERNAME
3 | password: !env_var HOME_ASSISTANT_LIFE360_PASSWORD
4 | max_update_wait:
5 | minutes: 15
6 | driving_speed: 18
7 | max_gps_accuracy: 200
8 | prefix: ''
--------------------------------------------------------------------------------
/home-assistant/components/logbook.yaml:
--------------------------------------------------------------------------------
1 | exclude:
2 | entities:
3 | - automation.ping_aqara_gateway
4 | - automation.refresh_courtains_if_they_draw_power
5 | - automation.push_arek_location_to_orion
6 | - automation.push_ola_location_to_orion
7 | include:
8 | entities:
9 | - binary_sensor.hall_pir
10 | domains:
11 | - switch
12 | - binary_sensor
13 | - climate
14 | - zone
15 | - media_player
16 | - light
17 | - device_tracker
18 | - automation
19 |
--------------------------------------------------------------------------------
/home-assistant/components/logger.yaml:
--------------------------------------------------------------------------------
1 | default: error
2 | logs:
3 | homeassistant.components.http.ban: warning
4 | xiaomi_gateway: error
5 | matrix: debug
6 | xiaomi_miio: debug
7 | homeassistant.components.matrix: debug
8 | homeassistant.components.xiaomi_aqara: error
9 | homeassistant.components.switch.xiaomi_aqara: debug
10 | homeassistant.components.xiaomi_miio: debug
11 | homeassistant.components.xiaomi_miio.vacuum: debug
12 | homeassistant.components.rest_command: debug
13 |
--------------------------------------------------------------------------------
/home-assistant/components/matrix.yaml:
--------------------------------------------------------------------------------
1 | homeserver: !env_var HOME_ASSISTANT_MATRIX_SERVER
2 | username: !env_var HOME_ASSISTANT_MATRIX_USER
3 | password: !env_var HOME_ASSISTANT_MATRIX_PASSWORD
4 | rooms: [!env_var HOME_ASSISTANT_MATRIX_ROOM, !env_var HOME_ASSISTANT_DIETLY_MATRIX_ROOM]
5 | commands:
6 | - expression: "tv (?P.*)"
7 | name: download_tv
8 | - expression: "movie (?P.*)"
9 | name: download_movie
10 | - expression: "alexa (?P.*)"
11 | name: alexa_say
12 | - expression: "yt (?P.*)"
13 | name: download_yt_music
14 |
15 |
--------------------------------------------------------------------------------
/home-assistant/components/media_player.yaml:
--------------------------------------------------------------------------------
1 | - platform: samsung_multi_room
2 | host: 192.168.1.227
3 | max_volume: 20
4 |
5 | - platform: emby
6 | host: localhost
7 | api_key: !env_var HOME_ASSISTANT_EMBY
8 | port: 8096
9 |
--------------------------------------------------------------------------------
/home-assistant/components/mqtt.yaml:
--------------------------------------------------------------------------------
1 | broker: localhost
2 | port: 4105
3 | username: !env_var HOME_ASSISTANT_MQTT_USER
4 | password: !env_var HOME_ASSISTANT_MQTT_PASSWORD
5 | birth_message:
6 | topic: 'homeassistant/status'
7 | payload: 'online'
--------------------------------------------------------------------------------
/home-assistant/components/octoprint.yaml:
--------------------------------------------------------------------------------
1 | host: 192.168.1.165
2 | api_key: !env_var OCTOPRINT_API_KEY
--------------------------------------------------------------------------------
/home-assistant/components/panel_custom.yaml:
--------------------------------------------------------------------------------
1 | - name: vacuum_plan
2 | sidebar_title: Vacuum Map
3 | sidebar_icon: mdi:robot-vacuum
4 | url_path: vacuum_plan
5 | require_admin: true
6 |
7 | - name: zwavegraph2
8 | sidebar_title: Z-Wave Graph
9 | sidebar_icon: mdi:access-point-network
10 | url_path: zwave
11 |
--------------------------------------------------------------------------------
/home-assistant/components/panel_iframe.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/components/panel_iframe.yaml
--------------------------------------------------------------------------------
/home-assistant/components/person.yaml:
--------------------------------------------------------------------------------
1 | - name: Arek
2 | id: arek
3 | user_id: dee430bb89094c628fd84988492c87ed
4 | device_trackers:
5 | - device_tracker.sm_s10_arek
6 | - device_tracker.arek
7 |
8 | - name: Ola
9 | id: ola
10 | user_id: 5818d1fef6d840769796caa99959610d
11 | device_trackers:
12 | - device_tracker.sm_g8_ola
13 |
--------------------------------------------------------------------------------
/home-assistant/components/recorder.yaml:
--------------------------------------------------------------------------------
1 | db_url: !env_var HOME_ASSISTANT_DB_URL
2 | purge_interval: 1
3 | purge_keep_days: 31
4 | auto_purge: true
5 | commit_interval: 60
6 |
--------------------------------------------------------------------------------
/home-assistant/components/shell_command.yaml:
--------------------------------------------------------------------------------
1 | turn_off_mac_mini: bash /config/scripts/switch_off_mac_mini.sh
2 |
--------------------------------------------------------------------------------
/home-assistant/components/speedtestdotnet.yaml:
--------------------------------------------------------------------------------
1 | scan_interval:
2 | minutes: 30
3 | monitored_conditions:
4 | - ping
5 | - download
6 | - upload
--------------------------------------------------------------------------------
/home-assistant/components/telegram.yaml:
--------------------------------------------------------------------------------
1 | - platform: polling
2 | api_key: !env_var HOME_ASSISTANT_TELEGRAM_KEY
3 | allowed_chat_ids:
4 | - 66368059
5 |
--------------------------------------------------------------------------------
/home-assistant/components/torrent.yaml:
--------------------------------------------------------------------------------
1 | - platform: deluge
2 | host: localhost
3 | name: torrent
4 | username: admin
5 | password: !env_var HOME_ASSISTANT_DELUGE_PASSWORD
6 | monitored_variables:
7 | - 'current_status'
8 | - 'download_speed'
9 | - 'upload_speed'
10 |
--------------------------------------------------------------------------------
/home-assistant/components/utility_meter.yaml:
--------------------------------------------------------------------------------
1 | home_hourly_energy:
2 | source: sensor.energy_spent
3 | name: Home Hourly Energy
4 | cycle: hourly
5 | home_daily_energy:
6 | source: sensor.energy_spent
7 | name: Home Daily Energy
8 | cycle: daily
9 | home_monthly_energy:
10 | source: sensor.energy_spent
11 | name: Home Monthly Energy
12 | cycle: monthly
13 | home_yearly_energy:
14 | source: sensor.energy_spent
15 | name: Home Yearly Energy
16 | cycle: yearly
17 |
--------------------------------------------------------------------------------
/home-assistant/components/vacuum.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/components/vacuum.yaml
--------------------------------------------------------------------------------
/home-assistant/components/weather.yaml:
--------------------------------------------------------------------------------
1 | - platform: darksky
2 | api_key: !env_var HOME_ASSISTANT_DARKSKY_API_KEY
3 | mode: hourly
--------------------------------------------------------------------------------
/home-assistant/components/webostv.yaml:
--------------------------------------------------------------------------------
1 | name: tv
2 | host: 192.168.1.141
3 | turn_on_action:
4 | service: wake_on_lan.send_magic_packet
5 | data:
6 | mac: 78:5D:C8:98:B4:71
7 |
--------------------------------------------------------------------------------
/home-assistant/components/zones.yaml.example:
--------------------------------------------------------------------------------
1 | - name: home
2 | latitude: 0
3 | longitude: 0
4 | radius: 80
5 | icon: mdi:home
6 |
7 | - name: codesthq
8 | latitude: 0
9 | longitude: 0
10 | radius: 100
11 | icon: mdi:worker
12 |
13 | - name: netguru
14 | latitude: 0
15 | longitude: 0
16 | radius: 100
17 | icon: mdi:worker
18 |
19 | - name: Port COM
20 | latitude: 50.0612024
21 | longitude: 19.9297733
22 | radius: 100
23 | icon: mdi:beer
--------------------------------------------------------------------------------
/home-assistant/components/zwave.yaml:
--------------------------------------------------------------------------------
1 | usb_path: /dev/ttyACM0
2 | network_key: !env_var HOME_ASSISTANT_ZWAVE_KEY
3 | debug: false
4 | autoheal: true
--------------------------------------------------------------------------------
/home-assistant/custom_components/alexa_media/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "alexa_media",
3 | "name": "Alexa Media Player",
4 | "version": "4.0.3",
5 | "config_flow": true,
6 | "documentation": "https://github.com/custom-components/alexa_media_player/wiki",
7 | "issue_tracker": "https://github.com/custom-components/alexa_media_player/issues",
8 | "dependencies": ["persistent_notification", "http"],
9 | "codeowners": ["@alandtse", "@keatontaylor"],
10 | "requirements": ["alexapy==1.26.1", "packaging>=20.3", "wrapt>=1.12.1"],
11 | "iot_class": "cloud_polling"
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/attributes/__init__.py:
--------------------------------------------------------------------------------
1 | """Attributes breakout sensor"""
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/attributes/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "attributes",
3 | "name": "Attributes",
4 | "version": "1.2.0",
5 | "documentation": "https://github.com/pilotak/homeassistant-attributes",
6 | "issue_tracker": "https://github.com/pilotak/homeassistant-attributes/issues",
7 | "requirements": [],
8 | "dependencies": [],
9 | "codeowners": ["@pilotak"]
10 | }
11 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/burze_dzis_net/__init__.py:
--------------------------------------------------------------------------------
1 | """Burze.dzis.net"""
--------------------------------------------------------------------------------
/home-assistant/custom_components/burze_dzis_net/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "burze_dzis_net",
3 | "name": "Burze.dzis.net",
4 | "documentation": "https://github.com/PiotrMachowski/Home-Assistant-custom-components-Burze.dzis.net",
5 | "issue_tracker": "https://github.com/PiotrMachowski/Home-Assistant-custom-components-Burze.dzis.net/issues",
6 | "dependencies": [],
7 | "codeowners": ["@PiotrMachowski"],
8 | "requirements": ["zeep"],
9 | "version": "v1.0.4",
10 | "iot_class": "cloud_polling"
11 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | The Car Wash binary sensor.
3 |
4 | For more details about this platform, please refer to the documentation at
5 | https://github.com/Limych/ha-car_wash/
6 | """
7 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "car_wash",
3 | "name": "Car Wash",
4 | "version": "1.5.1",
5 | "documentation": "https://github.com/Limych/ha-car_wash",
6 | "issue_tracker": "https://github.com/Limych/ha-car_wash/issues",
7 | "dependencies": [
8 | "weather"
9 | ],
10 | "config_flow": false,
11 | "codeowners": [
12 | "@Limych"
13 | ],
14 | "requirements": [],
15 | "iot_class": "calculated"
16 | }
17 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/translations/binary_sensor.de.json:
--------------------------------------------------------------------------------
1 | {
2 | "state": {
3 | "car_wash__": {
4 | "off": "Waschen sinnlos",
5 | "on": "Jetzt waschen"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/translations/binary_sensor.en.json:
--------------------------------------------------------------------------------
1 | {
2 | "state": {
3 | "car_wash__": {
4 | "off": "Should not wash",
5 | "on": "Worth wash"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/translations/binary_sensor.it.json:
--------------------------------------------------------------------------------
1 | {
2 | "state": {
3 | "car_wash__": {
4 | "off": "Lavaggio sconsigliato",
5 | "on": "Procedi al lavaggio"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/translations/binary_sensor.pl.json:
--------------------------------------------------------------------------------
1 | {
2 | "state": {
3 | "car_wash__": {
4 | "off": "Nie należy myć",
5 | "on": "Warto umyć"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/translations/binary_sensor.ru.json:
--------------------------------------------------------------------------------
1 | {
2 | "state": {
3 | "car_wash__": {
4 | "off": "Нет смысла мыть",
5 | "on": "Стоит помыть"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/car_wash/translations/binary_sensor.uk.json:
--------------------------------------------------------------------------------
1 | {
2 | "state": {
3 | "car_wash__": {
4 | "off": "Не варто мити",
5 | "on": "Варто помити"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/cracow_air_quality/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | __version__ = '1.0.0'
--------------------------------------------------------------------------------
/home-assistant/custom_components/emby_upcoming_media/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/emby_upcoming_media/__init__.py
--------------------------------------------------------------------------------
/home-assistant/custom_components/emby_upcoming_media/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "emby_upcoming_media",
3 | "name": "Emby Latest Media",
4 | "documentation": "https://github.com/gcorgnet/sensor.emby_upcoming_media",
5 | "dependencies": [],
6 | "codeowners": [
7 | "@gcorgnet"
8 | ],
9 | "requirements": ["python-dateutil"],
10 | "version": "0.3.5"
11 | }
12 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/google_geocode/Google_Geocode_Screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/google_geocode/Google_Geocode_Screenshot.png
--------------------------------------------------------------------------------
/home-assistant/custom_components/google_geocode/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "google_geocode",
3 | "name": "Google Geocode",
4 | "documentation": "https://github.com/michaelmcarthur/GoogleGeocode-HASS",
5 | "dependencies": [],
6 | "codeowners": [],
7 | "requirements": []
8 | }
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/grocy/breaking_changes:
--------------------------------------------------------------------------------
1 | services:
2 | add_project -> add_product_to_stock
3 | price -> str (was int)
4 |
5 | consume_product -> consume_product_from_stock
--------------------------------------------------------------------------------
/home-assistant/custom_components/grocy/helpers.py:
--------------------------------------------------------------------------------
1 | import base64
2 |
3 | class MealPlanItem(object):
4 | def __init__(self, data):
5 | self.day = data.day
6 | self.note = data.note
7 | self.recipe_name = data.recipe.name
8 | self.desired_servings = data.recipe.desired_servings
9 |
10 | if data.recipe.picture_file_name is not None:
11 | b64name = base64.b64encode(data.recipe.picture_file_name.encode("ascii"))
12 | self.picture_url = f"/api/grocy/recipepictures/{str(b64name, 'utf-8')}"
13 | else:
14 | self.picture_url = None
15 |
16 | def as_dict(self):
17 | return vars(self)
18 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/grocy/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "grocy",
3 | "name": "Grocy",
4 | "documentation": "https://github.com/custom-components/grocy",
5 | "dependencies": [
6 | "http"
7 | ],
8 | "config_flow": true,
9 | "codeowners": [
10 | "@SebRut",
11 | "@isabellaalstrom"
12 | ],
13 | "requirements": [
14 | "sampleclient",
15 | "pygrocy==0.24.1",
16 | "iso8601==0.1.12",
17 | "integrationhelper"
18 | ]
19 | }
20 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/grocy/translations/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "abort": {
4 | "single_instance_allowed": "Only a single configuration of Grocy is allowed."
5 | },
6 | "error": {
7 | "auth": "Something went wrong."
8 | },
9 | "step": {
10 | "user": {
11 | "data": {
12 | "api_key": "Grocy API Key",
13 | "port": "Port Number (9192)",
14 | "url": "Grocy API URL (e.g. \"http:\/\/yourgrocyurl.com\")",
15 | "verify_ssl": "Verify SSL Certificate"
16 | },
17 | "description": "If you need help with the configuration have a look here: https:\/\/github.com\/custom-components\/grocy",
18 | "title": "Grocy"
19 | }
20 | },
21 | "title": "Grocy"
22 | }
23 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/grocy/translations/hr.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "abort": {
4 | "single_instance_allowed": "Dozvoljena je samo jedna Grocy konfiguracija"
5 | },
6 | "error": {
7 | "auth": "Nešto je pošlo po zlu."
8 | },
9 | "step": {
10 | "user": {
11 | "data": {
12 | "api_key": "Grocy API ključ",
13 | "port": "Broj port-a (9192)",
14 | "url": "Grocy API URL (npr. \"http:\/\/yourgrocyurl.com\")",
15 | "verify_ssl": "Provjerite SSL certifikat."
16 | },
17 | "description": "Ako vam je potrebna pomoć oko konfiguracije, pogledajte ovdje: https:\/\/github.com\/custom-components\/grocy",
18 | "title": "Grocy"
19 | }
20 | },
21 | "title": "Grocy"
22 | }
23 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/__init__.py:
--------------------------------------------------------------------------------
1 | """HACS Frontend"""
2 | from .version import VERSION
3 |
4 | def locate_dir():
5 | return __path__[0]
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.004a7b01.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.004a7b01.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.05e9df28.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.05e9df28.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.0732ee74.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.0732ee74.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.15331ea4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.15331ea4.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.175b9792.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.175b9792.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.1b450c80.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.1b450c80.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.21c042d4.js:
--------------------------------------------------------------------------------
1 | const n=(n,o)=>n&&n.config.components.includes(o);export{n as i};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.24bd2446.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.24bd2446.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.250c89dd.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.250c89dd.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.362d16d4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.362d16d4.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.3c651323.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.3c651323.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.4053bced.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.4053bced.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.47f687e9.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.47f687e9.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.4a97632a.js:
--------------------------------------------------------------------------------
1 | function t(t){const a=t.language||"en";return t.translationMetadata.translations[a]&&t.translationMetadata.translations[a].isRTL||!1}function a(a){return t(a)?"rtl":"ltr"}export{a,t as c};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.4a97632a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.4a97632a.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.4c31e630.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.4c31e630.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.50bfd408.js:
--------------------------------------------------------------------------------
1 | const e=()=>{const e={},r=new URLSearchParams(location.search);for(const[n,t]of r.entries())e[n]=t;return e},r=e=>{const r=new URLSearchParams;return Object.entries(e).forEach((([e,n])=>{r.append(e,n)})),r.toString()};export{r as c,e};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.50bfd408.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.50bfd408.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.56433b09.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.56433b09.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.587d89ba.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.587d89ba.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.58a9b586.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.58a9b586.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.5b87ad2c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.5b87ad2c.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.5ba288d8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.5ba288d8.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.5ede7966.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.5ede7966.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.63dc92d5.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.63dc92d5.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.656daa82.js:
--------------------------------------------------------------------------------
1 | var a=[];export{a as default};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.6711bf6c.js:
--------------------------------------------------------------------------------
1 | const t=(t,e)=>{const n={};return e&&(e.type&&(n.type_filter=e.type),e.domain&&(n.domain=e.domain)),t.callWS({type:"config_entries/get",...n})};export{t as g};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.6711bf6c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.6711bf6c.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.6b0f0543.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.6b0f0543.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.743a15a1.js:
--------------------------------------------------------------------------------
1 | var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function o(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function t(e,o){return e(o={exports:{}},o.exports),o.exports}function n(e){return e&&e.default||e}export{e as a,t as c,n as g,o as u};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.743a15a1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.743a15a1.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.7ee871d3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.7ee871d3.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.822f38be.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.822f38be.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.88ebfd3e.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.88ebfd3e.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.8e28b461.js:
--------------------------------------------------------------------------------
1 | const r=r=>(s,o)=>{if(s.constructor._observers){if(!s.constructor.hasOwnProperty("_observers")){const r=s.constructor._observers;s.constructor._observers=new Map,r.forEach(((r,o)=>s.constructor._observers.set(o,r)))}}else{s.constructor._observers=new Map;const r=s.updated;s.updated=function(s){r.call(this,s),s.forEach(((r,s)=>{const o=this.constructor._observers.get(s);void 0!==o&&o.call(this,this[s],r)}))}}s.constructor._observers.set(o,r)};export{r as o};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.8e28b461.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.8e28b461.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.8f19de42.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.8f19de42.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.936d9772.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.936d9772.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.99c1c4ba.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.99c1c4ba.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.9d5cd8b6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.9d5cd8b6.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.9d6aaabf.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.9d6aaabf.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.a0bc44e3.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.a0bc44e3.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.ad739743.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.ad739743.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.b054aba2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.b054aba2.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.b720c549.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.b720c549.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.ba01fa51.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.ba01fa51.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.ba5bc454.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.ba5bc454.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.bc53dda1.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.bc53dda1.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.bca0f55d.js:
--------------------------------------------------------------------------------
1 | import{A as o}from"./main-a0d7432d.js";const a=()=>import("./c.f3416703.js"),i=(i,l,m)=>new Promise((n=>{const r=l.cancel,s=l.confirm;o(i,"show-dialog",{dialogTag:"dialog-box",dialogImport:a,dialogParams:{...l,...m,cancel:()=>{n(!(null==m||!m.prompt)&&null),r&&r()},confirm:o=>{n(null==m||!m.prompt||o),s&&s(o)}}})})),l=(o,a)=>i(o,a),m=(o,a)=>i(o,a,{confirmation:!0}),n=(o,a)=>i(o,a,{prompt:!0});export{l as a,n as b,m as s};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.bca0f55d.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.bca0f55d.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.c176780d.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.c176780d.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.c4815b5a.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.c4815b5a.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.c608beec.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.c608beec.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.c7df5815.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.c7df5815.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.c98162aa.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.c98162aa.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.d2d70fc0.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.d2d70fc0.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.da8de431.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.da8de431.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.db2e6bb6.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.db2e6bb6.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.dba55e54.js:
--------------------------------------------------------------------------------
1 | import{al as e,am as a,aj as s,an as r,ao as u}from"./main-a0d7432d.js";async function i(i,o,n){const t=new e("updateLovelaceResources"),l=await a(i),d=`/hacsfiles/${o.full_name.split("/")[1]}`,c=s({repository:o,version:n}),p=l.find((e=>e.url.includes(d)));t.debug({namespace:d,url:c,exsisting:p}),p&&p.url!==c?(t.debug(`Updating exsusting resource for ${d}`),await r(i,{url:c,resource_id:p.id,res_type:p.type})):l.map((e=>e.url)).includes(c)||(t.debug(`Adding ${c} to Lovelace resources`),await u(i,{url:c,res_type:"module"}))}export{i as u};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.dba55e54.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.dba55e54.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.e23b0d0b.js:
--------------------------------------------------------------------------------
1 | Intl.PluralRules&&"function"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{categories:{cardinal:["one","other"],ordinal:["one","two","few","other"]},fn:function(e,l){var a=String(e).split("."),t=!a[1],o=Number(a[0])==e,n=o&&a[0].slice(-1),r=o&&a[0].slice(-2);return l?1==n&&11!=r?"one":2==n&&12!=r?"two":3==n&&13!=r?"few":"other":1==e&&t?"one":"other"}},locale:"en"});
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.e23b0d0b.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.e23b0d0b.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.e65e9eeb.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.e65e9eeb.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.e7b530de.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.e7b530de.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.ee4824b8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.ee4824b8.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.ef5e31a4.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.ef5e31a4.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.f0a99f33.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.f0a99f33.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.f2cbe48c.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.f2cbe48c.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.f3416703.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.f3416703.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.fbd8d2ba.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.fbd8d2ba.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.fe747ba2.js:
--------------------------------------------------------------------------------
1 | const s=async(s,o)=>s.connection.sendMessagePromise({type:"hacs/repository/info",repository_id:o}),o=async(s,o,e)=>s.connection.sendMessagePromise({type:"hacs/repository/download",repository:o,version:e}),e=async(s,o,e)=>s.connection.sendMessagePromise({type:"hacs/repository/version",repository:o,version:e});export{o as a,s as f,e as r};
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/c.fe747ba2.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/c.fe747ba2.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/entrypoint.js:
--------------------------------------------------------------------------------
1 |
2 | try {
3 | new Function("import('/hacsfiles/frontend/main-a0d7432d.js')")();
4 | } catch (err) {
5 | var el = document.createElement('script');
6 | el.src = '/hacsfiles/frontend/main-a0d7432d.js';
7 | el.type = 'module';
8 | document.body.appendChild(el);
9 | }
10 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/entrypoint.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/entrypoint.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/main-a0d7432d.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/hacs/hacs_frontend/main-a0d7432d.js.gz
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "./src/main.ts": "main-a0d7432d.js"
3 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/hacs_frontend/version.py:
--------------------------------------------------------------------------------
1 | VERSION="20220709114425"
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "codeowners": [
3 | "@ludeeus"
4 | ],
5 | "config_flow": true,
6 | "dependencies": [
7 | "http",
8 | "websocket_api",
9 | "frontend",
10 | "persistent_notification",
11 | "lovelace"
12 | ],
13 | "documentation": "https://hacs.xyz/docs/configuration/start",
14 | "domain": "hacs",
15 | "iot_class": "cloud_polling",
16 | "issue_tracker": "https://github.com/hacs/integration/issues",
17 | "name": "HACS",
18 | "requirements": [
19 | "aiogithubapi>=22.2.4"
20 | ],
21 | "version": "1.26.0"
22 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/repositories/__init__.py:
--------------------------------------------------------------------------------
1 | """Initialize repositories."""
2 | from __future__ import annotations
3 |
4 | from ..enums import HacsCategory
5 | from .appdaemon import HacsAppdaemonRepository
6 | from .base import HacsRepository
7 | from .integration import HacsIntegrationRepository
8 | from .netdaemon import HacsNetdaemonRepository
9 | from .plugin import HacsPluginRepository
10 | from .python_script import HacsPythonScriptRepository
11 | from .theme import HacsThemeRepository
12 |
13 | RERPOSITORY_CLASSES: dict[HacsCategory, HacsRepository] = {
14 | HacsCategory.THEME: HacsThemeRepository,
15 | HacsCategory.INTEGRATION: HacsIntegrationRepository,
16 | HacsCategory.PYTHON_SCRIPT: HacsPythonScriptRepository,
17 | HacsCategory.APPDAEMON: HacsAppdaemonRepository,
18 | HacsCategory.NETDAEMON: HacsNetdaemonRepository,
19 | HacsCategory.PLUGIN: HacsPluginRepository,
20 | }
21 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/utils/__init__.py:
--------------------------------------------------------------------------------
1 | """Initialize HACS utils."""
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/utils/decode.py:
--------------------------------------------------------------------------------
1 | """Util to decode content from the github API."""
2 | from base64 import b64decode
3 |
4 |
5 | def decode_content(content: str) -> str:
6 | """Decode content."""
7 | return b64decode(bytearray(content, "utf-8")).decode()
8 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/utils/json.py:
--------------------------------------------------------------------------------
1 | """JSON utils."""
2 |
3 | try:
4 | # Could be removed after 2022.06 is the min version
5 | # But in case Home Assistant changes, keep this try/except here...
6 | from homeassistant.helpers.json import json_loads
7 | except ImportError:
8 | from json import loads as json_loads
9 |
10 | __all__ = ["json_loads"]
11 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/utils/logger.py:
--------------------------------------------------------------------------------
1 | """Custom logger for HACS."""
2 | import logging
3 |
4 | from ..const import PACKAGE_NAME
5 |
6 | LOGGER: logging.Logger = logging.getLogger(PACKAGE_NAME)
7 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/utils/path.py:
--------------------------------------------------------------------------------
1 | """Path utils"""
2 | from __future__ import annotations
3 |
4 | from pathlib import Path
5 | from typing import TYPE_CHECKING
6 |
7 | if TYPE_CHECKING:
8 | from ..base import HacsBase
9 |
10 |
11 | def is_safe(hacs: HacsBase, path: str | Path) -> bool:
12 | """Helper to check if path is safe to remove."""
13 | return Path(path).as_posix() not in (
14 | Path(f"{hacs.core.config_path}/{hacs.configuration.appdaemon_path}").as_posix(),
15 | Path(f"{hacs.core.config_path}/{hacs.configuration.netdaemon_path}").as_posix(),
16 | Path(f"{hacs.core.config_path}/{hacs.configuration.plugin_path}").as_posix(),
17 | Path(f"{hacs.core.config_path}/{hacs.configuration.python_script_path}").as_posix(),
18 | Path(f"{hacs.core.config_path}/{hacs.configuration.theme_path}").as_posix(),
19 | Path(f"{hacs.core.config_path}/custom_components/").as_posix(),
20 | )
21 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/utils/regex.py:
--------------------------------------------------------------------------------
1 | """Regex utils"""
2 | from __future__ import annotations
3 |
4 | import re
5 |
6 | RE_REPOSITORY = re.compile(
7 | r"(?:(?:.*github.com.)|^)([A-Za-z0-9-]+\/[\w.-]+?)(?:(?:\.git)?|(?:[^\w.-].*)?)$"
8 | )
9 |
10 |
11 | def extract_repository_from_url(url: str) -> str | None:
12 | """Extract the owner/repo part form a URL."""
13 | match = re.match(RE_REPOSITORY, url)
14 | if not match:
15 | return None
16 | return match.group(1).lower()
17 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/utils/workarounds.py:
--------------------------------------------------------------------------------
1 | """Workarounds for issues that should not be fixed."""
2 |
3 |
4 | DOMAIN_OVERRIDES = {
5 | # https://github.com/hacs/integration/issues/2465
6 | "custom-components/sensor.custom_aftership": "custom_aftership"
7 | }
8 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/validate/__init__.py:
--------------------------------------------------------------------------------
1 | """Initialize validation."""
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/validate/archived.py:
--------------------------------------------------------------------------------
1 | from __future__ import annotations
2 |
3 | from ..repositories.base import HacsRepository
4 | from .base import ActionValidationBase, ValidationException
5 |
6 |
7 | async def async_setup_validator(repository: HacsRepository) -> Validator:
8 | """Set up this validator."""
9 | return Validator(repository=repository)
10 |
11 |
12 | class Validator(ActionValidationBase):
13 | """Validate the repository."""
14 |
15 | more_info = "https://hacs.xyz/docs/publish/include#check-archived"
16 | allow_fork = False
17 |
18 | async def async_validate(self):
19 | """Validate the repository."""
20 | if self.repository.data.archived:
21 | raise ValidationException("The repository is archived")
22 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/validate/description.py:
--------------------------------------------------------------------------------
1 | from __future__ import annotations
2 |
3 | from ..repositories.base import HacsRepository
4 | from .base import ActionValidationBase, ValidationException
5 |
6 |
7 | async def async_setup_validator(repository: HacsRepository) -> Validator:
8 | """Set up this validator."""
9 | return Validator(repository=repository)
10 |
11 |
12 | class Validator(ActionValidationBase):
13 | """Validate the repository."""
14 |
15 | more_info = "https://hacs.xyz/docs/publish/include#check-repository"
16 | allow_fork = False
17 |
18 | async def async_validate(self):
19 | """Validate the repository."""
20 | if not self.repository.data.description:
21 | raise ValidationException("The repository has no description")
22 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/validate/issues.py:
--------------------------------------------------------------------------------
1 | from __future__ import annotations
2 |
3 | from ..repositories.base import HacsRepository
4 | from .base import ActionValidationBase, ValidationException
5 |
6 |
7 | async def async_setup_validator(repository: HacsRepository) -> Validator:
8 | """Set up this validator."""
9 | return Validator(repository=repository)
10 |
11 |
12 | class Validator(ActionValidationBase):
13 | """Validate the repository."""
14 |
15 | more_info = "https://hacs.xyz/docs/publish/include#check-repository"
16 | allow_fork = False
17 |
18 | async def async_validate(self):
19 | """Validate the repository."""
20 | if not self.repository.data.has_issues:
21 | raise ValidationException("The repository does not have issues enabled")
22 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/hacs/validate/topics.py:
--------------------------------------------------------------------------------
1 | from __future__ import annotations
2 |
3 | from ..repositories.base import HacsRepository
4 | from .base import ActionValidationBase, ValidationException
5 |
6 |
7 | async def async_setup_validator(repository: HacsRepository) -> Validator:
8 | """Set up this validator."""
9 | return Validator(repository=repository)
10 |
11 |
12 | class Validator(ActionValidationBase):
13 | """Validate the repository."""
14 |
15 | more_info = "https://hacs.xyz/docs/publish/include#check-repository"
16 | allow_fork = False
17 |
18 | async def async_validate(self):
19 | """Validate the repository."""
20 | if not self.repository.data.topics:
21 | raise ValidationException("The repository has no valid topics")
22 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/harvest/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | __version__ = '1.0.0'
--------------------------------------------------------------------------------
/home-assistant/custom_components/it_will_rain/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "it_will_rain",
3 | "name": "ItWillRain",
4 | "documentation": "http://macbury.ninja",
5 | "requirements": [
6 | ],
7 | "dependencies": [],
8 | "codeowners": [
9 | "@macbury"
10 | ]
11 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/kkm/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | """Bus card Tracker."""
3 |
4 | __version__ = '1.0.0'
--------------------------------------------------------------------------------
/home-assistant/custom_components/kkm/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "kkm",
3 | "name": "KKMSensor",
4 | "documentation": "http://macbury.ninja",
5 | "requirements": [
6 | "beautifulsoup4==4.6.3"
7 | ],
8 | "dependencies": [],
9 | "codeowners": [
10 | "@macbury"
11 | ]
12 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/localtuya/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "localtuya",
3 | "name": "LocalTuya integration",
4 | "version": "4.0.1",
5 | "documentation": "https://github.com/rospogrigio/localtuya/",
6 | "dependencies": [],
7 | "codeowners": [
8 | "@rospogrigio", "@postlund"
9 | ],
10 | "issue_tracker": "https://github.com/rospogrigio/localtuya/issues",
11 | "requirements": [],
12 | "config_flow": true,
13 | "iot_class": "local_push"
14 | }
15 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/localtuya/services.yaml:
--------------------------------------------------------------------------------
1 | reload:
2 | description: Reload localtuya and reconnect to all devices.
3 |
4 | set_dp:
5 | description: Change the value of a datapoint (DP)
6 | fields:
7 | device_id:
8 | description: Device ID of device to change datapoint value for
9 | example: 11100118278aab4de001
10 | dp:
11 | description: Datapoint index
12 | example: 1
13 | value:
14 | description: New value to set
15 | example: False
16 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/lunching/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | """Lunching.pl Tracker."""
3 |
4 | __version__ = '1.0.0'
--------------------------------------------------------------------------------
/home-assistant/custom_components/lunching/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "lunching",
3 | "name": "LunchingSensor",
4 | "documentation": "http://macbury.ninja",
5 | "requirements": [
6 | ],
7 | "dependencies": [],
8 | "codeowners": [
9 | "@macbury"
10 | ]
11 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/mmpk/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | """Public transit sensor for MPK Kraków"""
3 |
4 | __version__ = '1.0.0'
--------------------------------------------------------------------------------
/home-assistant/custom_components/mmpk/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "mmpk",
3 | "name": "mpkk",
4 | "documentation": "https://macbury.github.io/SmartHouse/",
5 | "requirements": [
6 | ],
7 | "dependencies": [],
8 | "codeowners": [
9 | "@macbury"
10 | ]
11 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "codeowners": [
3 | "@zachowj"
4 | ],
5 | "config_flow": true,
6 | "dependencies": [],
7 | "documentation": "https://zachowj.github.io/node-red-contrib-home-assistant-websocket/guide/custom_integration/",
8 | "domain": "nodered",
9 | "iot_class": "local_push",
10 | "issue_tracker": "https://github.com/zachowj/hass-node-red/issues",
11 | "name": "Node-RED Companion",
12 | "version": "1.0.9"
13 | }
14 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/services.yaml:
--------------------------------------------------------------------------------
1 | trigger:
2 | description: Trigger a Node-RED Node
3 | target:
4 | entity:
5 | integration: nodered
6 | domain: switch
7 | fields:
8 | trigger_entity_id:
9 | description: Entity Id to trigger the event node with. Only needed if the node is not triggered by a single entity.
10 | example: sun.sun
11 | skip_condition:
12 | description: Skip conditions of the node (defaults to false)
13 | example: true
14 | output_path:
15 | description: Which output of the node to use (defaults to true, the top output). Only used when skip_condition is set to true.
16 | example: true
17 | payload:
18 | description: The payload the node will output when triggered. Works only when triggering an entity node, not an event node.
19 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/translations/de.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "step": {
4 | "user": {
5 | "title": "Node-RED Begleiter",
6 | "description": "Möchtest du den Node-RED Begleiter wirklich einrichten?"
7 | }
8 | },
9 | "abort": {
10 | "single_instance_allowed": "Es ist kann nur eine Konfiguration für den Node-RED Begleiter geben."
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/translations/dk.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "step": {
4 | "user": {
5 | "description": "Er du sikker på, at du vil konfigurere Node-RED Companion?"
6 | }
7 | },
8 | "abort": {
9 | "single_instance_allowed": "Kun en enkelt konfiguration af Node-RED Companion er tilladt."
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/translations/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "step": {
4 | "user": {
5 | "description": "Do you want to add Node-RED Companion to Home Assistant?"
6 | }
7 | },
8 | "abort": {
9 | "single_instance_allowed": "Already configured. Only a single configuration possible."
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/translations/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "step": {
4 | "user": {
5 | "description": "Voulez-vous ajouter Node-RED Companion à Home Assistant ?"
6 | }
7 | },
8 | "abort": {
9 | "single_instance_allowed": "Déjà configuré. Une seule configuration possible à la fois."
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/translations/nb.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "step": {
4 | "user": {
5 | "description": "Er du sikker på at du vil konfigurere Node-RED?"
6 | }
7 | },
8 | "abort": {
9 | "single_instance_allowed": "Bare en enkelt konfigurasjon av Node-RED er tillatt."
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/translations/pt-BR.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "step": {
4 | "user": {
5 | "description": "Tem certeza de que deseja configurar o Node-RED Companion?"
6 | }
7 | },
8 | "abort": {
9 | "single_instance_allowed": "Apenas uma única configuração do Node-RED Companion é permitida."
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/translations/sv.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "step": {
4 | "user": {
5 | "description": "Vill du lägga till Node-RED Companion till Home Assistant?"
6 | }
7 | },
8 | "abort": {
9 | "single_instance_allowed": "Redan konfigurerad. Bara en konfiguration är möjlig."
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/nodered/utils.py:
--------------------------------------------------------------------------------
1 | """Helpers for node-red."""
2 | from datetime import timedelta
3 | from typing import Any
4 |
5 | from homeassistant.helpers.json import JSONEncoder
6 |
7 |
8 | class NodeRedJSONEncoder(JSONEncoder):
9 | """JSONEncoder that supports timedelta objects and falls back to the Home Assistant Encoder."""
10 |
11 | def default(self, o: Any) -> Any:
12 | """Convert timedelta objects.
13 |
14 | Hand other objects to the Home Assistant JSONEncoder.
15 | """
16 | if isinstance(o, timedelta):
17 | return o.total_seconds()
18 |
19 | return JSONEncoder.default(self, o)
20 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/rocketlaunchlive/const.py:
--------------------------------------------------------------------------------
1 | """Constants for the Rocket Launch Live integration."""
2 |
3 | DOMAIN = "rocketlaunchlive"
4 | COORDINATOR = "coordinator"
5 | ROCKET_API = "rocket_api"
6 | ATTR_IDENTIFIERS = "identifiers"
7 | ATTR_MANUFACTURER = "manufacturer"
8 | ATTR_MODEL = "model"
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/rocketlaunchlive/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "rocketlaunchlive",
3 | "name": "Rocket Launch Live - Next 5 Launches",
4 | "config_flow": true,
5 | "documentation": "https://github.com/djtimca/harocketlaunchlive",
6 | "requirements": [
7 | "rocketlaunchlive==0.0.2"
8 | ],
9 | "ssdp": [],
10 | "zeroconf": [],
11 | "homekit": {},
12 | "dependencies": [],
13 | "codeowners": [
14 | "@djtimca"
15 | ],
16 | "version": "009"
17 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/rocketlaunchlive/strings.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Rocket Launch Live - Next 5 Launches",
3 | "config": {
4 | "step": {
5 | "user": {
6 | "data": {
7 | "api_key": "Optional: Enter your paid RocketLaunch.live API key."
8 | }
9 | }
10 | },
11 | "error": {
12 | "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
13 | "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]",
14 | "unknown": "[%key:common::config_flow::error::unknown%]"
15 | },
16 | "abort": {
17 | "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]"
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/rocketlaunchlive/translations/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Rocket Launch Live - Next 5 Launches",
3 | "config": {
4 | "step": {
5 | "user": {
6 | "data": {
7 | "api_key": "Optional: Enter your paid RocketLaunch.live API key."
8 | }
9 | }
10 | },
11 | "error": {
12 | "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
13 | "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]",
14 | "unknown": "[%key:common::config_flow::error::unknown%]"
15 | },
16 | "abort": {
17 | "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]"
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/samsung_multi_room/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | __version__ = '1.0.0'
--------------------------------------------------------------------------------
/home-assistant/custom_components/samsung_multi_room/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "soundbar",
3 | "vetsion": "1.0",
4 | "name": "SamsungMultiRoom",
5 | "documentation": "http://macbury.ninja",
6 | "requirements": [
7 | "xmltodict==0.11.0"
8 | ],
9 | "dependencies": [],
10 | "codeowners": [
11 | "@macbury"
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/smartthinq_sensors/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "smartthinq_sensors",
3 | "name": "SmartThinQ LGE Sensors",
4 | "documentation": "https://github.com/ollo69/ha-smartthinq-sensors",
5 | "issue_tracker": "https://github.com/ollo69/ha-smartthinq-sensors/issues",
6 | "dependencies": [],
7 | "codeowners": ["@ollo69"],
8 | "requirements": [
9 | "pycountry>=20.7.3",
10 | "xmltodict>=0.12.0",
11 | "chardet>=4.0.0"
12 | ],
13 | "config_flow": true,
14 | "iot_class": "cloud_polling",
15 | "version": "0.23.3"
16 | }
17 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/smartthinq_sensors/services.yaml:
--------------------------------------------------------------------------------
1 | remote_start:
2 | name: Remote Start
3 | description: Send to ThinQ device the remote start command.
4 | target:
5 | entity:
6 | integration: smartthinq_sensors
7 | domain: sensor
8 |
9 | wake_up:
10 | name: WakeUp
11 | description: Send to ThinQ device the wakeup command.
12 | target:
13 | entity:
14 | integration: smartthinq_sensors
15 | domain: sensor
16 |
17 | set_fan_mode:
18 | name: Set fan mode
19 | description: Set fan operation for dehumidifier device.
20 | target:
21 | entity:
22 | integration: smartthinq_sensors
23 | domain: humidifier
24 | fields:
25 | fan_mode:
26 | name: Fan mode
27 | description: New value of fan mode.
28 | required: true
29 | example: "low"
30 | selector:
31 | text:
32 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/smartthinq_sensors/wideq/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | Support for LG SmartThinQ device.
3 | """
4 |
5 | from .const import *
6 | from .device_info import *
7 | from .factory import get_lge_device
8 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/smartthinq_sensors/wideq/core_util.py:
--------------------------------------------------------------------------------
1 | """
2 | Support for LG SmartThinQ device.
3 | """
4 | import uuid
5 |
6 |
7 | def as_list(obj):
8 | """Wrap non-lists in lists.
9 |
10 | If `obj` is a list, return it unchanged. Otherwise, return a
11 | single-element list containing it.
12 | """
13 |
14 | if isinstance(obj, list):
15 | return obj
16 | else:
17 | return [obj]
18 |
19 |
20 | def add_end_slash(url: str):
21 | """Add final slash to url."""
22 | if not url.endswith("/"):
23 | return url + "/"
24 | return url
25 |
26 |
27 | def gen_uuid():
28 | return str(uuid.uuid4())
29 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/spacex/config_flow.py:
--------------------------------------------------------------------------------
1 | """Config flow for SpaceX Launches and Starman."""
2 | from spacexpypi import SpaceX
3 |
4 | from homeassistant.helpers import config_entry_flow
5 |
6 | from .const import DOMAIN
7 |
8 |
9 | async def _async_has_devices(hass) -> bool:
10 | """Return if there are devices that can be discovered."""
11 | api_client = SpaceX()
12 |
13 | devices = await api_client.get_next_launch()
14 | return len(devices) > 0
15 |
16 |
17 | config_entry_flow.register_discovery_flow(
18 | DOMAIN,
19 | "SpaceX Launches and Starman",
20 | _async_has_devices,
21 | )
22 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/spacex/const.py:
--------------------------------------------------------------------------------
1 | """Constants for the SpaceX integration."""
2 |
3 | DOMAIN = "spacex"
4 | COORDINATOR = "coordinator"
5 | SPACEX_API = "spacex_api"
6 | ATTR_IDENTIFIERS = "identifiers"
7 | ATTR_MANUFACTURER = "manufacturer"
8 | ATTR_MODEL = "model"
9 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/spacex/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "spacex",
3 | "name": "SpaceX Launches and Starman",
4 | "config_flow": true,
5 | "documentation": "https://github.com/djtimca/haspacex",
6 | "issue_tracker": "https://github.com/djtimca/HASpaceX/issues",
7 | "requirements": [
8 | "spacexpypi==0.0.12"
9 | ],
10 | "ssdp": [],
11 | "zeroconf": [],
12 | "homekit": {},
13 | "dependencies": [],
14 | "codeowners": [
15 | "@djtimca"
16 | ],
17 | "version": "029",
18 | "iot_class": "cloud_polling"
19 | }
20 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/spacex/strings.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "SpaceX Launches and Starman",
3 | "config": {
4 | "step": {
5 | "confirm": {
6 | "description": "[%key:common::config_flow::description::confirm_setup%]"
7 | }
8 | },
9 | "abort": {
10 | "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]",
11 | "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]"
12 | }
13 | }
14 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/spacex/translations/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "abort": {
4 | "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]",
5 | "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]"
6 | },
7 | "step": {
8 | "confirm": {
9 | "description": "Are you sure you want to install the SpaceX integration?"
10 | }
11 | }
12 | },
13 | "title": "SpaceX Launches and Starman"
14 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/spotify_cover_sensor/__init__.py:
--------------------------------------------------------------------------------
1 |
2 | __version__ = '1.0.0'
--------------------------------------------------------------------------------
/home-assistant/custom_components/spotify_cover_sensor/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "spotify_cover",
3 | "name": "SpotifyCoverSensor",
4 | "documentation": "http://macbury.ninja",
5 | "requirements": [
6 | "colorthief==0.2.1",
7 | "spotipy-homeassistant==2.4.4.dev1"
8 | ],
9 | "dependencies": [],
10 | "codeowners": [
11 | "@macbury"
12 | ]
13 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/tauron_amiplus/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "tauron_amiplus",
3 | "name": "Tauron AMIplus",
4 | "documentation": "https://github.com/PiotrMachowski/Home-Assistant-custom-components-Tauron-AMIplus",
5 | "dependencies": [],
6 | "codeowners": ["@PiotrMachowski"],
7 | "requirements": ["requests"]
8 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/tuya_v2/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "tuya_v2",
3 | "name": "Tuya v2",
4 | "version": "1.5.0",
5 | "documentation": "https://github.com/tuya/tuya-home-assistant",
6 | "requirements": [
7 | "tuya-iot-py-sdk==0.4.1"
8 | ],
9 | "codeowners": [
10 | "@Tuya"
11 | ],
12 | "config_flow": true,
13 | "iot_class": "cloud_push"
14 | }
15 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/tuya_v2/strings.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "flow_title": "Tuya configuration",
4 | "step": {
5 | "user":{
6 | "title":"Tuya Integration",
7 | "data":{
8 | "tuya_project_type": "Tuya cloud project type"
9 | }
10 | },
11 | "login": {
12 | "title": "Tuya",
13 | "description": "Enter your Tuya credential",
14 | "data": {
15 | "endpoint": "Availability Zone",
16 | "access_id": "Access ID",
17 | "access_secret": "Access Secret",
18 | "tuya_app_type": "Mobile App",
19 | "country_code": "Country Code",
20 | "username": "Account",
21 | "password": "Password"
22 | }
23 | }
24 | },
25 | "error": {
26 | "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]"
27 | }
28 | }
29 | }
--------------------------------------------------------------------------------
/home-assistant/custom_components/tuya_v2/translations/zh-Hans.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "flow_title": "涂鸦配置",
4 | "step": {
5 | "user":{
6 | "title":"Tuya插件",
7 | "data":{
8 | "tuya_project_type": "涂鸦云项目类型"
9 | }
10 | },
11 | "login": {
12 | "title": "涂鸦",
13 | "description": "请输入涂鸦账户信息。",
14 | "data": {
15 | "endpoint": "可用区域",
16 | "access_id": "Access ID",
17 | "access_secret": "Access Secret",
18 | "tuya_app_type": "移动应用",
19 | "country_code": "国家码",
20 | "username": "账号",
21 | "password": "密码"
22 | }
23 | }
24 | },
25 | "error": {
26 | "invalid_auth": "身份认证无效"
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/__init__.py:
--------------------------------------------------------------------------------
1 | """Xiaomi cloud map extractor."""
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/common/__init__.py:
--------------------------------------------------------------------------------
1 | """Basic functionalities, common for all vacuums."""
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/dreame/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/xiaomi_cloud_map_extractor/dreame/__init__.py
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "xiaomi_cloud_map_extractor",
3 | "name": "Xiaomi Cloud Map Extractor",
4 | "documentation": "https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor",
5 | "issue_tracker": "https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor/issues",
6 | "dependencies": [],
7 | "codeowners": [
8 | "@PiotrMachowski"
9 | ],
10 | "requirements": [
11 | "pillow",
12 | "pybase64",
13 | "python-miio",
14 | "requests",
15 | "pycryptodome"
16 | ],
17 | "version": "v2.2.0",
18 | "iot_class": "cloud_polling"
19 | }
20 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/roidmi/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/xiaomi_cloud_map_extractor/roidmi/__init__.py
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/services.yaml:
--------------------------------------------------------------------------------
1 | reload:
2 | name: Reload
3 | description: Reload all entities of Xiaomi Cloud Map Extractor platform
4 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/types.py:
--------------------------------------------------------------------------------
1 | from typing import Any, Dict, List, Tuple, Union
2 |
3 | Color = Union[Tuple[int, int, int], Tuple[int, int, int, int]]
4 | Colors = Dict[str, Color]
5 | Drawables = List[str]
6 | Texts = List[Any]
7 | Sizes = Dict[str, float]
8 | ImageConfig = Dict[str, Any]
9 | CalibrationPoints = List[Dict[str, Dict[str, Union[float, int]]]]
10 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/unsupported/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/custom_components/xiaomi_cloud_map_extractor/unsupported/__init__.py
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/unsupported/vacuum.py:
--------------------------------------------------------------------------------
1 | from custom_components.xiaomi_cloud_map_extractor.common.vacuum_v2 import XiaomiCloudVacuumV2
2 |
3 |
4 | class UnsupportedVacuum(XiaomiCloudVacuumV2):
5 |
6 | def __init__(self, connector, country, user_id, device_id, model):
7 | super().__init__(connector, country, user_id, device_id, model)
8 |
9 | def get_map_archive_extension(self):
10 | return "unknown"
11 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/viomi/__init__.py:
--------------------------------------------------------------------------------
1 | """Functionalities specific for Viomi vacuums."""
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/xiaomi_cloud_map_extractor/xiaomi/__init__.py:
--------------------------------------------------------------------------------
1 | """Functionalities specific for Xiaomi and Roborock vacuums."""
2 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/yahoofinance/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "yahoofinance",
3 | "name": "Yahoo Finance",
4 | "documentation": "https://github.com/iprak/yahoofinance",
5 | "requirements": [],
6 | "dependencies": [],
7 | "codeowners": [
8 | "@iprak"
9 | ],
10 | "issue_tracker": "https://github.com/iprak/yahoofinance/issues",
11 | "version": "1.1.6"
12 | }
13 |
--------------------------------------------------------------------------------
/home-assistant/custom_components/yahoofinance/services.yaml:
--------------------------------------------------------------------------------
1 | # Describes the format of available services for yahoofinance
2 |
3 | refresh_symbols:
4 | description: Refresh data for all the symbols.
--------------------------------------------------------------------------------
/home-assistant/docker-entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -e
2 | exec python -m homeassistant --config /config
--------------------------------------------------------------------------------
/home-assistant/groups.yaml:
--------------------------------------------------------------------------------
1 | family:
2 | entities:
3 | - person.arek
4 | - person.ola
5 |
6 | windows:
7 | entities:
8 | - binary_sensor.bedroom_window
9 | - binary_sensor.living_room_window
10 | - binary_sensor.balcone_door
11 |
--------------------------------------------------------------------------------
/home-assistant/known_devices.yaml.example:
--------------------------------------------------------------------------------
1 | arek:
2 | hide_if_away: false
3 | icon:
4 | mac: C9:37:AE:8E:0D:BD
5 | name: life360 arek
6 | picture: /local/arek.png
7 | track: true
8 |
9 | ola:
10 | hide_if_away: false
11 | icon:
12 | mac: FA:A2:BD:12:9D:32
13 | name: life360 ola
14 | picture: /local/ola.png
15 | track: true
16 |
--------------------------------------------------------------------------------
/home-assistant/lovelace/briefing.yaml:
--------------------------------------------------------------------------------
1 | - type: custom:layout-card
2 | layout: horizontal
3 | max_columns: 3
4 | cards:
5 | - type: vertical-stack
6 | cards:
7 | - type: "custom:kkm-card"
8 | entity_id: sensor.arek_karta_miejsca
9 | - type: custom:transit-card
10 | entity: sensor.to_work_transit
11 | - type: custom:qr-card
12 | code: !env_var HOME_ASSISTANT_SSID_QR_CODE
--------------------------------------------------------------------------------
/home-assistant/lovelace/cameras.yaml:
--------------------------------------------------------------------------------
1 | - type: custom:layout-card
2 | layout: horizontal
3 | max_columns: 3
4 | cards:
5 | - type: picture-entity
6 | title: Kuchnia
7 | entity: camera.him_cam
8 | camera_view: 'live'
9 | - type: picture-entity
10 | entity: camera.main_square
11 | camera_view: 'live'
12 | - type: picture-entity
13 | entity: camera.wawel
14 | camera_view: 'live'
15 |
--------------------------------------------------------------------------------
/home-assistant/lovelace/work.yaml:
--------------------------------------------------------------------------------
1 | - type: custom:layout-card
2 | layout: vertical
3 | max_columns: 4
4 | cards:
5 | - type: horizontal-stack
6 | cards:
7 | - type: picture-entity
8 | entity: sensor.arek_jedzenie
9 | name: "Zamówienie żarło?"
10 | state_image:
11 | "on": /local/food_on.gif
12 | "off": /local/food_off.gif
13 |
14 | - type: picture-entity
15 | entity: sensor.arek_czas_pracy
16 | name: "Fajrant?"
17 | state_image:
18 | "on": /local/working_on.gif
19 | "off": /local/working_off.gif
20 | - break
21 | - type: "custom:kkm-card"
22 | entity_id: sensor.arek_karta_miejsca
23 | - type: custom:transit-card
24 | entity: sensor.back_from_work_transit
25 |
--------------------------------------------------------------------------------
/home-assistant/scenes/tv.yaml:
--------------------------------------------------------------------------------
1 | - name: Watching tv
2 | entities:
3 | light.tv_stand: on
4 | light.main: off
5 | light.dinner_table: off
6 | light.work_desk: off
7 | light.work_ambient_desk: off
8 | cover.living_room: closed
9 | media_player.tv: on
--------------------------------------------------------------------------------
/home-assistant/scenes/work.yaml:
--------------------------------------------------------------------------------
1 | - name: Work
2 | entities:
3 | light.tv_stand: off
4 | light.main: off
5 | light.dinner_table: off
6 | light.work_desk: on
7 | light.work_ambient_desk: off
8 | switch.macmini: on
9 | cover.living_room: closed
10 | media_player.tv: on
--------------------------------------------------------------------------------
/home-assistant/scripts/grocy.yaml:
--------------------------------------------------------------------------------
1 | consume_pepsi:
2 | alias: 'Consume pepsi'
3 | sequence:
4 | - service: grocy.consume_product
5 | data:
6 | product_id: 65
7 | transaction_type: CONSUME
8 | amount: 1
9 | - service: notify.alexa_media_kitchen
10 | data:
11 | message: 'Congratulations! You have consumed one pepsi'
12 | data:
13 | type: announce
14 | method: all
--------------------------------------------------------------------------------
/home-assistant/scripts/switch_off_mac_mini.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ssh-keyscan -H 192.168.1.91 >> ~/.ssh/known_hosts
4 | ssh -i /config/.storage/id_rsa macbury@192.168.1.91 'pmset sleepnow'
--------------------------------------------------------------------------------
/home-assistant/sensors/air_purifier.yaml:
--------------------------------------------------------------------------------
1 | - platform: template
2 | sensors:
3 | main_cover_position:
4 | unit_of_measurement: '%'
5 | value_template: '{{ states.cover.living_room.attributes.current_position }}'
6 |
7 |
--------------------------------------------------------------------------------
/home-assistant/sensors/currency.yaml:
--------------------------------------------------------------------------------
1 | - platform: currencylayer
2 | api_key: !env_var HOME_ASSISTANT_CURRENCY_LAYER
3 | base: PLN
4 | quote:
5 | - EUR
6 | - USD
7 | - GBP
8 | - XBT
9 |
--------------------------------------------------------------------------------
/home-assistant/sensors/deluge.yaml:
--------------------------------------------------------------------------------
1 | # - platform: deluge
2 | # host: 0.0.0.0
3 | # username: deluge
4 | # password: ''
5 | # monitored_variables:
6 | # - current_status
--------------------------------------------------------------------------------
/home-assistant/sensors/fail2ban.yaml:
--------------------------------------------------------------------------------
1 | - platform: fail2ban
2 | jails:
3 | - nginx-noscript
4 | - nginx-http-auth
5 | - nginx-badbots
6 | - nginx-forbidden
7 | - ssh
8 | - ha
9 | file_path: /fail2ban/fail2ban.log
--------------------------------------------------------------------------------
/home-assistant/sensors/food.yaml:
--------------------------------------------------------------------------------
1 | - platform: mqtt
2 | state_topic: "poland/zboza/price"
3 | name: 'Cena Zboża'
4 | icon: 'mdi:barley'
5 | unit_of_measurement: 'zł netto/tonę'
6 |
7 | - platform: mqtt
8 | state_topic: "poland/wieprzowina/price"
9 | name: 'Cena Wieprzowina'
10 | icon: 'mdi:pig'
11 | unit_of_measurement: 'zł/kg'
12 |
13 | - platform: mqtt
14 | state_topic: "poland/wolowina/price"
15 | name: 'Cena Wołowina'
16 | icon: 'mdi:cow'
17 | unit_of_measurement: 'zł/kg'
18 |
19 |
--------------------------------------------------------------------------------
/home-assistant/sensors/fuel.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/sensors/fuel.yaml
--------------------------------------------------------------------------------
/home-assistant/sensors/kkm.yaml:
--------------------------------------------------------------------------------
1 | - platform: kkm
2 | name: Arek Karta Miejsca
3 | identity: !env_var HOME_ASSISTANT_KKM_IDENDITY
4 | city_card: !env_var HOME_ASSISTANT_KKM_CITY_CARD
5 |
--------------------------------------------------------------------------------
/home-assistant/sensors/money.yaml:
--------------------------------------------------------------------------------
1 |
2 | - platform: template
3 | sensors:
4 | all_portfolio_value:
5 | friendly_name: "Całkowity wynik"
6 | unit_of_measurement: 'zł'
7 | value_template: >-
8 | {{ float(states.sensor.obligacje.state) + float(states.sensor.portfolio_market_value.state) }}
9 |
--------------------------------------------------------------------------------
/home-assistant/sensors/power.yaml:
--------------------------------------------------------------------------------
1 | - platform: integration
2 | source: sensor.power_consumption
3 | name: energy_spent
4 | unit_prefix: k
5 | round: 4
6 |
7 | - platform: integration
8 | source: sensor.cool_as_ice_energy_current
9 | name: "Air condition energy used"
10 | unit_prefix: k
11 | round: 4
12 |
--------------------------------------------------------------------------------
/home-assistant/sensors/qnap.yaml:
--------------------------------------------------------------------------------
1 | # - platform: qnap
2 | # host: 192.168.1.181
3 | # username: !env_var HOME_ASSISTANT_QNAP_USERNAME
4 | # password: !env_var HOME_ASSISTANT_QNAP_PASSWORD
5 | # verify_ssl: false # Shame
6 | # monitored_conditions:
7 | # - system_temp
8 | # - status
9 | # - cpu_usage
10 | # - cpu_temp
11 | # - memory_percent_used
12 | # - network_tx
13 | # - network_rx
--------------------------------------------------------------------------------
/home-assistant/sensors/scale.yaml:
--------------------------------------------------------------------------------
1 | - platform: mqtt
2 | name: "Arek Weight"
3 | state_topic: "home/miscale/Arek/weight"
4 | value_template: "{{ value_json['Weight'] }}"
5 | unit_of_measurement: "kg"
6 | json_attributes_topic: "home/miscale/Arek/weight"
7 | icon: mdi:scale-bathroom
8 |
9 | - platform: mqtt
10 | name: "Arek BMI"
11 | state_topic: "home/miscale/Arek/weight"
12 | value_template: "{{ value_json['BMI'] }}"
13 | icon: mdi:human-pregnant
14 |
15 | - platform: mqtt
16 | name: "Ola Weight"
17 | state_topic: "home/miscale/Ola/weight"
18 | value_template: "{{ value_json['Weight'] }}"
19 | unit_of_measurement: "kg"
20 | json_attributes_topic: "home/miscale/Ola/weight"
21 | icon: mdi:scale-bathroom
22 |
23 | - platform: mqtt
24 | name: "Ola BMI"
25 | state_topic: "home/miscale/Ola/weight"
26 | value_template: "{{ value_json['BMI'] }}"
27 | icon: mdi:human-pregnant
28 |
--------------------------------------------------------------------------------
/home-assistant/sensors/sonarr.yaml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/sensors/sonarr.yaml
--------------------------------------------------------------------------------
/home-assistant/sensors/spotify.yaml:
--------------------------------------------------------------------------------
1 | # - platform: spotify_cover_sensor
2 | # cache_path: '/config/spotify-token-cache.json'
--------------------------------------------------------------------------------
/home-assistant/sensors/system.yaml:
--------------------------------------------------------------------------------
1 | - platform: uptime
2 |
--------------------------------------------------------------------------------
/home-assistant/sensors/time.yaml:
--------------------------------------------------------------------------------
1 | - platform: time_date
2 | display_options:
3 | - 'time'
4 | - 'date'
5 | - 'date_time'
6 | - 'time_date'
7 | - 'time_utc'
8 | - 'beat'
--------------------------------------------------------------------------------
/home-assistant/sensors/trackers.yaml:
--------------------------------------------------------------------------------
1 | - platform: template
2 | sensors:
3 | arek_last_update:
4 | value_template: '{{ states.device_tracker.arek.attributes.last_seen }}'
5 | ola_last_update:
6 | value_template: '{{ states.device_tracker.arek.attributes.last_seen }}'
--------------------------------------------------------------------------------
/home-assistant/sensors/transit.yaml:
--------------------------------------------------------------------------------
1 | - platform: mmpk
2 | name: back_from_work_transit
3 | stop_id: 130
4 | direction: 'Wzgórza K.'
5 |
6 | - platform: mmpk
7 | name: to_work_transit
8 | stop_id: 2685
9 | direction: 'Bronowice Małe'
--------------------------------------------------------------------------------
/home-assistant/sensors/vacuum.yaml:
--------------------------------------------------------------------------------
1 | - platform: template
2 | sensors:
3 | vacuum_status:
4 | friendly_name: "Vacuum - Status"
5 | value_template: "Status: {{ states.vacuum.main_vacuum.attributes.status }}"
6 | vacuum_battery:
7 | friendly_name: "Vacuum - Battery"
8 | value_template: "Battery: {{ states.vacuum.main_vacuum.attributes.battery_level }}"
9 | device_class: battery
10 | unit_of_measurement: '%'
--------------------------------------------------------------------------------
/home-assistant/sensors/work.yaml:
--------------------------------------------------------------------------------
1 | - platform: template
2 | sensors:
3 | ordered_food:
4 | value_template: '{{ states.sensor.arek_jedzenie.attributes.meal }}'
5 |
6 |
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/aqua.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/aqua.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/blue.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/blue.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/coral.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/coral.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/gray.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/gray.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/green.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/green.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/orange.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/orange.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/pink.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/pink.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/purple.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/purple.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/rose.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/rose.jpg
--------------------------------------------------------------------------------
/home-assistant/themes/caule-themes-pack-1/yellow.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/themes/caule-themes-pack-1/yellow.jpg
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-battery-entity-row/battery-entity-row.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/lovelace-battery-entity-row/battery-entity-row.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-card-tools/card-tools.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/lovelace-card-tools/card-tools.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-card-tools/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | entry: './src/main.js',
5 | mode: 'production',
6 | output: {
7 | filename: 'card-tools.js',
8 | path: path.resolve(__dirname)
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-card-tools/webpack.config.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/lovelace-card-tools/webpack.config.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-layout-card/layout-card.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/lovelace-layout-card/layout-card.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-layout-card/rollup.config.js:
--------------------------------------------------------------------------------
1 | import nodeResolve from "@rollup/plugin-node-resolve";
2 | import json from "@rollup/plugin-json";
3 | import commonjs from "@rollup/plugin-commonjs";
4 | import typescript from "rollup-plugin-typescript2";
5 | import { terser } from "rollup-plugin-terser";
6 | import babel from "@rollup/plugin-babel";
7 |
8 | const dev = process.env.ROLLUP_WATCH;
9 |
10 | export default {
11 | input: "src/main.ts",
12 | output: {
13 | file: "layout-card.js",
14 | format: "es",
15 | },
16 | plugins: [
17 | nodeResolve(),
18 | commonjs(),
19 | json(),
20 | typescript(),
21 | babel({
22 | exclude: "node_modules/**",
23 | }),
24 | !dev && terser({ format: { comments: false } }),
25 | ],
26 | };
27 |
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-layout-card/rollup.config.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/lovelace-layout-card/rollup.config.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/lovelace-xiaomi-vacuum-map-card/xiaomi-vacuum-map-card.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/lovelace-xiaomi-vacuum-map-card/xiaomi-vacuum-map-card.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/mini-graph-card/mini-graph-card-bundle.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/mini-graph-card/mini-graph-card-bundle.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/mini-media-player/mini-media-player-bundle.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/mini-media-player/mini-media-player-bundle.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/weather-card/icons/weather_sagittarius.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/home-assistant/www/community/weather-card/weather-card-editor.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/weather-card/weather-card-editor.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/community/weather-card/weather-card.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/community/weather-card/weather-card.js.gz
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/air-purifier/idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/air-purifier/idle.png
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/air-purifier/standby.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/air-purifier/standby.gif
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/air-purifier/working.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/air-purifier/working.gif
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/linak-desk/table_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/linak-desk/table_bottom.png
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/linak-desk/table_middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/linak-desk/table_middle.png
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/linak-desk/table_top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/linak-desk/table_top.png
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/thermostat-card/VERSION:
--------------------------------------------------------------------------------
1 | 0.1.1
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/thermostat-card/changelog.md:
--------------------------------------------------------------------------------
1 | ## 0.1.1
2 | Fix #155 for increments being only .5
3 |
4 | ## 0.1.0
5 | Add ability to specify external sensor for ambient temperature
6 |
7 | ## 0.0.2
8 | Fix alignment on Firefox
9 |
10 | ## 0.0.1
11 | Initial release that supports versioning
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/vacuum/robot_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/vacuum/robot_bg.png
--------------------------------------------------------------------------------
/home-assistant/www/custom-lovelace/vacuum/robot_bg_disable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom-lovelace/vacuum/robot_bg_disable.png
--------------------------------------------------------------------------------
/home-assistant/www/custom_ui/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/custom_ui/.gitkeep
--------------------------------------------------------------------------------
/home-assistant/www/food_off.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/food_off.gif
--------------------------------------------------------------------------------
/home-assistant/www/food_on.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/food_on.gif
--------------------------------------------------------------------------------
/home-assistant/www/icons/weather_icons/animated/weather_sagittarius.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/home-assistant/www/kiosk/kiosk.js:
--------------------------------------------------------------------------------
1 | const { ipcRenderer } = require('electron')
2 | class KioskApp {
3 | constructor() {
4 | const style = document.createElement('style');
5 | style.type = 'text/css';
6 | style.appendChild(document.createTextNode(`
7 | ::-webkit-scrollbar {
8 | display: none;
9 | }
10 | `));
11 |
12 | document.body.appendChild(style);
13 |
14 | document.body.addEventListener('touchstart', function(e) {
15 | ipcRenderer.send('kiosk:wake');
16 | });
17 | ipcRenderer.send('kiosk:wake');
18 | }
19 | }
20 |
21 | window.kioskApp = new KioskApp();
22 |
--------------------------------------------------------------------------------
/home-assistant/www/ping.txt:
--------------------------------------------------------------------------------
1 | kopytko
2 |
--------------------------------------------------------------------------------
/home-assistant/www/presence/arek/away.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/presence/arek/away.png
--------------------------------------------------------------------------------
/home-assistant/www/presence/arek/codesthq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/presence/arek/codesthq.png
--------------------------------------------------------------------------------
/home-assistant/www/presence/arek/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/presence/arek/home.png
--------------------------------------------------------------------------------
/home-assistant/www/presence/ola/away.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/presence/ola/away.png
--------------------------------------------------------------------------------
/home-assistant/www/presence/ola/codesthq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/presence/ola/codesthq.png
--------------------------------------------------------------------------------
/home-assistant/www/presence/ola/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/presence/ola/home.png
--------------------------------------------------------------------------------
/home-assistant/www/wallpapers/afternoon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/wallpapers/afternoon.png
--------------------------------------------------------------------------------
/home-assistant/www/wallpapers/evening.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/wallpapers/evening.png
--------------------------------------------------------------------------------
/home-assistant/www/wallpapers/morning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/wallpapers/morning.png
--------------------------------------------------------------------------------
/home-assistant/www/wallpapers/night.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/wallpapers/night.png
--------------------------------------------------------------------------------
/home-assistant/www/working_off.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/working_off.gif
--------------------------------------------------------------------------------
/home-assistant/www/working_on.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/home-assistant/www/working_on.gif
--------------------------------------------------------------------------------
/home-assistant/zwave_device_config.yaml:
--------------------------------------------------------------------------------
1 | sensor.fibaro_system_fgrm223_roller_shutter_controller_3_energy:
2 | ignored: false
3 | polling_intensity: 10
4 | sensor.cover_power:
5 | ignored: false
6 | polling_intensity: 10
7 | cover.living_room:
8 | ignored: false
9 | polling_intensity: 10
10 |
--------------------------------------------------------------------------------
/mosquitto/mosquitto.conf:
--------------------------------------------------------------------------------
1 | allow_anonymous false
2 | password_file /mosquitto/data/users.db
3 |
4 | persistence true
5 | persistence_location /mosquitto/data/
6 | log_dest stdout
7 | log_dest file /mosquitto/log/mosquitto.log
8 | port 4105
9 |
--------------------------------------------------------------------------------
/nextcloud/Upgrade.md:
--------------------------------------------------------------------------------
1 | docker exec -u 33 -it support_nextcloud_1 bash
2 | ./occ maintenance:mode --on
3 | ./occ upgrade
4 | ./occ maintenance:mode --off
5 |
--------------------------------------------------------------------------------
/nextcloud/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
3 | logfile=/var/log/supervisord/supervisord.log
4 | pidfile=/var/run/supervisord/supervisord.pid
5 | childlogdir=/var/log/supervisord/
6 | logfile_maxbytes=50MB ; maximum size of logfile before rotation
7 | logfile_backups=10 ; number of backed up logfiles
8 | loglevel=error
9 |
10 | [program:php-fpm]
11 | stdout_logfile=/dev/stdout
12 | stdout_logfile_maxbytes=0
13 | stderr_logfile=/dev/stderr
14 | stderr_logfile_maxbytes=0
15 | command=php-fpm
16 |
17 | [program:cron]
18 | stdout_logfile=/dev/stdout
19 | stdout_logfile_maxbytes=0
20 | stderr_logfile=/dev/stderr
21 | stderr_logfile_maxbytes=0
22 | command=/cron.sh
23 |
--------------------------------------------------------------------------------
/node-red/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nodered/node-red:latest-12
2 |
3 | USER root
4 |
5 | RUN apk update && apk add py3-setuptools ffmpeg
6 | RUN curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
7 | RUN chmod a+rx /usr/local/bin/youtube-dl
8 | RUN youtube-dl --version
9 | USER node-red
10 |
11 |
--------------------------------------------------------------------------------
/notes/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:16.04
2 |
3 | ENV PROJECT_DIR=/data/src/
4 |
5 | RUN DEBIAN_FRONTEND=noninteractive \
6 | apt-get -y update && \
7 | apt-get -y install git build-essential ruby-dev ruby-rails libz-dev libmysqlclient-dev curl tzdata && \
8 | curl -sL https://deb.nodesource.com/setup_6.x | bash - && \
9 | apt-get -y update && \
10 | apt-get -y install nodejs && \
11 | rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
12 | apt-get autoremove -y && \
13 | apt-get clean
14 |
15 | WORKDIR $PROJECT_DIR
16 |
17 | RUN git clone https://github.com/standardfile/ruby-server.git $PROJECT_DIR
18 | ADD entrypoint .
19 | RUN chmod +x entrypoint
20 | RUN bundle install
21 | RUN bundle exec rake assets:precompile
22 |
23 | EXPOSE 3000
24 |
25 | ENTRYPOINT [ "./docker/entrypoint" ]
26 | CMD [ "start" ]
--------------------------------------------------------------------------------
/notes/entrypoint:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | # $0 is a script name,
3 | # $1, $2, $3 etc are passed arguments
4 | # $1 is our command
5 | CMD=$1
6 |
7 | case "$CMD" in
8 | 'start' )
9 | echo `pwd`
10 | rm -f /data/src/tmp/pids/server.pid
11 | bundle exec rails s -b 0.0.0.0
12 | ;;
13 |
14 | 'bootstrap' )
15 | bundle exec rails db:create db:migrate
16 | ;;
17 |
18 | * )
19 | # Run custom command. Thanks to this line we can still use
20 | # "docker run our_image /bin/bash" and it will work
21 | exec "$@"
22 | ;;
23 | esac
--------------------------------------------------------------------------------
/orion/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:18.04
2 |
3 | EXPOSE 5000
4 |
5 | RUN apt-get update && apt-get install \
6 | -y --no-install-recommends curl libmysqlclient-dev python-dev python python-setuptools python-pip build-essential git ca-certificates
7 |
8 |
9 | RUN pip install setuptools --upgrade
10 | RUN git clone https://github.com/LINKIWI/orion-server.git /server
11 |
12 | WORKDIR /server
13 |
14 | RUN pip install -r requirements.txt
15 | RUN mkdir -p /etc/orion
16 | ADD config.json /etc/orion/config.json
17 |
18 | ENV PYTHONPATH /server
19 | ADD entrypoint.sh .
20 | ADD web/index.html .
21 | ADD web/main.js .
22 | RUN chmod +x ./entrypoint.sh
23 | CMD ["bash", "entrypoint.sh"]
--------------------------------------------------------------------------------
/orion/config.example.json:
--------------------------------------------------------------------------------
1 | {
2 | "database": {
3 | "host": "mysql",
4 | "port": 3306,
5 | "name": "orion",
6 | "user": "orion",
7 | "password": "super-secret-password"
8 | },
9 | "redis": {
10 | "addr": "redis:6379"
11 | },
12 | "frontend_url": "http://orion.example.com",
13 | "mapbox_access_token": "pk.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
14 | }
--------------------------------------------------------------------------------
/orion/entrypoint.sh:
--------------------------------------------------------------------------------
1 | python -m SimpleHTTPServer 8080 &
2 | python orion/server.py
--------------------------------------------------------------------------------
/panel/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "SmartHouse",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "main.js",
6 | "scripts": {
7 | "start": "electron .",
8 | "dev": "electron . --dev"
9 | },
10 | "repository": "https://github.com/electron/electron-quick-start",
11 | "keywords": [
12 | "Electron",
13 | "quick",
14 | "start",
15 | "tutorial",
16 | "demo"
17 | ],
18 | "author": "GitHub",
19 | "license": "CC0-1.0",
20 | "devDependencies": {
21 | "electron": "^4.0.1"
22 | },
23 | "dependencies": {
24 | "yargs": "^12.0.5"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/panel/renderer.js:
--------------------------------------------------------------------------------
1 | const { remote } = require('electron')
2 | const electron = require('electron');
3 |
4 | async function waithForHa() {
5 | const host = remote.getCurrentWindow().argv.host
6 | try {
7 | const resp = await fetch(host)
8 | if (resp.ok) {
9 | window.location.href = host
10 | } else {
11 | setTimeout(waithForHa, 5000)
12 | }
13 | } catch (e) {
14 | setTimeout(waithForHa, 5000)
15 | }
16 | }
17 |
18 | document.addEventListener("DOMContentLoaded", () => {
19 | const webFrame = electron.webFrame;
20 | webFrame.setZoomLevel(1.0);
21 | webFrame.setVisualZoomLevelLimits(1, 1);
22 | webFrame.setLayoutZoomLevelLimits(0, 0);
23 | document.body.requestPointerLock();
24 | waithForHa();
25 | })
--------------------------------------------------------------------------------
/panel/wakeup.js:
--------------------------------------------------------------------------------
1 | const exec = require('child_process').exec;
2 |
3 | class WakeUp {
4 | constructor() {
5 | this.timeout = null
6 | }
7 |
8 | reset() {
9 | if (this.timeout != null) {
10 | clearTimeout(this.timeout);
11 | this.timeout = null;
12 | }
13 | this.timeout = setTimeout(() => this.screenOff(), 25 * 1000)
14 | }
15 |
16 | screenOff() {
17 | console.log("Screen off");
18 | try {
19 | exec("xset -display :0.0 dpms force off", null);
20 | } catch(e) {
21 | console.error(e);
22 | }
23 | }
24 |
25 | screenOn() {
26 | console.log("Screen on");
27 | try {
28 | exec("xset -display :0.0 dpms force on", null);
29 | } catch(e) {
30 | console.error(e);
31 | }
32 | }
33 | }
34 |
35 | module.exports = WakeUp
--------------------------------------------------------------------------------
/postgresql/init-user-db.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
5 | CREATE USER nextcloud WITH PASSWORD 'nextcloud';
6 | CREATE DATABASE nextcloud;
7 | GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
8 | EOSQL
--------------------------------------------------------------------------------
/provision/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/provision/.gitkeep
--------------------------------------------------------------------------------
/provision/install_roles.yml:
--------------------------------------------------------------------------------
1 | - src: geerlingguy.nginx
2 | - src: weareinteractive.ufw
3 | - src: nickjj.fail2ban
4 | - src: geerlingguy.certbot
5 | - src: geerlingguy.nodejs
6 | - src: petermosmans.customize-gnome
7 | - src: brianhartsock.netatalk
8 | - src: oefenweb.postfix
9 | - src: mikolak-net.raspi_config
10 | - src: elboletaire.transmission
11 | - src: aeimer.install_bat
--------------------------------------------------------------------------------
/provision/inventory.ini.example:
--------------------------------------------------------------------------------
1 | [master]
2 | 127.0.0.1 ansible_connection=ssh ansible_user=vagrant ansible_port=2222
3 |
4 | [panel]
5 | 127.0.0.1 ansible_connection=ssh ansible_user=vagrant ansible_port=2222
6 |
7 | [gateway]
8 | 127.0.0.1 ansible_connection=ssh ansible_user=vagrant ansible_port=2222
9 |
10 | [vacuum]
11 | 192.168.1.222 ansible_connection=ssh ansible_user=root ansible_port=22
12 |
13 | [cat_feeder]
14 | 192.168.1.222 ansible_connection=ssh ansible_user=root ansible_port=22
15 |
16 | [decibel_meter]
17 | 192.168.1.169 ansible_connection=ssh ansible_user=pi ansible_port=22
--------------------------------------------------------------------------------
/provision/inventory.vagrant.ini:
--------------------------------------------------------------------------------
1 | [master]
2 | 127.0.0.1 ansible_connection=ssh ansible_user=vagrant ansible_port=2222
3 |
--------------------------------------------------------------------------------
/provision/playbooks/anarchopi/adguard/ads.conf.j2:
--------------------------------------------------------------------------------
1 | upstream adguard {
2 | server 192.168.1.157:80 fail_timeout=0;
3 | }
4 |
5 | server {
6 | listen 80;
7 | listen [::]:80;
8 | server_name {{ adguard_domain }};
9 | return 301 https://$server_name$request_uri;
10 | }
11 |
12 | server {
13 | listen 443 ssl;
14 | ssl on;
15 | ssl_certificate /etc/letsencrypt/live/{{ adguard_domain }}/fullchain.pem;
16 | ssl_certificate_key /etc/letsencrypt/live/{{ adguard_domain }}/privkey.pem;
17 | server_name {{ adguard_domain }};
18 |
19 | location / {
20 | allow 192.168.0.0/16;
21 | allow 10.0.0.0/16;
22 | deny all;
23 | proxy_pass http://adguard/;
24 | }
25 |
26 | error_page 404 403 @error;
27 |
28 | location @error {
29 | root /var/www;
30 | try_files /403.html /403.html;
31 | }
32 |
33 | client_max_body_size 50M;
34 | keepalive_timeout 10;
35 | }
--------------------------------------------------------------------------------
/provision/playbooks/anarchopi/bin/unlock-hard-drive:
--------------------------------------------------------------------------------
1 | sudo cryptsetup luksOpen /dev/sda1 encrypted
2 | sudo mount -t ext4 /dev/mapper/encrypted /data
3 | sudo systemctl start transmission-daemon.service
--------------------------------------------------------------------------------
/provision/playbooks/anarchopi/bitcoind/btc_explorer.conf.j2:
--------------------------------------------------------------------------------
1 | upstream btc_explorer {
2 | server 192.168.1.157:80 fail_timeout=0;
3 | }
4 |
5 | server {
6 | listen 80;
7 | listen [::]:80;
8 | server_name {{ btc_explorer_domain }};
9 |
10 | location / {
11 | allow 192.168.0.0/16;
12 | allow 10.0.0.0/16;
13 | deny all;
14 | proxy_pass http://btc_explorer/;
15 |
16 | proxy_set_header Host $host;
17 | proxy_set_header X-Real-IP $remote_addr;
18 | proxy_http_version 1.1;
19 | proxy_set_header Upgrade $http_upgrade;
20 | proxy_set_header Connection "upgrade";
21 | }
22 |
23 | error_page 404 403 @error;
24 |
25 | location @error {
26 | root /var/www;
27 | try_files /403.html /403.html;
28 | }
29 |
30 | client_max_body_size 50M;
31 | keepalive_timeout 10;
32 | }
--------------------------------------------------------------------------------
/provision/playbooks/anarchopi/electrum/backup.j2:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | mkdir -p /data/backup/raspibolt
4 | rm /data/backup/raspibolt/bitcoin.tar
5 | tar cvf /data/backup/raspibolt/bitcoin.tar ~/.bitcoin/bitcoin.conf ~/.bitcoin/wallet.dat ~/.bitcoin/peers.dat ~/.bitcoin/banlist.dat
6 | rm /data/backup/raspibolt/lnd.tar
7 | tar cvf /data/backup/raspibolt/lnd.tar ~/.lnd/lnd.conf
8 | rm /data/backup/raspibolt/lnd_channels.json
9 | lncli exportchanbackup --all --output_file /data/backup/raspibolt/lnd_channels.json
--------------------------------------------------------------------------------
/provision/playbooks/anarchopi/ipfs/ipfs.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=IPFS daemon
3 | Wants=network.target
4 | After=network.target
5 | [Service]
6 | User=ipfs
7 | Group=ipfs
8 | Type=simple
9 | Environment=IPFS_PATH=/mnt/hdd/ipfs
10 | ExecStart=/usr/local/bin/ipfs daemon --migrate
11 | ExecStop=/usr/bin/pkill -f ipfs
12 | Restart=on-failure
13 | RestartSec=10s
14 | [Install]
15 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/playbooks/anarchopi/torrents/torrents.conf.j2:
--------------------------------------------------------------------------------
1 | upstream torrents {
2 | server 192.168.1.200:9091 fail_timeout=5;
3 | }
4 |
5 | server {
6 | listen 80;
7 | listen [::]:80;
8 | server_name {{ torrents_domain }};
9 |
10 | location / {
11 | allow 192.168.0.0/16;
12 | allow 10.0.0.0/16;
13 | deny all;
14 | proxy_pass http://torrents/;
15 | }
16 |
17 | error_page 404 403 @error;
18 |
19 | location @error {
20 | root /var/www;
21 | try_files /403.html /403.html;
22 | }
23 |
24 | client_max_body_size 50M;
25 | keepalive_timeout 10;
26 | }
--------------------------------------------------------------------------------
/provision/playbooks/blog/blog.yaml:
--------------------------------------------------------------------------------
1 | # Nginx
2 | - hosts: master
3 | become: yes
4 | roles:
5 | - role: geerlingguy.nginx
6 | handlers:
7 | - name: restart nginx
8 | become: yes
9 | service:
10 | name: nginx
11 | enabled: yes
12 | state: restarted
13 | tasks:
14 | - name: Create /etc/nginx/sites-enabled/blog.conf
15 | template:
16 | src: blog.conf.j2
17 | dest: /etc/nginx/sites-enabled/blog.conf
18 | notify:
19 | - reload nginx
20 | - restart nginx
--------------------------------------------------------------------------------
/provision/playbooks/cat_feeder/cat-motion.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Led Service
3 | After=network.target ntpdate.service
4 |
5 | [Service]
6 | Environment=PATH=/pussificator:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
7 | ExecStartPre=/bin/bash -c 'test -p /tmp/motion-status || /bin/mknod /tmp/motion-status p'
8 | ExecStart=/usr/bin/python3 -u src/motion.py > /tmp/watch_map.log 2>&1"
22 | - name: Reboot vacuum to start watch map in background
23 | reboot:
24 |
--------------------------------------------------------------------------------
/provision/playbooks/vacuum/watch_map.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | export TERM=xterm
3 | watch -n1 ./upload_map.sh
--------------------------------------------------------------------------------
/provision/playbooks/youtube/youtube.yaml:
--------------------------------------------------------------------------------
1 | - hosts: master
2 | become: yes
3 | roles:
4 | - role: geerlingguy.certbot
5 | vars:
6 | certbot_auto_renew: false
7 | certbot_admin_email: "{{ email }}"
8 | certbot_create_if_missing: true
9 | certbot_certs:
10 | - domains:
11 | - "{{ youtube_domain }}"
12 |
13 | # Nginx
14 | - hosts: master
15 | become: yes
16 | roles:
17 | - role: geerlingguy.nginx
18 | handlers:
19 | - name: restart nginx
20 | become: yes
21 | service:
22 | name: nginx
23 | enabled: yes
24 | state: restarted
25 | tasks:
26 | - name: Create /etc/nginx/sites-enabled/youtube.conf
27 | template:
28 | src: youtube.conf.j2
29 | dest: /etc/nginx/sites-enabled/youtube.conf
30 | notify:
31 | - reload nginx
32 | - restart nginx
--------------------------------------------------------------------------------
/provision/playbooks/ytd/ytd.conf.j2:
--------------------------------------------------------------------------------
1 | upstream ytd {
2 | server 127.0.0.1:7887 fail_timeout=0;
3 | }
4 |
5 | server {
6 | listen 80;
7 | listen [::]:80;
8 | server_name {{ ytd_domain }};
9 |
10 | location / {
11 | allow 192.168.0.0/16;
12 | allow 10.0.0.0/16;
13 | deny all;
14 | proxy_pass http://ytd/;
15 | proxy_set_header Host $host;
16 |
17 | proxy_http_version 1.1;
18 | proxy_set_header Upgrade $http_upgrade;
19 | proxy_set_header Connection "upgrade";
20 |
21 | proxy_set_header X-Real-IP $remote_addr;
22 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
23 | }
24 |
25 | error_page 404 403 @error;
26 |
27 | location @error {
28 | root /var/www;
29 | try_files /403.html /403.html;
30 | }
31 |
32 | client_max_body_size 50M;
33 | keepalive_timeout 10;
34 | }
--------------------------------------------------------------------------------
/provision/playbooks/ytd/ytd.yaml:
--------------------------------------------------------------------------------
1 |
2 | # Nginx
3 | - hosts: master
4 | become: yes
5 | roles:
6 | - role: geerlingguy.nginx
7 | handlers:
8 | - name: restart nginx
9 | become: yes
10 | service:
11 | name: nginx
12 | enabled: yes
13 | state: restarted
14 | tasks:
15 | - name: Create /etc/nginx/sites-enabled/ytd.conf
16 | template:
17 | src: ytd.conf.j2
18 | dest: /etc/nginx/sites-enabled/ytd.conf
19 | notify:
20 | - reload nginx
21 | - restart nginx
22 |
--------------------------------------------------------------------------------
/provision/playbooks/zwave/zwave.service.j2:
--------------------------------------------------------------------------------
1 | [Unit]
2 | ConditionPathExists=/smart-house/.env.home-assistant
3 | Description=Smart House Support
4 | Requires=docker.service
5 | After=docker.service
6 |
7 | [Service]
8 | Environment=SMART_HOUSE_DIR=/smart-house
9 | Restart=always
10 | User=root
11 | StandardOutput=syslog
12 | StandardError=syslog
13 |
14 | ExecStart=/usr/bin/zsh -l -c "/usr/bin/smart-house zwave up"
15 | ExecStop=/usr/bin/zsh -l -c "/usr/bin/smart-house zwave down"
16 |
17 | [Install]
18 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/playbooks/zwave/zwave.yaml:
--------------------------------------------------------------------------------
1 | - hosts: master
2 | become: yes
3 | tasks:
4 | - name: Create zwave.service
5 | template:
6 | src: zwave.service.j2
7 | dest: /lib/systemd/system/zwave.service
8 | - name: Reload daemon
9 | systemd:
10 | daemon_reload: yes
11 | - name: Reload service zwave, in all cases
12 | systemd:
13 | name: zwave
14 | state: reloaded
15 | enabled: yes
--------------------------------------------------------------------------------
/provision/templates/.env.local.j2:
--------------------------------------------------------------------------------
1 | {% for key, value in env.items() %}
2 | {{ key }}={{ value }}
3 | {% endfor %}
--------------------------------------------------------------------------------
/provision/templates/etc/default/cloudflared.j2:
--------------------------------------------------------------------------------
1 | # Commandline args for cloudflared, generated by ansible
2 | CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
--------------------------------------------------------------------------------
/provision/templates/etc/dnsmasq.d/02-localhosts.conf.j2:
--------------------------------------------------------------------------------
1 | addn-hosts=/etc/pihole/lan.list
--------------------------------------------------------------------------------
/provision/templates/etc/fail2ban/filter.d/ha.conf:
--------------------------------------------------------------------------------
1 | [INCLUDES]
2 | before = common.conf
3 |
4 | [Definition]
5 | failregex = ^%(__prefix_line)s.*Login attempt or request with invalid authentication from .*$
6 |
7 | ignoreregex =
8 |
9 | [Init]
10 | datepattern = ^%%Y-%%m-%%d %%H:%%M:%%S
--------------------------------------------------------------------------------
/provision/templates/etc/fail2ban/filter.d/mosquitto-auth.conf:
--------------------------------------------------------------------------------
1 | [Definition]
2 |
3 | failregex = Client connection from failed
4 | ignoreregex =
--------------------------------------------------------------------------------
/provision/templates/etc/fail2ban/filter.d/nginx-badbots.conf:
--------------------------------------------------------------------------------
1 |
2 | # Fail2Ban configuration file
3 | #
4 | # Regexp to catch known spambots and software alike. Please verify
5 | # that it is your intent to block IPs which were driven by
6 | # above mentioned bots.
7 |
8 |
9 | [Definition]
10 |
11 | badbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\.02|sogou music spider
12 | badbots = Atomic_Email_Hunter/4\.0|atSpider/1\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\.6|ContactBot/0\.2|ContentSmartz|DataCha0s/2\.0|DBrowse$
13 |
14 | failregex = ^ -.*"(GET|POST|HEAD).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$
15 |
16 | ignoreregex =
17 |
18 | # DEV Notes:
19 | # List of bad bots fetched from http://www.user-agents.org
20 | # Generated on Thu Nov 7 14:23:35 PST 2013 by files/gen_badbots.
21 | #
22 | # Author: Yaroslav Halchenko
23 |
24 |
--------------------------------------------------------------------------------
/provision/templates/etc/fail2ban/filter.d/nginx-forbidden.conf:
--------------------------------------------------------------------------------
1 | [Definition]
2 | failregex = ^ \[error\] \d+#\d+: .* forbidden .*, client: , .*$
3 | ignoreregex =
--------------------------------------------------------------------------------
/provision/templates/etc/fail2ban/filter.d/nginx-http-auth.conf:
--------------------------------------------------------------------------------
1 | # fail2ban filter configuration for nginx
2 |
3 |
4 | [Definition]
5 |
6 |
7 | failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: , server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+",$
8 |
9 | ignoreregex =
10 |
11 | # DEV NOTES:
12 | # Based on samples in https://github.com/fail2ban/fail2ban/pull/43/files
13 | # Extensive search of all nginx auth failures not done yet.
14 | #
15 | # Author: Daniel Black
--------------------------------------------------------------------------------
/provision/templates/etc/fail2ban/filter.d/nginx-noscript.conf:
--------------------------------------------------------------------------------
1 | [Definition]
2 |
3 | failregex = ^ -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)
4 |
5 | ignoreregex =
6 |
--------------------------------------------------------------------------------
/provision/templates/etc/nginx/sites-enabled/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/provision/templates/etc/nginx/sites-enabled/.gitkeep
--------------------------------------------------------------------------------
/provision/templates/etc/nginx/sites-enabled/default.conf.j2:
--------------------------------------------------------------------------------
1 | server {
2 | listen 80 default_server;
3 |
4 | root /var/www/html;
5 |
6 | location ~ / {
7 | allow 192.168.0.0/24;
8 | allow 192.168.1.0/24;
9 | allow 10.0.0.0/24;
10 | allow 10.0.2.0/24;
11 | deny all;
12 | expires max;
13 | try_files /index.html =404;
14 | }
15 |
16 | error_page 403 https://www.youtube.com/watch?v=Ucmy0Yw141U;
17 | }
--------------------------------------------------------------------------------
/provision/templates/etc/pihole/lan.list.j2:
--------------------------------------------------------------------------------
1 | {{ ansible_default_ipv4.address }} {{ domain }}
2 | {{ ansible_default_ipv4.address }} budget.{{ domain }}
3 | {{ ansible_default_ipv4.address }} {{ ipfs_domain }}
4 | {{ ansible_default_ipv4.address }} api-{{ ipfs_domain }}
5 | 192.168.1.181 mr-pickle.here
--------------------------------------------------------------------------------
/provision/templates/etc/systemd/bt-mqtt-gateway.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Bluetooth MQTT gateway
3 | Documentation=https://github.com/zewelor/bt-mqtt-gateway
4 | After=network.target
5 |
6 | [Service]
7 | Type=simple
8 | WorkingDirectory=/home/pi/bt-mqtt-gateway
9 | ExecStart=/home/pi/bt-mqtt-gateway/gateway.py
10 | Restart=always
11 |
12 | [Install]
13 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/templates/etc/systemd/resolved.conf:
--------------------------------------------------------------------------------
1 | # This file is part of systemd.
2 | #
3 | # systemd is free software; you can redistribute it and/or modify it
4 | # under the terms of the GNU Lesser General Public License as published by
5 | # the Free Software Foundation; either version 2.1 of the License, or
6 | # (at your option) any later version.
7 | #
8 | # Entries in this file show the compile time defaults.
9 | # You can change settings by editing this file.
10 | # Defaults can be restored by simply deleting this file.
11 | #
12 | # See resolved.conf(5) for details
13 |
14 | [Resolve]
15 | DNS=192.168.1.157
16 | FallbackDNS=1.1.1.1
17 | #Domains=
18 | #LLMNR=no
19 | #MulticastDNS=no
20 | #DNSSEC=no
21 | Cache=no
22 | DNSStubListener=no
23 |
24 |
25 |
--------------------------------------------------------------------------------
/provision/templates/home/pi/mqtt2rf/config.yaml.j2:
--------------------------------------------------------------------------------
1 | rf_switch:
2 | command_topic: 'home/rf_emitter/set'
3 | state_topic: 'home/rf_emitter'
4 | gpio: 3
5 | pulselength: 321
6 | protocol: 1
7 |
8 | mqtt:
9 | host: '{{ mqtt_host }}'
10 | port: {{ mqtt_port }}
11 | username: '{{ mqtt_username }}'
12 | password: '{{ mqtt_password }}'
--------------------------------------------------------------------------------
/provision/templates/lib/systemd/system/cloudflared.service.j2:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=cloudflared DNS over HTTPS proxy
3 | After=syslog.target network-online.target
4 |
5 | [Service]
6 | Type=simple
7 | User=cloudflared
8 | EnvironmentFile=/etc/default/cloudflared
9 | ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
10 | Restart=on-failure
11 | RestartSec=10
12 | KillMode=process
13 |
14 | [Install]
15 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/templates/lib/systemd/system/health.service.j2:
--------------------------------------------------------------------------------
1 | [Unit]
2 | ConditionPathExists=/smart-house/.env.home-assistant
3 | Description=Smart House Health stuff
4 | Requires=docker.service
5 | After=docker.service
6 |
7 | [Service]
8 | Environment=SMART_HOUSE_DIR=/smart-house
9 | Restart=always
10 | User=root
11 | StandardOutput=syslog
12 | StandardError=syslog
13 |
14 | ExecStart=/usr/bin/zsh -l -c "/usr/bin/smart-house health up"
15 | ExecStop=/usr/bin/zsh -l -c "/usr/bin/smart-house health down"
16 |
17 | [Install]
18 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/templates/lib/systemd/system/kiosk.service.j2:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Kiosk UI
3 | ConditionPathExists=/smart-house/.env.home-assistant
4 | After=network.target
5 |
6 | [Service]
7 | Type=simple
8 | User={{ ansible_user }}
9 | Group={{ ansible_user }}
10 | LimitNOFILE=1024
11 |
12 | Restart=on-failure
13 | RestartSec=10
14 | Environment=DISPLAY=:0.0
15 |
16 | WorkingDirectory=/smart-house/
17 | ExecStart=/usr/bin/zsh -l -c "source /home/{{ ansible_user }}/.zshrc && cd /smart-house/panel && npx electron . --host=https://{{ domain }} --production"
18 |
19 | PermissionsStartOnly=true
20 | StandardOutput=syslog
21 | StandardError=syslog
22 | SyslogIdentifier=panel
23 |
24 | [Install]
25 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/templates/lib/systemd/system/media.service.j2:
--------------------------------------------------------------------------------
1 | [Unit]
2 | ConditionPathExists=/smart-house/.env.home-assistant
3 | Description=Smart House Media
4 | Requires=docker.service
5 | After=docker.service
6 |
7 | [Service]
8 | Environment=SMART_HOUSE_DIR=/smart-house
9 | Restart=always
10 | User=root
11 | StandardOutput=syslog
12 | StandardError=syslog
13 |
14 | ExecStart=/usr/bin/zsh -l -c "/usr/bin/smart-house media up"
15 | ExecStop=/usr/bin/zsh -l -c "/usr/bin/smart-house media down"
16 |
17 | [Install]
18 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/templates/lib/systemd/system/smart-house.service.j2:
--------------------------------------------------------------------------------
1 | [Unit]
2 | ConditionPathExists=/smart-house/.env.home-assistant
3 | Description=Smart House
4 | Requires=docker.service
5 | After=docker.service
6 |
7 | [Service]
8 | Environment=SMART_HOUSE_DIR=/smart-house
9 | Restart=always
10 | User=root
11 | StandardOutput=syslog
12 | StandardError=syslog
13 |
14 | ExecStart=/usr/bin/zsh -l -c "/usr/bin/smart-house docker-compose up"
15 | ExecStop=/usr/bin/zsh -l -c "/usr/bin/smart-house docker-compose down"
16 |
17 | [Install]
18 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/templates/lib/systemd/system/support.service.j2:
--------------------------------------------------------------------------------
1 | [Unit]
2 | ConditionPathExists=/smart-house/.env.home-assistant
3 | Description=Smart House Support
4 | Requires=docker.service
5 | After=docker.service
6 |
7 | [Service]
8 | Environment=SMART_HOUSE_DIR=/smart-house
9 | Restart=always
10 | User=root
11 | StandardOutput=syslog
12 | StandardError=syslog
13 |
14 | ExecStart=/usr/bin/zsh -l -c "/usr/bin/smart-house support up"
15 | ExecStop=/usr/bin/zsh -l -c "/usr/bin/smart-house support down"
16 |
17 | [Install]
18 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/provision/templates/var/www/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Dupa nie internet
5 |
6 |
7 | Dupa nie internet!
8 |
9 |
--------------------------------------------------------------------------------
/provision/vars.yml.example:
--------------------------------------------------------------------------------
1 | partition_size: '130G'
2 | encrypted_disk: /dev/sda3
3 | disk_password: 'admin1234'
4 | email:
5 | domain: 'test.local'
6 | ipfs_domain: 'ipfs.test.local'
7 |
8 | ipfs_peer_id: asda
9 | ipfs_private_key: ''
10 | ipfs_storage_max: 20GB
11 | ipfs_version: v0.4.21
12 | ipfs_http_api_listen_multiaddress: /ip4/0.0.0.0/tcp/5001
13 | ipfs_http_gateway_listen_multiaddress: /ip4/0.0.0.0/tcp/8080
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | homeassistant
2 | requests
3 | Jinja2>=2.10.1
4 | ruamel.yaml==0.15.86
5 | mkdocs>=1.1
6 | mkdocs-material
7 | pygments
8 | pymdown-extensions
--------------------------------------------------------------------------------
/tor/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:latest
2 |
3 | RUN apk update \
4 | && apk upgrade \
5 | && apk add tor \
6 | && rm /var/cache/apk/*
7 |
8 | EXPOSE 9051
9 | ADD ./torrc /etc/tor/torrc
10 |
11 | RUN mkdir /data
12 | USER tor
13 | USER root
14 | RUN chown tor /data
15 | USER tor
16 | CMD /usr/bin/tor -f /etc/tor/torrc
--------------------------------------------------------------------------------
/tor/torrc:
--------------------------------------------------------------------------------
1 | ControlPort 127.0.0.1:9051
2 | CookieAuthentication 1
3 |
4 | CookieAuthFileGroupReadable 1
5 | SOCKSPort 0.0.0.0:9050
6 |
7 | AvoidDiskWrites 1
8 | DataDirectory /data
9 |
10 | HiddenServiceDir /data/services/macbury.ninja/
11 | HiddenServicePort 80 127.0.0.1:80
12 |
13 | HiddenServiceDir /data/services/electrs/
14 | HiddenServiceVersion 3
15 | HiddenServicePort 50002 192.168.1.157:50002
16 |
17 | HiddenServiceDir /data/services/bitcoin/
18 | HiddenServiceVersion 3
19 | HiddenServicePort 8333 192.168.1.157:8333
20 |
--------------------------------------------------------------------------------
/vacuum/.gitignore:
--------------------------------------------------------------------------------
1 | public/**/*.png
2 |
--------------------------------------------------------------------------------
/vacuum/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:12.2.0-stretch
2 |
3 | RUN mkdir /app
4 | WORKDIR /app
5 |
6 | RUN apt-get update && apt-get install -y imagemagick build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
7 |
8 | COPY ./package.json .
9 | COPY ./yarn.lock .
10 |
11 | RUN yarn
12 |
13 | COPY index.js .
14 | COPY map.js .
15 |
16 | RUN mkdir /app/public
17 |
18 | ENTRYPOINT [ "yarn", "start" ]
--------------------------------------------------------------------------------
/vacuum/bin/build:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | docker build . -t vacuum
3 | docker run -t vacuum -p 3000:3000
--------------------------------------------------------------------------------
/vacuum/bin/run:
--------------------------------------------------------------------------------
1 | docker run -p 3000:3000 --rm -t vacuum
--------------------------------------------------------------------------------
/vacuum/bin/upload:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | curl -X POST -F map=@./fixtures/map.ppm -F log=@./fixtures/SLAM_fprintf.log http://0.0.0.0:3000/map
4 |
--------------------------------------------------------------------------------
/vacuum/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express')
2 | const app = express()
3 | const multipart = require('connect-multiparty')();
4 | const port = 3000
5 | const process = require('./map')
6 |
7 | const outputPath = __dirname + '/public/map'
8 |
9 | app.use(express.static('public'))
10 |
11 | app.post('/map', multipart, async function (req, res) {
12 | const { log, map } = req.files
13 | console.log("Processing: ", [map.path, log.path])
14 | await process(map.path, log.path, outputPath)
15 | res.send({ success: true })
16 | })
17 |
18 | app.listen(port, '0.0.0.0', () => console.log(`Example app listening 0.0.0.0 on port ${port}!`))
--------------------------------------------------------------------------------
/vacuum/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "start": "node index.js"
4 | },
5 | "dependencies": {
6 | "canvas": "^2.5.0",
7 | "connect-multiparty": "^2.2.0",
8 | "express": "^4.17.0"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/vacuum/public/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/macbury/SmartHouse/796afdf7552c7798fc6a2a238537a36fa1073efe/vacuum/public/.gitkeep
--------------------------------------------------------------------------------
/youtube/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM archlinux/base
2 |
3 | RUN pacman -Sy --noconfirm shards crystal imagemagick librsvg \
4 | which pkgconf gcc ttf-liberation && \
5 | git clone https://github.com/omarroth/invidious
6 |
7 | WORKDIR /invidious
8 |
9 | RUN shards && \
10 | crystal build src/invidious.cr
11 |
12 | EXPOSE 3000
13 |
14 | CMD [ "/invidious/invidious" ]
--------------------------------------------------------------------------------
/zwave/docker-entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | if [ -z "$1" ]; then
5 | if [ ! -c "$USB_PATH" ]; then
6 | echo "USB path \"$USB_PATH\" does not exist or is not a character device"
7 | exit 1
8 | fi
9 |
10 | if [ -n "$NETWORK_KEY" ]; then
11 | echo "NETWORK_KEY is deprecated, use S0_LEGACY_KEY instead"
12 | fi
13 |
14 | set -- zwave-server --config options.js "$USB_PATH"
15 | echo "Starting zwave-server:" "$@"
16 | elif [ "$1" = "server" ]; then
17 | shift
18 | set -- zwave-server "$@"
19 | elif [ "$1" = "client" ]; then
20 | shift
21 | set -- zwave-client "$@"
22 | fi
23 |
24 | exec "$@"
25 |
--------------------------------------------------------------------------------