NetAtmo Programming

Read NetAtmo weather station data via Script

Based on the feedback for my previous blog post Export NetAtmo weather station data to CSV / Excel I created a small script to get the module, device ID, temperature, humidity and also all sensor data from your NetAtmo weather station and modules.

NetAtmo_JSON_JQ

This scripts also uses curl to login to the web page and then download the device data using the NetAtmo Web API. This script will return all the information in JSON format.

#!/bin/bash

listDevices() {
	# ------------------------------------------------------
	# Help
	# ------------------------------------------------------
	# usage: listdevices <USER> <PASSWORD>
	#
	# USER + PASSWORD -> your NetAtmo Website login

	# ------------------------------------------------------
	# Parsing Arguments
	# ------------------------------------------------------
	USER=$1
	PASS=$2


	# ------------------------------------------------------
	# Define some constants
	# ------------------------------------------------------
	URL_LOGIN="https://auth.netatmo.com/de-DE/access/login"
	API_GETMEASURECSV="https://my.netatmo.com/api/devicelist"
	SESSION_COOKIE="cookie_sess.txt"
	AUTH_COOKIE="cookie_auth.txt"


	# ------------------------------------------------------
	# URL encode the user entered parameters
	# ------------------------------------------------------
	USER="$(urlencode $USER)"
	PASS="$(urlencode $PASS)"


	# ------------------------------------------------------
	# Now let's fetch the data
	# ------------------------------------------------------

	# first we need to get a valid session cookie
	curl --silent -c $AUTH_COOKIE $URL_LOGIN  > /dev/null

	# then extract the ID from the authentication cookie
	SESS_ID="$(cat $AUTH_COOKIE | grep netatmocomci_csrf_cookie_na | cut -f7)"

	# and now we can login using cookie, id, user and password
	curl --silent -d "ci_csrf_netatmo=$SESS_ID&mail=$USER&pass=$PASS&log_submit=LOGIN" -b $AUTH_COOKIE -c $SESSION_COOKIE  $URL_LOGIN > /dev/null

	# next we extract the access_token from the session cookie
	ACCESS_TOKEN="$(cat $SESSION_COOKIE | grep netatmocomaccess_token | cut -f7)"

	# build the POST data
	PARAM="access_token=$ACCESS_TOKEN"

	# now download json data
	curl -d $PARAM $API_GETMEASURECSV

	# clean up
	rm $SESSION_COOKIE
	rm $AUTH_COOKIE
}

#____________________________________________________________________________________________________________________________________

urlencode() {
	# ------------------------------------------------------
	# urlencode function from mrubin
	# https://gist.github.com/mrubin
	#
	# usage: urlencode <string>
	# ------------------------------------------------------
	local length="${#1}"

	for (( i = 0; i < length; i++ )); do
		local c="${1:i:1}"

		case $c in [a-zA-Z0-9.~_-])
			printf "$c" ;;
			*) printf '%%%02X' "'$c"
			esac
	done
}

#____________________________________________________________________________________________________________________________________

listDevices "user@email.com" "mySecretPassword"

When you execute the script above you should see all your NetAtmo module details in a JSON format – unfortunately this is not easy to read:

NetAtmo_JSON

Therefore I used JQ – which is a great JSON parser to make it human-readable. I just piped the output of my script straight into JQ:

./ListDevices.sh  | ./jq

… and viola I got a proper formatted JSON file containing all data:

NetAtmo_JSON_JQ

This JSON output contains the module_id (referred as _ID), and all other sensor data, such as temperature, humidity, battery level, etc.

You may also like
VBScript: Change Word Document Template
Edit Synology Photo Station Album Permissions via Script
Creating VMware Virtual Machines using PowerCLI
6 Comments
  • 2016-07-21T10:22:12+00:000000001231201607 at 10:22
    Reply

    […] it should be used for that task. I was lucky to find two really cool bash scripts using curl to query base information about one’s devices and download the weather data. I modified them, especially for postprocessing (=grouping) the rain […]

  • 2016-06-09T12:26:38+00:000000003830201606 at 12:26
    Reply

    Very nice and helpful script. Thanks a lot, with this I was able to establish with little effort my data download for all my netatmo devices!

  • Markus
    2016-01-03T22:02:29+00:000000002931201501 at 22:02
    Reply

    Hallo Michael,

    ich bin auf deine Webseite gestoßen, da ich eine Verbindung von Netatmo zu einer RRD Datenbank suche. Hast du hiermit auch Erfahrung? Ich würde gerne die Raumtemperaturen auslesen und in eine bestehende RRDChart einfügen, nur leider weiß ich gar nicht wo und wie ich anfangen soll an die Temperaturdaten zukommen.
    Als Server habe ich einen Raspberry pi, wo auch schon die rrd Datenbank drauf liegt und die RRDTool Chart erstellt wird.
    Ich hoffe du kannst mir weiterhelfen.
    Vielen Dank,
    Markus

    • 2016-01-04T14:11:06+00:000000000631201601 at 14:11
      Reply

      Hallo Markus,

      zu RRD kann ich dir leider nichts sagen – aber ich denke du solltest bei Google sicher fündig werden, wie vorhandene CSV Dateien mit dem RRDTool in ein entsprechendes Chart gewandelt werden. Dann könntest du zuerst mit dem Script von meinem Blog die Daten in einer CSV Datei herunterladen und dann eine entsprechende RRD Datei erstellen lassen.
      Grüße

      Michael

      • Markus
        2016-01-04T14:26:07+00:000000000731201601 at 14:26
        Reply

        Hallo Michael,
        mit deinem Script (dieser Eintrag) brauch ich dein erstes Script auch noch dazu oder löst dieses das erste ab?
        Das konnte ich noch nicht nachvollziehen. Weil bei diesem Script muss ich keine Adressen der Module und Zeiträume der Daten angeben.
        Oder muss ich beide kombinieren?
        Danke,
        Markus

        • 2016-01-04T14:35:18+00:000000001831201601 at 14:35
          Reply

          Dieses Script liest die Daten im JSON Format – das ist in einem entsprechenden Script besser zu verwenden. Aber hierzu wirst du das Script entsprechend anpassen müssen, dass die Daten aus dem JSON Format irgendwie in eine RRD-Datei gewandelt / geschrieben werden.
          Bei meinem anderen Script kannst du alle Daten einer bestimmten Station / eines bestimmten Moduls als CSV Datei downloaden – ich nutze dies um die Daten auf meinem NAS zu archivieren.

Leave Your Comment

Your Comment*

Your Name*
Your Webpage