NEWS
Homekit Luftwerte ausgeben als Qualität
-
Mit diesem Script steuere ich in Homekit die Anzeige der Luftqualität. Der schlechtere der beiden Werte wird für die Gesamtbewertung genommen.
Was braucht ihr:
- CO2 oder
- VOC oder
- beides
- Yhaka Adapter
Einbauen:
- Script in global_Funktionen einfügen
// Luftqualität für Homekit // 1 beste Qualität, 5 schlechteste Qualität // es wird immer die schlechteste Qualität ausgegeben. function bewerteLuftqualitaet(co2, voc) { var co2Bewertung = 0; var vocBewertung = 0; // 1 sehr gut - 5 sehr schlecht if (co2 < 800) { co2Bewertung = 1; } else if (co2 < 1000) { co2Bewertung = 2; } else if (co2 < 1200) { co2Bewertung = 3; } else if (co2 < 1400) { co2Bewertung = 4; } else { co2Bewertung = 5; } if (voc < 65) { vocBewertung = 1; } else if (voc < 220) { vocBewertung = 2; } else if (voc < 660) { vocBewertung = 3; } else if (voc < 5500) { vocBewertung = 4; } else { vocBewertung = 5; } if (co2Bewertung > vocBewertung) { return co2Bewertung ; } else { return vocBewertung; } }
2. Datenpunkte anlegen:
Ihr müsst für jeden Raum einen Raumklima Wert anlegen. Wenn ihr meine Pfade nutzt, müsst ihr nichts weiter anpassen:
0_userdata.0.Raumklima.Raumklima_<raum>
Den Raumnamen nehme ich aus dem Objektname des Auslösers - dass heißt, dass der Raumname immer gleich sein muss, sonst wird nichts geschrieben.Das folgende Script müsst ihr noch anlegen und laufen lassen. Die Sensoren lese ich als array aus - da müsst ihr mal schauen, wie die bei Euch heißen. Meine werden über openknx ausgelesen und kommen von Steinel true presence - bei mir heissen die immer
- CO2_Messwert
- VOC_Messwert
// Luftqualität für Homekit berechnen on({ id: [].concat(Array.prototype.slice.apply($('channel[state.id=*VOC_Messwert*]'))).concat(Array.prototype.slice.apply($('channel[state.id=*CO2_Messwert*]'))), change: 'ne' }, async (obj) => { console.log('Datenpunkt ' + obj.id + ' wurde geändert.'); // hier lese ich den Raum aus meinen KNX Daten, in dem ich den String nach Punkten teile und mir das Teil mit dem Raumname nehme. var datenpunkt = obj.id; var teile = datenpunkt.split('.'); //console.log(teile); var haus = teile[4]; //console.log("haus:" + haus) teile = haus.split('_'); var raum = teile[0]; // jetzt baue ich den Raumnamen ein, so dass das ganze Script übersichtlich bleibt. var co2=getState("openknx.0.Messwerte_BWM.Haus."+raum+"_CO2_Messwert").val; var voc=getState("openknx.0.Messwerte_BWM.Haus."+raum+"_VOC_Messwert").val; setState("0_userdata.0.Raumklima.Raumklima_"+raum,bewerteLuftqualitaet(co2,voc)); console.log(raum + "-Luftqualität: "+bewerteLuftqualitaet(co2,voc) ); });
In Yahka legt ihr einen Airquality Sensor an.
In den Datenpunkten Airqality tragt ihr dann den Datenpunkt für die Qualität ein
z.b. Arbeitszimmer: 0_userdata.0.Raumklima.Raumklima_Arbeitszimmer
Ihr könnt natürlich noch unter dem Voc Sensor die Vocdaten eintragen.Das war es schon. Bei Fragen einfach fragen.
Gruß Tom -
@tomtom24
Hallo Tom,
vielen Dank für diese Lösung. Ich habe nach deiner Anleitung erfolgreich einen KNX-Sensor in HomeKit integrieren können. Ich suche allerdings noch nach einer Lösung um die ppb, welche vom KNX-Sensor (ebenfalls ein Steinel Multisensor) kommen, nach ug/m³ umzurechnen.
Auch die Möglichkeit die Einheit in HomeKit zu ändern habe ich nicht gefunden.Hast du vielleicht eine idee?
LG
BooStar