前提・実現したいこと
センサータグ(TI製)を用い温度等を測定、ラズパイをサーバーにして、測定されたデータをWeb上で閲覧する。redisを用いています。
発生している問題・エラーメッセージ
エラーは出ていません。
測定自体はされています。
Web上での表示がうまく行っていません。
上に画面を添付しましたが、文字は表示されるものの、出るはずの数値が表示されてきていません。また入力窓も表示されませんので、その先の作業(グラフ表示)に進めません。
最後のprint文に問題がありそうに思い、手直しを試みましたが、うまく行きませんでした。
該当のソースコード
Python
1 2#!/usr/bin/python3 3# coding: utf-8 4 5import redis 6 7html_body = """ 8<!DOCTYPE html> 9<html> 10<head> 11 <meta http-equiv="content-type" content="text/html;charset=utf-8"> 12 <title>SensorTag List</title> 13 <style type="text/css"> 14 body { 15 font-family: Verdana, Arial; 16 font-size: 16px; 17 background: #ffffff; 18 } 19 input { 20 font-size: 100%%; 21 text-align: center; 22 } 23 </style> 24</head> 25<body> 26<div> 27 <h1 style="text-align: center;">SensorTagリスト</h1> 28 <table style="margin: 0 auto;" border="0" cellpadding="10"> 29 <thead> 30 <tr> 31 <th style="width: 200px;">センサー</th> 32 <th>rssi</th> 33 <th>電源ボタン</th> 34 <th style="width: 100px;">チャネルID</th> 35 <th style="width: 200px;">ライトキー</th> 36 <th style="width: 100px;">設定</th> 37 </tr> 38 </thead> 39 <tbody> 40 %s 41 </tbody> 42 </table> 43</div> 44</body></html>""" 45 46r = redis.StrictRedis(host='localhost', port=6379) 47addrs = list(k.decode('utf-8') for k in r.keys()) 48ttemplate = '<form method="POST" action="result.py"><input type="hidden" name="addr" value="%s"><tr><td align="center">%s</td><td align="right">%s</td><td align="center">%s</td><td><input type="number" name="ch" value="%s"></td><td><input type="text" name="writekey" value="%s"></td><td align="center"><input type="submit" value="設定"></td></tr></form>' 49tbody = '' 50for addr in addrs: 51 d = r.hgetall(addr) 52 dd = dict([(k.decode('utf-8'), v.decode('utf-8')) for k, v in d.items()]) 53 ch = dd.get('ch', '') 54 if ch == 'None': ch = '' 55 writekey = dd.get('writekey', '') 56 if writekey == 'None': writekey = '' 57 button = dd.get('button', '') 58 if button == 'None' or button == '': button = '-' 59 tbody += ttemplate % (addr, addr, dd.get('rssi'), button, ch, writekey) 60 61print('Content-type: text/html\r\n') 62print(html_body % tbody)
以下のこちらもご覧ください。
#!/usr/bin/python3
coding: utf-8
import cgi
import redis
import cgitb
cgitb.enable()
html_body = """
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>SensorTag List</title> </head> <body> <div> <h1 style="text-align: center;">SensorTagリスト</h1> <meta http-equiv="refresh" content="0; URL='sensortaglist.py'" /> </html>"""r = redis.StrictRedis(host='localhost', port=6379)
print('Content-type: text/html\r\n')
print(html_body)
form=cgi.FieldStorage()
addr = form.getvalue('addr')
ch = form.getvalue('ch')
writekey = form.getvalue('writekey')
if addr:
r.hmset(addr, {'ch': ch, 'writekey': writekey, 'button': 'None'})
試したこと
ダメ元で、下から2行目のprint文中のバックスラッシュを、¥に変えてみましたが、結果は変わらずでした。
/etc/init.d/redis-server start にて、redis を起動させた場合においても、うまく行きませんでした。
補足情報(FW/ツールのバージョンなど)
Python初心の者です。アドバイスの程、よろしくおねがいいたします。
実はメインプログラムは別にありまして、それを実行させることで、データ取得後、web閲覧が可能になる仕組みです。cgi-bin下に置いた、ここに挙げたプログラムを使っていると判断し、開示させていただきました。メイン・プログラムもここに開示出来れば良いのですが、字数制限に引っかかってしまいます(st2ambient2.py で検索することができます)。お恥ずかしい次第ですが、メインプログラムから、当該プログラム(CGI?)への繋がり方がよく分かっておりません。アドバイスあればお願いいたします。
追記
もうひとつ、Web表示に関係したプログラムがありましたので、出しておきました。
あなたの回答
tips
プレビュー