rdmtc/RedMatic-HomeKit

Unterstützung für HmIP-DLD

Opened this issue · 28 comments

Bitte den neuen Türschlossantrieb unterstützen

Du kannst dir in der Zwischenzeit ein Beispiel am hm-sec-key (Keymatic) nehmen und ein universal accessory erstellen, welches die richtigen Services und Characteristics beinhaltet.

Da finden sich solche Einträge für:

  • Service.LockMechanism
    • Characteristic.LockCurrentState
    • Characteristic.LockTargetState
  • Service.BatteryService
    • Characteristic.StatusLowBattery
    • Characteristic.BatteryLevel
    • Characteristic.ChargingState
/**
 * Service "Lock Mechanism"
 */
export class LockMechanism extends Service {

  public static readonly UUID: string = "00000045-0000-1000-8000-0026BB765291";

  constructor(displayName?: string, subtype?: string) {
    super(displayName, LockMechanism.UUID, subtype);

    // Required Characteristics
    this.addCharacteristic(Characteristic.LockCurrentState);
    this.addCharacteristic(Characteristic.LockTargetState);

    // Optional Characteristics
    this.addOptionalCharacteristic(Characteristic.Name);
  }
}
Service.LockMechanism = LockMechanism;


/**
 * Characteristic "Lock Current State"
 */
export class LockCurrentState extends Characteristic {

  public static readonly UUID: string = "0000001D-0000-1000-8000-0026BB765291";

  public static readonly UNSECURED = 0;
  public static readonly SECURED = 1;
  public static readonly JAMMED = 2;
  public static readonly UNKNOWN = 3;

  constructor() {
    super("Lock Current State", LockCurrentState.UUID, {
      format: Formats.UINT8,
      perms: [Perms.NOTIFY, Perms.PAIRED_READ],
      minValue: 0,
      maxValue: 3,
      minStep: 1,
      validValues: [0, 1, 2, 3],
    });
    this.value = this.getDefaultValue();
  }
}
Characteristic.LockCurrentState = LockCurrentState;


/**
 * Characteristic "Lock Target State"
 */
export class LockTargetState extends Characteristic {

  public static readonly UUID: string = "0000001E-0000-1000-8000-0026BB765291";

  public static readonly UNSECURED = 0;
  public static readonly SECURED = 1;

  constructor() {
    super("Lock Target State", LockTargetState.UUID, {
      format: Formats.UINT8,
      perms: [Perms.NOTIFY, Perms.PAIRED_READ, Perms.PAIRED_WRITE],
      minValue: 0,
      maxValue: 1,
      minStep: 1,
      validValues: [0, 1],
    });
    this.value = this.getDefaultValue();
  }
}
Characteristic.LockTargetState = LockTargetState;


/**
 * Service "Battery"
 */
export class Battery extends Service {

  public static readonly UUID: string = "00000096-0000-1000-8000-0026BB765291";

  constructor(displayName?: string, subtype?: string) {
    super(displayName, Battery.UUID, subtype);

    // Required Characteristics
    this.addCharacteristic(Characteristic.StatusLowBattery);

    // Optional Characteristics
    this.addOptionalCharacteristic(Characteristic.BatteryLevel);
    this.addOptionalCharacteristic(Characteristic.ChargingState);
    this.addOptionalCharacteristic(Characteristic.Name);
  }
}
// noinspection JSDeprecatedSymbols
Service.BatteryService = Battery;
Service.Battery = Battery;


/**
 * Characteristic "Status Low Battery"
 */
export class StatusLowBattery extends Characteristic {

  public static readonly UUID: string = "00000079-0000-1000-8000-0026BB765291";

  public static readonly BATTERY_LEVEL_NORMAL = 0;
  public static readonly BATTERY_LEVEL_LOW = 1;

  constructor() {
    super("Status Low Battery", StatusLowBattery.UUID, {
      format: Formats.UINT8,
      perms: [Perms.NOTIFY, Perms.PAIRED_READ],
      minValue: 0,
      maxValue: 1,
      minStep: 1,
      validValues: [0, 1],
    });
    this.value = this.getDefaultValue();
  }
}
Characteristic.StatusLowBattery = StatusLowBattery;


/**
 * Characteristic "Battery Level"
 */
export class BatteryLevel extends Characteristic {

  public static readonly UUID: string = "00000068-0000-1000-8000-0026BB765291";

