diff --git a/src/modules/sensors/DS2401/DS2401.cpp b/src/modules/sensors/DS2401/DS2401.cpp new file mode 100644 index 00000000..4a8e5745 --- /dev/null +++ b/src/modules/sensors/DS2401/DS2401.cpp @@ -0,0 +1,62 @@ +#include "Global.h" +#include "classes/IoTItem.h" + +#include + +bool cmpAddr(uint8_t *addr1, uint8_t *addr2, int size) { + for (int i=0; isearch(_addr) && _ds) { + if ( OneWire::crc8( _addr, 7) != _addr[7]) { + SerialPrint("E", "DS2401", "CRC is not valid!", _id); + return; + } + + if (!cmpAddr(_addr, _oldAddr, 8) || _repeatCount > _intRepeat) { + hex2string(_addr, 8, _addrStr); + value.valS = _addrStr; + value.isDecimal = false; + regEvent(value.valS, "DS2401"); + memcpy(_oldAddr, _addr, 8); + _repeatCount = 0; + } + } + + if (_repeatCount <= _intRepeat) _repeatCount++; + } + + ~DS2401() { + if (_ds) delete _ds; + }; +}; + +void* getAPI_DS2401(String subtype, String param) { + if (subtype == F("DS2401")) { + return new DS2401(param); + } else { + return nullptr; + } +} + diff --git a/src/modules/sensors/DS2401/modinfo.json b/src/modules/sensors/DS2401/modinfo.json new file mode 100644 index 00000000..1e241d4e --- /dev/null +++ b/src/modules/sensors/DS2401/modinfo.json @@ -0,0 +1,51 @@ +{ + "menuSection": "Сенсоры", + "configItem": [ + { + "global": 0, + "name": "Сканер DS2401 меток", + "type": "Reading", + "subtype": "DS2401", + "id": "rds", + "int": 100, + "intRepeat": 6, + "pin": 12 + } + ], + "about": { + "authorName": "Ilya Belyakov", + "authorContact": "https://t.me/Biveraxe", + "authorGit": "https://github.com/biveraxe", + "specialThanks": "", + "moduleName": "DS2401", + "moduleVersion": "1.0", + "usedRam": { + "esp32_4mb": 15, + "esp8266_4mb": 15 + }, + "title": "Сканер DS2401 меток", + "moduleDesc": "Ожидает появления на шине 1-wire метки DS2401", + "propInfo": { + "pin": "GPIO номер, к которому подключена шина 1-Wire с подтяжкой 4,7к", + "int": "Количество миллисекунд между опросами шины. 0 - выключено.", + "intRepeat": "Количество интервалов int пропускаем повторы, т.е. при int=100 и intRepeat=6, первые 600мс игнорируем одинаковые адреса меток." + }, + "retInfo": "Содержит 64-битный адрес метки в формате HEX строки", + "funcInfo": [] + }, + "defActive": false, + "usedLibs": { + "esp32_4mb": [ + ], + "esp8266_4mb": [ + ], + "esp8266_1mb": [ + ], + "esp8266_1mb_ota": [ + ], + "esp8285_1mb": [ + ], + "esp8285_1mb_ota": [ + ] + } +} \ No newline at end of file