Cap schreef op maandag 8 februari 2021 @ 21:13:
Update voor wie niet alleen van de HWE app op je smart device afhankelijk wil zijn maar de gegevens ook elders wil opslaan en in een webbrowser kunnen bekijken.
Naast de upload van stroom
data naar de PVOutput website (zie
mijn vorige post) heb ik nu ook een script gemaakt voor upload van de dagelijkse gas meterstand naar
Mindergas. Deze website biedt de mogelijkheid om je gasverbruik te monitoren en vergelijken met vorige maanden, jaren, etc. en ook vergelijken met het gasverbruik van anderen.
Onderstaand Linux shellscript draai ik op een Asus RT-AC86U router (Merlin firmware). Het script upload elke nacht de gasmeterstand via een cron job op de router. Het script schrijft verder de output weg naar een logfile op een aangesloten USB drive.
Dit script is natuurlijk gemakkelijk werkend te krijgen op andere Linux based devices met wat kleine aanpassingen in de paden. Zoek je eigen Linux device dat altijd aan staat.
Verder moet je natuurlijk je eigen gegevens toevoegen aan het script: je IP-adres/poortnr en de op Mindergas.nl te genereren
API key.
Heb je geen behoefte aan logging dan kan je de delen die de output naar een directoy / bestand verzorgen natuurlijk weglaten, dan houd je een kort script over.
Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| #!/bin/sh
# name: mindergas-upload
# description: upload HomeWizard Wi-Fi P1 meter gas meterstand to Mindergas.nl website
# location: /jffs/scripts
youripaddress="YOUR_IPADRESS"
yourportnr="YOUR_PORTNR"
yourapikey="YOUR_MINDERGAS_APIKEY"
logfile="mindergas.log"
# place logfile output in the mindergas directory of the first USB drive partition
# if no USB drive output goes to /tmp
usbdrive=$(grep "/dev/sda1" /proc/mounts | cut -d ' ' -f 2)
if [ "$usbdrive" ]; then
test -d $usbdrive/mindergas || mkdir $usbdrive/mindergas #create directory if not present
cd $usbdrive/mindergas
else
cd /tmp
fi
# get current energy data from P1 Meter
energydata=$(wget http://"$youripaddress:$yourportnr"/api/v1/data -qO-)
meterstand=$(echo "$energydata" | sed 's/,/\n/g' | grep "total_gas_m3" | cut -d: -f2)
# set the date variable
datestamp=$(date +"%Y-%m-%d")
# save output to logfile
echo date: $datestamp, meter: $meterstand >> $logfile 2>&1
# post meterstand to Mindergas.nl site, save response to logfile
status=$(curl --write-out %{http_code} -v -H "Content-Type:application/json" -H "AUTH-TOKEN:$yourapikey" -d '{"date":"'$datestamp'", "reading": "'$meterstand'" }' https://www.mindergas.nl/api/gas_meter_readings)
echo $status >> $logfile 2>&1 |
Toevoegen aan cron voor het eens per dag draaien gebeurt dmv toevoegen van iets als onderstaande (pad aanpassen) aan bijv Linux startscripts init-start of services-start. Neem een willekeurige tijd tussen 00:00 en 01:00 om te zorgen dat de server last een beetje gespreid wordt, dus niet allemaal om 00:00 uploaden.

(Voorbeeld is 0:44).
Bash:
1
| cru a mindergas-upload "44 0 * * * /PADNAARJOUWSCRIPT/mindergas-upload" # 0:44 am mindergas-upload cron job |
Inmiddels ook bezig om dit script op mijn Raspberry werkend te krijgen.
Het lijkt goed te gaan echter het log file geeft de volgende error:
date: 2021-12-19, meter:
{"error":"Meterstand is geen getal"}422
Er wordt dan ook geen meterstand geupload
hieronder als ik het script handmatig start:
pi@raspberrypi:/home/mgas $ ./mindergas
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 213.207.97.49:443...
* Connected to
www.mindergas.nl (213.207.97.49) port 443 (#0)
* ALPN, offering h2
* ALPN, offering
http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
} [5 bytes
data]
* TLS
v1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes
data]
* TLS
v1.3 (IN), TLS handshake, Server hello (2):
{ [93 bytes
data]
* TLS
v1.2 (IN), TLS handshake, Certificate (11):
{ [4927 bytes
data]
* TLS
v1.2 (IN), TLS handshake, Server key exchange (12):
{ [589 bytes
data]
* TLS
v1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes
data]
* TLS
v1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes
data]
* TLS
v1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes
data]
* TLS
v1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes
data]
* TLS
v1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes
data]
* SSL connection using TLS
v1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=mindergas.nl
* start date: Jul 21 00:00:00 2021 GMT
* expire date: Jul 26 23:59:59 2022 GMT
* subjectAltName: host "www.mindergas.nl" matched cert's "www.mindergas.nl"
* issuer: C=GB; ST=Greater Manchester; L=Salford; O=Sectigo Limited; CN=Sectigo RSA Domain Validation Secure Server CA
* SSL certificate verify ok.
} [5 bytes
data]
> POST /
api/gas_meter_readings
HTTP/1.1
> Host:
www.mindergas.nl
> User-Agent:
curl/7.74.0
> Accept: */*
> Content-Type:application/json
> AUTH-TOKEN:*** Mijntoken ***
> Content-Length: 37
>
} [37 bytes
data]
* upload completely sent off: 37 out of 37 bytes
{ [5 bytes
data]
* Mark bundle as not supporting multiuse
<
HTTP/1.1 422 Unprocessable Entity
< Date: Sun, 19 Dec 2021 09:43:53 GMT
< Server: Apache
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Cache-Control: no-cache
< X-Request-Id: 9b1f1cdb-d87b-485a-957a-1b2846f9c7bf
< X-Runtime: 0.022607
< Strict-Transport-Security: max-age=15552000; includeSubDomains
< X-Powered-By: Phusion Passenger 4.0.60
< Status: 422 Unprocessable Entity
< X-Powered-By: PleskLin
< Transfer-Encoding: chunked
< Content-Type: application/json; charset=utf-8
<
{ [5 bytes
data]
100 73 0 36 100 37 204 210 --:--:-- --:--:-- --:--:-- 414
* Connection #0 to host
www.mindergas.nl left intact