  constructor() {
    super("Battery Level", BatteryLevel.UUID, {
      format: Formats.UINT8,
      perms: [Perms.NOTIFY, Perms.PAIRED_READ],
      unit: Units.PERCENTAGE,
      minValue: 0,
      maxValue: 100,
      minStep: 1,
    });
    this.value = this.getDefaultValue();
  }
}
Characteristic.BatteryLevel = BatteryLevel;


/**
 * Characteristic "Charging State"
 */
export class ChargingState extends Characteristic {

  public static readonly UUID: string = "0000008F-0000-1000-8000-0026BB765291";

  public static readonly NOT_CHARGING = 0;
  public static readonly CHARGING = 1;
  public static readonly NOT_CHARGEABLE = 2;

  constructor() {
    super("Charging State", ChargingState.UUID, {
      format: Formats.UINT8,
      perms: [Perms.NOTIFY, Perms.PAIRED_READ],
      minValue: 0,
      maxValue: 2,
      minStep: 1,
      validValues: [0, 1, 2],
    });
    this.value = this.getDefaultValue();
  }
}
Characteristic.ChargingState = ChargingState;

Ich habe versucht es so zu lösen, aber wenn ich ehrlich bin habe ich keine Ahnung wie das gehen soll. Ich glaube das mit der Inject Node habe ich soweit. Besteht die Möglichkeit das jemand hilft bzw. auf ein Text verlinkt wo ich mir das herleiten kann?

Eine Umsetzung (zum selber klicken) kann so aussehen:

[{"id":"198102ff.16c11d","type":"redmatic-homekit-universal","z":"f48abf30.643098","bridgeConfig":"","name":"Haustüre","services":[{"subtype":"0","service":"LockMechanism","name":"Schloss"},{"subtype":"1","service":"BatteryService","name":"Batterie"}],"x":820,"y":640,"wires":[["22c96617.e825b2"]]},{"id":"acfc7d0d.146d58","type":"inject","z":"f48abf30.643098","name":"UNSECURED LockTargetState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"0/LockTargetState","payload":"0","payloadType":"num","x":390,"y":920,"wires":[["ac70638a.dbdc9"]]},{"id":"e93cf4f3.b5cb08","type":"inject","z":"f48abf30.643098","name":"NORMAL StatusLowBattery","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"1/StatusLowBattery","payload":"0","payloadType":"num","x":880,"y":760,"wires":[["bb82ff23.85b358"]]},{"id":"4ae33d59.c0c29c","type":"inject","z":"f48abf30.643098","name":"100% BatteryLevel","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"1/BatteryLevel","payload":"100","payloadType":"num","x":850,"y":840,"wires":[["45595487.6dbbf4"]]},{"id":"25ec528.e1c61ae","type":"inject","z":"f48abf30.643098","name":"NOT_CHARGEABLE ChargingState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"1/ChargingState","payload":"2","payloadType":"num","x":900,"y":960,"wires":[["be326ca4.264e8"]]},{"id":"850edbb9.a759e","type":"inject","z":"f48abf30.643098","name":"UNSECURED LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"0/LockCurrentState","payload":"0","payloadType":"num","x":390,"y":640,"wires":[["824d0d7f.e71bc"]]},{"id":"22c96617.e825b2","type":"debug","z":"f48abf30.643098","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":970,"y":640,"wires":[]},{"id":"35fbfa58.da6b8e","type":"inject","z":"f48abf30.643098","name":"SECURED LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockCurrentState","payload":"1","payloadType":"num","x":380,"y":680,"wires":[["824d0d7f.e71bc"]]},{"id":"b52bd6d2.60ee4","type":"inject","z":"f48abf30.643098","name":"JAMMED LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockCurrentState","payload":"2","payloadType":"num","x":380,"y":720,"wires":[["824d0d7f.e71bc"]]},{"id":"f0d27e22.720d8","type":"inject","z":"f48abf30.643098","name":"UNKNOWN LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockCurrentState","payload":"3","payloadType":"num","x":380,"y":760,"wires":[["824d0d7f.e71bc"]]},{"id":"9990f3a.1d1211","type":"inject","z":"f48abf30.643098","name":"SECURED LockTargetState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockTargetState","payload":"1","payloadType":"num","x":380,"y":960,"wires":[["ac70638a.dbdc9"]]},{"id":"905a288d.97d958","type":"inject","z":"f48abf30.643098","name":"LOW StatusLowBattery","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"1/StatusLowBattery","payload":"1","payloadType":"num","x":860,"y":800,"wires":[["bb82ff23.85b358"]]},{"id":"a12bdb8f.b0d14","type":"inject","z":"f48abf30.643098","name":"CHARGING ChargingState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"1/ChargingState","payload":"1","payloadType":"num","x":870,"y":920,"wires":[["be326ca4.264e8"]]},{"id":"df0e3dfc.f66dd8","type":"inject","z":"f48abf30.643098","name":"NOT_CHARGING ChargingState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"1/ChargingState","payload":"0","payloadType":"num","x":900,"y":880,"wires":[["be326ca4.264e8"]]},{"id":"a25d63bd.41f6d8","type":"link in","z":"f48abf30.643098","name":"","links":["824d0d7f.e71bc","ac70638a.dbdc9","bb82ff23.85b358","45595487.6dbbf4","be326ca4.264e8"],"x":695,"y":640,"wires":[["198102ff.16c11d"]]},{"id":"45595487.6dbbf4","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":995,"y":840,"wires":[]},{"id":"be326ca4.264e8","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":1115,"y":920,"wires":[]},{"id":"bb82ff23.85b358","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":1055,"y":780,"wires":[]},{"id":"ac70638a.dbdc9","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":575,"y":940,"wires":[]},{"id":"824d0d7f.e71bc","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":575,"y":700,"wires":[]},{"id":"4ab2a7aa.eee6a","type":"comment","z":"f48abf30.643098","name":"Ist-Zustand","info":"","x":330,"y":600,"wires":[]},{"id":"7cca2a28.8d7824","type":"comment","z":"f48abf30.643098","name":"Soll-Zustand","info":"","x":330,"y":880,"wires":[]},{"id":"89c21a66.0f1b68","type":"comment","z":"f48abf30.643098","name":"Batterie-Kram","info":"","x":830,"y":720,"wires":[]}]

