Smarthome AOG. Гараж. как разрешить конфликт между ручным и автоматическим режимом работы Google Home

введите описание изображения здесь

У меня есть эта картинка над проблемой. Это кажется сложным, но это не так. В основном это отражает то, о чем я расскажу ниже:

  1. когда я открываю свой гараж вручную, этот баг-проект (приложение для Android и AOG). Потому что не отправляется 100 в значение поля .openPercent. Я могу работать только вручную, потому что openPercent равен 0, а garagestate - false

  2. Поскольку garagestate является ложным, я должен сказать G. Home: Закройте гараж. Он отправит 0, и, поскольку в value.openPercent уже есть 0, гараж не будет закрыт. Даже говоря: Закрыть гараж AOG должен был бы отправить 100 (в данном случае конкретный), чтобы сработал триггер на бэкэнде / Observer / relay < / strong> и гараж закроется

  3. Я использую willReportState true. Я пытался решить проблему в намерении запроса, но не смог

  4. Если я создам другую облачную функцию, чтобы изменить значение openPercent и оставить ее в соответствии с garagestate (field), я могу сломать backend / Observer / relay и гараж закрыть и открыть из-за быстрого изменения значения value. openPercent

5)

Лучшим решением в этом случае (мне нужна ваша помощь в этом) было бы то, что всякий раз, когда я говорю: Открыть и / или закрыть гараж, AOG будет отправлять значение, обратное значение. openPercent того, что есть. Если бы было 0, он отправил бы 100, а если бы было 100, он бы отправил 0.

Как лучше всего реализовать предложенное выше решение?

На этот вопрос был дан ответ: Облачные функции / Firestore. Как срабатывать, когда поля остаются в разных документах

Другими словами, были созданы новые облачные функции, чтобы сделать его совместимым.


comment
Простите, я читал код и обнаружил следующее: const { alarmstate } = targetDoc.data(), за которым следует const { garagestate } = targetDoc.data() в следующей строке. Почему вы объявляете как alarmstate, так и garagestate как ссылки на один и тот же документ? Просто пытаюсь понять ваш код, прежде чем давать какие-либо глупые ответы.   -  person fabc    schedule 10.05.2021
comment
@fabc Tks. На самом деле, вся проблема была построена на garagestate (гараже), но она могла быть построена на alarmstate (бытовая сигнализация), потому что я сталкиваюсь с той же проблемой там. Намерение состояло в том, чтобы конкретизировать и облегчить мое разоблачение проблемы. Я не заметил (здесь на практике) каких-либо проблем с кодом, о котором вы говорите. Мне нужны эти значения, чтобы ответить о состоянии гаража / сигнализации: stackoverflow.com/questions/66661155/   -  person NEUBER SOUSA    schedule 10.05.2021
comment
Другой вопрос, извините за беспокойство, но ... Где вы устанавливаете garagestate / alarmstate в своем коде? Вы вызывали только openPercent, который по умолчанию используется устройством smarthome для определения состояния; но я не могу найти, где в функции вы меняете garagestate. Насколько я понимаю, если вы отправляете сообщение о закрытии, он должен изменить garagestate на true, а затем изменить openPercent на 100 одним махом. Обратное к открытому. Настройки garagestate находятся в другом файле?   -  person fabc    schedule 11.05.2021
comment
@fabc Мне не нужно командовать (беспокоиться) о garagestate / alarmstate fiedl. В гараже есть магнитный стриж, и backend / iot-Software изменяет эти значения в зависимости от состояния гаража. Говоря о бэкэнде, я потратил четыре часа на приведенный ниже фрагмент, который, как я думал, решит эту проблему. Но этого не произошло. Придется сосредоточиться даже на решении, предложенном в пункте 5) этого вопроса: gist.github.com/ neuberfran / 3e5f9c2f0e2ffd8cd686ef9412c91741 Последние два параметра else if не мешают работе gpiogaragestateb.SetValue (false или False). Они просто согласовывают ценности. НО   -  person NEUBER SOUSA    schedule 12.05.2021
comment
@fabc Реализация предложенного пункта 5) сделает четыре строки ниже executement.onExecute () невозможными. Эти проверки были бы дополнительным плюсом к проекту, от которого я пока предпочитаю отказаться. Я хочу сделать проект функциональным. Первый. if (alarmstate === true && ..................) if (alarmstate === false && ............... ...) if (garagestate === true && .................) if (garagestate === false && ............ ....)   -  person NEUBER SOUSA    schedule 12.05.2021
comment
Кто-то (или, может быть, один бот stackoverflow) попросил меня отредактировать вопрос, но редактировать нечего. То, что я хочу, предлагается в пункте 5) этого номера (там наверху)   -  person NEUBER SOUSA    schedule 18.05.2021
comment
stackoverflow.com/questions/67765863/   -  person NEUBER SOUSA    schedule 31.05.2021