NEWS
[gelöst] Servicemeldung mit Typunterscheidung
-
Hallo,
ich habe das Skript für Erstellung der Servicemeldungen als Liste für meine Zwecke soweit angepasst und es funktioniert. Nun möchte ich es noch anhand des CCU-Types unterscheiden (z.B. für die Batterienart). Nur leider bekomme ich aus dem Object nicht den Typ heraus. Lt. Forum sollt es so funktionieren````
var type = getObject(id).native.TYPE;>! ```` /* System Homematic Servicemeldungen Skript erstellt Variablen Service.Homematic.* http://forum.iobroker.org/viewtopic.php?f=21&t=914#p9153 >! erstellt: 04.08.2015 von paul53 angepasst von pix 05.10.2015 STICKY UNREACH wird jetzt auf true gesetzt und damit gelöscht http://forum.iobroker.org/viewtopic.php?f=21&t=914&p=9200&hilit=sticky#p9173 04.02.2016 Instanz Variable */ >! instanz = 'javascript.0.'; >! // Service Meldungen >! createState('Servicemeldungen.Homematic.Anzahl', 0, { name: 'Homematic Servicemeldungen Anzahl', desc: 'Zahl der Homematic Servicemeldungen', type: 'number' }); createState('Servicemeldungen.Homematic.Text', "", { name: 'Homematic Servicemeldungen Text', desc: 'Liste der Geräte, die Servicemeldungen produzieren', type: 'string' }); >! var idAnzahl = instanz + 'Servicemeldungen.Homematic.Anzahl', idText = instanz + 'Servicemeldungen.Homematic.Text'; >! var SelectorUNREACH = $('channel[state.id=*.UNREACH]'), SelectorSTICKY_UNREACH = $('channel[state.id=*.STICKY_UNREACH]'), SelectorLOWBAT = $('channel[state.id=*.LOWBAT]'), SelectorCONFIG_PENDING = $('channel[state.id=*.CONFIG_PENDING]'); >! var blockdevice = "XEQ012345678"; >! function countService(obj) { var anzahl = 0; var text_VIS = ""; >! function count(id) { var status = getState(id).val; // Zustand abfragen (jedes Element) if (status) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt text_VIS = text_VIS + formatText(id) + " "; // Zu String hinzufügen ++anzahl; // Zählt die Anzahl der Service-Alarme } } >! SelectorUNREACH.each(function (id, i) { count(id); }); >! SelectorSTICKY_UNREACH.each(function (id, i) { var status = getState(id).val; // Zustand abfragen (jedes Element) if (status) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt log('STICKY_UNREACH Meldung: ' + id + ' wurde auf <true>gesetzt. Das Homematic Gerät ist wieder uneingeschränkt erreichbar.'); setState(id, false); // STICKY_UNREACH werden gelöscht } }); >! SelectorLOWBAT.each(function (id, i) { count(id); }); >! SelectorCONFIG_PENDING.each(function (id, i) { count(id); }); >! // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert if (!anzahl) { text_VIS = "keine Servicemeldungen"; } // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon Service zutreffend) ausgegeben log("Homematic-Servicemeldungen: " + text_VIS); log("Anzahl Homematic-Servicemeldungen: " + anzahl); >! setState(idText, text_VIS); // Schreibt die IDs der Datenpunkte mit Service Meldung setState(idAnzahl, anzahl); // Schreibt die aktuelle Anzahl der Service Meldungen } >! function formatText(id) { var idS = id.split('.'); var serial = idS[2]; var status = idS[4]; // Zustand abfragen var obj = getObject(id); var name = getObject(id).common.name; var devicename = name.substring(0, name.indexOf(":")); var type = getObject(id).native.TYPE; // funktioniert nicht var ival = getState(id).val; var stime = formatDate(getState(id).ts, "TT.MM.YYYY SS:mm"); if (serial != blockdevice) { if (status == "CONFIG_PENDING") { status = "Konfigurationsdaten stehen zur Übertragung an"; } if (status == "LOWBAT") { status = "Batteriestand niedrig"; } if (status == "STICKY_UNREACH") { status = "Kommunikation war gestört"; } if (status == "UNREACH") { status = "Kommunikation zur Zeit gestört"; } if (status == "LOWBAT") { return devicename + ": Batterien für " + type + " bestellen"; } else { return devicename + ": " + status + " seit: " + stime + " Uhr"; } } } >! SelectorUNREACH.on(function(obj) { // bei Zustandänderung *.UNREACH in allen Gewerken countService(obj); }); >! SelectorSTICKY_UNREACH.on(function(obj) { // bei Zustandänderung *.STICKY_UNREACH in allen Gewerken countService(obj); }); >! SelectorLOWBAT.on(function(obj) { // bei Zustandänderung *.LOWBAT in allen Gewerken countService(obj); }); >! SelectorCONFIG_PENDING.on(function(obj) { // bei Zustandänderung *.CONFIG_PENDING in allen Gewerken countService(obj); }); >! // Ausführung bei Scriptstart countService();</true>mfg
Falk
-
Ich glaube ich denke woran es liegt. Die Eigenschaften für LOWBAT sehen wie folgt aus:
! ````
{
"type": "state",
"common": {
"def": false,
"type": "boolean",
"read": true,
"write": false,
"role": "indicator.battery",
"name": "Wohnzimmer Fenstersensor Links:0.LOWBAT"
},
"native": {
"DEFAULT": false,
"FLAGS": 9,
"ID": "LOWBAT",
"MAX": true,
"MIN": false,
"OPERATIONS": 5,
"TAB_ORDER": 3,
"TYPE": "BOOL",
"UNIT": ""
},
"_id": "hm-rpc.0.XXX1234567.0.LOWBAT",
"acl": {
"object": 1638,
"state": 1638
}
}Ich benötige aber den type aus "Wohnzimmer Fenstersensor Links". Darin ist der TYPE mit "HM-Sec-SCo" angegeben. Möglich wäre auch noch "Wohnzimmer Fenstersensor Links.0" und "PARENT_TYPE": "HM-Sec-SCo". Komme ich irgendwie daran? Danke schon im voraus. vg Falk -
Ich benötige aber den type aus "Wohnzimmer Fenstersensor Links". Darin ist der TYPE mit "HM-Sec-SCo" angegeben. Möglich wäre auch noch "Wohnzimmer Fenstersensor Links.0" und "PARENT_TYPE": "HM-Sec-SCo". `
Screenshot von der Objektstruktur und Eigenschaften der relevanten Objekte bitte. -
Anbei die Screenshots. Hoffe das ist so in Ordnung. Lowbat.jpg ist vermutlich das aktuelle Objekt bei der Abfrage. Aber ich benötige "HM-Sec-SCo" aus dem Objekt (properties.jpg)
3116_lowbat.jpg
3116_properties.jpg
3116_objekt.jpg