Bildschirmfoto 2021-04-12 um 11 13 39

Vielen Dank für die große Mühe. So hätte ich das niemals getan. Mal sehen ob ich die Verbindung jetzt zu Homematic hinbekomme

EDIT: Ich habe es geschafft das Homematic den Status an Homematic weitergibt, aber andersherum hapert es. Ich bin zu beschränkt in der Change Node den passenden Tonic zu definieren.

Warum kommt von @hobbyquaker kein Kommentar dazu? Oder wird das ganze hier nicht mehr gepflegt? Eine Stellungnahme dazu wäre mal gut damit man weiß wo man dran ist, danke.

Ich werde zu Hap wechseln. Finde es nicht cool @hobbyquaker garnichts dazu zu sagen ob da was kommt oder nicht oder ob das ganze hier tot ist oder nicht. Egal ob das ganze hier kostenlos und ein freiwilliges Projekt ist, antworten kann man trotzdem damit die Benutzer wissen woran sie sind. Ist ja nicht nur hier so das keine Antworten kommen, es gibt Themen hier die schon alt sind und auch die Benutzer haben keine Antwort bekommen.

Nu bleib doch mal locker @AdlerCentauri vielleicht ist Sebastian auch krank oder so

@beckentosch kannst du mal über einen debug node alle Events vom DLD bei Bedienung über WebUI oder direkt am Gerät ausgeben lassen? Dann helfe ich dir beim zusammen bauen.

@ptweety So ich habe mal endlich Zeit gefunden das ganze zu machen. Über die WebUI kann ich entriegeln, verriegeln und öffnen. Ich habe den Datapoint LOCK_STATE genommen.

Wenn ich verriegle passiert folgendes:
verriegeln

Wenn ich entriegle folgendes:
entriegeln

Bei öffnen kommt keine neue Meldung. Dies wäre für mich aber mit der wichtigste damit ich ohne Schlüssel Joggen gehen kann :-D

Folgende Datapoints gibt es:
datapoint

Vielen vielen Dank schonmal für deine Hilfe

Kannst du das nochmal wiederholen, nur ohne Einschränkung auf LOCK_STATE, damit alle Ereignisse sichtbar sind?

Uff, vielleicht so (CCU auswählen und Interface auf HmIP-RF setzen):

