Управляемый и настраиваемый зуммер от Python
Позвольте мне начать с того, что я замечаю, что мои навыки работы с Python не так уж хороши, так что потерпите меня, пожалуйста, или пропустите этот вопрос, если вы не возражаете против вопросов о нубах;)
Моя установка состоит из Raspberry Pi, Domoticz (программное обеспечение для домашней автоматизации) и зуммер подключен GPIO. Управление зуммером уже работает, так что все нормально. Я могу запустить скрипты Python из среды Domoticz, которые затем выводят звуковые сигналы. Основная проблема заключается в том, что среда сценариев domoticz будет ждать завершения сценария. Таким образом, 30-секундный звуковой сигнал заблокирует среду на 30 секунд. Вторая проблема заключается в том, что, как только я запускаю этот 30-секундный сценарий, я не могу отменить его.
Так что в основном у меня есть два требования:
- Способ, которым я называю скрипт, должен быть неблокирующим. Щас пользуюсь
io.popen()
для вызова скрипта из другого скрипта на основе LUA. - Любые последовательные команды должны переопределять предыдущие введенные команды. Таким образом, когда работает 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