Сензорът за магнитна врата, свързан към Raspberry Pi, изпълняващ скрипт на Python, отчита фалшиви аларми

Това е толкова странен проблем. Дори не съм сигурен как да го отстраня...

Написах много прост код за Raspberry Pi на входа на моята къща. Той просто захранва GPIO на всеки 2 секунди, за да види дали веригата е завършена. Той е свързан чрез GPIO към магнитен сензор за врата, като един от тези: https://s3.amazonaws.com/assets.controlanything.com/photos/CKN6004-900.jpg

Ето кода на python:

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