Ruuvi sensors -> Ruuvi Gateway -> Home Assistant (Easy!)

Can ruuvi gateway run influxdb database? If yes, all you need is to have homeassistant running in same network and configuring influxdb sensor to homeassistant.

I am not sure how the user experience is with hassio. But some kind of auto-discover implementation for ruuvi gateway might make configuration at least almost plug and play: https://www.home-assistant.io/integrations/discovery/

Home Assistant auto discovery works with MQTT. So, if Ruuvi Gateway implement a MQTT broker, it should be possible to use it :slight_smile:

I explained here how HA use “Devices” (Ruuvi Tags) and “Entities” (measures of tags):

And here is my implementation of the auto discovery (presentation of the “Device” on /config topic and broadcast measures on /state and /attributes topics):

1 Like

This will be great! Even for us that already have ruuvitag data in homeassistant, this will give far better range than a normal bluetooth dongle/rpi and take a way the hassle that bluetooth dongles can bring :slight_smile:

I guess the easiest way to get this going would be to have the gateway expose and API from where a Ruuvi integration could be polling data, or even better, subscribe to data to get it in real-time :thinking:

There is actually already a /metrics http endpoint for monitoring the gateway health and status programmatically. This same metrics endpoint could perhaps include the tag readings as well for a simple “pull based” integration. This would also allow Prometheus to scrape the tag readings at the same time, offering yet another way to get Ruuvitag data to Grafana.

On the other hand, a more “real-time” integration would be a “push based” integration, easiest probably being with MQTT, which the gateway already uses/supports.

Perhaps this “official ruuvi integration” could even support both modes; the pull-based for the most simple setup, only configuration needed would be giving the gateway address (or perhaps even some sort of auto discovery could work?), and the push-based for more advanced users who already have a MQTT broker or specifically need faster “response times”.

That sounds like a good way to go about it. With the way home assistant store data it does not even make sense to store all sensor data, so polling at n interval will be preferred in most cases anyway.

I agree that for real time data MQTT is probably the best way to go. That would not even need any special ruuvi integration or setup (at least not if the gateway supports mqtt auto discovery). If we where to push data via HA’s rest or websocket api there would have to be extra setup so might as well spin up a mqtt broker at that point.

I implemented a merge between few MQTT projects that had not been implemented to support Ruuvi -> raspberry -> MQTT -> Homeassistant with autodiscovery:

architecture

The installation instructions and code available here:
https://github.com/Hotzilla/ruuvicollector-to-homeassistant-mqtt

So if you are running Homeassistant at server that doesn’t have bluetooth, it means that you need to push it to another format through network. MQTT works very nicely, as it is very efficient packet format. Also autodiscovery means that you don’t need to configure the sensor at homeassistant at all after installation.

2 Likes

Is there away to name tags? Now they show up in HA by their mac-addresses.

Found it! It was in config.json. :slight_smile:

Hey there,

Small update here, that the Ruuvi home assistant custom component for HASS.io is now also on the official HACS store:

A major step to also make this component available as an official component of Home Assistant :slight_smile:

1 Like

Really neat project!
I’ve been playing around a bit with home-assistant for the gateway and in the end it would be quite similar to your component. Just instead of getting data from BT it gets it from the gateway API.

I’ve been using HA for years, but only made my own “integration” done via MQTT so I’m not too familiar with native integrations :slight_smile:
Do you think it would make sense to have the gateway a separate integration or do you think it could be added into yours?

The gateway api (http://history?time=<time-since-last-poll (optional)> returns data like this:

{
	"data":	{
		"coordinates":	"",
		"timestamp":	"<timestamp>",
		"gw_mac":	"<mac>",
		"tags":	{
			"<mac>":	{
				"rssi":	<rssi>,
				"timestamp":	"<timestamp>",
				"data":	"0201061BFF990405..."
			},
		}
	}
}

So all it would have to do is poll the gateway api at some defined interval, parse the data and publish the new states to HA.
As the gateway dns is RuuviGateway<2-last-bytes-of-mac> I think it would be possible to have HA auto-discover it, that’d be very cool and user friendly :slight_smile:

1 Like

Good question. I don’t know. The component I’ve been working on uses the domain “ruuvi” which would be nice to use for the GW as well. But on the other hand, there’s no point loading ble dependencies if the GW is purely network based. If that’s not a problem, it’s totally doable to keep them in the same integration :slight_smile:

Making a component for HA is easy at first, but then I experienced a slowdown in the learning curve when it comes to testing and the details of some of the internals :slight_smile: I could try to share the knowledge I’ve gathered so far.

Btw, I’ve created that Ruuvi Friends organisation in Github to be able to move faster with the Ruuvi related projects. In a lot of cases maintainers get busy and projects grind to a complete halt because PRs don’t get reviewed or merged. In an organisation other people can help and collaborate to get things forward.

If you’d like I could invite you to the org, and we could setup something together there for the GW, and go the same “route” as the previous component:

  1. Start with a “manual” custom component
  2. Set it up in HACS store
  3. Move towards a full official integration

However I don’t have a GW, so I can’t test things myself.

1 Like

I don’t see a problem with having the bluetooth dependencies there unless they cause problems for installs that does not need them. So I suggest we try to keep it as one component and see how it goes, we can always split it up later if needed :).
Sure throw in an invite :). I think that we would be cool to eventually have the project under http://github.com/ruuvi/ . Thoughts on the repo and combined integration @otso @lauri ?

