Магнитный датчик двери, подключенный к Raspberry Pi с запущенным скриптом Python, сообщает о ложных тревогах

Это такая странная проблема. Я даже не знаю, как решить эту проблему...

Я написал очень простой код для Raspberry Pi у входа в мой дом. Он просто подключает GPIO каждые 2 секунды, чтобы увидеть, завершена ли цепь. Он подключен через GPIO к магнитному датчику двери, как один из этих: https://s3.amazonaws.com/assets.controlanything.com/photos/CKN6004-900.jpg

Вот код питона:

import os
import time
import socket
import RPi.GPIO as io
io.setmode(io.BCM)

ADDRESS = "192.168.1.118"
PORT = 1234

def doorOpened():
    "report door has been opened"
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((ADDRESS, PORT))
        s.send(b'DOOR_OPEN')
    except Exception as e:
        print("Exception: " + e)
    s.close()
    return

DOOR_PIN = 23

io.setup(DOOR_PIN, io.IN)
print("Watching over the door")
while True:
    time.sleep(2)
    if io.input(DOOR_PIN):
        doorOpened()
        time.sleep(60)

В любом случае, по какой-то причине, например, раз в неделю, будильник будет срабатывать ложно. Иногда, когда я сплю, на работе, что угодно. Я не уверен, как код может считывать значение из GPIO, пока магниты находятся близко друг к другу, он не должен замыкать цепь. Я играл с открытием двери, и они должны находиться на расстоянии около 1,5-2 дюймов друг от друга, прежде чем датчик сработает, поэтому я понятия не имею, как он может сработать, когда они в основном соприкасаются (менее 1 мм). Кроме).

Итак ... у кого-нибудь есть идеи или объяснения?

Спасибо!


person Leggy    schedule 24.06.2015    source источник
comment
Что, если бы вы повторно проверили GPIO через x секунд, чтобы подтвердить, что io.input(DOOR_PIN) верно, прежде чем включить тревогу? Это может помочь предотвратить ложные срабатывания.   -  person Zack Tanner    schedule 24.06.2015
comment
А люди говорят, что призраков не бывает..   -  person Peter Tutervai    schedule 25.06.2015


Ответы (1)


Проблемы, возникающие только «раз в неделю», пожалуй, самые неприятные, с которыми я когда-либо сталкивался во встраиваемых системах, они особенно усложняют отладку.

Вот несколько вещей, которые вы можете попробовать:

Во-первых, исследовать с помощью других средств. Под этим я подразумеваю наблюдение за дверью с помощью какого-либо записывающего устройства (например, видеомагнитофона), желательно такого, которое вы можете умеренно сопоставить со временем срабатывания будильника.

Во-вторых, если это электрическая прерывистая проблема (например, дребезг клавиш от старых дешевых клавиатур, который мы видели раньше), вы можете немного изменить код, чтобы уменьшить количество ложных срабатываний.

Другими словами, не поднимайте тревогу по первой обнаруженной проблеме. Вместо этого перейдите к более жесткому циклу и (например) сэмплируйте ввод пять раз с задержкой в ​​десятую долю секунды.

Затем решите, основываясь на преобладании доказательств, была ли это фактическая тревога или нет.

И, кстати, я удивляюсь мудрости закрытия сокета, который, возможно, никогда не был открыт. Скорее всего, это не ваша проблема, но в какой-то момент стоило бы почистить логику в doorOpened.

person paxdiablo    schedule 24.06.2015
comment
Спасибо за это, я очистил код, а также реализовал ваше точное решение и до сих пор не было ложных срабатываний. Думаю, теперь пришло время играть в ожидание. - person Leggy; 27.06.2015