Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— |
dapnetinfluxdb2rubric [2020/11/01 12:31] (aktuell) dh3wr angelegt |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== InfluxDB to Rubric Content ====== | ||
+ | [[http://control.db0ns.ampr.org:3000|DB0NS]] is solar powered only. The data from the solar charger is placed into a influxdb instance in order to display it with Grafana. In addition, the most critical data is also sent periodically into a rubric. | ||
+ | |||
+ | The Python-Code was adapted from Philipp DL7FL: | ||
+ | [[https://github.com/DL7FL/DAPNET/blob/master/DAPNET/senden.py|https://github.com/DL7FL/DAPNET/blob/master/DAPNET/senden.py]] | ||
+ | |||
+ | |||
+ | <code> | ||
+ | import urllib.parse | ||
+ | import requests | ||
+ | from requests.auth import HTTPBasicAuth | ||
+ | import json | ||
+ | |||
+ | def getinflux(mytopic, leading, decimals): | ||
+ | querystring = 'SELECT last("value") FROM "mqtt_consumer" WHERE ("host" = \'control\' AND "topic" = \'' + mytopic + '\') AND time >= now() - 2d' | ||
+ | # print (querystring) | ||
+ | payload = {'db': 'telegraf', 'q': querystring} | ||
+ | r = requests.get('http://localhost:8086/query?', auth=('MYUSER', 'MYPASS'), params=payload) | ||
+ | # print (r.text) | ||
+ | jsondata = json.loads(r.text) | ||
+ | if "series" in jsondata["results"][0]: | ||
+ | # print (format(round(jsondata["results"][0]["series"][0]["values"][0][1],decimals), '.' + str(decimals) + 'f')) | ||
+ | # return (format(round(jsondata["results"][0]["series"][0]["values"][0][1],decimals), str(leading) + '.' + str(decimals) + 'f')) | ||
+ | return ('{:{width}.{prec}f}'.format(jsondata["results"][0]["series"][0]["values"][0][1], width = leading+decimals+1, prec = decimals)) | ||
+ | |||
+ | return (format(0, '.' + str(decimals) + 'f')) | ||
+ | |||
+ | |||
+ | |||
+ | def sendstats(text, pos): | ||
+ | |||
+ | json_string =json.dumps({"rubricName": "DB0NSStats", "text": text, "number": pos}) | ||
+ | url = "http://dapnet.db0sda.ampr.org:8080/news" | ||
+ | login = "DAPNETUSER" | ||
+ | passwd = "DAPNETPASS" | ||
+ | # import pprint; pprint.pprint(json_string) | ||
+ | response = requests.post(url, data=json_string, auth=HTTPBasicAuth(login, passwd)) # Exception handling einbauen | ||
+ | return response.status_code | ||
+ | |||
+ | |||
+ | PV_V = getinflux("N/MYMQTTTOPPIC/solarcharger/288/Pv/V", 3, 1) | ||
+ | PV_I = getinflux("N/MYMQTTTOPPIC/solarcharger/288/Pv/I", 2, 2) | ||
+ | Bat_V = getinflux("N/MYMQTTTOPPIC/solarcharger/288/Dc/0/Voltage", 2, 1) | ||
+ | Bat_I = getinflux("N/MYMQTTTOPPIC/solarcharger/288/Dc/0/Current", 2, 2) | ||
+ | Bat_P = getinflux("N/MYMQTTTOPPIC/system/0/Dc/Battery/Power", 4, 0) | ||
+ | Gen_E = getinflux("N/MYMQTTTOPPIC/solarcharger/288/Yield/System", 5, 0) | ||
+ | msgString = 'PV:' + PV_V + ' V ' + PV_I + ' A ' + Gen_E + ' kWh Bat:' + Bat_V + ' V ' + Bat_I + ' A ' + Bat_P + ' W' | ||
+ | #print (msgString) | ||
+ | |||
+ | sendstats(msgString,1) | ||
+ | </code> |