Skip to content

Commit 4ee5a56

Browse files
author
=
committed
Add my own wind_sensor in ecomet part
1 parent f2c558a commit 4ee5a56

File tree

7 files changed

+532
-0
lines changed

7 files changed

+532
-0
lines changed
File renamed without changes.
File renamed without changes.
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
'''
2+
Updated Code: 2024-07-11
3+
Copyright (c) 2024 eComet Co.Ltd (https://twitter.com/mminar7)
4+
5+
@license GPL-3.0
6+
'''
7+
from __future__ import division
8+
from time import sleep, time
9+
import logging
10+
from ecomet_i2c_sensors.i2c import load_comet_yaml
11+
from ecomet_i2c_sensors.ecomet.winds01 import winds01_constant
12+
13+
reg_list = { 'REG_SERIAL_NUMBER' : winds01_constant.REG_SERIAL_NUMBER,
14+
'REG_CONF' : winds01_constant.REG_CONF, 'REG_INIT' : winds01_constant.REG_INIT, 'REG_ValidCnt' : winds01_constant.REG_ValidCnt,
15+
'REG_AVG00' : winds01_constant.REG_AVG00, 'REG_AVG30' : winds01_constant.REG_AVG30,
16+
'REG_AVG60' : winds01_constant.REG_AVG60, 'REG_AVG360' : winds01_constant.REG_AVG360,
17+
'REG_GUST00' : winds01_constant.REG_GUST00, 'REG_GUST30' : winds01_constant.REG_GUST30,
18+
'REG_GUST60' : winds01_constant.REG_GUST60, 'REG_GUST360' : winds01_constant.REG_GUST360,
19+
'REG_BULK': winds01_constant.REG_BULK, 'REG_EEPROM_AVG' : winds01_constant.REG_EEPROM_AVG, 'REG_EEPROM_GUST' : winds01_constant.REG_EEPROM_GUST
20+
21+
}
22+
23+
class WINDS01:
24+
25+
def __init__(self,address=winds01_constant.WINDS_ADDR, busnum=None, i2c=None, **kwargs):
26+
if i2c is None:
27+
import ecomet_i2c_sensors.i2c as I2C
28+
i2c = I2C
29+
self._logger = logging.getLogger(__name__)
30+
self._device = i2c.get_i2c_device(address, busnum=busnum, i2c_interface=None, **kwargs)
31+
smb = load_comet_yaml()
32+
if smb != -99 :
33+
busnum = smb['i2c']['smb'].replace('i2c-', '')
34+
print (f"busnum: {busnum}")
35+
else :
36+
busnum = 0
37+
38+
@property
39+
def read_value(self) :
40+
ret = 0
41+
try :
42+
reg_status = self._device.readRaw16()
43+
decimal_number = (reg_status[0] << 8) | reg_status[1]
44+
self._logger.debug('Dec_Num: %s',decimal_number)
45+
out = decimal_number/mcp3221_constant.MAX_VDD
46+
self._logger.debug('Number: %s',out)
47+
except :
48+
ret = ret + 1
49+
return(out,ret)
50+
51+
# @property
52+
def read_register(self, register = None):
53+
if register == 'REG_SERIAL_NUMBER' or register == 'REG_CONF' or register == 'REG_INIT' or register == 'REG_ValidCnt' \
54+
or register == 'REG_AVG00' or register == 'REG_AVG30' or register == 'REG_AVG60' or register == 'REG_AVG360' \
55+
or register == 'REG_GUST00' or register == 'REG_GUST30' or register == 'REG_GUST60' or register == 'REG_GUST360' \
56+
or register == 'REG_BULK' or register == 'REG_EEPROM_AVG' or register == 'REG_EEPROM_GUST':
57+
ret = 0
58+
if register == 'REG_CONF' or register == 'REG_INIT' or register == 'REG_ValidCnt':
59+
try:
60+
reg_status_bita = self._device.readList(reg_list[register],1)
61+
reg_status = int.from_bytes(reg_status_bita,byteorder='big')
62+
except:
63+
ret = ret + 1
64+
elif register == 'REG_AVG00' or register == 'REG_GUST00' or register == 'REG_GUST30' or register == 'REG_GUST60' or register == 'REG_GUST360':
65+
try:
66+
reg_status_bita = self._device.readList(reg_list[register],2)
67+
reg_status = int.from_bytes(reg_status_bita,byteorder='big')
68+
except:
69+
ret = ret + 1
70+
elif register == 'REG_AVG30' or register == 'REG_AVG60' or register == 'REG_AVG360' :
71+
try:
72+
reg_status_bita = self._device.readList(reg_list[register],3)
73+
reg_status = int.from_bytes(reg_status_bita,byteorder='big')
74+
except:
75+
ret = ret + 1
76+
elif register == 'REG_SERIAL_NUMBER':
77+
try:
78+
reg_status_bita = self._device.readList(reg_list[register],4)
79+
reg_status = int.from_bytes(reg_status_bita,byteorder='big')
80+
except:
81+
ret = ret + 1
82+
elif register == 'REG_EEPROM_AVG' or register == 'REG_EEPROM_GUST':
83+
try:
84+
reg_status_bita = self._device.readList(reg_list[register],128)
85+
reg_status = int.from_bytes(reg_status_bita,byteorder='big')
86+
except:
87+
ret = ret + 1
88+
elif register == 'REG_BULK':
89+
try:
90+
reg_status_bita = self._device.readList(reg_list[register],20)
91+
reg_status = int.from_bytes(reg_status_bita,byteorder='big')
92+
except:
93+
ret = ret + 1
94+
if ret > 1 :
95+
self._logger.debug('read_register %s failed (%s)',register,ret)
96+
return (0x0000,ret)
97+
elif ret == 0 and (register == 'REG_ValidCnt'):
98+
self._logger.debug('read_register %s, data: 0x%s[0b%s]', register,'{0:02X}'.format(reg_status), '{0:8b}'.format(reg_status))
99+
return (reg_status,0)
100+
elif ret == 0 and (register == 'REG_CONF' or register == 'REG_INIT'):
101+
self._logger.debug('read_register %s, data: 0x%s[0b%s]', register,'{0:02X}'.format(reg_status), '{0:8b}'.format(reg_status))
102+
return (reg_status,0)
103+
elif ret == 0 and (register == 'REG_AVG00' or register == 'REG_GUST00' or register == 'REG_GUST30' or register == 'REG_GUST60' or register == 'REG_GUST360'):
104+
self._logger.debug('read_register %s, data: 0x%s[0b%s]', register,'{0:04X}'.format(reg_status), '{0:16b}'.format(reg_status))
105+
return (reg_status,0)
106+
elif ret == 0 and (register == 'REG_AVG30' or register == 'REG_AVG60' or register == 'REG_AVG360'):
107+
self._logger.debug('read_register %s, data: 0x%s[0b%s]', register,'{0:06X}'.format(reg_status), '{0:24b}'.format(reg_status))
108+
return (reg_status,0)
109+
elif ret == 0 and (register == 'REG_EEPROM_AVG' or register == 'REG_EEPROM_GUST' or register == 'REG_BULK'):
110+
self._logger.debug('read_register %s, data: 0x%s', register, ''.join(f'{b:02X}' for b in reg_status)
111+
if isinstance(reg_status, (bytes, bytearray, list, tuple))
112+
else f'{reg_status:X}'.zfill(8) # ← 8 = 32-bit, change to 4 if 16-bit
113+
)
114+
return (reg_status,0)
115+
else :
116+
self._logger.debug('read_register %s, data: 0x%s', register,'{0:04X}'.format(reg_status))
117+
return (reg_status,0)
118+
119+
def write_register(self, register = None, value = []):
120+
if register == 'REG_CONF' or register == 'REG_INIT':
121+
ret = 0
122+
if register == 'REG_CONF' or register == 'REG_INIT':
123+
try:
124+
self._device.writeList(register = reg_list[register], data = value)
125+
except:
126+
ret = ret + 1
127+
if ret > 1 :
128+
self._logger.debug('write_register %s failed (%s)',register,ret)
129+
return (ret)
130+
else :
131+
self._logger.debug('write_register %s, data [%s]', register, format(':'.join(hex(x) for x in value)))
132+
return (ret)
133+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
WINDS_ADDR = 0x30
2+
# Register
3+
4+
REG_SERIAL_NUMBER = 0x00 # 4 bytes read register
5+
REG_CONF = 0x01 # 1 byte read/write register
6+
REG_INIT = 0x02 # 1 byte read/write register
7+
8+
REG_AVG00 = 0x03 # 2 bytes read register
9+
REG_AVG30 = 0x04 # 3 bytes read register
10+
REG_AVG60 = 0x05 # 3 bytes read register
11+
REG_AVG360 = 0x06 # 3 bytes read register
12+
13+
REG_GUST00 = 0x07 # 2 bytes read register
14+
REG_GUST30 = 0x08 # 2 bytes read register
15+
REG_GUST60 = 0x09 # 2 bytes read register
16+
REG_GUST360 = 0x0A # 2 bytes read register
17+
REG_ValidCnt = 0x0B # 1 byte read regiter
18+
REG_BULK = 0x0C # 19 bytes read register
19+
REG_EEPROM_AVG = 0x0D # 128 bytes read register
20+
REG_EEPROM_GUST = 0x0E # 128 bytes read register
21+
22+
VDD = 5 # Voltage = 5V
23+
MAX_DEGREE = 360 # 360 Degree max position
24+
WEST = 75
25+
SOUTH = 176
26+
EAST = 280
27+
NORTH = 360
28+
NORTH_WEST = 36
29+
SOUTH_WEST = 125
30+
SOUTH_EAST = 225
31+
NORTH_EAST = 330
32+
33+
MAX_VDD = 4095
34+
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
#!/usr/bin/env python3
2+
3+
import sys,os
4+
5+
sys.path.append(os.getenv("HOME") + '/ecomet_i2c_raspberry_tools/ecomet_i2c_sensors')
6+
from ecomet_i2c_sensors.ecomet.winds01 import winds01, winds01_constant
7+
import time
8+
#from hdc1080 import hdc1080
9+
10+
import logging
11+
from datetime import datetime
12+
13+
logging.basicConfig(level=logging.INFO, # change level looging to (INFO, DEBUG, ERROR)
14+
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
15+
datefmt='%m-%d %H:%M',
16+
filename='ecomet01.log',
17+
filemode='a')
18+
console = logging.StreamHandler()
19+
console.setLevel(logging.DEBUG)
20+
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
21+
console.setFormatter(formatter)
22+
logging.getLogger('').addHandler(console)
23+
24+
sens = winds01.WINDS01()
25+
sens._logger = logging.getLogger('ecomet.ecomet01')
26+
sens._logger.info('Start logging ...')
27+
28+
value = 0x10
29+
stime = 1
30+
set = 0
31+
start = None
32+
diff = None
33+
while (1):
34+
#data = sens.read_register ( register = 'REG_SERIAL_NUMBER' )
35+
#time.sleep(stime)
36+
#data = sens.write_register ( register = 'REG_CONF', value = [0b00000010])
37+
#time.sleep(stime)
38+
#data = sens.write_register ( register = 'REG_INIT', value = [0b10000000] )
39+
#time.sleep(stime)
40+
#while True:
41+
# data = sens.read_register ( register = 'REG_INIT' )
42+
#print(f"{data[0] & 0b1000000}")
43+
# if (data[0] & 0b10000000) == 0:
44+
# print("Bit has changed to 0. Operation complete.")
45+
# break # Exit the loop
46+
# time.sleep(0.1)
47+
48+
#data = sens.read_register ( register = 'REG_CONF' )
49+
#time.sleep(stime)
50+
#data = sens.read_register ( register = 'REG_INIT' )
51+
#time.sleep(stime)
52+
data_cnt = sens.read_register ( register = 'REG_ValidCnt' )
53+
time.sleep(stime)
54+
if int(data_cnt[0]) == 0 and set == 0:
55+
start = datetime.now()
56+
print(f"Start Counting ...")
57+
set = 1
58+
if int(data_cnt[0]) != 0 and set == 1:
59+
set = 2
60+
elif int(data_cnt[0]) == 0 and set == 2:
61+
if start != None:
62+
end = datetime.now()
63+
diff = end - start
64+
start = end
65+
set = 3
66+
data_avg = sens.read_register ( register = 'REG_AVG00' )
67+
time.sleep(stime)
68+
#data = sens.read_register ( register = 'REG_EEPROM_AVG' )
69+
data_gust = sens.read_register ( register = 'REG_GUST00' )
70+
time.sleep(stime)
71+
#data = sens.read_register ( register = 'REG_EEPROM_GUST' )
72+
gust_imp = ((data_gust[0] & 0xFF) << 8) | (data_gust[0] >> 8)
73+
gust = float(gust_imp * 0.10194)
74+
avg_imp = ((data_avg[0] & 0xFF) << 8) | (data_avg[0] >> 8)
75+
avg = float(avg_imp * 0.003403)
76+
print (f"Count: {data_cnt[0]} AVG: {round(avg,2)} m.s, GUST: {round(gust,2)} m.s SET: {set}")
77+
if set >= 3:
78+
if set == 3:
79+
print(f"Time diff: {diff}")
80+
set = 4
81+
if int(data_cnt[0]) > 0:
82+
set = 2
83+
#print (f"AVG: {data_avg[0]} m.s, GUST: {data_gust[0]} m.s")
84+
#time.sleep(stime)
85+
#time.sleep(stime)
86+
#data = sens.read_register ( register = 'REG_AVG30' )
87+
#time.sleep(stime)
88+
#data = sens.read_register ( register = 'REG_AVG60' )
89+
#time.sleep(stime)
90+
#data = sens.read_register ( register = 'REG_AVG360' )
91+
#time.sleep(stime)
92+
#data = sens.read_register ( register = 'REG_GUST00' )
93+
#time.sleep(stime)
94+
#data = sens.read_register ( register = 'REG_GUST30' )
95+
#time.sleep(stime)
96+
#data = sens.read_register ( register = 'REG_GUST60' )
97+
#time.sleep(stime)
98+
#data = sens.read_register ( register = 'REG_GUST360' )
99+
#time.sleep(stime)
100+
#data = sens.read_register ( register = 'REG_ValidCnt' )
101+
#time.sleep(stime)
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
#!/usr/bin/env python3
2+
3+
import sys,os
4+
5+
sys.path.append(os.getenv("HOME") + '/ecomet_i2c_raspberry_tools/ecomet_i2c_sensors')
6+
from ecomet_i2c_sensors.ecomet.winds01 import winds01, winds01_constant
7+
import time
8+
#from hdc1080 import hdc1080
9+
10+
import logging
11+
from datetime import datetime
12+
13+
logging.basicConfig(level=logging.INFO, # change level looging to (INFO, DEBUG, ERROR)
14+
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
15+
datefmt='%m-%d %H:%M',
16+
filename='ecomet01.log',
17+
filemode='a')
18+
console = logging.StreamHandler()
19+
console.setLevel(logging.DEBUG)
20+
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
21+
console.setFormatter(formatter)
22+
logging.getLogger('').addHandler(console)
23+
24+
sens = winds01.WINDS01()
25+
sens._logger = logging.getLogger('ecomet.ecomet01')
26+
sens._logger.info('Start logging ...')
27+
28+
value = 0x10
29+
stime = 2
30+
set = 0
31+
start = None
32+
diff = None
33+
prev = 0
34+
while (1):
35+
#data = sens.read_register ( register = 'REG_SERIAL_NUMBER' )
36+
#time.sleep(stime)
37+
#data = sens.write_register ( register = 'REG_CONF', value = [0b00000010])
38+
#time.sleep(stime)
39+
#data = sens.write_register ( register = 'REG_INIT', value = [0b10000000] )
40+
#time.sleep(stime)
41+
#while True:
42+
# data = sens.read_register ( register = 'REG_INIT' )
43+
#print(f"{data[0] & 0b1000000}")
44+
# if (data[0] & 0b10000000) == 0:
45+
# print("Bit has changed to 0. Operation complete.")
46+
# break # Exit the loop
47+
# time.sleep(0.1)
48+
49+
#data = sens.read_register ( register = 'REG_CONF' )
50+
#time.sleep(stime)
51+
#data = sens.read_register ( register = 'REG_INIT' )
52+
#time.sleep(stime)
53+
data_cnt = sens.read_register ( register = 'REG_ValidCnt' )
54+
time.sleep(stime)
55+
if int(data_cnt[0]) == 0 and set == 0:
56+
start = datetime.now()
57+
prev = int(data_cnt[0])
58+
print(f"Start Counting ...")
59+
set = 1
60+
if int(data_cnt[0]) != 0 and set == 1:
61+
set = 2
62+
elif int(data_cnt[0]) == (prev + 1) and set == 2:
63+
if start != None:
64+
end = datetime.now()
65+
diff = end - start
66+
start = end
67+
prev = int(data_cnt[0])
68+
set = 3
69+
data_avg = sens.read_register ( register = 'REG_AVG00' )
70+
time.sleep(stime)
71+
#data = sens.read_register ( register = 'REG_EEPROM_AVG' )
72+
data_gust = sens.read_register ( register = 'REG_GUST00' )
73+
time.sleep(stime)
74+
#data = sens.read_register ( register = 'REG_EEPROM_GUST' )
75+
gust_imp = ((data_gust[0] & 0xFF) << 8) | (data_gust[0] >> 8)
76+
gust = float(gust_imp * 0.10194)
77+
avg_imp = ((data_avg[0] & 0xFF) << 8) | (data_avg[0] >> 8)
78+
avg = float(avg_imp * 0.003403)
79+
print (f"Count: {data_cnt[0]} AVG: {round(avg,2)} m.s, GUST: {round(gust,2)} m.s SET: {set}")
80+
if set >= 3:
81+
if set == 3:
82+
print(f"Time diff: {diff}")
83+
set = 4
84+
if int(data_cnt[0]) > 0:
85+
set = 2
86+
#print (f"AVG: {data_avg[0]} m.s, GUST: {data_gust[0]} m.s")
87+
#time.sleep(stime)
88+
#time.sleep(stime)
89+
#data = sens.read_register ( register = 'REG_AVG30' )
90+
#time.sleep(stime)
91+
#data = sens.read_register ( register = 'REG_AVG60' )
92+
#time.sleep(stime)
93+
#data = sens.read_register ( register = 'REG_AVG360' )
94+
#time.sleep(stime)
95+
#data = sens.read_register ( register = 'REG_GUST00' )
96+
#time.sleep(stime)
97+
#data = sens.read_register ( register = 'REG_GUST30' )
98+
#time.sleep(stime)
99+
#data = sens.read_register ( register = 'REG_GUST60' )
100+
#time.sleep(stime)
101+
#data = sens.read_register ( register = 'REG_GUST360' )
102+
#time.sleep(stime)
103+
#data = sens.read_register ( register = 'REG_ValidCnt' )
104+
#time.sleep(stime)
105+
106+
107+
108+
109+
110+
111+
112+
113+
114+
#data = sens.read_register ( register = 'REG01' )
115+
#time.sleep(5)
116+
#data = sens.write_register (register = 'REG02', value = [value])
117+
#time.sleep(5)
118+
#data = sens.write_register (register = 'REG03', value = [0x54,value])
119+
#time.sleep(5)
120+
#data = sens.write_register (register = 'REG04', value = [0x55,0x01,0x02,value])
121+
#value = value + 1
122+
#time.sleep(5)
123+
#if (value > 0xFF):
124+
# value = 0x00
125+
#data = sens.read_register ( register = 'REG_UNI' )
126+
#time.sleep(5)
127+
#data = sens.read_register ( register = 'REG03' )
128+
#time.sleep(5)

0 commit comments

Comments
 (0)