Actions

Internet of Hamsters

From Just in Time

Revision as of 22:53, 7 March 2019 by Danny (talk | contribs) (How it's implemented)

I'm still working on this page. Expect major changes and additions

Meet Ilya and pjotr.jpg

Meet Pjotr and Ilya, our Siberian dwarf Hamsters. Pjotr and Ilya are brothers and about a year old now. They get along reasonably well for two males living in the same cage. They like scrounging for hidden sunflower seeds in their cage. At night, they enjoy doing some exercise on their 3D-printed hamster wheel.


Oddly, and conveniently as we shall see, they have their own preferred orientation when running in the wheel. Pjotr likes to run to the left, while Ilya likes running to the right.

This running around at night is all good and well, but it does mean that I have no idea how much they are using the hamster wheel. This kept nagging me. Luckily, the problem is solvable and as it turned out, by standing on the shoulders of the giants of open source software and low-code frameworks this is solvable without too much technical hassle (though programming and soldering was still required).

Statistics

For those in a hurry, the TL;DR: My two hamsters run at an average speed of 2.5 km/h; They reach a top speed of 4.9km/h and combined they run for about 3.5km each night (range so far is between 1.5km and 6km per night). The wheel is used almost exclusively between 1am and 5am.

Overview of the system

What I want the system to do

  • A sensor on the hamster wheel detects rotations, the direction of the rotation and the speed (or the time between full rotations).
  • When the wheel rotates, periodic updates will be send as MQTT messages on a preconfigured topic. The MQTT messages should note the direction of rotation, the rotation count and the average time for each rotation (indication of speed).
  • A node-read data flow listens to the MQTT messages, adds time stamps and inserts the data as documents in an elastic search index
  • That same data flow will retrieve the total distance traveled (the sum of all rotations found in the elastic indexes) and send an update message to a display device that shows total distance traveled and current speed.
  • A Kibana dashboard shows the statistics, such as total distance traveled, maximum and average speeds, etc.

How it's implemented

The following image shows how the different components work together to get the dashboard and display.

System overview.png

The display is not updated directly on the wemos, but instead is updated through a longer and slower cycle via node-red and elastic. This was for two reasons:

  • The total distance is persisted in elastic search only, which avoids hard decisions on when to write the totals to persistent memory.
  • The wemos is unaware of the radius of the hamster wheel, so all conversions from rotations to meters are done in node-red (javascript).

Let's list the technologies used in this system:

  • Wemos D1 mini (clone) for a wifi-enabled microcontroller module
  • EspEasy firmware as a low-code solution to connect the hamster wheel to the network
  • mosquitto MQTT brokers the data that comes from the wheel
  • Node-Red is used to route MQTT data to several destinations and to do initial processing on it
  • Elastic Search and Kibana are used to store all hamster wheel events and to show dashboards

Contributions

  • Fork of ESP Easy that implements dual asymmetric pulse device
  • 3D files for hamster wheel, pivot with integrated sensors and housing for Wemos.