[{"id":"ad8c1e62.442e4","type":"debug","z":"f48abf30.643098","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":950,"y":1680,"wires":[]},{"id":"861458c5.cfd3d8","type":"ccu-rpc-event","z":"f48abf30.643098","name":"","iface":"","ccuConfig":"","rooms":"","roomsRx":"str","functions":"","functionsRx":"str","device":"","deviceRx":"str","deviceName":"","deviceNameRx":"str","deviceType":"HmIP-DLD","deviceTypeRx":"str","channel":"","channelRx":"str","channelName":"","channelNameRx":"str","channelType":"","channelTypeRx":"str","channelIndex":"","channelIndexRx":"str","datapoint":"","datapointRx":"str","change":false,"working":false,"cache":false,"topic":"${CCU}/${Interface}/${channelName}/${datapoint}","x":750,"y":1680,"wires":[["ad8c1e62.442e4"]]}]

Verriegeln:

21.4.2021, 11:20:09node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
2
21.4.2021, 11:20:09node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
3
21.4.2021, 11:20:09node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:20:09node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
2
21.4.2021, 11:20:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
0
21.4.2021, 11:20:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
3
21.4.2021, 11:20:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:20:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
2
21.4.2021, 11:20:17node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
1
21.4.2021, 11:20:17node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
0
21.4.2021, 11:20:17node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:20:17node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
3

Entriegeln:

21.4.2021, 11:22:28node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
1
21.4.2021, 11:22:28node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
0
21.4.2021, 11:22:29node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:22:29node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
1
21.4.2021, 11:22:30node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
0
21.4.2021, 11:22:30node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
3
21.4.2021, 11:22:30node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:22:30node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
1
21.4.2021, 11:22:37node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
2
21.4.2021, 11:22:37node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
3
21.4.2021, 11:22:37node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:22:37node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
3

Öffnen:

21.4.2021, 11:23:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
2
21.4.2021, 11:23:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
3
21.4.2021, 11:23:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:23:11node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
1
21.4.2021, 11:23:12node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
2
21.4.2021, 11:23:12node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
3
21.4.2021, 11:23:12node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:23:12node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
1
21.4.2021, 11:23:14node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/LOCK_STATE : msg.payload : number
2
21.4.2021, 11:23:14node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/SECTION : msg.payload : number
3
21.4.2021, 11:23:14node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/PROCESS : msg.payload : number
0
21.4.2021, 11:23:15node: 771ac910.1ac38
localhost/HmIP-RF/windfang_tuerschloss:1/ACTIVITY_STATE : msg.payload : number
3

Ok, ich hatte jetzt vermutet, dass da noch Ereignisse zu LOCK_TARGET_LEVEL kommen. So müssen wir uns wohl mit den Werten von LOCK_STATE behelfen.

Ich würde auf jeweils zwei Events schauen:

Beim entriegeln:

  • Wenn für LOCK_STATE der payload = 0 (unknown) und valuePrevious = 1 (locked), dann sende an HomeKit den LockTargetState mit payload = 0 (unsecured)
  • Wenn für LOCK_STATE der payload = 2 (unlocked) und valuePrevious = 0 (unknown), dann sende an HomeKit den LockCurrentState mit payload = 0 (unsecured)

Beim verriegeln:

  • Wenn für LOCK_STATE der payload = 0 (unknown) und valuePrevious = 2 (unlocked), dann sende an HomeKit den LockTargetState mit payload = 1 (secured)
  • Wenn für LOCK_STATE der payload = 1 (locked) und valuePrevious = 0 (unknown), dann sende an HomeKit den LockCurrentState mit payload = 1 (secured)

Wie das dann mit dem öffnen geht, da habe ich derzeit keine Idee. Vielleicht muss da noch ein weiterer Service hinzugefügt werden ...

Und an welchen Kanal man die Events aus HomeKit sendet, dass musst du leider auch selber erforschen.

