Guten Morgen zusammen,
gibt es die Möglichkeit mit FHEM Daten aus einer MySQL Datenbank zu lesen?
Ich habe einen Raspberry mit dem Airpi Modul als Wetterstation. Diese Daten werden in eine MySQL Datenbank geschrieben.
Nun würde ich die Daten gerne in FHEM verwenden, nur weiß ich nicht ob und wie man das machen könnte.
Mit DbLog schreibe ich bereits mit Fhem meine ausgelesen Werte der PV-Anlage in die Datenbank, und kann damit auch Plots erzeugen.
Aber wenn ich das richtig verstehe ist bei DbLog die Struktur ja zwingend vorgeschrieben, sodass das nicht passen wird mit meiner jetzigen Datenbank.
Gruß
Jan
Die Frage taucht hier in diversen Unterforen immer wieder mal auf :)
Kurze Antwort : Nein es gibt kein fhem Modul um Werte aus "fremden" DBs direkt einzulesen.
Längere Antwort : Ich hatte das Problem vor einiger Zeit auch einmal. Gelöst hatte ich es mit einem externen Programm (Sprache egal) das zyklisch (cron Job) die Werte aus der DB gelesen und in einen fhem Dummy geschrieben hat.
Ja das reicht mir schon mal. Dann sehe ich mir das mal an.
Könntest du mir noch ein Stichwort sagen oder Tip geben wie ich außerhalb von Fhem was in einen Dummy schreiben kann?
Danke
Bsp :
http://forum.fhem.de/index.php/topic,35260.msg276672.html#msg276672
Jetzt bräuchte ich noch einmal kurz Hilfe.
Ich habe mir ein Phyton-Scribt zusammen gestellt was mir jetzt meine Datendank ausließt.
Aber ich bekomme es nicht hin, die Werte in die Readings eines Dummys zu schreiben
#!/usr/bin/python2.7.3
import mysql.connector
from mysql.connector import errorcode
# Zugangsdaten für MySQL
config = {
'user': 'user',
'password': 'pass',
'host': '192.168.0.25',
'database': 'wetter',
'raise_on_warnings': True,
}
# Verbindung aufbauen
try:
connection = mysql.connector.connect(**config)
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
#Datensätze auslesen
cursor = connection.cursor()
#cursor.execute("SELECT * from obs")
cursor.execute("SELECT * FROM obs ORDER BY id DESC LIMIT 0,1")
result = cursor.fetchall()
cursor.close()
#print (result)
for data in result:
id = str(data[0])
station = data[1].decode(encoding='UTF-8')
date = str(data[2])
tempDHT = str(data[3])
pres = str(data[4])
humi = str(data[5])
light = str(data[6])
nitro = str(data[7])
carbon = str(data[8])
vol = str(data[9])
wind = str(data[10])
tmpBMP = str(data[11])
print ("ID: " + id)
print ("Station: " + station)
print ("Date: " + date)
print ("Temperatur: " + tempDHT)
print ("Luftdruck: " + pres)
print ("rel Feuchtigkeit: " + humi)
print ("Helligkeit: " + light)
print ("Stickstoffdioxid: " + nitro)
print ("Koghlenstoffmonoxid: " + carbon)
print ("Lautstärke: " + vol)
print ("Windrichtung: " + wind)
connection.close()
Ich habe zum Beispiel
/opt/fhem/fhem.pl 7072 "setreading Wetterstation tempDHT $tempDHT"
ausprobiert aber das geht nicht. Der Dummy Wetterstation ist natürlich angelegt.
Hat vielleicht jemand einen Tip?
Also ich löse das so das ich mir ein PHP gemacht habe das ich mit HTTPMOD abfrage.
Habe es hinbekommen.
import os, sys
os.system('perl /opt/fhem/fhem.pl 7072 "setreading Wetterstation ID '+id+' "')
das hat funktioniert.
Zitat von: budda85 am 06 November 2015, 16:25:29
Habe es hinbekommen.
import os, sys
os.system('perl /opt/fhem/fhem.pl 7072 "setreading Wetterstation ID '+id+' "')
das hat funktioniert.
Auch wenn das Thema schon alt ist, das funktioniert 1A!
DANKE!!
LG
KOAL
Wäre performanter mit nc, oder direkt mit pytons telnet, statt fhem.pl aufzurufen.