Управляемый и настраиваемый зуммер от Python

Позвольте мне начать с того, что я замечаю, что мои навыки работы с Python не так уж хороши, так что потерпите меня, пожалуйста, или пропустите этот вопрос, если вы не возражаете против вопросов о нубах;)

Моя установка состоит из Raspberry Pi, Domoticz (программное обеспечение для домашней автоматизации) и зуммер подключен GPIO. Управление зуммером уже работает, так что все нормально. Я могу запустить скрипты Python из среды Domoticz, которые затем выводят звуковые сигналы. Основная проблема заключается в том, что среда сценариев domoticz будет ждать завершения сценария. Таким образом, 30-секундный звуковой сигнал заблокирует среду на 30 секунд. Вторая проблема заключается в том, что, как только я запускаю этот 30-секундный сценарий, я не могу отменить его.

Так что в основном у меня есть два требования:

  1. Способ, которым я называю скрипт, должен быть неблокирующим. Щас пользуюсь io.popen() для вызова скрипта из другого скрипта на основе LUA.
  2. Любые последовательные команды должны переопределять предыдущие введенные команды. Таким образом, когда работает 30-секундный звуковой сигнал, команда "отключение динамика" должна убить это.

Угадайте, что мне нужно, это несколько советов о том, как лучше всего сделать это в среде на основе Python. Я знаю, как обходиться с C#, но понятия не имею и отказ от ответственности: я действительно не удосужился сделать правильный курс по Python, поскольку это только вспомогательный сценарий, и у меня нет другого варианта.

Текущий скрипт зуммера, который я использую, вы можете найти здесь: https://gist.github.com/jsiegmund/d25e378aff799f99bd5f71819d5a84ec

То, как я звоню, если из LUA:

if (zoneText == 'Arming') then
    -- Arming gives 30 seconds of delay before armed, start countdown
    domoticz.log('Arming, starting buzzer 5 secs')
    io.popen('python /home/pi/domoticz/scripts/buzzer.py 5')
end

0 ответов

Другие вопросы по тегам