Това е толкова странен проблем. Дори не съм сигурен как да го отстраня...
Написах много прост код за 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 мм на части).
И така... някой има ли идеи или обяснения?
Благодаря!
io.input(DOOR_PIN)
е вярно, преди да задейства алармата? Това може да помогне за предотвратяване на фалшиви положителни резултати. - person Zack Tanner   schedule 24.06.2015