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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am

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

Сообщение 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 возвращают пустоту и получении этого свойства.
Если потом я кликаю на значение свойства и пересохраняю его ниче не меняя при этом, вуаля, всё работает.
Буду признателен за помощ
Вложения
вот свойста после setGlobal
вот свойста после setGlobal
Screenshot_36.jpg (58.41 КБ) 3550 просмотров
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Контактная информация:

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

Сообщение 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"}
Возможно у тебя там гдето пробелы или невидимые символы в именах
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am

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

Сообщение amelnyk »

это первое, что я проверил, и кроме пробелов там ничего нету
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am

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

Сообщение amelnyk »

жесть магия... вот код, прям как есть у меня, без изменений, это метод обьекта googleHome:

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

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

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

DebMes('from googleHome');
DebMes(gg('googleHome.syncDevices'));
в итоге на скриншоте то, что в логах.
и второй скрин - то, что реально в свойстве есть данные...
Вложения
Screenshot_39.jpg
Screenshot_39.jpg (47.27 КБ) 3375 просмотров
Screenshot_42.jpg
Screenshot_42.jpg (44.17 КБ) 3375 просмотров
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am

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

Сообщение amelnyk »

Пробовал urlencode/decode добавлять, на случай если что-то с символами не то, не помогло.
Но вот еще заметил, что иногда даже первый вызов
DebMes(gg('curtains_bedroom.googleDeviceSync'));
отдает старое значение свойства, тоесть я его уже поменял, а выводит оно по прежнему старое.
Такое впечатление что транзакция по базе не закомитилась при апдейте свойства, и в базе попросту старые значения лежат. Хотя если смотрет в свойставх обьекта в админке, то значение правильное, а getGlobal отдает старое...
Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

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

Сообщение tarasfrompir »

amelnyk писал(а): Ср ноя 03, 2021 2:39 pm Пробовал urlencode/decode добавлять, на случай если что-то с символами не то, не помогло.
Но вот еще заметил, что иногда даже первый вызов
DebMes(gg('curtains_bedroom.googleDeviceSync'));
отдает старое значение свойства, тоесть я его уже поменял, а выводит оно по прежнему старое.
Такое впечатление что транзакция по базе не закомитилась при апдейте свойства, и в базе попросту старые значения лежат. Хотя если смотрет в свойставх обьекта в админке, то значение правильное, а getGlobal отдает старое...
Возможно в кеше содержатся неверные данные ?
Спасибо нам ПОМОЖЕТ..!
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am

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

Сообщение amelnyk »

хз как это проверить
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am

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

Сообщение amelnyk »

короче, хз че это было, но после обновления (на ту же ветку), всё вернулось к нормальной жизни...
Аватара пользователя
tarasfrompir
Сообщения: 3217
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин

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

Сообщение tarasfrompir »

Массивы в свойства не пишутся. Превращайте в строковый вариант переменную а потом пишите...
Спасибо нам ПОМОЖЕТ..!
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am

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

Сообщение amelnyk »

это не массив был. была обычная строка - жсонка
Ответить