NEWS
Adapter hm-rpc Alarm Objekte
-
Im Objekt stehen doch die Typinformationen drin: obj.native.TYPE
{ "_id": "hm-rpc.0.OEQ0313814", "type": "device", "common": { "name": "Keymatic Haustür", "icon": "/icons/14_hm-sec-key_thumb.png" }, "native": { "ADDRESS": "OEQ0313814", "CHILDREN": [ "OEQ0313814:0", "OEQ0313814:1" ], "FIRMWARE": "2.5", "FLAGS": 1, "INTERFACE": "PEQ0174423", "PARAMSETS": [ "MASTER" ], "PARENT": "", "RF_ADDRESS": 5718645, "ROAMING": 0, "RX_MODE": 2, "TYPE": "HM-Sec-Key-S", "UPDATABLE": 0, "VERSION": 7 }, "from": "system.adapter.hm-rega.0", "ts": 1548444115252, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
-
Das stimmt. Nur der Auslöser ist bei einer LOWBAT Meldung doch dieser Datenpunkt?
Ich frage mit
var cacheSelectorLOWBAT = $('channel[state.id=hm-rpc.0.*.0.LOWBAT_ALARM$]');
Ich glaube da liefert mir obj.native.TYPE nichts. Werde das aber nochmal testen. Ansonsten wäre es halt perfekt wenn dieser TYPE auch unter LOWBAT_ALARM auftauchen würde.
-
Kriege ein undefined wenn ich es versuche:
! ````
var logging = true;
var debugging = true;
! //var _device = 'All';
var cacheSelectorLOWBAT = $('channel[state.id=hm-rpc.0.*.0.LOWBAT_ALARM$]');
! function countLowbat(obj) {
// Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
var moeglicheLOWBAT = 0;
var LOWBAT = 0;
var textLOWBAT = [];cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) var obj = getObject(id); var Bezeichnung = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); var ID_Name = id.split('.')[2]; var test = obj.native.TYPE if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++LOWBAT; textLOWBAT.push(ID_Name + ' ' +Bezeichnung); // Zu Array hinzufügen _message_tmp = _message_tmp +ID_Name + ' ' +Bezeichnung+'\n'; } ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status if(debugging){ log('Geräte Nr. ' + i + ': ' +ID_Name +' '+ Bezeichnung + ': ' + status +test); } });
! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben
if(LOWBAT > 0){
if(logging){
log('Anzahl möglicher Geräte mit Batteriewarnung ' + moeglicheLOWBAT +' Stück, davon Geräte mit LOWBAT: '+LOWBAT + ' Stück');
log('Betroffene Geräte: ' + textLOWBAT.join(', '));} }
}
! //beim Start
countLowbat();
! ```` -
Ja weil das nur im Objekt des Channels drin steht, probier es mal so:
on({id: 'hm-rpc.1.000393C99B9EDF.0.LOW_BAT_ALARM', val: 1, ack: true}, obj => { getObject(obj.id.substring(0, obj.id.lastIndexOf('.') - 2), (err, _obj) => { log(`Batterie von ${_obj.common.name} (${_obj.native.TYPE}) leer`, 'warn'); }); });
-
Ich habe diesbezüglich noch Fixes vorgenommen in REGA und RPC. RPC ignoriert nun den stateChange (bestätigen von Servicemeldungen) was vorher zu einer Fehlermeldung geführt hat. Und Rega kann jetzt auch für alle anderen Typen als rfd die Servicemeldungen bestätigen, da war noch ein kleiner Bug drin. Entsprechend REGA 2.2.1, RPC 1.9.5
-
Kriege ein undefined wenn ich es versuche:
! ````
var logging = true;
var debugging = true;
! //var _device = 'All';
var cacheSelectorLOWBAT = $('channel[state.id=hm-rpc.0.*.0.LOWBAT_ALARM$]');
! function countLowbat(obj) {
// Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
var moeglicheLOWBAT = 0;
var LOWBAT = 0;
var textLOWBAT = [];cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) var obj = getObject(id); var Bezeichnung = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); var ID_Name = id.split('.')[2]; var test = obj.native.TYPE if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++LOWBAT; textLOWBAT.push(ID_Name + ' ' +Bezeichnung); // Zu Array hinzufügen _message_tmp = _message_tmp +ID_Name + ' ' +Bezeichnung+'\n'; } ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status if(debugging){ log('Geräte Nr. ' + i + ': ' +ID_Name +' '+ Bezeichnung + ': ' + status +test); } });
! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben
if(LOWBAT > 0){
if(logging){
log('Anzahl möglicher Geräte mit Batteriewarnung ' + moeglicheLOWBAT +' Stück, davon Geräte mit LOWBAT: '+LOWBAT + ' Stück');
log('Betroffene Geräte: ' + textLOWBAT.join(', '));} }
}
! //beim Start
countLowbat();
! ```` `const logging = true; const debugging = true; //var _device = 'All'; const cacheSelectorLOWBAT = $('channel[state.id=hm-rpc.0.*.0.LOWBAT_ALARM$]'); function countLowbat(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0 let moeglicheLOWBAT = 0; let LOWBAT = 0; const textLOWBAT = []; cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT const status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) const obj = getObject(id); const Bezeichnung = getObject(id).common.name.substr(0, obj.common.name.indexOf(':')); const ID_Name = id.split('.')[2]; const test = getObject(id.substring(0, id.lastIndexOf('.') - 2)).native.TYPE; if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt ++LOWBAT; textLOWBAT.push(ID_Name + ' ' +Bezeichnung); // Zu Array hinzufügen const _message_tmp = _message_tmp + ID_Name + ' ' +Bezeichnung+'\n'; } ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status if(debugging){ log('Geräte Nr. ' + i + ': ' + ID_Name + ' '+ Bezeichnung + ': ' + status + ' ' + test); } }); // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben if(LOWBAT > 0){ if(logging){ log('Anzahl möglicher Geräte mit Batteriewarnung ' + moeglicheLOWBAT +' Stück, davon Geräte mit LOWBAT: '+LOWBAT + ' Stück'); log('Betroffene Geräte: ' + textLOWBAT.join(', ')); } } } //beim Start countLowbat();
-
So noch etwas probiert und es sieht vielversprechend aus.
So sieht die Meldung derzeit aus. Noch ein wenig Feintuning dann veröffentliche ich das Script mal. Wenn alles klappt sollte dann bei einer LOWBAt Meldung eine Push verschickt werden mit der Info welche Batterie man braucht.
Deine Verbesserung guck ich mir mal an. Verstehe ich das richtig das ich wenn ich den State sticky_unread_Alarm auf 2 in iobroker setze die Servicemeldung in der ccu bestätige?
Das wäre perfekt. Die anderen Meldungen verschwinden ja sowieso automatisch…
-
Ja Meldungen kannst du bestätigen damit, sogar wenn in der CCU die Schaltfläche ausgegraut ist soweit ich weiß
-
So noch etwas probiert und es sieht vielversprechend aus.
2BE706A6-0D39-42CD-979C-9556322D2D00.jpeg
So sieht die Meldung derzeit aus. Noch ein wenig Feintuning dann veröffentliche ich das Script mal. Wenn alles klappt sollte dann bei einer LOWBAt Meldung eine Push verschickt werden mit der Info welche Batterie man braucht.
Deine Verbesserung guck ich mir mal an. Verstehe ich das richtig das ich wenn ich den State sticky_unread_Alarm auf 2 in iobroker setze die Servicemeldung in der ccu bestätige?
Das wäre perfekt. Die anderen Meldungen verschwinden ja sowieso automatisch… `
Das wäre super wenn du das Script veröffentlichst. -