[{"id":"198102ff.16c11d","type":"redmatic-homekit-universal","z":"f48abf30.643098","bridgeConfig":"2572ba91.8a53ce","name":"Haustüre","services":[{"subtype":"0","service":"LockMechanism","name":"Schloss"},{"subtype":"1","service":"BatteryService","name":"Batterie"}],"x":820,"y":680,"wires":[["22c96617.e825b2","ec0845b2.24c2d"]]},{"id":"acfc7d0d.146d58","type":"inject","z":"f48abf30.643098","name":"UNSECURED LockTargetState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"0/LockTargetState","payload":"0","payloadType":"num","x":390,"y":1020,"wires":[["ac70638a.dbdc9"]]},{"id":"e93cf4f3.b5cb08","type":"inject","z":"f48abf30.643098","name":"NORMAL StatusLowBattery","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"1/StatusLowBattery","payload":"0","payloadType":"num","x":880,"y":820,"wires":[["bb82ff23.85b358"]]},{"id":"4ae33d59.c0c29c","type":"inject","z":"f48abf30.643098","name":"100% BatteryLevel","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"1/BatteryLevel","payload":"100","payloadType":"num","x":850,"y":900,"wires":[["45595487.6dbbf4"]]},{"id":"25ec528.e1c61ae","type":"inject","z":"f48abf30.643098","name":"NOT_CHARGEABLE ChargingState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"1/ChargingState","payload":"2","payloadType":"num","x":900,"y":1020,"wires":[["be326ca4.264e8"]]},{"id":"850edbb9.a759e","type":"inject","z":"f48abf30.643098","name":"UNSECURED LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"0/LockCurrentState","payload":"0","payloadType":"num","x":390,"y":820,"wires":[["824d0d7f.e71bc"]]},{"id":"22c96617.e825b2","type":"debug","z":"f48abf30.643098","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":640,"wires":[]},{"id":"35fbfa58.da6b8e","type":"inject","z":"f48abf30.643098","name":"SECURED LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockCurrentState","payload":"1","payloadType":"num","x":380,"y":860,"wires":[["824d0d7f.e71bc"]]},{"id":"b52bd6d2.60ee4","type":"inject","z":"f48abf30.643098","name":"JAMMED LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockCurrentState","payload":"2","payloadType":"num","x":380,"y":900,"wires":[["824d0d7f.e71bc"]]},{"id":"f0d27e22.720d8","type":"inject","z":"f48abf30.643098","name":"UNKNOWN LockCurrentState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockCurrentState","payload":"3","payloadType":"num","x":380,"y":940,"wires":[["824d0d7f.e71bc"]]},{"id":"9990f3a.1d1211","type":"inject","z":"f48abf30.643098","name":"SECURED LockTargetState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"0/LockTargetState","payload":"1","payloadType":"num","x":380,"y":1060,"wires":[["ac70638a.dbdc9"]]},{"id":"905a288d.97d958","type":"inject","z":"f48abf30.643098","name":"LOW StatusLowBattery","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"1/StatusLowBattery","payload":"1","payloadType":"num","x":860,"y":860,"wires":[["bb82ff23.85b358"]]},{"id":"a12bdb8f.b0d14","type":"inject","z":"f48abf30.643098","name":"CHARGING ChargingState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":"4","topic":"1/ChargingState","payload":"1","payloadType":"num","x":870,"y":980,"wires":[["be326ca4.264e8"]]},{"id":"df0e3dfc.f66dd8","type":"inject","z":"f48abf30.643098","name":"NOT_CHARGING ChargingState","props":[{"p":"topic","vt":"str"},{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"4","topic":"1/ChargingState","payload":"0","payloadType":"num","x":900,"y":940,"wires":[["be326ca4.264e8"]]},{"id":"a25d63bd.41f6d8","type":"link in","z":"f48abf30.643098","name":"","links":["824d0d7f.e71bc","ac70638a.dbdc9","bb82ff23.85b358","45595487.6dbbf4","be326ca4.264e8","cce7a993.e0d298","ef30876a.7dfa4"],"x":695,"y":680,"wires":[["198102ff.16c11d"]]},{"id":"45595487.6dbbf4","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":995,"y":900,"wires":[]},{"id":"be326ca4.264e8","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":1115,"y":980,"wires":[]},{"id":"bb82ff23.85b358","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":1055,"y":840,"wires":[]},{"id":"ac70638a.dbdc9","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":575,"y":1040,"wires":[]},{"id":"824d0d7f.e71bc","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":575,"y":880,"wires":[]},{"id":"4ab2a7aa.eee6a","type":"comment","z":"f48abf30.643098","name":"Ist-Zustand","info":"","x":330,"y":780,"wires":[]},{"id":"7cca2a28.8d7824","type":"comment","z":"f48abf30.643098","name":"Soll-Zustand","info":"","x":330,"y":980,"wires":[]},{"id":"89c21a66.0f1b68","type":"comment","z":"f48abf30.643098","name":"Batterie-Kram","info":"","x":830,"y":780,"wires":[]},{"id":"4873dba7.09d67c","type":"ccu-rpc-event","z":"f48abf30.643098","name":"LOW_BAT","iface":"","ccuConfig":"","rooms":"","roomsRx":"str","functions":"","functionsRx":"str","device":"","deviceRx":"str","deviceName":"","deviceNameRx":"str","deviceType":"HmIP-DLD","deviceTypeRx":"str","channel":"","channelRx":"str","channelName":"","channelNameRx":"str","channelType":"","channelTypeRx":"str","channelIndex":"","channelIndexRx":"str","datapoint":"LOW_BAT","datapointRx":"str","change":false,"working":false,"cache":false,"topic":"${CCU}/${Interface}/${channelName}/${datapoint}","x":360,"y":1180,"wires":[["3f7209f2.1c48a6","c6e5f8aa.e7447","e90d4efb.31f71"]]},{"id":"3f7209f2.1c48a6","type":"debug","z":"f48abf30.643098","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":630,"y":1180,"wires":[]},{"id":"7ef3da8e.3e6c3c","type":"inject","z":"f48abf30.643098","name":"LOW_BAT false","props":[{"p":"topic","vt":"str"},{"p":"payload"},{"p":"iface","v":"HmIP-RF","vt":"str"},{"p":"deviceType","v":"HmIP-DLD","vt":"str"},{"p":"channelType","v":"MAINTENANCE_BAT_BL","vt":"str"},{"p":"channelIndex","v":"0","vt":"num"},{"p":"datapoint","v":"LOW_BAT","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"HmIP-DLD ... :0/LOW_BAT","payload":"false","payloadType":"bool","x":340,"y":1220,"wires":[["e90d4efb.31f71","c6e5f8aa.e7447"]]},{"id":"cf9afd29.b9a05","type":"inject","z":"f48abf30.643098","name":"LOW_BAT true","props":[{"p":"topic","vt":"str"},{"p":"payload"},{"p":"iface","v":"HmIP-RF","vt":"str"},{"p":"deviceType","v":"HmIP-DLD","vt":"str"},{"p":"channelType","v":"MAINTENANCE_BAT_BL","vt":"str"},{"p":"channelIndex","v":"0","vt":"num"},{"p":"datapoint","v":"LOW_BAT","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"HmIP-DLD ... :0/LOW_BAT","payload":"true","payloadType":"bool","x":340,"y":1260,"wires":[["e90d4efb.31f71","c6e5f8aa.e7447"]]},{"id":"c3216169.d94f7","type":"inject","z":"f48abf30.643098","name":"LOCK_STATE Locked -> Unknown","props":[{"p":"topic","vt":"str"},{"p":"payload"},{"p":"iface","v":"HmIP-RF","vt":"str"},{"p":"deviceType","v":"HmIP-DLD","vt":"str"},{"p":"channelType","v":"DOOR_LOCK_STATE_TRANSMITTER","vt":"str"},{"p":"channelIndex","v":"1","vt":"num"},{"p":"datapoint","v":"LOCK_STATE","vt":"str"},{"p":"valuePrevious","v":"1","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"HmIP-DLD ... :1/LOCK_STATE","payload":"0","payloadType":"num","x":400,"y":1480,"wires":[["e9eba4ae.cbc108"]]},{"id":"48738b9e.82d27c","type":"debug","z":"f48abf30.643098","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":870,"y":1260,"wires":[]},{"id":"e90d4efb.31f71","type":"change","z":"f48abf30.643098","name":"BatteryLevel","rules":[{"t":"set","p":"topic","pt":"msg","to":"1/BatteryLevel","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"$.payload ? 0 : 100","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":650,"y":1260,"wires":[["cce7a993.e0d298","48738b9e.82d27c"]]},{"id":"c6e5f8aa.e7447","type":"change","z":"f48abf30.643098","name":"StatusLowBattery","rules":[{"t":"set","p":"topic","pt":"msg","to":"1/StatusLowBattery","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"$.payload ? 1 : 0","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":1220,"wires":[["48738b9e.82d27c","cce7a993.e0d298"]]},{"id":"cce7a993.e0d298","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":835,"y":1220,"wires":[]},{"id":"76aee21b.2ba384","type":"ccu-set-value","z":"f48abf30.643098","name":"","iface":"","ccuConfig":"","rooms":"","roomsRx":"str","functions":"","functionsRx":"str","device":"","deviceRx":"str","deviceName":"","deviceNameRx":"str","deviceType":"HmIP-DLD","deviceTypeRx":"str","channel":"","channelRx":"str","channelName":"","channelNameRx":"str","channelType":"","channelTypeRx":"str","channelIndex":"","channelIndexRx":"str","datapoint":"","datapointRx":"str","force":false,"x":1220,"y":680,"wires":[]},{"id":"f2d60233.f8a03","type":"comment","z":"f48abf30.643098","name":"HomeKit","info":"","x":820,"y":640,"wires":[]},{"id":"579b2526.abb324","type":"ccu-rpc-event","z":"f48abf30.643098","name":"LOCK_STATE","iface":"","ccuConfig":"","rooms":"","roomsRx":"str","functions":"","functionsRx":"str","device":"","deviceRx":"str","deviceName":"","deviceNameRx":"str","deviceType":"HmIP-DLD","deviceTypeRx":"str","channel":"","channelRx":"str","channelName":"","channelNameRx":"str","channelType":"","channelTypeRx":"str","channelIndex":"","channelIndexRx":"str","datapoint":"LOCK_STATE","datapointRx":"str","change":false,"working":false,"cache":false,"topic":"${CCU}/${Interface}/${channelName}/${datapoint}","x":470,"y":1360,"wires":[["ce22b560.d98598","e9eba4ae.cbc108"]]},{"id":"9c254380.616e28","type":"inject","z":"f48abf30.643098","name":"LOCK_STATE Unknown -> Unlocked","props":[{"p":"topic","vt":"str"},{"p":"payload"},{"p":"iface","v":"HmIP-RF","vt":"str"},{"p":"deviceType","v":"HmIP-DLD","vt":"str"},{"p":"channelType","v":"DOOR_LOCK_STATE_TRANSMITTER","vt":"str"},{"p":"channelIndex","v":"1","vt":"num"},{"p":"datapoint","v":"LOCK_STATE","vt":"str"},{"p":"valuePrevious","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"HmIP-DLD ... :1/LOCK_STATE","payload":"2","payloadType":"num","x":400,"y":1520,"wires":[["e9eba4ae.cbc108"]]},{"id":"9cf577b0.433dd8","type":"inject","z":"f48abf30.643098","name":"LOCK_STATE Unknown -> Locked","props":[{"p":"topic","vt":"str"},{"p":"payload"},{"p":"iface","v":"HmIP-RF","vt":"str"},{"p":"deviceType","v":"HmIP-DLD","vt":"str"},{"p":"channelType","v":"DOOR_LOCK_STATE_TRANSMITTER","vt":"str"},{"p":"channelIndex","v":"1","vt":"num"},{"p":"datapoint","v":"LOCK_STATE","vt":"str"},{"p":"valuePrevious","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"HmIP-DLD ... :1/LOCK_STATE","payload":"1","payloadType":"num","x":400,"y":1440,"wires":[["e9eba4ae.cbc108"]]},{"id":"b9843382.ccee48","type":"inject","z":"f48abf30.643098","name":"LOCK_STATE Unlocked -> Unknown","props":[{"p":"topic","vt":"str"},{"p":"payload"},{"p":"iface","v":"HmIP-RF","vt":"str"},{"p":"deviceType","v":"HmIP-DLD","vt":"str"},{"p":"channelType","v":"DOOR_LOCK_STATE_TRANSMITTER","vt":"str"},{"p":"channelIndex","v":"1","vt":"num"},{"p":"datapoint","v":"LOCK_STATE","vt":"str"},{"p":"valuePrevious","v":"2","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"HmIP-DLD ... :1/LOCK_STATE","payload":"0","payloadType":"num","x":400,"y":1400,"wires":[["e9eba4ae.cbc108"]]},{"id":"ef30876a.7dfa4","type":"link out","z":"f48abf30.643098","name":"","links":["a25d63bd.41f6d8"],"x":835,"y":1400,"wires":[]},{"id":"ce22b560.d98598","type":"debug","z":"f48abf30.643098","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":670,"y":1360,"wires":[]},{"id":"e9eba4ae.cbc108","type":"function","z":"f48abf30.643098","name":"Lock*State","func":"const topics = [ '0/LockTargetState', '0/LockCurrentState' ];\n\nvar ret = { topic: '', payload: 0 };\n\nnode.status({fill:'blue',shape:'dot',text: msg.valuePrevious+' -> '+msg.payload});\n\nswitch (msg.payload) {\n  case 0:\n    ret.topic = topics[0];\n    if (msg.valuePrevious === 2) ret.payload = 1;\n    break;\n  case 1:\n    ret.topic = topics[1];\n    if (msg.valuePrevious === 0) ret.payload = 1;\n    break;\n  case 2:\n    ret.topic = topics[1];\n    break;\n  default:\n    node.status({});\n}\n\nreturn ret","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":1400,"wires":[["eac6be20.f6b9d8","ef30876a.7dfa4"]]},{"id":"eac6be20.f6b9d8","type":"debug","z":"f48abf30.643098","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":870,"y":1440,"wires":[]},{"id":"ec0845b2.24c2d","type":"switch","z":"f48abf30.643098","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":990,"y":680,"wires":[[],[]],"outputLabels":["UNSECURED","SECURED"]},{"id":"2572ba91.8a53ce","type":"redmatic-homekit-bridge","name":"NodeRed Bridge","username":"CC:22:3D:E3:CE:C6","pincode":"031-45-154","port":"51826"}]

Installiert euch HAP https://github.com/thkl/hap-homematic

Da sind alle Geräte inkl. der neuen KeyMatic drin und müsst nicht selber basteln. Auch die Benutzerberechtigung wird hier in HomeKit unterstützt. Allgemein ist HAP hier im längen vorne was die Einrichtung usw. angeht.

https://www.youtube.com/watch?v=rDqo296dNhA

https://www.verdrahtet.info/2020/05/02/homekit-und-homematic-einfach-wie-nie/

@ptweety Erstmal vielen Dank für deine ausführliche Hilfe und vor allem für die genommene Zeit. Ich versuche mal mit meinen Laien Kenntnissen es hinzubekommen

@beckentosch nimm HAP, da brauchst Du keine Kenntnisse.

@AdlerCentauri Naja NodeRed ist schon sehr mächtig und bevorzuge ich eigentlich auch. Damit kriege ich zum Beispiel auch Systemvariablen in HomeKit.

@beckentosch Geht mit HAP auch alles.

Bildschirmfoto 2021-04-21 um 14 21 13

Bildschirmfoto 2021-04-21 um 14 19 07

@AdlerCentauri du magst schon recht haben, wenn

  • man seine Logik-Schicht in der CCU hat
  • keine CCU-fremden Gerätschaften in HomeKit reinbekommen will
  • das alles auf der CCU installieren will (CCU connection und redmatic-homekit geht auch auf separater nodered Instanz)

Ja, das mag auch sein. Aber das der Herr @hobbyquaker sich hier nicht zu Wort meldet und man hier selber anfangen muss zu basteln finde ich schon nicht korrekt.

Nunja, deine etwas angespannte Attitüde zur Idee von Open Source hast du schon klar gemacht.
Jeder ist hier eingeladen - im Rahmen der eigenen Möglichkeiten - einen Beitrag zu leisten. Als gebastelt würde ich das nicht bezeichnen ...

@AdlerCentauri Zumal ich die neue HmIP-DLD nicht finde in HAP

fphBS commented

@ptweety erst mal vielen Dank für dieses großartige Projekt, ich habe viel Freude damit! Nun zu meiner Frage, habt ihr grundsätzlich vor HmIP-DLD als Home Kit Accessory Node zu unterstützen? Wenn ja, könnt ihr etwas zum Zeitplan sagen? Ich würde mich auch gerne als Tester anbieten oder mich an der Anschaffung der Hardware beteiligen.

Viele Grüße,
Florian

fphBS commented

@ptweety gibt es bereits Neuigkeiten zur Integration von HMIP DLD?

Sorry, ich entwickelte hier keine Integration für den DLD, sondern half nur bei einem Workaround. Ersteres fällt mir auch Mangels des Gerätes schwer.

fphBS commented

@ptweety Danke für deine Antwort! Wem könnte ich denn ansprechen bzw. wer kann mir Auskunft zu den Plänen geben? Ich kann leider nichts zum Code dieses Projekts beitragen, bin aber gerne bereit mich an den Anschaffungskosten für das HMIP DLD zu beteiligen.