Spook 👻 Not your homie.
About
Spook is a custom integration for Home Assistant, which is not your homie.
You should not use this custom integration, nor should you expect it to work. The integration will break a lot, and will probably not survive the next Home Assistant upgrade. Heck, it will most likely not even survive its own next release.
This integration comes with absolutely 0/zero/zip/nada/noppes support, and has less documentation than the quirks of my partner.
Above all, this integration may just break your setup in an way that is not recoverable. Nor will it provide you with a tissue to dry up your tears when you are crying in a fetal position under your desk after ignoring all of the above.
I've warned you :D
../Frenck
Cool, but why? What is it?
So, there a lot of things/features, that will never end up in Home Assistant itself.
This can have various reasons, for example: It is just too random, out of scope, not matching the Home Assistant philosophy, violating architectural design, still in early development, experimental, explorative, or just freaking useless.
Spook doesn't care. He is nobodies homie.
So, maybe, that one feature you wanted Home Assistant to have, is in Spook.
However, remember, Spook is not your homie. All stuff in here, is not part of Home Assistant (or at least not yet) for a reason. So, don't expect it to work, or to be supported, or well, for starters, to be a good idea.
Some guidance for the brave
- Installation
- Configuration
- Entities
- Services
- Service: Import Blueprint
- Service: Disable an integration
- Service: Enable an integration
- Service: Disable a device
- Service: Enable a device
- Service: Disable an entity
- Service: Enable an entity
- Service: Hide an entity
- Service: Unhide an entity
- Service: Disable polling for updates
- Service: Enable polling for updates
- Service: Ignore all discovered devices & services
- Service: Delete all orphaned entities
- Service: Import statistics
- Service: Create area
- Service: Add an alias to an area
- Service: Remove an alias from an area
- Service: Set area aliases
- Service: Add device to area
- Service: Remove device from area
- Service: Add entity to area
- Service: Remove entity from area
- Service: Delete area
- Service: Create repair issue
- Service: Remove repair issue
- Service: Ignore all repair issues
- Service: Unignore all repair issues
- Service: Boo! 👻
- Service: Random fail
- Entity services
- Service for
input_number
: Decrease value - Service for
input_number
: Increase value - Service for
input_number
: Min value - Service for
input_number
: Max value - Service for
input_select
: Select random option - Service for
input_select
: Shuffle options - Service for
input_select
: Sort options - Service for
number
: Decrease value - Service for
number
: Increase value - Service for
number
: Min value - Service for
number
: Max value - Service for
select
: Select random option
- Service for
- Repairs
- Frequently Asked Questions
- Changelog & Releases
- Contributing
- Authors & contributors
- Disclaimer
- License
Installation
You can find it in the HACS store by searching for "Spook", but you shoudn't.
You could manually add this repository to HACS, but you shouldn't. You can
also install it manually by copying the spook
folder into your
custom_components
folder, but you shouldn't.
Just don't.
Configuration
You shouldn't.
Entities
This integration will provide you with entities you'd absolutely do not need. All of them are enabled by default to ensure you have a bad time, straight of the box.
Sensors
- Total number of entities: To show your friends how big your setup is. #compensation
- Number of entities for each entity type: So you know how many lightbulbs you have. #count
- Number of
air_quality
entities. - Number of
alarm_control_panel
entities. - Number of
binary_sensor
entities. - Number of
button
entities. - Number of
camera
entities. - Number of
climate
entities. - Number of
cover
entities. - Number of
device_tracker
entities. - Number of
fan
entities. - Number of
humidifier
entities. - Number of
light
entities. - Number of
lock
entities. - Number of
media_player
entities. - Number of
number
entities. - Number of
remote
entities. - Number of
select
entities. - Number of
sensor
entities. - Number of
siren
entities. - Number of
switch
entities. - Number of
text
entities. - Number of
update
entities. - Number of
water_heater
entities. - Number of
weather
entities.
- Number of
- Number of areas: In case you forgot how many rooms your house has. #1
- Number of automations: Because that is such a useful metric. #robots
- Number of devices: That are in the device registry. #bling
- Number of persons: How many people are you constantly tracking the location of? #privacy
- Number of scenes: Maybe you can ask your partner to make a scene... #fight
- Number of scripts: More than the average unemployed actor yet? #hollywood
- Number of suns: Answers how godlike you are. #burn
- Number of zones: How many comfort zones you have on a map. #zoneing
- Number of integrations in use: Consider using less integrations. #lessismore
- Number of custom integrations in use: In this case... #lessisevenmore (delete this one! 🙃)
Switches
- Home Assistant Cloud: Switch to control behavior of Nabu Casa's Home Assistant Cloud. #love
- Alexa: Enable/disable Alexa connection. #amazon
- Alexa state reporting: Enable/disable Alexa state reporting. #ping
- Google Assistant: Enable/disable Google Assistant connection. #bigtech
- Google Assistant state reporting: Enable/disable Google Assistant state reporting connection. #pong
- Remote: Enable/disable remote access to the Home Asistant frontend. #rdp
Services
There are quite a few useless and horrible services available for you to explore and self-destruct your setup with. The developer service tools are great to get you into such a situation.
Service: Import Blueprint
Call it using: blueprint.import
Downloads and imports a automation/script Blueprint, directly from the URL you pass into this service. #noquestionsasked
Service: Disable an integration
Call it using: homeassistant.disable_config_entry
This service can be used to disable a integration configuration entry (those you see on your integrations dashboard) on the fly. #bye
Service: Enable an integration
Call it using: homeassistant.enable_config_entry
Be amazed... this service does the reverse of
homeassistant.disable_config_entry
. #mindblown
Service: Disable a device
Call it using: homeassistant.disable_device
This service can be used to disable a device on the fly. #whatever
Service: Enable a device
Call it using: homeassistant.enable_device
Guess what... this service does the reverse of
homeassistant.disable_device
. #noway
Service: Disable an entity
Call it using: homeassistant.disable_entity
This service can be used to disable a entity on the fly. #rocketship
Service: Enable an entity
Call it using: homeassistant.enable_entity
Really... this service does the reverse of
homeassistant.disable_entity
. #true
Service: Hide an entity
Call it using: homeassistant.hide_entity
This service can be used to hide a entity on the fly. #secret
Service: Unhide an entity
Call it using: homeassistant.unhide_entity
Do the math... this service does the reverse of
homeassistant.hide_entity
. #reveal
Service: Disable polling for updates
Call it using: homeassistant.disable_polling
This service can be used to disable polling for updates on an integration configuration entry (those you see on your integrations dashboard). #stopit
Service: Enable polling for updates
Call it using: homeassistant.enable_polling
This service can be used to enable polling for updates on an integration configuration entry (those you see on your integrations dashboard). This service does the reverse of
homeassistant.disable_polling
> #poking
Service: Ignore all discovered devices & services
Call it using: homeassistant.ignore_all_discovered
Click ignore on all discovered items on the integration dashboard; optionally only for specific integration (e.g., bluetooth). #talktothehand
Service: Delete all orphaned entities
Call it using: homeassistant.delete_all_orphaned_entities
Deletes all orphaned entities that no longer have an integration that claim/provide them. Please note, if the integration was just removed, it might need a restart for Home Assistant to realize they are orphaned. #annie
WARNING Entities might have been marked orphaned because an integration is offline or not working since Home Assistant started. Calling this service will delete those entities as well.
Service: Import statistics
Call it using: recorder.import_statistics
Advanced service to directly inject historical statistics data into the recorder long-term stats database. #easy
Service: Create area
Call it using: homeassistant.create_area
Instantly create new rooms in your home. #BobTheBuilder
Service: Add an alias to an area
Call it using: homeassistant.add_alias_to_area
Adds an alias (or multiple aliases) to an area. #aka
Service: Remove an alias from an area
Call it using: homeassistant.remove_alias_from_area
Removes an alias (or multiple aliases) from an area. #broom
Service: Set area aliases
Call it using: homeassistant.set_area_aliases
Sets the aliases for an area. #useless
Service: Add device to area
Call it using: homeassistant.add_device_to_area
Dynamicaly add/move a device to an new area. #moveit
Service: Remove device from area
Call it using: homeassistant.remove_device_from_area
Dynamicaly remove a device from an area. #poef
Service: Add entity to area
Call it using: homeassistant.add_entity_to_area
Dynamicaly add/move an entity to an area. #bam
Service: Remove entity from area
Call it using: homeassistant.remove_entity_from_area
Dynamicaly remove an entity from an area. #AaaaandItIsGone
Service: Delete area
Call it using: homeassistant.delete_area
Just like that, you made an area of your home dissapear. #DemolitionMan
Service: Create repair issue
Call it using: repairs.create
Battery empty? Raise a issue in Home Assistant Repairs. Although, you should probably just use a notification for this. #issues
Service: Remove repair issue
Call it using: repairs.remove
Removes a issue from Home Assistant Repairs. Can only remove repair issues that have been created using the
repairs.create
service. #trashit
Service: Ignore all repair issues
Call it using: repairs.ignore_all
Whatever issue is bothering you, just ignore it all and all your problems will magically be gone. #allgood
Service: Unignore all repair issues
Call it using: repairs.unignore_all
Will unignore all issues marked ignored, and shows them all again. #faceit
Service: Boo! 👻
Call it using: spook.boo
This service call will just always spook the hell out of Home Assistant. Home Assistant will shit its pants and abort the automation or script. #spooked
Service: Random fail
Call it using: spook.random_fail
This service call will randomly fail (and thus randomly stop your automation or script). Especially combined with
continue_on_error: true
this can be a great way add a useless service calls to your automation or script. #random
Entity services
Spook also extends the services available for entities. These services may
extend the functionality if entity components (like select
) or platform
specific services provided by integrations.
input_number
: Decrease value
Service for Call it using: input_number.decrement
Override of the existing service, which provides the option to specify the amount to decrease the value by. #evenlower
Under consideration for contributing back to Home Assistant Core.
input_number
: Increase value
Service for Call it using: input_number.increment
Override of the existing service, which provides the option to specify the amount to increase the value by. #moreoptions
Under consideration for contributing back to Home Assistant Core.
input_number
: Min value
Service for Call it using: input_number.min
Set the value of a
input_number
entity to its minimum value/ #lowout
input_number
: Max value
Service for Call it using: input_number.max
Set the value of a
input_number
entity to the maximum value. #maxout
input_select
: Select random option
Service for Call it using: input_select.random
This service select a random option from the list of options of a select entity. Optionally this can be limited to a set of given options. #shuffle
input_select
: Shuffle options
Service for Call it using: input_select.shuffle
Shuffles the list of selectable options for an
input_select
entity. Note: This is not persistent and will be undone once reloaded or Home Assistant restarts. #31254
input_select
: Sort options
Service for Call it using: input_select.sort
Sorts the list of selectable options for an
input_select
entity. Note: This is not persistent and will be undone once reloaded or Home Assistant restarts. #12345
number
: Decrease value
Service for Call it using: number.decrement
Decrease the value of a number entity, either by a single step or by a provided amount. #downboy
Under consideration for contributing back to Home Assistant Core.
number
: Increase value
Service for Call it using: number.increment
Increase the value of a number entity, either by a single step or by a provided amount. #up #greatmovie
Under consideration for contributing back to Home Assistant Core.
number
: Min value
Service for Call it using: number.min
Set the value of a number entity to its minimum value. #lowout
number
: Max value
Service for Call it using: number.max
Set the value of a number entity to the maximum value. #maxout
select
: Select random option
Service for Call it using: select.random
This service select a random option from the list of options of a select entity. Optionally this can be limited to a set of given options. #random
Repairs
Spook will float around your Home Assistant instance, and while it does, it might be able to find things that need your attention. Spook will notify you about these things using an Home Assistant repair issue. #whoyougonnacall
Currently Spook will detect the following issues:
Obsolete integration YAML configuration
Finds YAML configuration for an integrations that no longer support it. Unless you like having unneeded shizzle in your YAML, it can be removed safely. #ghostbusters
Automations: Find use of non-existing areas, devices and entities
Finds automations that use non-existing areas, devices or entities in, for example, their service calls. #springcleaning
Intention to contribute back to Home Assistant Core once sure no false postives remain, and it has been extended to catch more situations.
Groups: Detect unknown group members
Finds groups that contain references to unknown members (entities). #aliens
Intention to contribute back to Home Assistant Core.
Riemann sum integral: Detect missing source sensor
Finds integrals that are missing a source sensor. #missinglink
Intention to contribute back to Home Assistant Core.
Scripts: Find use of non-existing areas, devices and entities
Finds scripts that use non-existing areas, devices or entities in, for example, their service calls. #void
Intention to contribute back to Home Assistant Core once sure no false postives remain, and it has been extended to catch more situations.
Switch as X: Detect missing source switch
Finds Switch as X helpers that are missing a source switch. #NotendoSwitch
Intention to contribute back to Home Assistant Core.
Frequently Asked Questions
In the first few days after putting Spook out, some of the same questions kept popping up. So, here are some answers to those questions.
Is this a serious thing?
Yes! It is just not a normal integration, like one that connects to a device or service, or one that provides a helper of some sort. But it is a serious integration, that is meant to be used in a serious way.
Why is Spook called Spook?
I (Frenck) am Dutch. I grew up with "Casper het vriendelijke spookje", also known as "Casper the friendly ghost". "Spook" is the Dutch for "ghost".
Casper is scary at first sight, but you could really love him in the end. Which seems fitting for a custom integration, as custom integrations are more likely to break, thus being a little scared of them is not a bad thing.
"Not your homie" is a refence to my the livestreams I used to do. I called my viewers "My Home Assistant Homies", or just "Homies". It is thus referring to you, the Home Assistant user, as my friend, my homie. However, "Spook" is not your homie, it is a ghost, a spooky thing, he is suposed to make you think a little about what you are doing before you use it.
Nice little fact, I did use "homey" at first (to maybe annoy the Homey users a bit in SEO), but I decided not to be that badword and to change it back to just "homie".
Lastly, the little ghost logo & use of the emoji. This is great inspiration from the Mushroom card project (I love it!). They use a simple mushroom emoji and you see it everywhere in the Home Assistant community, thus decided to do a similar thing.
Does this integration break my Home Assistant instance?
Well, that is not the goal of course. But, it is a custom integration, so there is a chance it might break your instance. This applies to any custom integration, not just Spook.
I'm just sharing what I have, without any warranty. I've decided to be blunt about it, and make it at least fun to read. I could have written a small warning, that would have been boring.
Does Spook do random things to my home?
No. It does not do random things. It is not a chaos testing thing and it will not turn lights on/off randomly in the night. Unless it is a bug or broken of course.
Ok, so should I use Spook?
No! The license doesn't allow that (see below).
Changelog & Releases
This repository does not keep a change log using GitHub's releases functionality. The format of the log is based on the direction the wind blows.
Releases use a Semantic Versioning, compatible version number of
MAJOR.MINOR.PATCH
, as that is required for Home Assistant. In a nutshell,
the version will be incremented based on the following:
MAJOR
: If there is almost nothing changed.MINOR
: I have no idea, possibily breaking.PATCH
: I didn't care enough to change more numbers.
Contributing
We've set up a separate document for our contribution guidelines.
Authors & contributors
The original setup of this repository is by Franck Nijhof.
For a full list of all authors and contributors, check the contributor's page.
Disclaimer
At this point, I guess it goes without saying that this integration is not affiliated with, endorsed or recommended by the Home Assistant project.
It is not supported by the Home Assistant project.
If you experience issues with this integration, or as a result of this integration, please go cry a lot on your own. #sorrynotsorry
License
Copyright (c) 2023 Franck Nijhof
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, but NOT including the right to run, execute or use the Software or any executable binaries built from the source code.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.