Skip to content

Commit

Permalink
Revert "fix!: Remove permit_join_timeout (Koenkk#25082)"
Browse files Browse the repository at this point in the history
This reverts commit 7d63a87.
  • Loading branch information
rostwald committed Jan 9, 2025
1 parent 2ebf677 commit 655e35b
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 34 deletions.
3 changes: 1 addition & 2 deletions lib/extension/bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -698,8 +698,7 @@ export default class Bridge extends Extension {
channel: networkParams.channel,
},
log_level: logger.getLevel(),
permit_join: this.zigbee.getPermitJoin(),
permit_join_end: this.zigbee.getPermitJoinEnd(),
permit_join_timeout: this.zigbee.getPermitJoinTimeout(),
restart_required: this.restartRequired,
config,
config_schema: settings.schemaJson,
Expand Down
14 changes: 14 additions & 0 deletions lib/extension/homeassistant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2028,6 +2028,20 @@ export default class HomeAssistant extends Extension {
json_attributes_template: '{{ value_json.data.value | tojson }}',
},
},
{
type: 'sensor',
object_id: 'permit_join_timeout',
mockProperties: [],
discovery_payload: {
name: 'Permit join timeout',
device_class: 'duration',
unit_of_measurement: 's',
entity_category: 'diagnostic',
state_topic: true,
state_topic_postfix: 'info',
value_template: '{{ iif(value_json.permit_join_timeout is defined, value_json.permit_join_timeout, None) }}',
},
},

// Switches.
{
Expand Down
3 changes: 1 addition & 2 deletions lib/types/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,7 @@ export interface Zigbee2MQTTAPI {
channel: number;
};
log_level: 'debug' | 'info' | 'warning' | 'error';
permit_join: boolean;
permit_join_end: number | undefined;
permit_join_timeout: number;
restart_required: boolean;
config: Settings;
config_schema: typeof schemaJson;
Expand Down
8 changes: 2 additions & 6 deletions lib/zigbee.ts
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,8 @@ export default class Zigbee {
logger.info('Stopped zigbee-herdsman');
}

getPermitJoin(): boolean {
return this.herdsman.getPermitJoin();
}

getPermitJoinEnd(): number | undefined {
return this.herdsman.getPermitJoinEnd();
getPermitJoinTimeout(): number {
return this.herdsman.getPermitJoinTimeout();
}

async permitJoin(time: number, device?: Device): Promise<void> {
Expand Down
5 changes: 2 additions & 3 deletions test/extensions/bridge.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -300,9 +300,8 @@ describe('Extension: Bridge', () => {
config_schema: settings.schemaJson,
coordinator: {ieee_address: '0x00124b00120144ae', meta: {revision: 20190425, version: 1}, type: 'z-Stack'},
log_level: 'info',
network: {channel: 15, extended_pan_id: '0x64c5fd698daf0c00', pan_id: 5674},
permit_join: false,
permit_join_end: undefined,
network: {channel: 15, extended_pan_id: 0x001122, pan_id: 5674},
permit_join_timeout: 0,
restart_required: false,
version: version.version,
zigbee_herdsman: zhVersion,
Expand Down
20 changes: 20 additions & 0 deletions test/extensions/homeassistant.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2505,6 +2505,26 @@ describe('Extension: HomeAssistant', () => {
{retain: true, qos: 1},
);

payload = {
name: 'Permit join timeout',
object_id: 'zigbee2mqtt_bridge_permit_join_timeout',
entity_category: 'diagnostic',
device_class: 'duration',
unit_of_measurement: 's',
unique_id: 'bridge_0x00124b00120144ae_permit_join_timeout_zigbee2mqtt',
state_topic: 'zigbee2mqtt/bridge/info',
value_template: '{{ iif(value_json.permit_join_timeout is defined, value_json.permit_join_timeout, None) }}',
origin: origin,
device: devicePayload,
availability: [{topic: 'zigbee2mqtt/bridge/state', value_template: '{{ value_json.state }}'}],
availability_mode: 'all',
};
expect(mockMQTT.publishAsync).toHaveBeenCalledWith(
'homeassistant/sensor/1221051039810110150109113116116_0x00124b00120144ae/permit_join_timeout/config',
stringify(payload),
{retain: true, qos: 1},
);

// Switches.
payload = {
name: 'Permit join',
Expand Down
37 changes: 16 additions & 21 deletions test/mocks/zigbeeHerdsman.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1123,27 +1123,22 @@ export const mockController = {
on: (type: string, handler: EventHandler): void => {
events[type] = handler;
},
start: vi.fn((): Promise<AdapterTypes.StartResult> => Promise.resolve('reset')),
stop: vi.fn(),
touchlinkIdentify: vi.fn(),
touchlinkScan: vi.fn(),
touchlinkFactoryReset: vi.fn(),
touchlinkFactoryResetFirst: vi.fn(),
addInstallCode: vi.fn(),
permitJoin: vi.fn(),
getPermitJoin: vi.fn((): boolean => false),
getPermitJoinEnd: vi.fn((): number | undefined => undefined),
isStopping: vi.fn((): boolean => false),
backup: vi.fn(),
coordinatorCheck: vi.fn(),
getCoordinatorVersion: vi.fn(
(): Promise<AdapterTypes.CoordinatorVersion> => Promise.resolve({type: 'z-Stack', meta: {version: 1, revision: 20190425}}),
),
getNetworkParameters: vi.fn(
(): Promise<AdapterTypes.NetworkParameters> => Promise.resolve({panID: 0x162a, extendedPanID: '0x64c5fd698daf0c00', channel: 15}),
),
getDevices: vi.fn((): Device[] => []),
getDevicesIterator: vi.fn(function* (predicate?: (value: Device) => boolean): Generator<Device> {
start: jest.fn((): Promise<StartResult> => Promise.resolve('reset')),
stop: jest.fn(),
touchlinkIdentify: jest.fn(),
touchlinkScan: jest.fn(),
touchlinkFactoryReset: jest.fn(),
touchlinkFactoryResetFirst: jest.fn(),
addInstallCode: jest.fn(),
permitJoin: jest.fn(),
getPermitJoinTimeout: jest.fn((): number => 0),
isStopping: jest.fn((): boolean => false),
backup: jest.fn(),
coordinatorCheck: jest.fn(),
getCoordinatorVersion: jest.fn((): Promise<CoordinatorVersion> => Promise.resolve({type: 'z-Stack', meta: {version: 1, revision: 20190425}})),
getNetworkParameters: jest.fn((): Promise<NetworkParameters> => Promise.resolve({panID: 0x162a, extendedPanID: 0x001122, channel: 15})),
getDevices: jest.fn((): Device[] => []),
getDevicesIterator: jest.fn(function* (predicate?: (value: Device) => boolean): Generator<Device> {
for (const key in devices) {
const device = devices[key as keyof typeof devices];

Expand Down

0 comments on commit 655e35b

Please sign in to comment.