* complete docker-compose with influxdb + grafana (TODO: port-mappings+hosts, preconfiguring grafana)

* importer
** logging
** one request per callback
master
agp8x 2018-05-22 14:40:11 +02:00
parent a9697f7c03
commit 98c0c75e4e
4 changed files with 41 additions and 11 deletions

View File

@ -1,5 +1,24 @@
version: "2" version: "2"
services: services:
import: import:
build: . build: importer
image: docker.clkl.de/weather/import:0.1 image: docker.clkl.de/weather/import:0.2
influxdb:
image: influxdb:1.5-alpine
command: influxd -config /etc/influxdb/influxdb.conf
ports:
- "8086:8086"
volumes:
- "./influxdb/:/var/lib/influxdb"
environment:
- INFLUXDB_DB=mydb
#- INFLUXDB_USER=user
#- INLFUXDB_USER_PASSWORD=<secret>
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
# - "./grafana_etc/:/etc/grafana/"
- "./grafana_lib/:/var/lib/grafana/"

View File

@ -1,9 +1,9 @@
FROM python:3.7-rc-alpine FROM python:3.7-rc-alpine
RUN pip install tinkerforge requests
WORKDIR /app WORKDIR /app
COPY . . COPY . .
RUN pip install -r requirements.txt
CMD ["python3.7", "/app/import.py"] CMD ["python3.7", "/app/import.py"]

View File

@ -3,6 +3,7 @@ PORT = 4223
UID = "DYC" UID = "DYC"
URL = "http://192.168.2.30:8086/write?db=mydb" URL = "http://192.168.2.30:8086/write?db=mydb"
import logging
import time import time
import requests import requests
@ -10,12 +11,19 @@ import requests
from tinkerforge.ip_connection import IPConnection from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_outdoor_weather import BrickletOutdoorWeather from tinkerforge.bricklet_outdoor_weather import BrickletOutdoorWeather
log = logging.getLogger(__name__)
def asdf(type, identifier, **kwargs): def asdf(type, identifier, **kwargs):
print(type, identifier, kwargs) log.info(type, identifier, kwargs)
time_ns = time.time_ns() time_ns = time.time_ns()
for key in kwargs: data = []
data = "{unit},type={type},identifier={id} value={value} {time_ns}".format(unit=key, type=type, id=identifier, value=kwargs[key], time_ns=time_ns) for unit in kwargs:
r = requests.post(URL, data=data) data.append(f"{unit},type={type},identifier={identifier} value={kwargs[unit]} {time_ns}")
try:
r = requests.post(URL, data="\n".join(data))
log.info(r, r.text)
except Exception as e:
log.exception(e)
def cb_station(identifier, temperature, humidity, wind_speed, gust_speed, rain, wind_direction, battery_low): def cb_station(identifier, temperature, humidity, wind_speed, gust_speed, rain, wind_direction, battery_low):
asdf(type="station", identifier=identifier, temperature=temperature, humidity=humidity, wind_speed=wind_speed, gust_speed=gust_speed, rain=rain, wind_direction=wind_direction, battery_low=battery_low) asdf(type="station", identifier=identifier, temperature=temperature, humidity=humidity, wind_speed=wind_speed, gust_speed=gust_speed, rain=rain, wind_direction=wind_direction, battery_low=battery_low)
@ -23,7 +31,8 @@ def cb_sensor(identifier, temperature, humidity):
asdf(type="sensor", identifier=identifier, temperature=temperature, humidity=humidity) asdf(type="sensor", identifier=identifier, temperature=temperature, humidity=humidity)
if __name__ == "__main__": if __name__ == "__main__":
print("starting…") logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
log.info("starting…")
ipcon = IPConnection() ipcon = IPConnection()
ow = BrickletOutdoorWeather(UID, ipcon) ow = BrickletOutdoorWeather(UID, ipcon)
ipcon.connect(HOST, PORT) ipcon.connect(HOST, PORT)
@ -31,10 +40,10 @@ if __name__ == "__main__":
ow.set_sensor_callback_configuration(True) ow.set_sensor_callback_configuration(True)
ow.register_callback(ow.CALLBACK_STATION_DATA, cb_station) ow.register_callback(ow.CALLBACK_STATION_DATA, cb_station)
ow.register_callback(ow.CALLBACK_SENSOR_DATA, cb_sensor) ow.register_callback(ow.CALLBACK_SENSOR_DATA, cb_sensor)
print("now we play the waiting game…") log.info("now we play the waiting game…")
while True: while True:
try: try:
time.sleep(60*60) time.sleep(60*60)
except Exception: except Exception:
print("") log.warning("")
ipcon.disconnect() ipcon.disconnect()

View File

@ -0,0 +1,2 @@
tinkerforge==2.1.16
requests==2.18.4