@@ -269,9 +269,9 @@ export class DingzAccessory extends DingzDaBaseAccessory {
269269 this . getDeviceState ( )
270270 . then ( ( state ) => {
271271 if ( typeof state !== 'undefined' ) {
272- if ( ! this . isReachable ) {
272+ if ( this . reachabilityState !== null ) {
273273 // Update reachability -- obviously, we're online again
274- this . isReachable = true ;
274+ this . reachabilityState = null ;
275275 this . log . warn (
276276 `Device --> ${ this . accessory . displayName } (${ this . device . address } ) --> recovered from unreachable state` ,
277277 ) ;
@@ -293,7 +293,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
293293 } )
294294 . catch ( ( e ) => {
295295 if ( e instanceof DeviceNotReachableError ) {
296- this . isReachable = false ;
296+ this . reachabilityState = new Error ( ) ;
297297 this . log . error ( 'ERROR: Failure to retrieve state' , e . message ) ;
298298 } else {
299299 throw e ;
@@ -337,7 +337,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
337337 private getTemperature ( callback : CharacteristicSetCallback ) {
338338 // set this to a valid value for CurrentTemperature
339339 const currentTemperature : number = this . dingzStates . Temperature ;
340- callback ( null , currentTemperature ) ;
340+ callback ( this . reachabilityState , currentTemperature ) ;
341341 }
342342
343343 private addLightSensorService ( ) {
@@ -651,7 +651,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
651651 callback : CharacteristicGetCallback ,
652652 ) {
653653 const currentState = this . dingzStates . Buttons [ button ] . event ;
654- callback ( null , currentState ) ;
654+ callback ( this . reachabilityState , currentState ) ;
655655 }
656656
657657 private getSwitchButtonState (
@@ -660,7 +660,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
660660 ) {
661661 const currentState = this . dingzStates . Buttons [ button ] . state ;
662662 this . log . info ( 'Get Switch State of ->' , button , '-> state:' , currentState ) ;
663- callback ( null , currentState ) ;
663+ callback ( this . reachabilityState , currentState ) ;
664664 }
665665
666666 private setSwitchButtonState (
@@ -670,7 +670,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
670670 ) {
671671 this . dingzStates . Buttons [ button ] . state = value as ButtonState ;
672672 this . log . info ( 'Set Switch State of ->' , button , '-> state:' , value ) ;
673- callback ( null ) ;
673+ callback ( this . reachabilityState ) ;
674674 }
675675
676676 private addDimmerService ( {
@@ -765,15 +765,15 @@ export class DingzAccessory extends DingzDaBaseAccessory {
765765 e . toString ( ) ,
766766 ) ;
767767 }
768- callback ( null ) ;
768+ callback ( this . reachabilityState ) ;
769769 }
770770
771771 /**
772772 * Handle the "GET" requests from HomeKit
773773 */
774774 private getOn ( index : DimmerId , callback : CharacteristicGetCallback ) {
775775 const isOn : boolean = this . dingzStates . Dimmers [ index ] ?. on ?? false ;
776- callback ( null , isOn ) ;
776+ callback ( this . reachabilityState , isOn ) ;
777777 }
778778
779779 private async setBrightness (
@@ -786,7 +786,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
786786 this . dingzStates . Dimmers [ index ] . on = isOn ;
787787
788788 await this . setDeviceDimmer ( index , isOn , value as number ) ;
789- callback ( null ) ;
789+ callback ( this . reachabilityState ) ;
790790 }
791791
792792 // Add WindowCovering (Blinds)
@@ -931,9 +931,9 @@ export class DingzAccessory extends DingzDaBaseAccessory {
931931 id,
932932 blind : position as number ,
933933 lamella : windowCovering . lamella ,
934+ callback : callback ,
934935 } ) ;
935936 }
936- callback ( null ) ;
937937 }
938938
939939 private getPosition (
@@ -953,7 +953,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
953953 blind ,
954954 ) ;
955955
956- callback ( null , blind ) ;
956+ callback ( this . reachabilityState , blind ) ;
957957 }
958958
959959 private async setTiltAngle (
@@ -972,9 +972,9 @@ export class DingzAccessory extends DingzDaBaseAccessory {
972972 id,
973973 blind : this . dingzStates . WindowCovers [ id ] . lamella ,
974974 lamella : angle as number ,
975+ callback : callback ,
975976 } ) ;
976977 }
977- callback ( null ) ;
978978 }
979979
980980 /**
@@ -997,7 +997,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
997997 tiltAngle ,
998998 ) ;
999999
1000- callback ( null , tiltAngle ) ;
1000+ callback ( this . reachabilityState , tiltAngle ) ;
10011001 }
10021002
10031003 private getPositionState (
@@ -1030,7 +1030,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
10301030 positionState ,
10311031 ) ;
10321032 }
1033- callback ( null , positionState ) ;
1033+ callback ( this . reachabilityState , positionState ) ;
10341034 }
10351035
10361036 /**
@@ -1112,9 +1112,9 @@ export class DingzAccessory extends DingzDaBaseAccessory {
11121112 token : this . device . token ,
11131113 } )
11141114 . then ( ( { dingzDevices, inputConfig, dimmerConfig } ) => {
1115- if ( ! this . isReachable ) {
1115+ if ( this . reachabilityState !== null ) {
11161116 this . log . warn ( 'Device recovered from unreachable state' ) ;
1117- this . isReachable = true ;
1117+ this . reachabilityState = null ;
11181118 }
11191119
11201120 if ( inputConfig ?. inputs [ 0 ] ) {
@@ -1349,7 +1349,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
13491349
13501350 private getLEDOn ( callback : CharacteristicGetCallback ) {
13511351 const isOn = this . dingzStates . LED . on ;
1352- callback ( this . isReachable ? null : new Error ( ) , isOn ) ;
1352+ callback ( this . reachabilityState , isOn ) ;
13531353 }
13541354
13551355 private setLEDHue (
@@ -1463,10 +1463,12 @@ export class DingzAccessory extends DingzDaBaseAccessory {
14631463 id,
14641464 blind,
14651465 lamella,
1466+ callback,
14661467 } : {
14671468 id : WindowCoveringId ;
14681469 blind : number ;
14691470 lamella : number ;
1471+ callback : CharacteristicSetCallback ;
14701472 } ) {
14711473 // The API says the parameters can be omitted. This is not true
14721474 // {{ip}}/api/v1/shade/0?blind=<value>&lamella=<value>
@@ -1482,7 +1484,10 @@ export class DingzAccessory extends DingzDaBaseAccessory {
14821484 { encode : false } ,
14831485 ) ,
14841486 )
1485- . catch ( this . handleRequestErrors . bind ( this ) ) ;
1487+ . catch ( this . handleRequestErrors . bind ( this ) )
1488+ . finally ( ( ) => {
1489+ callback ( this . reachabilityState ) ;
1490+ } ) ;
14861491 }
14871492
14881493 // We need Target vs Current to accurately update WindowCoverings
@@ -1522,12 +1527,7 @@ export class DingzAccessory extends DingzDaBaseAccessory {
15221527 )
15231528 . catch ( this . handleRequestErrors . bind ( this ) )
15241529 . finally ( ( ) => {
1525- // make sure we callback
1526- if ( ! this . isReachable ) {
1527- callback ( new Error ( ) ) ;
1528- } else {
1529- callback ( null ) ;
1530- }
1530+ callback ( this . reachabilityState ) ;
15311531 } ) ;
15321532 }
15331533
0 commit comments