Hallo,
ich habe mich die Tage mir der Hilfestellung vom bootsmann --> bottle - the right way to use zur Installation und Einrichtung von Bottle beschäftigt. Ziel ist es für mich, die Messwerte mehrerer DHT22 im Intranet darzustellen. Nach nunmehr zwei Tagen und Nächten verzweifele ich daran, die Funktionsweise von Bottle zu kapieren. Zumindest wenn es um die Verwendung von Platzhaltern und deren Befüllung mit Daten geht - ich steig nicht durch. Leider half mir dazu auch die Doku von bottlepy.org irgendwie nicht weiter.
Das Verzeichnis über das ich mit Bottle arbeiten möchte ist folgendermaßen eingerichtet, zunächst die Verzeichnisstruktur von Bottle:
RS485_MODBUS/
├── static/
│ ├── css/
└── bootstrap.css
└── bootstrap.min.css
└── bootstrap-grid.css
└── bootstrap-grid.min.css
└── bootstrap-reboot.css
└── bootstrap-reboot.min.css
│├── fonts/
│└── img/
│└── js/
└── bootstrap.bundle.js
└── bootstrap.bundle.min.js
└── bootstrap.js
└── bootstrap.min.js
├── views/
└── index.tpl
└── main.tpl
└── WetterServer.tpl
├── app.py
Alles anzeigen
Meine derzeitige app.py sieht wie folgt aus (der Quelltext sollte jetzt nach all dem Frust erst mal nur darüf sorgen, dass die Messwerte einer Messstelle im Browser angezeigt werden, die Beispielrouten vom Bootsmann sind auch noch drin):
#! /usr/bin python3
# -*- coding: utf-8 -*-
import time
import pymodbus
from bottle import Bottle, static_file, run, template, debug
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer as ModbusFramer
STATIC_FOLDER = '/home/pi/WEB_APP/static'
app = Bottle()
@app.route('/static/:path#.+#')
def static_files(path):
return static_file(path, root=STATIC_FOLDER)
# Beispiel fuer statische Route
@app.route('/index')
def index():
return template('index')
#Ausgabe der Messwerte auf dem Browser
@app.route('/WetterServer')
def WetterServer():
temp = 0
humi = 0
heatind = 0
vcc = 0
dht_err = 0
vers = 0
client = ModbusClient(method="rtu", port="/dev/ttyUSB0", stopbits=1, bytesize=8, parity='N', baudrate=19200, timeout=3)
client.connect()
# Starting add, num of reg to read, slave unit.
Slave = client.read_holding_registers(0000, 6, unit=5)
#Get values
datum = time.strftime("%a %d.%m.%Y")
zeit = time.strftime("%H:%M:%S")
temp = round(temp+float(Slave.getRegister(0))/100, 2)
humi = round(humi+float(Slave.getRegister(1))/100, 2)
heatind = round(heatind+float(Slave.getRegister(2))/100, 2)
vcc = round(vcc+float(Slave.getRegister(3))/100, 2)
dht_err = dht_err+Slave.getRegister(4)
vers = round(vers+float(Slave.getRegister(5))/100, 2)
#Browser-Ausgabe formatieren
seite = '''
<html>
<head> <title>Messwerte-Ausgabe</title> </head>
<body>
<p><h1>Klimadaten Aussenfühler: </h1></p>
%s
</body>
</html> '''
werte = 'Temperatur: '+str(temp)+'°C'+'<br>'
werte += 'Luftfeuchte: '+str(humi)+'‰'+'<br>'
werte += 'Datum: '+datum+' '+zeit+'<br>'
return ( seite % werte )
#debug(True)
run(app, host='192.168.0.7', port=8090, reloader=True, debug=False)
# EOF
Alles anzeigen
Ausgabe im Web (Geht erst mal, ist aber nicht das was ich eigentlich will, ich brauchte erst mal irgendein Erfolgserlebnis):
Im Grunde habe ich mir das System so vorgestellt, als dass ich in app.py die komplette Logik der Messwertabfragen abhandele, Variablen mit den Messwerten fülle und diese Variablen dann per Platzhalter über die jeweilige Route in der ensprechenden Templatedatei einsetze .
Erste Frage: Hab ich das System überhaupt richtig verstanden?
Zweite Frage: Wie übergebe ich deklarierte und gefüllte Variablen an Platzhalter?
Dazu finde ich einfach keine Doku und verzweifele dran Für den einen oder anderen Tipp wäre ich euch sehr dankbar