Benutzer-Werkzeuge

Webseiten-Werkzeuge


dapnetinfluxdb2rubric

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

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>​
dapnetinfluxdb2rubric.txt · Zuletzt geändert: 2020/11/01 12:31 von dh3wr