So basically we need to just make a scheduled http get call, looks fairly simple https://developers.home-assistant.io/docs/integration_fetching_data . The parsing could be done with the decoder in the simple-ruuvitag library.

Do you have any suggesting how to cleanly being able choose between using bluetooth/gateway as data source? (in the yaml config)

We can throw together a script that simulates the gateway until you get your hands on one, should be easy.

Thanks @sergioisidoro for your contribution so far! If you haven’t already, you should receive your Gateway today.

All this sounds good to me. Like @io53 suggested, a combined integration could be a good way to start with and if needed, that can be split later. Development can be under the Ruuvi Friends repo for sure and we can discuss later if it’d make sense for all the parties to have it under the official Ruuvi organisation later.

1 Like

Here is a small snippet that polls and parses the data from the gateway, using simple_ruuvitag Fetch and parse data from Ruuvi Gateway · GitHub

So there is not much extra stuff needed over what already exists in your integration :slight_smile:

2 Likes

I just received my gateway yesterday, and configured it to send sensor data to my local HA MQTT broker. There’s another thread here about using the pyscript add-on to process the events and feed them back into MQTT to take advantage of HA auto-discovery.

Question: since the gateway already has the code to send MQTT messages with the encoded data, would it be a reasonable approach to just add a configuration button for “Homeassistant (Auto-Discovery)” under the MQTT section in the web UI on the gateway, then use this flag to set the topic and message format, e.g.:

homeassistant/sensor/f33c5fc10393/humidity/config {"stat_t":"homeassistant/sensor/f33c5fc10393/humidity/state",
"json_attr_t":"homeassistant/sensor/f33c5fc10393/humidity/attributes",
"name":"Living Room Humidity","unit_of_meas":"%","dev_cla":"humidity",
"uniq_id":"ruuvitag_f33c5fc10393_humidity","device":{"ids":"ruuvitag-f33c5fc10393",
"mf":"Ruuvi Innovations Ltd","mdl":"RuuviTag","name":"Living Room"}}

homeassistant/sensor/f33c5fc10393/humidity/state 40

homeassistant/sensor/f33c5fc10393/humidity/attributes
{"RuuviTag":"f33c5fc10393","Measure":"Humidity","Unit":"%"}
1 Like

I posted a link to my Github repo with a working pyscript script to process the raw MQTT events and feed it back into the MQTT broker for Home Assistant. If you’re interested in checking it out, it’s in this thread, along with some great discussion and the original script that got me started.

2 Likes

I´m also eagerly waiting for official add-on for Home assistant :slight_smile: My coding skills are pretty limited, so easy to use add-on would be really welcome. Hoping to see it some day :wink:

2 Likes

Hi

I could not wait anymore so I built a node-red function to parse and push config, status and state messages to home-assistant. Code is in Github. The part for parsing tag is taken from ruuvi lab RuuviLab | Node-RED Node

The function has a throtling which lets through ,essages 1/minute/tag. Config messages are resent every 10 minutes. Not sure that is ok, but looking other devices using mqtt discovery that should be ok…

Worst part was to get the gateway config set to send mqtt. The gateway config tries to be too easy ending up being hard to setup.

brgds, oiv

2 Likes

Hi, I created an extended fetch data script with authentication, types etc. Thanks to @io53 for a good snippet to get me started fast.

Authentication logic is ported from Ruuvi Gateway’s web interface.

I added the script to GitHub - ruuvi-friends/ruuvi-gateway-fetch-data-script: Python script for fetching and parsing sensor data from Ruuvi Gateway.

It is pretty complex for a simple script, as it is also a test code for decoder types and for a Python package code.

Hi oiv,

Would you please show me what to do to get the Ruuvi Gateway discovered by the MQTT integration? I followed your instructions in your Github and made the Ruuvitag MAC changes in “parsetag” function node and set up the MQTT broker information. But the Gateway does not show up under the MQTT integration. I have enabled auto-discovery in the MQTT broker. Oh, the “Ruuvi” and “send to ha” nodes show connected.

BTW, The MQTT broker is receiving messages from the Ruuvi Gateway when I listen to the ruuvi/# topic.

Please help. Thanks!