|
| 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 | + |
0 commit comments