Hallo zusammen,
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