@@ -166,3 +166,252 @@ async def test_connect_adam_plus_anna_new(self):
166166
167167 await smile .close_connection ()
168168 await self .disconnect (server , client )
169+
170+ @pytest .mark .asyncio
171+ async def test_connect_adam_zone_per_device (self ):
172+ """Test an extensive setup of Adam with a zone per device."""
173+ self .smile_setup = "adam_zone_per_device"
174+
175+ testdata = self .load_testdata (SMILE_TYPE , self .smile_setup )
176+ server , smile , client = await self .connect_wrapper ()
177+ assert smile .smile_hostname == "smile000000"
178+
179+ self .validate_test_basics (
180+ _LOGGER ,
181+ smile ,
182+ smile_version = "3.0.15" ,
183+ )
184+
185+ await self .device_test (smile , "2022-05-16 00:00:01" , testdata )
186+ assert smile .gateway_id == "fe799307f1624099878210aa0b9f1475"
187+ assert smile ._last_active ["12493538af164a409c6a1c79e38afe1c" ] == BADKAMER_SCHEMA
188+ assert smile ._last_active ["c50f167537524366a5af7aa3942feb1e" ] == GF7_WOONKAMER
189+ assert smile ._last_active ["82fa13f017d240daa0d0ea1775420f24" ] == CV_JESSIE
190+ assert smile ._last_active ["08963fec7c53423ca5680aa4cb502c63" ] == BADKAMER_SCHEMA
191+ assert smile ._last_active ["446ac08dd04d4eff8ac57489757b7314" ] == BADKAMER_SCHEMA
192+ assert self .entity_items == 340
193+
194+ assert "af82e4ccf9c548528166d38e560662a4" in self .notifications
195+ await smile .delete_notification ()
196+
197+ result = await self .tinker_thermostat (
198+ smile , "c50f167537524366a5af7aa3942feb1e" , good_schedules = [GF7_WOONKAMER ]
199+ )
200+ assert result
201+ result = await self .tinker_thermostat (
202+ smile , "82fa13f017d240daa0d0ea1775420f24" , good_schedules = [CV_JESSIE ]
203+ )
204+ assert result
205+ switch_change = await self .tinker_switch (
206+ smile , "675416a629f343c495449970e2ca37b5"
207+ )
208+ assert not switch_change
209+
210+ reboot = await self .tinker_reboot (smile )
211+ assert reboot
212+
213+ await smile .close_connection ()
214+ await self .disconnect (server , client )
215+
216+ server , smile , client = await self .connect_wrapper (raise_timeout = True )
217+ await self .device_test (smile , "2022-05-16 00:00:01" , testdata , skip_testing = True )
218+ result = await self .tinker_thermostat (
219+ smile ,
220+ "c50f167537524366a5af7aa3942feb1e" ,
221+ good_schedules = [GF7_WOONKAMER ],
222+ unhappy = True ,
223+ )
224+ assert result
225+ result = await self .tinker_thermostat (
226+ smile ,
227+ "82fa13f017d240daa0d0ea1775420f24" ,
228+ good_schedules = [CV_JESSIE ],
229+ unhappy = True ,
230+ )
231+ assert result
232+
233+ tinkered = await self .tinker_max_boiler_temp (smile , unhappy = True )
234+ assert not tinkered
235+
236+ try :
237+ await smile .delete_notification ()
238+ notification_deletion = False # pragma: no cover
239+ except pw_exceptions .ConnectionFailedError :
240+ notification_deletion = True
241+ assert notification_deletion
242+
243+ reboot = await self .tinker_reboot (smile , unhappy = True )
244+ assert reboot
245+
246+ await smile .close_connection ()
247+ await self .disconnect (server , client )
248+
249+ @pytest .mark .asyncio
250+ async def test_connect_adam_multiple_devices_per_zone (self ):
251+ """Test an extensive setup of Adam with multiple devices per zone."""
252+ self .smile_setup = "adam_multiple_devices_per_zone"
253+
254+ testdata = self .load_testdata (SMILE_TYPE , self .smile_setup )
255+ server , smile , client = await self .connect_wrapper ()
256+ assert smile .smile_hostname == "smile000000"
257+
258+ self .validate_test_basics (
259+ _LOGGER ,
260+ smile ,
261+ smile_version = "3.0.15" ,
262+ )
263+
264+ await self .device_test (smile , "2022-05-16 00:00:01" , testdata )
265+ assert smile ._last_active ["12493538af164a409c6a1c79e38afe1c" ] == BADKAMER_SCHEMA
266+ assert smile ._last_active ["c50f167537524366a5af7aa3942feb1e" ] == GF7_WOONKAMER
267+ assert smile ._last_active ["82fa13f017d240daa0d0ea1775420f24" ] == CV_JESSIE
268+ assert smile ._last_active ["08963fec7c53423ca5680aa4cb502c63" ] == BADKAMER_SCHEMA
269+ assert smile ._last_active ["446ac08dd04d4eff8ac57489757b7314" ] == BADKAMER_SCHEMA
270+ assert self .entity_items == 340
271+
272+ assert "af82e4ccf9c548528166d38e560662a4" in self .notifications
273+
274+ result = await self .tinker_thermostat (
275+ smile , "c50f167537524366a5af7aa3942feb1e" , good_schedules = [GF7_WOONKAMER ]
276+ )
277+ assert result
278+ result = await self .tinker_thermostat (
279+ smile , "82fa13f017d240daa0d0ea1775420f24" , good_schedules = [CV_JESSIE ]
280+ )
281+ assert result
282+ switch_change = await self .tinker_switch (
283+ smile , "675416a629f343c495449970e2ca37b5"
284+ )
285+ assert not switch_change
286+ await smile .close_connection ()
287+ await self .disconnect (server , client )
288+
289+ @pytest .mark .asyncio
290+ async def test_adam_heatpump_cooling (self ):
291+ """Test Adam with heatpump in cooling mode and idle."""
292+ self .smile_setup = "adam_heatpump_cooling"
293+
294+ testdata = self .load_testdata (SMILE_TYPE , self .smile_setup )
295+ server , smile , client = await self .connect_wrapper ()
296+
297+ await self .device_test (smile , "2022-01-02 00:00:01" , testdata )
298+ assert smile ._last_active ["b52908550469425b812c87f766fe5303" ] == WERKDAG_SCHEMA
299+ assert smile ._last_active ["20e735858f8146cead98b873177a4f99" ] == WERKDAG_SCHEMA
300+ assert smile ._last_active ["e39529c79ab54fda9bed26cfc0447546" ] == WERKDAG_SCHEMA
301+ assert smile ._last_active ["9a27714b970547ee9a6bdadc2b815ad5" ] == WERKDAG_SCHEMA
302+ assert smile ._last_active ["93ac3f7bf25342f58cbb77c4a99ac0b3" ] == WERKDAG_SCHEMA
303+ assert smile ._last_active ["fa5fa6b34f6b40a0972988b20e888ed4" ] == WERKDAG_SCHEMA
304+ assert smile ._last_active ["04b15f6e884448288f811d29fb7b1b30" ] == WERKDAG_SCHEMA
305+ assert smile ._last_active ["a562019b0b1f47a4bde8ebe3dbe3e8a9" ] == WERKDAG_SCHEMA
306+ assert smile ._last_active ["8cf650a4c10c44819e426bed406aec34" ] == WERKDAG_SCHEMA
307+ assert smile ._last_active ["5cc21042f87f4b4c94ccb5537c47a53f" ] == WERKDAG_SCHEMA
308+ assert self .entity_items == 439
309+
310+ await smile .close_connection ()
311+ await self .disconnect (server , client )
312+
313+ @pytest .mark .asyncio
314+ async def test_connect_adam_onoff_cooling_fake_firmware (self ):
315+ """Test an Adam with a fake OnOff cooling device in cooling mode."""
316+ self .smile_setup = "adam_onoff_cooling_fake_firmware"
317+
318+ testdata = self .load_testdata (SMILE_TYPE , self .smile_setup )
319+ server , smile , client = await self .connect_wrapper ()
320+ assert smile .smile_hostname == "smile000000"
321+
322+ self .validate_test_basics (
323+ _LOGGER ,
324+ smile ,
325+ smile_version = None ,
326+ )
327+
328+ await self .device_test (smile , "2022-01-02 00:00:01" , testdata )
329+ assert self .entity_items == 58
330+ assert self .cooling_present
331+ # assert self._cooling_enabled - no cooling_enabled indication present
332+
333+ await smile .close_connection ()
334+ await self .disconnect (server , client )
335+
336+ @pytest .mark .asyncio
337+ async def test_connect_adam_plus_anna (self ):
338+ """Test Adam (firmware 3.0) with Anna setup."""
339+ self .smile_setup = "adam_plus_anna"
340+
341+ testdata = self .load_testdata (SMILE_TYPE , self .smile_setup )
342+ server , smile , client = await self .connect_wrapper ()
343+ assert smile .smile_hostname == "smile000000"
344+
345+ self .validate_test_basics (
346+ _LOGGER ,
347+ smile ,
348+ smile_version = "3.0.15" ,
349+ )
350+
351+ await self .device_test (smile , "2020-03-22 00:00:01" , testdata )
352+ assert smile .gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94"
353+ assert smile ._last_active ["009490cc2f674ce6b576863fbb64f867" ] == "Weekschema"
354+ assert self .entity_items == 73
355+ assert "6fb89e35caeb4b1cb275184895202d84" in self .notifications
356+
357+ result = await self .tinker_thermostat (
358+ smile , "009490cc2f674ce6b576863fbb64f867" , good_schedules = ["Weekschema" ]
359+ )
360+ assert result
361+ switch_change = await self .tinker_switch (
362+ smile , "aa6b0002df0a46e1b1eb94beb61eddfe"
363+ )
364+ assert switch_change
365+ await smile .close_connection ()
366+ await self .disconnect (server , client )
367+
368+ server , smile , client = await self .connect_wrapper (raise_timeout = True )
369+ await self .device_test (smile , "2020-03-22 00:00:01" , testdata , skip_testing = True )
370+ result = await self .tinker_thermostat (
371+ smile ,
372+ "009490cc2f674ce6b576863fbb64f867" ,
373+ good_schedules = ["Weekschema" ],
374+ unhappy = True ,
375+ )
376+ assert result
377+ switch_change = await self .tinker_switch (
378+ smile , "aa6b0002df0a46e1b1eb94beb61eddfe" , unhappy = True
379+ )
380+ assert switch_change
381+ await smile .close_connection ()
382+ await self .disconnect (server , client )
383+
384+ @pytest .mark .asyncio
385+ async def test_adam_plus_jip (self ):
386+ """Test Adam with Jip setup."""
387+ self .smile_setup = "adam_jip"
388+
389+ testdata = self .load_testdata (SMILE_TYPE , self .smile_setup )
390+ server , smile , client = await self .connect_wrapper ()
391+
392+ await self .device_test (smile , "2021-06-20 00:00:01" , testdata )
393+ assert smile .gateway_id == "b5c2386c6f6342669e50fe49dd05b188"
394+ assert smile ._last_active ["d58fec52899f4f1c92e4f8fad6d8c48c" ] is None
395+ assert smile ._last_active ["06aecb3d00354375924f50c47af36bd2" ] is None
396+ assert smile ._last_active ["d27aede973b54be484f6842d1b2802ad" ] is None
397+ assert smile ._last_active ["13228dab8ce04617af318a2888b3c548" ] is None
398+ assert self .entity_items == 228
399+
400+ # Negative test
401+ result = await self .tinker_thermostat (
402+ smile ,
403+ "13228dab8ce04617af318a2888b3c548" ,
404+ schedule_on = False ,
405+ good_schedules = [None ],
406+ )
407+ assert result
408+
409+ result = await self .tinker_thermostat_schedule (
410+ smile ,
411+ "13228dab8ce04617af318a2888b3c548" ,
412+ "off" ,
413+ good_schedules = [None ],
414+ )
415+ assert result
416+ await smile .close_connection ()
417+ await self .disconnect (server , client )
0 commit comments