Hallo an alle,
ich versuche mich seit einiger Zeit ein wenig mit Programmierung.
Aktuell erfasse ich die Vor/Rücklauftemperatur des Heizkessels mittels DS18B20/Arduino Nano
und sende die Daten mittels CAN-Bus-Modul zu einem RasPi(Kellerhost). Der Nano sendet alle 5min.
die Daten und auf dem Raspi läuft in einer screen-Session ein Python-Skript.
Das Skript liefert die Daten weiter an eine RRD Datenbank. Es läuft soweit erstmal...
Es geht aber sicher besser, ich möchte z.B. dass der Raspi die Daten vom Nano anfordert.
Ich hänge das Python-Skript mal hier an, bei Bedarf kann ich den Nano-Sketch auch posten.
Es ist noch einiges überflüssige mit im Skript, ein laufender Entwicklungsprozess quasi...
mfg
Python
#!/usr/bin/env python3
import os, rrdtool
import can
from time import strftime
can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan') # socketcan
"""
Skript fuer den Kellerhost, Erfassung Temperaturen Heizung
Vor/Ruecklauf von Nano mit DS18B20 erfasst und per CAN-Bus an Kellerhost uebertragen.
Nano CAN ID 0x500, sendet alle 5 min. Temp.werte
"""
#msg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7], extended_id=False)
try:
while True:
msg = can0.recv()
print("CAN ID:",hex(msg.arbitration_id))
print(strftime("%a, %d %b %Y %H:%M:%S"))
if msg.arbitration_id == 0x100:
temperatur = (msg.data[6])
feuchte = (msg.data[7])
print('Keller:{}°C {}% Feuchte'.format (temperatur, feuchte))
print()
"""
with open('daten.txt','w') as f:
s = str('{} {}'.format (temperatur, feuchte))
f.write(s)
f.close()
"""
elif msg.arbitration_id == 0x500:
vorlauf = (msg.data[6])
ruecklauf = (msg.data[7])
print('Heizung Vorlauf:{}°C Ruecklauf:{}°C'.format (vorlauf, ruecklauf))
print()
data = str('N:{}:{}'.format(vorlauf, ruecklauf))
# insert data into round-robin-database
rrdtool.update(
"%s/temperature.rrd" % (os.path.dirname(os.path.abspath(__file__))),
data)
else:
id_0 = (msg.data[0])
id_1 = (msg.data[1])
print('data0:',id_0,'data1:',id_1)
if msg is None:
print('Timeout occurred, no message.')
except KeyboardInterrupt:
print('Strg-C - End Program')
Alles anzeigen