I have created an integration that creates unified status sensors for Steam, Xbox, and PlayStation. They are useful for a number of things, including tracking game time, online/offline status, gaming history, etc. I use it to send notifications through Discord when a player starts up a game and when they end their play session. It’s been a lot of fun to develop this and see it all come together over the past year or so.
Some of the current features include:
Unified Master Sensor: Combines Xbox, PlayStation, Steam, and Custom PC clients into one clean “Master Status” sensor per person.
Custom PC Game Support: Track non-platform games (like Epic Games, Minecraft, or Genshin Impact) using template funnels or binary sensors.
Smart Ghosting Protection: Automatically prevents echo sessions (e.g., when the Windows Xbox app incorrectly broadcasts a Steam game).
Drop-Out Protection: Built-in grace periods prevent a gamer from appearing “Offline” if their game crashes, they switch titles, or their internet briefly blips, keeping play sessions perfectly intact.
Playtime Analytics: Automatically calculates session time, daily hours, and a rolling 7-day total for easy dashboard charting.
Clean Dashboards: Automatically sanitizes messy game titles (e.g., changes “Minecraft Launcher” to “Minecraft”) and pulls high-quality cover art from SteamGridDB.
Advanced Exclusion Filtering: Prevent media apps (Netflix, YouTube, Spotify) or background processes from triggering gaming statuses using the global exclusions list.
Zero-Bloat Cover Art: Automatically fetches gorgeous, clean game covers from SteamGridDB and passes them to your dashboard via URL, ensuring your local HA storage never gets bloated with downloaded images.
“Last Seen” Memory: When gamers go offline, the sensor retains their last played game and calculates exactly how long ago they were active (e.g., Last seen 3h ago: Genshin Impact).
Custom Avatars: Automatically pulls live gamer pictures from platform APIs, with the option to easily override missing or incorrect images with your own local images.
I am NOT a programmer, but I AM a gamer, and I hope this integration will be useful to others. It works well for me, but I have yet to have anyone else test it.
I have tried to document it as much as possible, although I’m sure it will be less intuitive for someone who isn’t the developer.
If you try it out, please let me know if it works for you and what types of issues you run into. I’d love to refine it in to something that’s very dependable and easier to use over time. Currently, it requires a lot of manual setup, but it’s pretty awesome once it’s all working.
This is very fortuitous, I was literally just looking at how I could achieve something like this and your integration showed up as I was googling for it.
But, if you don’t mind me asking, I was just curious if you used AI to develop this or not.
Yes, I used Gemini, Claude, and ChatGPT (primarily Gemini since I have a subscription). I am not a programmer, but I am good at iterating, testing, and debugging. I’ve been developing it over the past 6-9 months, and it’s finally working very well. Just today, I was performing a security audit on my code and I have corrected a few potential issues, so wait for the next release before trying it out. I am also still updating the readme for better clarity since it’s a bit complex.
My next step, after squashing any more potential issues, is to (hopefully) get it working with a full UI configuration method to make it a LOT easier to set up. I’m happy to provide support for anyone who tries it out though since it really is pretty useful and I think could be a great integration for a lot of people. I need to add some good screenshots of the dashboard I’m using as well.
I’m not sure if the current version is ready for deployment since I just today moved it over to a JSON configuration file instead of a .py file since I realized the Python file could potentially allow for someone to insert malicious code. I need to do some additional testing to make sure that it is still working after the rather extensive structural changes I made.
That profile.json file should also be located inside of the gaming_status folder (which I don’t see in your screenshot). I am correcting the readme now to reflect that since that was a typo on my behalf.
I can’t move or create a file in gaming_status folder though? It says no permission thats why the file was created outside of it so not sure how I could move it there. I’m on docker HA btw.
I am making a change to the configuration file location now. I will release another update shortly. it seems that having it stored within the “gaming_status” folder is not going to work well for other people.
Yea I’m using vscode, also tried using MacOS file system via ssh and neither worked cuz permissions. Also alright I’ll check out the update when it drops, cuz moving files in to integration folders definitely won’t work I think.
Ok, try v1.6.3. You’ll need to rename your profiles.json file to gaming_profiles.json and put it in your base “config” folder. This should avoid read-only folder issues and prevent the configuration from being overwritten during updates, which was an oversight on my behalf.
Or v1.6.4, since I just patched an issue that could cause your database to grow over time. Now some attributes are automatically excluded from the recorder.
Alright I added it and seems to work now, although it did not generate any sensors for me, maybe I have to actually game first? I’ll be on PS5 later so maybe that’ll work.
I noticed after updating there are new files in the /custom_components/gaming_status/ folder, I hope it’s not reading those and is reading the gaming_profiles.json file I made and put in the base config.
Assuming you added your profile info into the gaming_profiles.json properly, it SHOULD have generated sensors. Does it anything show in the logs? PLaying a game is not necessary.
Oops. I never deleted example.profiles.py. That will be gone in the next release. The example file is not read by the integration and exists only as a template to use as a starting point.
Once I’m able to (eventually) move this to a fully-featured UI configuration, issues like this won’t happen. As you are probably aware, JSON and YAML formatting are very picky, so there is currently a lot of room for user error, unfortunately.
That’s a step in the right direction! Note that you can rename those sensors, replacing “player_one” with “David” or something more meaningful in the JSON file.
Also, the Custom PC sensor will only do anything if you also create a template sensor that feeds into it. Otherwise, it’ll probably always just indicate “Offline”.
You can also track as many users as you’d like. Currently, I have it tracking myself, my two kids, my two siblings (who live in other states) and a friend that I occasionally game with. As long as there is data provided by an existing integration, you can track it.
Unless you have custom sensors that you’re going to track, you likely don’t need the PC entry at all. Steam, Xbox, and PlayStation should track most of what you play on your PC as long as you have the Steam and Xbox apps installed and running in the background on your PC.
You said you only have one console also, so you can remove any other lines (like xbox) that are not needed, if desired, so you don’t have sensors that never update.