Страница 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
это не массив был. была обычная строка - жсонка