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

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

Модератор: immortal

Ответить
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am
Благодарил (а): 13 раз
Поблагодарили: 2 раза

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

Сообщение amelnyk » Чт окт 28, 2021 8:38 pm

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

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

Сообщение nightwind » Пн ноя 01, 2021 11:17 am

Проблема не воспроизводится на последней альфе

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

$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
Благодарил (а): 13 раз
Поблагодарили: 2 раза

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

Сообщение amelnyk » Пн ноя 01, 2021 2:22 pm

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

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

Сообщение amelnyk » Ср ноя 03, 2021 2:02 pm

жесть магия... вот код, прям как есть у меня, без изменений, это метод обьекта 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 КБ) 1424 просмотра
Screenshot_42.jpg
Screenshot_42.jpg (44.17 КБ) 1424 просмотра
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am
Благодарил (а): 13 раз
Поблагодарили: 2 раза

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

Сообщение amelnyk » Ср ноя 03, 2021 2:39 pm

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

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

Сообщение tarasfrompir » Ср ноя 03, 2021 4:46 pm

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

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

Сообщение amelnyk » Чт ноя 04, 2021 5:50 pm

хз как это проверить
amelnyk
Сообщения: 78
Зарегистрирован: Вт ноя 22, 2016 12:17 am
Благодарил (а): 13 раз
Поблагодарили: 2 раза

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

Сообщение amelnyk » Вт ноя 30, 2021 2:41 pm

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

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

Сообщение tarasfrompir » Ср дек 01, 2021 10:25 am

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

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

Сообщение amelnyk » Чт дек 02, 2021 2:02 am

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