• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Дистанционное снятие показаний с электросчетчика КАСКАД-1-МТ с дальнейшей передачей показаний в Home Assistant с помощью BLE

Slacky

Member
в прошивке 1.3 должен отображать Амперы, но в HA и на странице настройки их нет
Сделал, проверяй. Есть нюанс. Я там добавляю другие счетчики (правда код еще не активен, так как мне пока проверить не на чем). Но вроде на работу с КАСКАД-1-МТ не должно повлиять.

ha_amps.jpg
 

mega2000

Member
Сделал, проверяй. Есть нюанс. Я там добавляю другие счетчики (правда код еще не активен, так как мне пока проверить не на чем). Но вроде на работу с КАСКАД-1-МТ не должно повлиять.

Посмотреть вложение 12960
Invoking: TC32 C Linker
./out/src/app.o: In function `user_init_normal':
app.c:(.text.user_init_normal+0x32): undefined reference to `get_adc_mv'
app.c:(.text.user_init_normal+0x7c): undefined reference to `battery_mv'
./out/src/device.o: In function `set_device_type':
device.c:(.ram_code+0xcc): undefined reference to `measure_meter_mercury206'
device.c:(.ram_code+0xd0): undefined reference to `get_date_release_data_mercury206'
device.c:(.ram_code+0xd4): undefined reference to `get_serial_number_data_mercury206'
make: *** [out/electricity_meter.elf] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

ошибки посыпались при сборке.
 

mega2000

Member
Invoking: TC32 C Linker
./out/src/app.o: In function `user_init_normal':
app.c:(.text.user_init_normal+0x32): undefined reference to `get_adc_mv'
app.c:(.text.user_init_normal+0x7c): undefined reference to `battery_mv'
./out/src/device.o: In function `set_device_type':
device.c:(.ram_code+0xcc): undefined reference to `measure_meter_mercury206'
device.c:(.ram_code+0xd0): undefined reference to `get_date_release_data_mercury206'
device.c:(.ram_code+0xd4): undefined reference to `get_serial_number_data_mercury206'
make: *** [out/electricity_meter.elf] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

ошибки посыпались при сборке.
ругался на эту строку. в device.c выключил меркурий
 

Slacky

Member
ругался на эту строку. в device.c выключил меркурий
А, башка моя дырявая. project.mk не обновил. Перезалей и проверь, все должно собраться.

Есть еще нюанс. Я там добавил атрибут current в app_att.c и app_att.h. Так вот при добавлении или изменении атрибутов модуль перестает соединяться. Я не разбирался в чем дело, просто очищаешь флешь, заливаешь по-новой прошивку и все начинает нормально работать. Правда MAC поменяется, но это не критично ...
 

mega2000

Member
А, башка моя дырявая. project.mk не обновил. Перезалей и проверь, все должно собраться.

Есть еще нюанс. Я там добавил атрибут current в app_att.c и app_att.h. Так вот при добавлении или изменении атрибутов модуль перестает соединяться. Я не разбирался в чем дело, просто очищаешь флешь, заливаешь по-новой прошивку и все начинает нормально работать. Правда MAC поменяется, но это не критично ...
вот чуял что что-то не так :( перезалил прошивку и он отвалился. Снимать с горячих соплей проблематично, но видимо другого выхода нет.
и ещё в исходниках всё же надо добавить умножение на 1000 power
 

Slacky

Member
вот чуял что что-то не так :( перезалил прошивку и он отвалился. Снимать с горячих соплей проблематично, но видимо другого выхода нет.
Я не знаю, как сделать по другому. Возможно Виктор подскажет :))

Вот потому я свой вариант устройства сделал быстросъемным. По большому счету это все еще конструктор ...
и ещё в исходниках всё же надо добавить умножение на 1000 power
Добавил, правда в другое место, для универсальности. Также поправил напряжение и тарифы в том же ключе.
 

pvvx

