Integrate Netatmo Weather station into TIG stack

To integrate my netatmo weather station with custom esp8266 based weather sensors i decided to setup a TIG stack.

The components of the stack are

  • Telegraf – collects data from different sources and pushes them to influxdb
  • Influxdb – a metric database
  • Grafana – a visualization and dashboard application

The netatmo weather stations have no direct interface to capture the collected data, but there is an API server provided by Netatmo to retrieve data from it.

To access the API you must log into the developer website with your netatmo account and register an application:

https://dev.netatmo.com/

After you created an application on their website an client_id and client_secret is assigned to this application. You need this information together with your account credentials to access your stations data within the API.

I wrote an integration script to read the data from the API and output it as JSON suitable for telegrafs exec input:

https://github.com/benningm/docker-telegraf-netatmo

The script could be used directly or as a docker container:

https://hub.docker.com/r/benningm/telegraf-netatmo/

See the github page or docker hub page for usage instruction.

8 Replies to “Integrate Netatmo Weather station into TIG stack”

  1. Hallo Markus,
    Ich habe auch eine Netatmo und versuche sie in Grafana einzubinden. Allerdings bis jetzt ohne Erfolg. Ich bekomme die ersten Schritte einfach nicht hin. Muss ich eine PHP Datei auf meinem Server anlegen um die Daten in die influx zu bekommen?

    Stefan

  2. Hallo Markus!

    Danke für die tolle Umsetzung.

    Ist es auch möglich die Daten vom Regen- und Windsensor abzufragen? Dann wäre das Script perfekt 😉

    Vielen Dank, JO!

    1. Das müsste mit kleineren Anpassungen gehen. Allerdings habe ich keine Regen- und Windsensoren um es selbst auszuprobieren.
      Und in der API Dokumentation von Netatmo finde ich nur ein Beispiel mit einem Aussensensor.

      Es könnte reichen den Filter um weitere Felder zu erweitern:

      @filter = [ 'Humidity', 'Noise', 'CO2', 'Pressure', 'AbsolutePressure', 'Temperature' ]

      Wenn du das Script bei dir im Einsatz hast könntest du nachsehen welche Daten du zurückbekommst und mir ein Beispiel senden.
      Wenn du zB. vor der Zeile 60:

      60: @data = JSON.parse(res.body)

      diese Zeile einfügst:

      puts res.body

      Und mir dann die Ausgabe des Skripts schickst.

      1. … und der Output des originalen Scripts ist:

        {“NETATMO@HOME”:{“Wohnzimmer”:{“AbsolutePressure”:930,”Noise”:44,”Temperature”:23,”Humidity”:59,”Pressure”:995.1,”CO2″:2885,”AbsoluteHumidity”:12.13},”Aussen”:{“Temperature”:2.9,”Humidity”:80,”AbsoluteHumidity”:4.73},”Schlafzimmer”:{“Temperature”:23,”Humidity”:53,”CO2″:2775,”AbsoluteHumidity”:10.89},”Regensensor”:null,”Windmesser”:null,”Bad”:{“Temperature”:26.7,”Humidity”:48,”CO2″:1683,”AbsoluteHumidity”:12.15}}}

        Hier sehe ich leider bei Regensensor und Windmesser nur “null”.

        Beste Grüße, JO!

        1. Es war noch ein Fehler in der calc_extra_values Methode. Die hat “null” geliefert, wenn kein Temperature und Humidity für das Modul da war.
          Jetzt sollte es klappen.

          Ich aktuallisiere gerade noch das Docker image auf das aktuell telegraf Image welches nun auf Debian/stretch basiert.

          Danke für die Testdaten und viel Spaß damit.

  3. Hallo Markus,

    ich habe gesehen, dass du das Script bereits angepasst hast.
    Funktioniert perfekt, besten Dank dafür!

    Liebe Grüße, JO!

  4. Hallo Markus,

    ein Thema ist mir noch aufgefallen:
    Da die Regendaten nun alle 10 Minuten in die Datenbank wandern ist es schwierig auch relevante Regen-Daten in Grafana (wie z.B. in meinem Fall) darzustellen.

    Hast du eine Idee wie ich das umsetzen könnte?

    Interessant wäre da:
    rain_in_1h
    rain_in_24h

    Eine Summe pro Stunde bzw. 24 Stunden ist in Grafana nicht möglich.

    Danke JO!
    Danke JO!

Leave a Reply

Your email address will not be published. Required fields are marked *