0

私は今Pythonでプログラミングをしていますが、これが私の最初のプロジェクトです。どんな助けでも大歓迎です。

最近、レインフォレストから電気メーターを読み取るデバイスを入手しました。ユニットには、USB経由でアクセスできるUSBポートがあります。デバイスを Raspberry Pi に接続し、シリアル ポートから 16 進文字列を抽出することができました。現在、文字列は 0x18f0cb39 を読み取っています。この数値を取得して適切な形式に変換し、時刻と日付として出力する必要があります。私がプログラミングしているデバイスのマニュアルは、http://www.rainforestautomation.com/sites/default/files/download/rfa-z106/raven_xml_api_r127.pdfにあります。

エポックを時刻と日付に変換することになると、私はかなり混乱しています。問題のある行の前に # を付けました。

私が書いたコードは次のとおりです。

#!/usr/bin/env python
import serial
import time
serial.port = serial.Serial("/dev/ttyUSB0", 115200, timeout=0.5)
serial.port.write("<Command><Name>get_time</Name><Refresh>N</Refresh></Command>")
response=serialport.readline(none)
response=serialport.readline(none)
response=serialport.readline(none)
response=serialport.readline(none)
response=serialport.readline(none)
myString=response[13:23]
#struct_time = int(raw_input(((myString >> 40) +1970, (ts >> 32 & 0xFF) +1, ts >> 24 & 0xFF, ts>> 16)))
#thetime=time.strftime("%7-%m-%d-%H-%M-%s)
print myString

助けてくれてありがとう

スコット

4

2 に答える 2

0

ドキュメントを見ると、スライス 13:23 を使用して TimeCluster 応答から時間 (16 進数) を取得する方法が正確にはわかりませんが、質問の要点とコメントアウトされたコードはどのように行うかのようです0x18f0cb39 をローカルの日付と時刻に変換しますか?

>>> import time
>>> help(time)
(output snipped, but this is so handy....)
>>> t = 0x18f0cb39
>>> time.ctime(t)
'Tue Apr  5 15:37:29 1983'
>>> time.localtime(t)
time.struct_time(tm_year=1983, tm_mon=4, tm_mday=5, tm_hour=15, tm_min=37, tm_sec=29, tm_wday=1, tm_yday=95, tm_isdst=0)

あなたは6日前に質問を投稿し、今日は11日なので、その回答の日付はちょうど30年ずれているようです.他の誰かがあなたのためにより良い答えを書いてくれます。

于 2013-04-12T03:57:10.180 に答える
0

Rainforest RAVEn XML API ドキュメントによると、GetTime 要求に対する TimeCluster 応答は、データ形式について次のように述べています。

TimeCluster notifications provide the current time reported on the 
meter in both UTC and Local time. The time values are the number of 
seconds since 1-Jan-2000 UTC.

ご想像のとおり、Python 時間は 1970 年 1 月 1 日からの秒数です。したがって、次のように、2000 年 1 月 1 日の Rainforest エポックから Python エポックに変換できます。

myString=response[13:23] 
seconds_since_2000 = int(myString, 16)
# compute number of seconds between 1-Jan-1970 and 1-Jan-2000
delta = calendar.timegm(time.strptime("2000-01-01", "%Y-%m-%d"))
time.ctime(seconds_since_2000 + delta)

(注: 上記は単なる例として書かれています。本番システムでは、RAVEn によって生成された生の 16 進テキストと python 時間オブジェクトとの間で変換する専用の関数を書きたいと思うでしょう。)

于 2013-04-29T22:05:42.550 に答える