Hallo, ich möchte folgende Logic realisieren:
- An einer Katzenklappe wird vorne und hinten ein Schalter montiert. Wenn die Katze nun rein geht, betätigt sie den Schalter für Katze drinnen und wenn sie das Haus verlässt betätigt sie den Schalter für draußen.
Jetzt soll MOTION_SENSOR.motionDetected=true gesetzt und an HomeKit übergeben werden wenn die Katze rein kommt. Jedoch erst wieder auf false gesetzt werden wenn der Schalter für Katze draußen betätigt wird.
Leider komme ich nicht drauf wie die Logic dafür sein muss... könnt ihr mir da mal weiter helfen?
Code
var Accessory = require('../').Accessory;
var Service = require('../').Service;
var Characteristic = require('../').Characteristic;
var uuid = require('../').uuid;
var wpi = require('wiring-pi');
var sensorInput;
var insideDoorOpen;
var outsideDoorOpen;
var newStatusInsideDoor;
var insideDoorTriggered = false;
wpi.setup('gpio');
var MOTION_SENSOR = {
getStatus: function() {
insideDoorOpen = wpi.digitalRead(17);
insideDoorOpen = Number(insideDoorOpen);
outsideDoorOpen = wpi.digitalRead(18);
outsideDoorOpen = Number(outsideDoorOpen);
if (insideDoorOpen == '1') {
MOTION_SENSOR.motionDetected = true;
console.log("insideSensor insideDoor: call getStatus..." + MOTION_SENSOR.motionDetected);
}
// if (outsideDoorOpen == '1') {
// MOTION_SENSOR.motionDetected = false;
// console.log("insideSensor outsideDoor: call getStatus..." + MOTION_SENSOR.motionDetected);
// }
},
identify: function() {
console.log("Identify the motion sensor!");
}
}
// Generate a consistent UUID for our Motion Sensor Accessory that will remain the same even when
// restarting our server. We use the `uuid.generate` helper function to create a deterministic
// UUID based on an arbitrary "namespace" and the word "motionsensor".
var motionSensorUUID = uuid.generate('hap-nodejs:accessories:motionsensor');
var motionSensor = exports.accessory = new Accessory('CatSensorInside', motionSensorUUID);
// Add properties for publishing (in case we're using Core.js and not BridgedCore.js)
motionSensor.username = "11:11:11:11:11:11";
motionSensor.pincode = "031-45-154";
// set some basic properties (these values are arbitrary and setting them is optional)
motionSensor
.getService(Service.AccessoryInformation)
.setCharacteristic(Characteristic.Manufacturer, "Generic")
.setCharacteristic(Characteristic.Model, "Motion Sensor");
// listen for the "identify" event for this Accessory
motionSensor.on('identify', function(paired, callback) {
MOTION_SENSOR.identify();
callback(); // success
});
motionSensor
.addService(Service.MotionSensor, "Motion Sensor")
.getCharacteristic(Characteristic.MotionDetected)
.on('get', function(callback) {
MOTION_SENSOR.getStatus();
callback(null, Boolean(MOTION_SENSOR.motionDetected));
});
setInterval(function() {
insideDoorOpen = wpi.digitalRead(17);
insideDoorOpen = Number(insideDoorOpen);
outsideDoorOpen = wpi.digitalRead(18);
outsideDoorOpen = Number(outsideDoorOpen);
if (insideDoorOpen == 1){
newStatusInsideDoor = true;
} else {
newStatusInsideDoor = false;
}
if (outsideDoorOpen == 1){
insideDoorTriggered = false;
}
if ((newStatusInsideDoor != MOTION_SENSOR.motionDetected) && !(insideDoorTriggered)) {
console.log("insideSensor: newStatusInsideDoor " + newStatusInsideDoor);
console.log("insideSensor: insideDoorTriggered " + insideDoorTriggered);
newStatusInsideDoor = MOTION_SENSOR.motionDetected;
insideDoorTriggered = true;
MOTION_SENSOR.getStatus();
motionSensor
.getService(Service.MotionSensor)
.setCharacteristic(Characteristic.MotionDetected, MOTION_SENSOR.motionDetected);
console.log("insideSensor: MOTION_SENSOR.motionDetected " + MOTION_SENSOR.motionDetected);
}
}, 500);
Alles anzeigen
In der folgende Teil ist für die Übergabe an HomeKit verantwortlich.
Code
setInterval(function() {
insideDoorOpen = wpi.digitalRead(17);
insideDoorOpen = Number(insideDoorOpen);
outsideDoorOpen = wpi.digitalRead(18);
outsideDoorOpen = Number(outsideDoorOpen);
if (insideDoorOpen == 1){
newStatusInsideDoor = true;
} else {
newStatusInsideDoor = false;
}
if (outsideDoorOpen == 1){
insideDoorTriggered = false;
}
if ((newStatusInsideDoor != MOTION_SENSOR.motionDetected) && !(insideDoorTriggered)) {
console.log("insideSensor: newStatusInsideDoor " + newStatusInsideDoor);
console.log("insideSensor: insideDoorTriggered " + insideDoorTriggered);
newStatusInsideDoor = MOTION_SENSOR.motionDetected;
insideDoorTriggered = true;
MOTION_SENSOR.getStatus();
motionSensor
.getService(Service.MotionSensor)
.setCharacteristic(Characteristic.MotionDetected, MOTION_SENSOR.motionDetected);
console.log("insideSensor: MOTION_SENSOR.motionDetected " + MOTION_SENSOR.motionDetected);
}
}, 500);
Alles anzeigen
Ich bin wirklich am verzweifeln...