2016-04-18 13 views
3

私は、RFIDリーダからのメッセージを追跡するための「最初に見た」および「最後に見た」方法を実装したいと考えています。Pythonでリアルタイムトラッキングメカニズムを実装する方法は?

次のコードは、各ユニークなメッセージを追跡し、5分ごとに更新します。

import paho.mqtt.client as mqtt 
import json 
import datetime as dt 

time_interval = dt.timedelta(minutes=5) 

dic1 = {} 
update = [] 

def on_message(client, userdata, msg): 
    payloadjson = json.loads(msg.payload.decode('utf-8')) 
    line = payloadjson["value"].split(',') 
    epc = line[1] 
    rfid_input = "EPC_NO.: " + epc[11:35] 
    when = dt.datetime.strptime(datetime, '%Y-%m-%d %H:%M:%S') 


    if rfid_input not in dic1 or (when - dic1[rfid_input] > time_interval): 
     dic1[rfid_input] = when 
     update.append(dic1) 
     for key, value in update[-1].items(): 
      print (key, value) 
     print() 

は、どのように私は「初見」日付&時間を追跡し、それをプリントアウトすることができますか?

ような何か:私はあなたが必要なすべての情報収集するためにクラスを使用します

# At the very beginning 
EPC_NO.:FIRST SEEN AT 2016-04-18 08:59:33 LAST SEEN AT 2016-04-18 08:59:33 
EPC_NO.: 056789 FIRST SEEN AT 2016-04-18 09:00:23 LAST SEEN AT 2016-04-18 09:00:23 

# 5 mins later 
EPC_NO.:FIRST SEEN AT 2016-04-18 08:59:33 LAST SEEN AT 2016-04-18 09:04:33 
EPC_NO.: 056789 FIRST SEEN AT 2016-04-18 09:00:23 LAST SEEN AT 2016-04-18 09:05:23 

# 10 mins later **(EPC_NO.: 056789 is not read) 
EPC_NO.:FIRST SEEN AT 2016-04-18 08:59:33 LAST SEEN AT 2016-04-18 09:09:33 
EPC_NO.: 056789 FIRST SEEN AT 2016-04-18 09:00:23 LAST SEEN AT 2016-04-18 09:05:23 

答えて

1

import paho.mqtt.client as mqtt 
import json 
import datetime as dt 

time_interval = dt.timedelta(minutes=5) 

dic1 = {} 


class EPC(): 
    def __init__(self,when): 
     self.first_seen = when 
     self.last_print = when 
     self.last_seen = when 

def on_message(client, userdata, msg): 
    payloadjson = json.loads(msg.payload.decode('utf-8')) 
    line = payloadjson["value"].split(',') 
    epc = line[1] 
    rfid_input = "EPC_NO.: " + epc[11:35] 
    when = dt.datetime.today() 

    if rfid_input not in dic1: 
     dic1[rfid_input] = EPC(when) 
     print_all = True 

    else: 
     dic1[rfid_input].last_seen = when 
     print_all = when-dic1[rfid_input].last_print > time_interval 

    if print_all: 
     for (key, value) in dic1.items(): 
      first_str = "%04d-%02d-%02d %02d:%02d:%02d"%(value.first_seen.year,value.first_seen.month,value.first_seen.day,value.first_seen.hour,value.first_seen.minute,value.first_seen.second) 
      last_str = "%04d-%02d-%02d %02d:%02d:%02d"%(value.last_seen.year,value.last_seen.month,value.last_seen.day,value.last_seen.hour,value.last_seen.minute,value.last_seen.second) 

      print "EPC_NO.: %06d FIRST SEEN AT %s LAST SEEN AT %s"%(key, first_str,last_str) 
      value.last_print = when 

を私は問題がある場合を教えので、それをテストすることはできませんよ。

+0

お時間をありがとうございます@Vince! print_all = when - testlist [rfid_input] .last_print> time_interval // TypeError: - : 'str'と 'str'のサポートされていないオペランドの型です。データ型を扱う良い方法はありますか? –

+0

'when'を' datetime.datetime'オブジェクトとして維持する方が良いと思います。柔軟性を提供するtho。 –

+0

はい、あなたはそれについて完全に正しいです。それは今より良いはずです。 – Vince

関連する問題