@all: wobei man schauen muss, es gibt noch ein weiteres plugin zu dem thema, ich habe aber nur deines relativ schnell zum laufen bekommen. entweder bauen wir beide ein oder machen nen switch. was denkt der rest?
Ankündigung
Einklappen
Keine Ankündigung bisher.
Plugin: InfluxDB für schicke Charts mit Grafana
Einklappen
X
-
Zitat von psilo Beitrag anzeigen@all: wobei man schauen muss, es gibt noch ein weiteres plugin zu dem thema, ich habe aber nur deines relativ schnell zum laufen bekommen. entweder bauen wir beide ein oder machen nen switch. was denkt der rest?
Vielleicht kann man ja beide mergen und per config switch umschalten.Zuletzt geändert von bmx; 10.04.2017, 08:05.
Kommentar
-
Ich habe folgenden vorschlag
das man auch in dem plugin das senden via http unterstützt ich habe das mal so bei mir eingebaut. HTTP hat den riesen vorteil das es im Fehlerfall den grund des Fehlers zurückgibt.
Hintergrund ich habe 3 devices Stromzähler a 60 Metriken die ich alle 10s abfrage das will ich nicht in 180 udp packeten über die items sondern über 3 HTTP calls
dazu baue ich mir einen langen string mit den daten zusammen und schicke in rüber 3-4kb das hat mit udp irgentwie bei mir nicht so recht funktioniert.
Code:def __init__(self, smarthome, host='localhost', udp_port=8089, http_port=8086, keyword='influxdb', tags={}, fields={}, value_field='value', influxdb='smarthome'): self.logger = logging.getLogger(__name__) self.logger.info('Init InfluxDB') self.host = host self.udp_port = udp_port self.http_port = http_port self.influxdb = influxdb self.keyword = keyword self.tags = tags self.fields = fields self.value_field = value_field self.item_config = {} ... def sendhttp( self, data ): url_string = 'http://{}:{}/write?db=smarthome'.format( self.host, self.http_port, self.influxdb ) r = requests.post(url_string, data=data) if( r.status_code != 204 ): self.logger.error( "InfluxDB: request returns http {} [{}]".format(r.status_code, r.text))
- Likes 1
Kommentar
-
Hallo,
ich habe gerade das Influx Plugin und Grafana nach Anleitung installiert und ausprobiert.
(Eigentlich habe ich es schon vor langer Zeit, aber ich habe es nicht zuende gebracht).
Ich finde in Grafana auch tatsächlich Einträge (Items) aus smarthome.py. Allerdings enthalten diese keine Daten.
Ist es möglich, das Plugin gesprächiger zu machen?
Oder habt ihr eine andere Idee, wie ich dem Problem auf den Grund gehen kann?
Die Verbindung mit Influx scheint prinzipiell ja sowohl von sh.py als auch von Grafana aus zu funktionieren.
Gruß,
Hendrik
Kommentar
-
Hi,
ich würde erst mal schauen ob Daten in der DB ankommen.
In der Doku steht wie man CLI aufruft und einen Select macht.
https://docs.influxdata.com/influxdb...tting-started/
um rauszufinden was geschickt wird. Würde ich mir noch ein logausgabe
in die send methode temporär ein logging einbauen.
def send( self, data )
self.logger.debug( "InfluxDB: sending {}".format(data) )
....
VG
JürgenZuletzt geändert von heckmannju; 11.05.2018, 08:28.
Kommentar
-
Hallo,
danke!
Ich bin nicht sicher, ob wir das gleiche Plugin nutzen. Die Methode send habe ich nicht.
Unten habe ich mal meinen code angefügt
Im log sehe ich:
Code:2018-05-13 12:07:21 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:07:31+02:00 2018-05-13 12:07:31 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:07:41+02:00 2018-05-13 12:07:33 INFO logics.UVR InfluxDB: sending item Haustechnik.UVR.Kollektortemp with value 85.5 2018-05-13 12:07:33 INFO logics.UVR InfluxDB: sending item Haustechnik.UVR.Aussentemp with value 30.5 2018-05-13 12:07:33 INFO logics.UVR InfluxDB: sending item Haustechnik.UVR.Solarstr with value 793 2018-05-13 12:07:33 INFO logics.UVR InfluxDB: sending item Haustechnik.UVR.T_Speicher_2 with value 70.2 2018-05-13 12:07:33 INFO logics.UVR InfluxDB: sending item Haustechnik.UVR.T_Speicher_3 with value 69.6 2018-05-13 12:07:33 INFO logics.UVR InfluxDB: sending item Haustechnik.UVR.T_Speicher_4 with value 43.4 2018-05-13 12:07:41 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:07:51+02:00 2018-05-13 12:07:51 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:08:01+02:00 2018-05-13 12:08:01 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:08:11+02:00 2018-05-13 12:08:11 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:08:21+02:00 2018-05-13 12:08:21 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:08:31+02:00 2018-05-13 12:08:31 DEBUG Scheduler InfluxDB next time: 2018-05-13 12:08:41+02:00
Dennoch werden am Graphen keine Werte gezeigt :-(
Ich weiß nicht, wie die Syntax für die CLI für meinen Fall aussieht.
In der Doku werden ja erst Werte gesetzt und dann abgefragt.
Mir fehlt das Äquivalent zu
Code:SELECT "host", "region", "value" FROM "cpu"
Gruß&Danke,
HendrikZuletzt geändert von henfri; 13.05.2018, 12:05.
Kommentar
-
Hallo,
Urlaub geht vor ;-)
Vielleicht kann mir jemand anderes helfen?
Nur zur Sicherheit: Ich nutze dieses Plugin:
Code:#!/usr/bin/env python3 ######################################################################### # Copyright 2015 Sebastian Kuhn sebastian@derseppel.net ######################################################################### # This file is part of SmartHome.py. http://mknx.github.io/smarthome/ # # SmartHome.py is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # SmartHome.py is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with SmartHome.py. If not, see <http://www.gnu.org/licenses/>. ######################################################################### import logging from influxdb import InfluxDBClient logger = logging.getLogger('') class InfluxDB(): def __init__(self, smarthome, influx_host='localhost', influx_port=8086, influx_user='root', influx_pass='root', influx_db='smarthome', influx_keyword='influxdb', influx_update_cyle=10 ): logger.warn('Init InfluxDB') self._sh = smarthome self.influx_host = influx_host self.influx_port = influx_port self.influx_user = influx_user self.influx_pass = influx_pass self.influx_db = influx_db self.influx_keyword = influx_keyword self.influx_update_cyle = influx_update_cyle self.client = None self._items = [] # connect to DB self.client = InfluxDBClient(self.influx_host, self.influx_port, self.influx_user, self.influx_pass, self.influx_db) logger.debug("InfluxDBClient("+self.influx_host+", "+str(self.influx_port)+", "+self.influx_user+", "+self.influx_pass+", "+self.influx_db+")") # check if database already exists, if not - create it exists = False dbs = self.client.get_list_database() for db in dbs: if db['name'] == self.influx_db: exists = True if exists == False: logger.debug('Database' + self.influx_db + ' does not exist, creating it.') self.client.create_database( self.influx_db) else: logger.debug('Database' + self.influx_db + ' exists') def run(self): self.alive = True self._sh.scheduler.add('InfluxDB', self._update_values, prio=5, cycle=self.influx_update_cyle) def stop(self): self.alive = False def parse_item(self, item): if self.influx_keyword in item.conf: if item.type() not in ['num', 'bool']: logger.debug("InfluxDB: only supports 'num' and 'bool' as types. Item: {} ".format(item.id())) return self._items.append(item) return self.update_item def update_item(self, item, caller=None, source=None, dest=None): logger.info( "InfluxDB: sending item {0} with value {1}".format(item.id(),item()) ) json_body = [ { "measurement": item.id(), "tags": { "caller": caller, }, "fields": { "value": float(item()) } } ] self.client.write_points(json_body) return None def _update_values(self): return None
Gruß,
HendrikAngehängte Dateien
Kommentar
-
Da du die Datenpunkte in Grafana auswählen kannst sollten auch daten vorhanden sein, allerdings zeigt Grafana nur was an, wenn in dem ausgewählten Zeitraum auch Daten gesendet wurden.
Wie oft werden deine Temperaturen von der UVR in die Datenbank geschrieben ?
z.B: in deinem Logfile sieht man, dass um 12:07:33 Daten in die Datenbank geschrieben wurden, in deinem Grafana Fenster hast du aber einen Zeitraum von 10 min, der erst um 12:19 anfängt, wenn in diesen 10 Minuten keine Daten gesendet werden zeigt Grafana auch nichts an. also entweder Zeitraum vergrößern, oder evtl. mit den Wertdarstellungen etwas experimentieren. Wenn man z.B: nur ein/aus Telegramme visualisieren möchte wie z.B. Pumpen dann hilft es auch, wenn man im select bereich immer den ersten Datenwert anzeigen läßt.
Hier zum vergleich meine Werte von der UVR. Ich hab allerdings einen CAN-KNX Adapter von Ta.Co.at verbaut, der mir die Daten im Minutentakt auf den KNX und auch somit in die Datenbank schreibt.
Angehängte Dateien
Kommentar
-
Zitat von Mike01 Beitrag anzeigenWie oft werden deine Temperaturen von der UVR in die Datenbank geschrieben ?
Ich habe jetzt mal auf den ganzen Tag rausgezoomt. Hat aber auch nicht geholfen.
den Wertdarstellungen etwas experimentieren. Wenn man z.B: nur ein/aus Telegramme visualisieren möchte wie z.B. Pumpen dann hilft es auch, wenn man im select bereich immer den ersten Datenwert anzeigen läßt.
Was meinst du mit "immer den ersten Datenwert anzeigen"?
Hier zum vergleich meine Werte von der UVR. Ich hab allerdings einen CAN-KNX Adapter von Ta.Co.at verbaut, der mir die Daten im Minutentakt auf den KNX und auch somit in die Datenbank schreibt.
Gruß,
Hendrik
Kommentar
Kommentar