私は問題があります。
センサー ネットワークにコマンドを送信するページがあります。
コードのこの部分をクリックすると
<a href='javascript:void(send_command_to_network("{{net.id}}", "restartnwk"));'>Restart Network <i class="icon-repeat"></i> </a>
私はjs関数を呼び出します。これは次のとおりです。
function send_command_to_network(net, command) {
$.ajax({url: "/networks/" + net + "/send?command=" + command,
type: "GET",
async: true,
dataType: "json",
success: function(json_response) {
var err = json_response['error'];
if (err) {
show_alert('error', err);
return;
}
var success = json_response['success'];
if (success) {
show_alert('success', success);
return;
}
show_alert('alert', "This should not happen!");
}
});
}
この関数は、Python で記述された Tornado Web サーバーのハンドラーを呼び出す URL を作成します。ハンドラーは次のとおりです。
class NetworkSendHandler(BaseHandler):
# Requires authentication
@tornado.web.authenticated
def get(self, nid):
# Get the command
command = self.get_argument('command').upper();
# The dictionary to return
ret = {}
#Check if the command is available
if command not in ['RESTARTNWK']:
raise tornado.web.HTTPError(404, "Unknown command: " + str(command))
#Command ZDP-RestartNwk.Request
if command == 'RESTARTNWK':
op_group = "A3"
op_code = "E0"
packet_meta = "*%s;%s;%s;#"
pkt_len = hextransform(16, 2)
packet = packet_meta % (op_group, op_code, pkt_len)
packet = packet.upper()
op_group_hex=0xA3
op_code_hex=0xE0
cmdjson = packet2json(op_group_hex,op_code_hex, packet)
self.finish()
Tornado デバッグ コンソールに次のエラーが表示されます。
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/tornado/web.py", line 988, in _execute
getattr(self, self.request.method.lower())(*args, **kwargs)
File "/usr/lib/python2.6/site-packages/tornado/web.py", line 1739, in wrapper
return method(self, *args, **kwargs)
File "./wsn.py", line 859, in get
cmdjson = packet2json(op_group_hex,op_code_hex, packet)
File "./wsn.py", line 188, in packet2json
fcs = fcs ^ int('0x' + payload[(i - 1):(i + 1)], 16)
ValueError: invalid literal for int() with base 16: '0x*A'
エラーは、packet2json の呼び出しの後であると思います。そして、エラーは「0x * A」が有効なintではないことを示しているため、関数内の変換にあると思います。「*」がエラーだと思います...どうすれば解決できますか?
編集
すみません、関数を忘れました:
# Transform an integer into a string with HEX symbols in the format that is
# understandable by Quantaservd
def hextransform(data, length):
data = hex(data).lstrip('0x').rstrip('L')
assert(len(data) <= length)
# zero-padding
data = ('0' * (length - len(data))) + data
print data
# Swap 'bytes' in the network ID
data = list(data)
for i in range(0, length, 2):
tmp = data[i]
data[i] = data[i + 1]
data[i + 1] = tmp
# Reverse the whole string (TODO: CHECK)
data.reverse()
data = "".join(data)
return data
def packet2json(op_group, op_code, payload):
#op_group =
#op_code =
#payload="" # stringa ascii 2 char per byte, senza checksum
lun = len(payload) / 2
fcs = op_group ^ op_code ^ lun #fcs = XOR of op_groip, op_code, lenght and payload
for i in range(len(payload)):
if ((i % 2) == 1):
fcs = fcs ^ int('0x' + payload[(i - 1):(i + 1)], 16)
print int('0x' + payload[(i - 1):(i + 1)], 16)
s=cmd_payload(op_group,op_code, lun, payload, fcs)
#p = r '{"data": "' + s + r '"}'
p=r'{"data": "'+s+r'"}'
return p