Активный участник сообщества
Есть еще нюанс. Я там добавил атрибут current в app_att.c и app_att.h. Так вот при добавлении или изменении атрибутов модуль перестает соединяться. Я не разбирался в чем дело, просто очищаешь флешь, заливаешь по-новой прошивку и все начинает нормально работать. Правда MAC поменяется, но это не критично ...
Что за "добавлении или изменении атрибутов"? На ходу UUID не меняют, а если меняют - тогда оповещают в спец. UUID.
Внешний адаптер помнит таблицу... Но это решается его сбросом, а не модуля.
И у вас там bonded или прочие шифрования? Модуль помнит только последние 4-ре кода привязки... в секторе по адресу 0x74000 (вроде)... Я не нарывался пока на это - но стираю после OTA в MJWSD05MMC.
С этими MJWSD05MMC наловил глюков с десятку. Есть особо хитрые - неделю копался, но 2 из основных глюков оказались в USB адаптере, всё в том-же RTL c BT5.1...
Теперь известна последовательность, что надо сделать чтобы у него мозги ехали. И в одном из самых диких и сложных глюков у него - выход только один - менять MAC устройства. (На других адаптерах этого не наблюдается.) Может это и есть ваша проблемс?

Гадать долго что там, у вас, без информации что "меняете"
 

Slacky

Member
Что за "добавлении или изменении атрибутов"?
Ну, например было так
C:
_attribute_data_retention_ attribute_t my_Attributes[] = {
    
    ...
        
    {16,ATT_PERMISSIONS_READ,2,2,(u8*)(&my_primaryServiceUUID),(u8*)(&my_emeterServiceUUID), 0},
    {0,ATT_PERMISSIONS_READ,2,sizeof(my_tariff1CharVal),(u8*)(&my_characterUUID),(u8*)(my_tariff1CharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.tariff_1),(u8*)(&my_tariff1CharUUID),(u8*)(&meter.tariff_1), 0}, //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(tariff1ValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&tariff1ValueInCCC), 0},     //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_tariff2CharVal),(u8*)(&my_characterUUID),(u8*)(my_tariff2CharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.tariff_2),(u8*)(&my_tariff2CharUUID),(u8*)(&meter.tariff_2), 0}, //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(tariff2ValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&tariff2ValueInCCC), 0},     //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_tariff3CharVal),(u8*)(&my_characterUUID),(u8*)(my_tariff3CharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.tariff_3),(u8*)(&my_tariff3CharUUID),(u8*)(&meter.tariff_3), 0}, //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(tariff3ValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&tariff3ValueInCCC), 0},     //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_powerCharVal),(u8*)(&my_characterUUID),(u8*)(my_powerCharVal), 0},                //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.power),(u8*)(&my_powerCharUUID),(u8*)(&meter.power), 0},         //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(powerValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&powerValueInCCC), 0},         //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_voltageCharVal),(u8*)(&my_characterUUID),(u8*)(my_voltageCharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.voltage),(u8*)(&my_voltageCharUUID),(u8*)(&meter.voltage), 0},   //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(voltageValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&voltageValueInCCC), 0
        
        ...
     };

Стало так
C:
_attribute_data_retention_ attribute_t my_Attributes[] = {
    
    ...

    {19,ATT_PERMISSIONS_READ,2,2,(u8*)(&my_primaryServiceUUID),(u8*)(&my_emeterServiceUUID), 0},
    {0,ATT_PERMISSIONS_READ,2,sizeof(my_tariff1CharVal),(u8*)(&my_characterUUID),(u8*)(my_tariff1CharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.tariff_1),(u8*)(&my_tariff1CharUUID),(u8*)(&meter.tariff_1), 0}, //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(tariff1ValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&tariff1ValueInCCC), 0},     //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_tariff2CharVal),(u8*)(&my_characterUUID),(u8*)(my_tariff2CharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.tariff_2),(u8*)(&my_tariff2CharUUID),(u8*)(&meter.tariff_2), 0}, //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(tariff2ValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&tariff2ValueInCCC), 0},     //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_tariff3CharVal),(u8*)(&my_characterUUID),(u8*)(my_tariff3CharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.tariff_3),(u8*)(&my_tariff3CharUUID),(u8*)(&meter.tariff_3), 0}, //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(tariff3ValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&tariff3ValueInCCC), 0},     //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_powerCharVal),(u8*)(&my_characterUUID),(u8*)(my_powerCharVal), 0},                //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.power),(u8*)(&my_powerCharUUID),(u8*)(&meter.power), 0},         //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(powerValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&powerValueInCCC), 0},         //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_voltageCharVal),(u8*)(&my_characterUUID),(u8*)(my_voltageCharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.voltage),(u8*)(&my_voltageCharUUID),(u8*)(&meter.voltage), 0},   //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(voltageValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&voltageValueInCCC), 0},     //value

    {0,ATT_PERMISSIONS_READ,2,sizeof(my_ampereCharVal),(u8*)(&my_characterUUID),(u8*)(my_ampereCharVal), 0},            //prop
    {0,ATT_PERMISSIONS_READ,2,sizeof(meter.amps),(u8*)(&my_ampereCharUUID),(u8*)(&meter.amps), 0},   //value
    {0,ATT_PERMISSIONS_RDWR,2,sizeof(ampereValueInCCC),(u8*)(&clientCharacterCfgUUID),(u8*)(&ampereValueInCCC), 0},     //value

...

};
 

