質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

402閲覧

Web上での表示がうまく行っていません。出るはずの数値が表示されてきません。

jazzwalker

総合スコア17

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/03/04 03:05

編集2022/01/12 10:55

前提・実現したいこと

センサータグ(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表示に関係したプログラムがありましたので、出しておきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jeanbiego

2019/03/04 04:40

もう少し質問内容を絞ったほうが、回答がきやすいかもしれません。 例えば、 r = redis.StrictRedis(host='localhost', port=6379) は取得できているのでしょうか。取得できている場合、rの具体例はありますか。 とりあえず、printは問題なさそうですが。
jazzwalker

2019/03/06 23:51

接続したセンサータグの情報がRedisサーバのデータベースに書き込まれているか RedisサーバのデータベースからCGIスクリプトがセンサータグの情報を読み出せているか この2点ですが、未熟なために、手法が分かりません。アドバイスをください。お願いします。
jazzwalker

2019/03/14 00:14 編集

ふと思ったのですが、CGIスクリプトの拡張子に制約条件があるのでしょうか?
jeanbiego

2019/03/15 08:39

import redis r = redis.StrictRedis(host='localhost', port=6379) print(r) だけで回してみてはいかがでしょうか。
jazzwalker

2019/03/21 01:35 編集

ありがとうございます。 print(r) を挿入してみたのですが、Webの方には何ら変化がありませんでした。
jeanbiego

2019/03/25 00:00

webのほうの変化ではなく、その三行だけで r の中身を確認してみてはということです。 r が取得できているかの確認です。
jazzwalker

2019/03/27 02:11

print(r) によって、Webに表示が出るはずだと思っていたのです。違いますでしょうか? それが出なかったという報告です。
jeanbiego

2019/03/27 02:22

最終出力(web)での確認だと、どこでつまずいているかわかりません。まず、開発環境中で変数rの中身(欲しい型になっているのか、そもそも中身があるのか)を確認してみてください。
jazzwalker

2019/03/27 02:43

飲み込みが悪くて済みません。結果として出てくるprint(r) は、それではどこで確認すれば良いのでしょうか?
jeanbiego

2019/03/27 06:20

jupyter notebookとか、開発ツールの出力とかです。 あるいはprint使わなくてもデバッグモードが使えるならそちらでも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問