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> | ||