pvvx

Активный участник сообщества
Это решается сбросом адаптера или перезагрузкой. И то необязательно.
Когда переписывается термометр на альтернативную прошивку, там все атрибуты меняются. Иногда и у некоторых есть проблемы, но обычно всё проходит гладко. Даже если был pin-code.
При отладке я это сотни раз произвожу и всё ok на всех имеющихся для теста адаптерах.
Что-то ещё надо - может ваш принцип привязки?
 

Slacky

Member
ещё в исходниках всё же надо добавить умножение на 1000 power
Я тут подумал (ну типа того :)). Я наверно делитель/множитель вынесу в отдельно настраиваемую через web-интерфейс переменную для power, volts, amps и tariffs. Можно будет опретивно подстроить под разные счетчики ...
 

mega2000

Member
Я тут подумал (ну типа того :)). Я наверно делитель/множитель вынесу в отдельно настраиваемую через web-интерфейс переменную для power, volts, amps и tariffs. Можно будет опретивно подстроить под разные счетчики ...
Не уверен что это нужно. Это не импульсные счётчики с разным весом импульса. А для видимой мощности вместо лампочки лучшие сделать "мнимую нагрузку" из Тор трансформатора
 

Slacky

Member
Не уверен что это нужно. Это не импульсные счётчики с разным весом импульса. А для видимой мощности вместо лампочки лучшие сделать "мнимую нагрузку" из Тор трансформатора
Тут дело все в том, что я параллельно пишу код для каскад-11 и меркурия-206. Не хочу заморачиваться. При наличие таких множителей ты сам подправил оперативно, чтобы HA правильно отображал данные и все.
 

Slacky

Member
В общем добавил, проверил и активировал возможность считывать с двух других счетчиков - КАСКАД-11-С1 и Энергомера СЕ-102М.

Проблема вылезла на третьем счетчике - Энергомера СЕ-102 (без буквы). Схема оптопорта не читает этот счетчик. Т.е. проверил, первая команда правильная, точно такая же, какую посылает оригинальная программа от энергомеры. Но счетчик молчит, точнее я не знаю, что что лажает - он не принимает или он отвечает, а моя схема не принимает.

Головка VR-005 работает с этим счетчиком. Правда позиционирование очень жесткое, чуть в сторону и все, не работает.

Разобрал ее. Там вот такая схема -




5-ти ногий чип, это скорей всего TL331IDBVR, на нем видна маркировка T1IG. А вот что они за светодиод и фототранзистор использовали не понятно.
 

mega2000

Member
А энергомера СЕ-301 не планируется?
Тут обнаружил что блок питания hkl-03 оказался или подделкой или китайской поделкой. Считыватель может проработать на нем и 10 мин, и 2-3 часа. Потом уходит в небытие и так-же рандомно все оживает
 

Slacky

Member
А энергомера СЕ-301 не планируется?
Не-а, но Вы сами можете это сделать :)) Судя по тому, что шлет в порт AdminTools, там точно такой же протокол, как у CE-102M. Уже сейчас, если выбрать CE-102M должно тарифы показать. А вот с напряжением, мощностью и силой тока придется немного код переписать ...
 
Сверху Снизу