vorab, ich habe 2 Sensoren an jedem Fenster,
ein Sensor oben für gekippt und
eins unten für offen, wobei bei öffnen beide Sensoren auslösen!
Hier mein Script
let pfadRaeumeTeil1 = "0_userdata.0.vis.StatusHaus.Raeume.";
let pfadSensorTeil1 = 'bshb.0.hdm:HomeMaticIP:';
let pfadSensorTeil2 = '.ShutterContact.value';
let fensterDeviceID;
let fensterAuf = 0;
let fensterGekippt = 0;
/*Auszug Json Fenster
[
{
"Pfad_Status": "Schlafzimmer.Fenster_Terrasse-Links",
"Name_Sensor_Oben": "3014F711A000009A18592597",
"Name_Sensor_Unten": "3014F711A000009BB85FD526"
},
{
"Pfad_Status": "Schlafzimmer.Fenster_Terrasse-Rechts",
"Name_Sensor_Oben": "3014F711A000009BB85FD559",
"Name_Sensor_Unten": "3014F711A000009A18592781"
}
]
*/
let dpFenster = '0_userdata.0.vis.StatusHaus.Sensoren.Fenster';
let jsonFenster = JSON.parse(getState(dpFenster).val);
$('state[id=*](functions=fenster)').on(function(dp) {
fensterAuf = 0;
fensterGekippt = 0;
fensterDeviceID = dp.deviceId;
fensterStatus(dp.id);
});
async function fensterStatus(fensterID) {
for (let i = 0; i <= jsonFenster.length -1; i ++) {
let sensorOben = pfadSensorTeil1 + jsonFenster[i].Name_Sensor_Oben + pfadSensorTeil2;
let sensorUnten = pfadSensorTeil1 + jsonFenster[i].Name_Sensor_Unten + pfadSensorTeil2;
let sensorObenVal = (await getStateAsync(sensorOben)).val;
await sleep(50);
let sensorUntenVal = (await getStateAsync(sensorUnten)).val;
await sleep(50);
let sensorName = pfadRaeumeTeil1 + jsonFenster[i].Pfad_Status;
if ((fensterID === sensorOben) || (fensterID === sensorUnten)) {
SensorStatus(sensorName, sensorObenVal, sensorUntenVal);
};
statusFenster(sensorName, sensorObenVal, sensorUntenVal);
}; //Ende for
log('Auf: ' + fensterAuf);
log('Gekippt: ' + fensterGekippt);
}; //Ende fuction
//Anzahl offene und/oder gekippte Fenster
function statusFenster(NameRaum, sensorObenVal, sensorUntenVal) {
if (sensorUntenVal === "OPEN") {
fensterAuf ++;
} else if (sensorUntenVal === "CLOSED") {
if (sensorObenVal === "OPEN") {
fensterGekippt ++;
};
};
};
//Dient zur Grafischen Anzeige in der View "Home"
async function SensorStatus(NameRaum, sensorObenVal, sensorUntenVal) {
let zustandID = 0;
if (sensorUntenVal === "OPEN") {
zustandID = 1;
} else if (sensorUntenVal === "CLOSED") {
if (sensorObenVal === "CLOSED") {
zustandID = 0;
} else if (sensorObenVal === "OPEN") {
zustandID = 2;
};
};
await setStateAsync(NameRaum, zustandID );
};
Der Teil für die grafische Darstellung funktioniert.
Bei "statusFenster" Probleme.
Wenn ein Fenster gekippt wird steht im log
Auf: 0
Gekippt: 1
wenn geöffnet steht im Log
Auf:2
Gekippt: 0
Was kann und muss ich ändern?
Für die Hilfe schon mal vorab Herzlichen Dank.
MfG
Wastl
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