From 4670eb836eb166f2556d4ea00eb8379bd9a1241a Mon Sep 17 00:00:00 2001 From: Milan Ventil Toman Date: Mon, 5 Oct 2020 17:32:37 +0200 Subject: [PATCH] CRC checks, wifi ECONABORT sorted to machine.reset() --- WiFi.mpy | Bin 1610 -> 1596 bytes WiFi.py | 1 - cc1101_davis.mpy | Bin 8147 -> 8066 bytes cc1101_davis.py | 11 +++++------ davis_decode.mpy | Bin 3139 -> 3755 bytes davis_decode.py | 24 ++++++++++++++++++++++-- main.py | 37 ++++++++++++++++++++++++++++++++++--- 7 files changed, 61 insertions(+), 12 deletions(-) diff --git a/WiFi.mpy b/WiFi.mpy index cc403981ddc1d500fa06ac41c922c731282974e8..0d6dfb8a14bb6e4d123402d3c75f62f3a7c5e80a 100644 GIT binary patch delta 111 zcmX@bvxi5=mz7Cgq0vG@fPtMaJku>xub@)HBZZ+MP?|3laX`cIY~yrjW6sO8I>n%FoiN|Pp)Iy#%MCxlzES!J40YH0|P^6cS)m= OlR0yP*JdUb4<-Pe{T?y^ delta 125 zcmdnPbBf2xmz7Cgp)p26h=H9iJku>xub@&x!y|>EAyAqxFSVpRzbIRb5y;^xEy>JH z1vB|_6O%JC^Cs%3GjsQFP7KRr#4 z-e|(u;3U-$et1*IhYi9)&Oy%cA&yQyuA4eOZrmLDF7%yJO9R7?Lyb=(qOLnXsE>@? z1U8c|KB+V2+&W45thVelWZk}$F Uz2$8gTPJtQt1)&=-XO0G0G9ttUH||9 delta 309 zcmZp&zidC@CL_njTdQOQnr$ql*fR19BqyY5YpQBnPo6AmRWHO)t;{IG5VCQDus~W- zYN2y}Zovj&_RtN&tY*w6jFB5e1UCpX14TfBW=uf7DUff*7#Wz%$iUE9Y!XnETAZ3! zqEMEYQ<`d}P+hB|5FX?i;_2rOWGjUDD>yqF8X6eJy9GOk1o;>!=mUkD9E`-6c_-wl z8&3WwTU(zHEy0(Zn3L>Wlq@=-R7pwAP?w?MaKn*JPLd7bM>ltT*dQ$A9ON7y;^^e# zy1C=y#x0@mLf;+U()jd9{nPM<8_o~wBR3~A0G-1ZpH!NbmRiJ 4): # 5 EU frequencies self.hopIndex = 0 present = self.readRegister(self.CC1101_FSCTRL0) - print("Present value: {}, WRITING {} TO CC1101_FSCTRL0 / {}".format(present, self.freqComp[self.hopIndex], self.CC1101_FSCTRL0)) + # DEBUG print("Present value: {}, WRITING {} TO CC1101_FSCTRL0 / {}".format(present, self.freqComp[self.hopIndex], self.CC1101_FSCTRL0)) self.writeRegister(self.CC1101_FSCTRL0, self.freqComp[self.hopIndex]) self.setFrequency(self.hopIndex) # Set the frequency. @@ -370,12 +370,11 @@ class CC1101(object): self.writeRegister(self.CC1101_FREQ0, self.FREQ_0[index]) self.flush() - def calcCrc(self, _buffer, length): + def calcCrc(self, _buffer): crc = 0x0000 - buffer_index = 0 - for i in range(length, 0, -1): - crc = (crc << 8) ^ self.CRC_TABLE[(crc >> 8) ^ (_buffer[buffer_index])] - buffer_index += 1 + for i in range(0, len(_buffer)): + crc = ((crc << 8) ^ self.CRC_TABLE[(crc >> 8) ^ (_buffer[i])]) % 65536 + # DEBUG print("CRC: {}".format(crc)) return crc def readRssi(self): diff --git a/davis_decode.mpy b/davis_decode.mpy index d297958fbeec74dd196ec055c7a744153cee8d95..09e8beb62987e6fedb5b0aed4ac0b14af0269696 100644 GIT binary patch delta 822 zcmZ9K%TE(Q9LHzcX}9u_c3ZH<2MaAth4ScY+p^(RN&-YvT5AXg+;rOoH)0Dr1u;;& zV2B~{VBL!cPb6OSq7r<8aPVm2!Nh|n7IA6cYRP9y*#mwPb{cY%0+?oj`+FjweV*`uLpvDI zuC;6P-x3WP+u^8FWh|F?FcWXkcAr6`p>p5xb4Np7A*^|Qp5E4V&eQ8^9qS=^wtsmZ z8|z9;YAjfDv1HF}<6#KSxa`EOW>MWojbdw2<7Ysc6&!-wW);ZR@t{M02jw-7eZmXe z_7kI$({##4ZOYY5e`M$B>!ea1yVpKD3BhbCX99vCToME%^&!cRqyUnFND3h-j3gdO z5hO*C6tk!pD`s*(z0S~8S)otONqqxrWbU$0@>B5>2~Y_T2~r6X2~i0V2~!CZ;i>RM zB2*$oqEwwCt*=I(n4gq*cHCu(h0nFn$GxA7|+)xV$(IH6}u zT`;L@rYfA(S@SlO^(W>$ys1Nmg9W{v8HHG%V>;ogUS+!BUHypJgb#P)7Kr`;tMTr$ delta 265 zcmZ22dssr>mz7Cgq0vV|jDcM)C9y2CI6fscIX@*;ub?s`rB%L_gP|c%TBx)rwXig` zxTJWZy+W8+QEFLgQE{qMW=U~~5tD!fSf2}6Tah3`sR^?fV_-4^b4SSQNi0^Z+zss7 zYIXaWvLgikTWVs7)4Rv*VO*W??WfXYbLQoWgdMQGc=(dn2Ri360_{rxuwHQ+-|K!wV%$lsu)x=n{ Jc@-BU3jh@@OfUcd diff --git a/davis_decode.py b/davis_decode.py index c3f9e34..32d0e15 100644 --- a/davis_decode.py +++ b/davis_decode.py @@ -1,5 +1,5 @@ import urequests - +import machine _DEBUG = False @@ -32,8 +32,28 @@ def send_to_influx(host, port, db, user, password, davis_unit_id, wind, measurem try: return (True, urequests.post(post, data=data)) except Exception as e: - return (False, "ERROR sending data to influx: {}".format(e)) + if e.args[0] == 103: + machine.reset() + else: + return (False, "ERROR sending data to influx: {}".format(e)) +def raw_send_to_influx(host, port, db, user, password, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, rssi, lqi): + post = "http://{}:{}/write?db={}".format(host, port, db) + if _DEBUG: + print("SENDING TO: {}".format(post)) + data = "data b0={_b0},b1={_b1},b2={_b2},b3={_b3},b4={_b4},b5={_b5},b6={_b6},b7={_b7},b8={_b8},b9={_b9},rssi={_rssi},lqi={_lqi}".format( + _b0=b0, _b1=b1, _b2=b2, _b3=b3, + _b4=b4, _b5=b5, _b6=b6, _b7=b7, + _b8=b8, _b9=b9, _rssi=rssi, _lqi=lqi) + if _DEBUG: + print("POST_DATA: {}".format(data)) + try: + return (True, urequests.post(post, data=data)) + except Exception as e: + if e.args[0] == 103: + machine.reset() + else: + return (False, "ERROR sending RAW data to influx: {}".format(e)) def reverseBits(data): data = "{:08b}".format(data) diff --git a/main.py b/main.py index 328f5c0..5ca84f6 100644 --- a/main.py +++ b/main.py @@ -2,12 +2,13 @@ import cc1101_davis import davis_decode import utime import WiFi +import machine gc.collect() #_SSID = 'BastArt' #_PASS = '3 litry Kvasaru!' #_TIMEOUT = 15 -_DEBUG = False +_DEBUG = True # #_INFLUX_HOST = '192.168.1.2' #_INFLUX_PORT = '8086' @@ -48,8 +49,9 @@ while True: lqi = davis.readLQI() freqEst = davis.readStatus(davis.CC1101_FREQEST) freqError = davis.calcFreqError(freqEst) - print("FERROR: {} (EST: {})".format(freqError, freqEst)) - print("FCOMP: {}".format(davis.freqComp)) + if _DEBUG: + print("FERROR: {} (EST: {})".format(freqError, freqEst)) + print("FCOMP: {}".format(davis.freqComp)) if davis.freqComp[davis.hopIndex] + freqEst <= 255: davis.freqComp[davis.hopIndex] = davis.freqComp[davis.hopIndex] + freqEst else: @@ -59,6 +61,12 @@ while True: davis.hop() davis.rx() data_int = [davis_decode.reverseBits(int(item)) for item in data] + crc = davis.calcCrc(data_int[:8]) + if crc != 0x0000: + print("Corrupt data CRC: {}".format(crc)) + continue + else: + print("Data OK, CRC: {}".format(crc)) header = decoder.davis_id(data_int[0]) decoder.DecodePacket(data_int) data_prn = "{:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5}".format( @@ -87,6 +95,7 @@ while True: decoder.tags)) sent_ok = False data_sent = None + gc.collect() try: (sent_ok, data_sent) = davis_decode.send_to_influx( wifi_con._INFLUX_HOST, @@ -102,6 +111,28 @@ while True: decoder.tags) except Exception as e: print("ERROR: Data send 'urequest': {}".format(e)) + try: + (raw_sent_ok, raw_data_sent) = davis_decode.raw_send_to_influx( + wifi_con._INFLUX_HOST, + wifi_con._INFLUX_PORT, + decoder.raw_influx_db, + wifi_con._INFLUX_USER, + wifi_con._INFLUX_PASS, + data_int[0], + data_int[1], + data_int[2], + data_int[3], + data_int[4], + data_int[5], + data_int[6], + data_int[7], + data_int[8], + data_int[9], + rssi, + lqi) + except Exception as e: + print("ERROR: Data send 'urequest': {}".format(e)) + if _DEBUG: if sent_ok: print("DATA SEND: {}".format(data_sent.status_code))