Страница 1 из 1

getProperty возвращает пустую строку

Добавлено: Чт окт 28, 2021 8:38 pm
amelnyk
Как то снедавна появилась проблема в коде, который не менялся давно и работал ранее. После долгого копания нашел, что метод getProperty/getGlobal возвращает пустую строку, хотя в свойстве находятся корректные данные, и их можно увидеть просматривая свойства обьекта... более того, если через интерфейс просто пересохранить значение свойства, то всё начинает работать, оно считывается нормально...
короче магия, вообще закончились идеи, как с этим быть.

Дано:
такая строка:

Код: Выделить всё

$deviceJSON = '{ "id":"curtains_bedroom","type":"action.devices.types.CURTAIN","traits": ["action.devices.traits.OpenClose"],"name" : "name","nickname" : "niick","willReportState": "true","roomHint":"Bedroom","test":"aaabbbcccdddeeefffggghhhjjjkkklllmmmnnnoooppprrrssst"}';
упрощенный код выглядит так:

Код: Выделить всё

DebMes($deviceJSON);
setGlobal('object1.json',$deviceJSON);
DebMes(gg('object1.json'));
и в логах видно, что первый DebMes выводит всё отлично, второй - пусто. хотя свойство у обьекта обновилось корректно. но getProperty и getGlobal возвращают пустоту и получении этого свойства.
Если потом я кликаю на значение свойства и пересохраняю его ниче не меняя при этом, вуаля, всё работает.
Буду признателен за помощ

Re: getProperty возвращает пустую строку

Добавлено: Пн ноя 01, 2021 11:17 am
nightwind
Проблема не воспроизводится на последней альфе

Код: Выделить всё

$deviceJSON = '{ "id":"curtains_bedroom","type":"action.devices.types.CURTAIN","traits": ["action.devices.traits.OpenClose"],"name" : "name","nickname" : "niick","willReportState": "true","roomHint":"Bedroom","test":"aaabbbcccdddeeefffggghhhjjjkkklllmmmnnnoooppprrrssst"}';
DebMes($deviceJSON);
setGlobal('ThisComputer.json',$deviceJSON);
DebMes(gg('ThisComputer.json'));

10:14:42 0.43978000 { "id":"curtains_bedroom","type":"action.devices.types.CURTAIN","traits": ["action.devices.traits.OpenClose"],"name" : "name","nickname" : "niick","willReportState": "true","roomHint":"Bedroom","test":"aaabbbcccdddeeefffggghhhjjjkkklllmmmnnnoooppprrrssst"}
10:14:42 0.34690100 { "id":"curtains_bedroom","type":"action.devices.types.CURTAIN","traits": ["action.devices.traits.OpenClose"],"name" : "name","nickname" : "niick","willReportState": "true","roomHint":"Bedroom","test":"aaabbbcccdddeeefffggghhhjjjkkklllmmmnnnoooppprrrssst"}
Возможно у тебя там гдето пробелы или невидимые символы в именах

Re: getProperty возвращает пустую строку

Добавлено: Пн ноя 01, 2021 2:22 pm
amelnyk
это первое, что я проверил, и кроме пробелов там ничего нету

Re: getProperty возвращает пустую строку

Добавлено: Ср ноя 03, 2021 2:02 pm
amelnyk
жесть магия... вот код, прям как есть у меня, без изменений, это метод обьекта googleHome:

Код: Выделить всё

DebMes('from curtains');   
DebMes(gg('curtains_bedroom.googleDeviceSync'));

$this->setProperty('syncDevices', gg('curtains_bedroom.googleDeviceSync'));

DebMes('from googleHome');
DebMes(gg('googleHome.syncDevices'));
в итоге на скриншоте то, что в логах.
и второй скрин - то, что реально в свойстве есть данные...

Re: getProperty возвращает пустую строку

Добавлено: Ср ноя 03, 2021 2:39 pm
amelnyk
Пробовал urlencode/decode добавлять, на случай если что-то с символами не то, не помогло.
Но вот еще заметил, что иногда даже первый вызов
DebMes(gg('curtains_bedroom.googleDeviceSync'));
отдает старое значение свойства, тоесть я его уже поменял, а выводит оно по прежнему старое.
Такое впечатление что транзакция по базе не закомитилась при апдейте свойства, и в базе попросту старые значения лежат. Хотя если смотрет в свойставх обьекта в админке, то значение правильное, а getGlobal отдает старое...

Re: getProperty возвращает пустую строку

Добавлено: Ср ноя 03, 2021 4:46 pm
tarasfrompir
amelnyk писал(а): Ср ноя 03, 2021 2:39 pm Пробовал urlencode/decode добавлять, на случай если что-то с символами не то, не помогло.
Но вот еще заметил, что иногда даже первый вызов
DebMes(gg('curtains_bedroom.googleDeviceSync'));
отдает старое значение свойства, тоесть я его уже поменял, а выводит оно по прежнему старое.
Такое впечатление что транзакция по базе не закомитилась при апдейте свойства, и в базе попросту старые значения лежат. Хотя если смотрет в свойставх обьекта в админке, то значение правильное, а getGlobal отдает старое...
Возможно в кеше содержатся неверные данные ?

Re: getProperty возвращает пустую строку

Добавлено: Чт ноя 04, 2021 5:50 pm
amelnyk
хз как это проверить

Re: getProperty возвращает пустую строку

Добавлено: Вт ноя 30, 2021 2:41 pm
amelnyk
короче, хз че это было, но после обновления (на ту же ветку), всё вернулось к нормальной жизни...

Re: getProperty возвращает пустую строку

Добавлено: Ср дек 01, 2021 10:25 am
tarasfrompir
Массивы в свойства не пишутся. Превращайте в строковый вариант переменную а потом пишите...

Re: getProperty возвращает пустую строку

Добавлено: Чт дек 02, 2021 2:02 am
amelnyk
это не массив был. была обычная строка - жсонка