Skip to content

Sync

Auto-generated synchronous facade for Api.

Do not edit this file directly.

It is generated from api.Api by codegen/src/hassette_codegen/sync_facade/.

ApiSyncFacade

Bases: Resource

Synchronous facade for the API service.

This class provides synchronous methods that wrap the asynchronous methods of the Api class, allowing for blocking calls in a synchronous context.

These methods must not be called from within the event loop; doing so raises a RuntimeError. Use the asynchronous methods on Api directly when operating within an event loop.

Source code in src/hassette/api/sync.py
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
class ApiSyncFacade(Resource):
    """Synchronous facade for the API service.

    This class provides synchronous methods that wrap the asynchronous methods of the Api class,
    allowing for blocking calls in a synchronous context.

    These methods must not be called from within the event loop; doing so raises a RuntimeError.
    Use the asynchronous methods on ``Api`` directly when operating within an event loop.
    """

    _api: "Api"

    def __init__(self, hassette: "Hassette", *, api: "Api", parent: Resource | None = None) -> None:
        super().__init__(hassette, parent=parent)
        self._api = api

    async def on_initialize(self) -> None:
        self.mark_ready(reason="Synchronous API facade initialized")

    @property
    def config_log_level(self) -> LOG_LEVEL_TYPE:
        return self.hassette.config.logging.api

    def ws_send_and_wait(self, **data: Any) -> Any:
        """Send a WebSocket message and wait for a response."""

        return self.task_bucket.run_sync(self._api.ws_send_and_wait(**data))

    def ws_send_json(self, **data: Any) -> None:
        """Send a WebSocket message without waiting for a response."""

        return self.task_bucket.run_sync(self._api.ws_send_json(**data))

    def rest_request(
        self,
        method: str,
        url: str,
        params: dict[str, Any] | None = None,
        data: dict[str, Any] | None = None,
        suppress_error_message: bool = False,
        **kwargs: Any,
    ) -> aiohttp.ClientResponse:
        """Make a REST request to the Home Assistant API.

        Args:
            method: The HTTP method to use (e.g., "GET", "POST").
            url: The URL endpoint for the request.
            params: Query parameters for the request.
            data: JSON payload for the request.
            suppress_error_message: Whether to suppress error messages.

        Returns:
            The response from the API."""

        return self.task_bucket.run_sync(
            self._api.rest_request(method, url, params, data, suppress_error_message, **kwargs)
        )

    def get_rest_request(self, url: str, params: dict[str, Any] | None = None, **kwargs: Any) -> aiohttp.ClientResponse:
        """Make a GET request to the Home Assistant API.

        Args:
            url: The URL endpoint for the request.
            params: Query parameters for the request.
            kwargs: Additional keyword arguments to pass to the request.

        Returns:
            The response from the API."""

        return self.task_bucket.run_sync(self._api.get_rest_request(url, params, **kwargs))

    def post_rest_request(self, url: str, data: dict[str, Any] | None = None, **kwargs: Any) -> aiohttp.ClientResponse:
        """Make a POST request to the Home Assistant API.

        Args:
            url: The URL endpoint for the request.
            data: JSON payload for the request.
            kwargs: Additional keyword arguments to pass to the request.

        Returns:
            The response from the API."""

        return self.task_bucket.run_sync(self._api.post_rest_request(url, data, **kwargs))

    def delete_rest_request(self, url: str, **kwargs: Any) -> aiohttp.ClientResponse:
        """Make a DELETE request to the Home Assistant API.

        Args:
            url: The URL endpoint for the request.
            kwargs: Additional keyword arguments to pass to the request.

        Returns:
            The response from the API."""

        return self.task_bucket.run_sync(self._api.delete_rest_request(url, **kwargs))

    def get_states_raw(self) -> list["HassStateDict"]:
        """Get all entities in Home Assistant as raw dictionaries.

        Returns:
            A list of states as dictionaries."""

        return self.task_bucket.run_sync(self._api.get_states_raw())

    def get_states(self) -> list["BaseState"]:
        """Get all entities in Home Assistant, converted to their appropriate state types.

        If a state fails to convert, it is skipped with an error logged. If there is no registered
        state class for a domain, the generic BaseState is used.

        Returns:
            A list of states, converted to their appropriate state types."""

        return self.task_bucket.run_sync(self._api.get_states())

    def get_config(self) -> dict[str, Any]:
        """Get the Home Assistant configuration.

        Returns:
            The configuration data."""

        return self.task_bucket.run_sync(self._api.get_config())

    def get_services(self) -> dict[str, Any]:
        """Get the available services in Home Assistant.

        Returns:
            The services data."""

        return self.task_bucket.run_sync(self._api.get_services())

    def get_panels(self) -> dict[str, Any]:
        """Get the available panels in Home Assistant.

        Returns:
            The panels data."""

        return self.task_bucket.run_sync(self._api.get_panels())

    def fire_event(self, event_type: str, event_data: dict[str, Any] | None = None) -> dict[str, Any]:
        """Fire a custom event in Home Assistant.

        Args:
            event_type: The type of the event to fire (e.g., "custom_event").
            event_data: Additional data to include with the event.

        Returns:
            The response from Home Assistant."""

        return self.task_bucket.run_sync(self._api.fire_event(event_type, event_data))

    def call_service(
        self,
        domain: str,
        service: str,
        target: dict[str, str] | dict[str, list[str]] | None = None,
        return_response: bool | None = False,
        **data: Any,
    ) -> ServiceResponse | None:
        """Call a Home Assistant service.

        Args:
            domain: The domain of the service (e.g., "light").
            service: The name of the service to call (e.g., "turn_on").
            target: Target entity IDs or areas.
            return_response: Whether to return the response from Home Assistant. Defaults to False.
            **data: Additional data to send with the service call.

        Returns:
            ServiceResponse | None: The response from Home Assistant if return_response is True. Otherwise None."""

        return self.task_bucket.run_sync(self._api.call_service(domain, service, target, return_response, **data))

    def turn_on(self, entity_id: str | StrEnum, domain: str = "homeassistant", **data: Any) -> None:
        """Turn on a specific entity in Home Assistant.

        Args:
            entity_id: The ID of the entity to turn on (e.g., "light.office").
            domain: The domain to use for the service call (default: ``"homeassistant"``).
                This calls the generic ``homeassistant.turn_on`` service, which is deprecated
                in Home Assistant 2024.x in favor of domain-specific services. For lights,
                pass ``domain="light"``; for switches, pass ``domain="switch"``."""

        return self.task_bucket.run_sync(self._api.turn_on(entity_id, domain, **data))

    def turn_off(self, entity_id: str | StrEnum, domain: str = "homeassistant"):
        """Turn off a specific entity in Home Assistant.

        Args:
            entity_id: The ID of the entity to turn off (e.g., "light.office").
            domain: The domain to use for the service call (default: ``"homeassistant"``).
                This calls the generic ``homeassistant.turn_off`` service, which is deprecated
                in Home Assistant 2024.x in favor of domain-specific services. For lights,
                pass ``domain="light"``; for switches, pass ``domain="switch"``."""

        return self.task_bucket.run_sync(self._api.turn_off(entity_id, domain))

    def toggle_service(self, entity_id: str | StrEnum, domain: str = "homeassistant"):
        """Toggle a specific entity in Home Assistant.

        Args:
            entity_id: The ID of the entity to toggle (e.g., "light.office").
            domain: The domain to use for the service call (default: ``"homeassistant"``).
                This calls the generic ``homeassistant.toggle`` service, which is deprecated
                in Home Assistant 2024.x in favor of domain-specific services. For lights,
                pass ``domain="light"``; for switches, pass ``domain="switch"``."""

        return self.task_bucket.run_sync(self._api.toggle_service(entity_id, domain))

    def get_state_raw(self, entity_id: str) -> "HassStateDict":
        """Get the state of a specific entity.

        Args:
            entity_id: The ID of the entity to get the state for.

        Returns:
            The state of the entity as raw data."""

        return self.task_bucket.run_sync(self._api.get_state_raw(entity_id))

    def entity_exists(self, entity_id: str) -> bool:
        """Check if a specific entity exists.

        Args:
            entity_id: The ID of the entity to check.

        Returns:
            True if the entity exists, False otherwise."""

        return self.task_bucket.run_sync(self._api.entity_exists(entity_id))

    def get_entity(self, entity_id: str, model: type["EntityT"]) -> "EntityT":
        """Get an entity object for a specific entity.

        Args:
            entity_id: The ID of the entity to get.
            model: The model class to use for the entity.

        Returns:
            The entity object."""

        return self.task_bucket.run_sync(self._api.get_entity(entity_id, model))

    def get_entity_or_none(self, entity_id: str, model: type["EntityT"]) -> "EntityT | None":
        """Get an entity object for a specific entity, or None if it does not exist.

        Args:
            entity_id: The ID of the entity to get.
            model: The model class to use for the entity.

        Returns:
            The entity object, or None if it does not exist."""

        return self.task_bucket.run_sync(self._api.get_entity_or_none(entity_id, model))

    def get_state(self, entity_id: str) -> "BaseState":
        """Get the state of a specific entity.

        Args:
            entity_id: The ID of the entity to get the state for.

        Returns:
            The state of the entity converted to the specified model type."""

        return self.task_bucket.run_sync(self._api.get_state(entity_id))

    def get_state_or_none(self, entity_id: str) -> "BaseState | None":
        """Get the state of a specific entity, or None if it does not exist.

        Args:
            entity_id: The ID of the entity to get the state for.

        Returns:
            The state of the entity converted to the specified model type, or None if it does not exist."""

        return self.task_bucket.run_sync(self._api.get_state_or_none(entity_id))

    def get_state_value(self, entity_id: str) -> Any:
        """Get the state of a specific entity without converting it to a state object.

        Args:
            entity_id: The ID of the entity to get the state for.

        Returns:
            The state of the entity as raw data.

        Note:
            While most default methods in this library work with state objects for
            strong typing, this method is designed to return the raw state value,
            as it is likely overkill to convert it to a state object for simple state value retrieval."""

        return self.task_bucket.run_sync(self._api.get_state_value(entity_id))

    def get_state_value_typed(self, entity_id: str) -> "Any":
        """Get the value of a specific entity's state, converted to the correct type for that state.

        The return type here is Any due to the dynamic nature of this conversion, but the return type
        at runtime will match the expected value type for the specific state class of the entity.

        Args:
            entity_id: The ID of the entity to get the state for.

        Returns:
            The state of the entity converted to the specified model type.

        Raises:
            TypeError: If the model is not a valid StateType subclass.

        Warning:
            For states like `SensorState` the value type in Hassette is `str`, even if the sensor represents a number,
            as we cannot be sure of the actual type without additional context. For these cases, you are responsible
            for converting the string to the desired type."""

        return self.task_bucket.run_sync(self._api.get_state_value_typed(entity_id))

    def get_attribute(self, entity_id: str, attribute: str) -> Any | FalseySentinel:
        """Get a specific attribute of an entity.

        Args:
            entity_id: The ID of the entity to get the attribute for.
            attribute: The name of the attribute to retrieve. Can be a dot-separated path for nested attributes.

        Returns:
            The value of the specified attribute, or MISSING_VALUE sentinel if the attribute does not exist."""

        return self.task_bucket.run_sync(self._api.get_attribute(entity_id, attribute))

    def get_history(
        self,
        entity_id: str,
        start_time: PlainDateTime | ZonedDateTime | Date | str,
        end_time: PlainDateTime | ZonedDateTime | Date | str | None = None,
        significant_changes_only: bool = False,
        minimal_response: bool = False,
        no_attributes: bool = False,
    ) -> list[HistoryEntry]:
        """Get the history of a specific entity.

        Args:
            entity_id: The ID of the entity to get the history for.
            start_time: The start time for the history range.
            end_time: The end time for the history range.
            significant_changes_only: Whether to only include significant changes.
            minimal_response: Whether to request a minimal response.
            no_attributes: Whether to exclude attributes from the response.

        Returns:
            A list of history entries for the specified entity."""

        return self.task_bucket.run_sync(
            self._api.get_history(
                entity_id, start_time, end_time, significant_changes_only, minimal_response, no_attributes
            )
        )

    def get_histories(
        self,
        entity_ids: list[str],
        start_time: PlainDateTime | ZonedDateTime | Date | str,
        end_time: PlainDateTime | ZonedDateTime | Date | str | None = None,
        significant_changes_only: bool = False,
        minimal_response: bool = False,
        no_attributes: bool = False,
    ) -> dict[str, list[HistoryEntry]]:
        """Get the history for multiple entities.

        Args:
            entity_ids: The IDs of the entities to get the history for.
            start_time: The start time for the history range.
            end_time: The end time for the history range.
            significant_changes_only: Whether to only include significant changes.
            minimal_response: Whether to request a minimal response.
            no_attributes: Whether to exclude attributes from the response.

        Returns:
            A dictionary mapping entity IDs to their respective history entries."""

        return self.task_bucket.run_sync(
            self._api.get_histories(
                entity_ids, start_time, end_time, significant_changes_only, minimal_response, no_attributes
            )
        )

    def get_logbook(
        self,
        entity_id: str,
        start_time: PlainDateTime | ZonedDateTime | Date | str,
        end_time: PlainDateTime | ZonedDateTime | Date | str,
    ) -> list[dict]:
        """Get the logbook entries for a specific entity.

        Args:
            entity_id: The ID of the entity to get the logbook entries for.
            start_time: The start time for the logbook range.
            end_time: The end time for the logbook range.

        Returns:
            A list of logbook entries for the specified entity."""

        return self.task_bucket.run_sync(self._api.get_logbook(entity_id, start_time, end_time))

    def set_state(self, entity_id: str | StrEnum, state: Any, attributes: dict[str, Any] | None = None) -> dict:
        """Set the state of a specific entity.

        Args:
            entity_id: The ID of the entity to set the state for.
            state: The new state value to set.
            attributes: Additional attributes to set for the entity.

        Returns:
            The response from Home Assistant after setting the state."""

        return self.task_bucket.run_sync(self._api.set_state(entity_id, state, attributes))

    def get_camera_image(
        self, entity_id: str, timestamp: PlainDateTime | ZonedDateTime | Date | str | None = None
    ) -> bytes:
        """Get the latest camera image for a specific entity.

        Args:
            entity_id: The ID of the camera entity to get the image for.
            timestamp: The timestamp for the image. If None, the latest image is returned.

        Returns:
            The camera image data."""

        return self.task_bucket.run_sync(self._api.get_camera_image(entity_id, timestamp))

    def get_calendars(self) -> list[dict]:
        """Get the list of calendars."""

        return self.task_bucket.run_sync(self._api.get_calendars())

    def get_calendar_events(
        self,
        calendar_id: str,
        start_time: PlainDateTime | ZonedDateTime | Date | str,
        end_time: PlainDateTime | ZonedDateTime | Date | str,
    ) -> list[dict]:
        """Get events from a specific calendar.

        Args:
            calendar_id: The ID of the calendar to get events from.
            start_time: The start time for the event range.
            end_time: The end time for the event range.

        Returns:
            A list of calendar events."""

        return self.task_bucket.run_sync(self._api.get_calendar_events(calendar_id, start_time, end_time))

    def render_template(self, template: str, variables: dict | None = None) -> str:
        """Render a template with given variables.

        Args:
            template: The template string to render.
            variables: Variables to use in the template.

        Returns:
            The rendered template result."""

        return self.task_bucket.run_sync(self._api.render_template(template, variables))

    def delete_entity(self, entity_id: str) -> None:
        """Delete a specific entity.

        Args:
            entity_id: The ID of the entity to delete.

        Raises:
            RuntimeError: If the deletion fails."""

        return self.task_bucket.run_sync(self._api.delete_entity(entity_id))

    def list_input_booleans(self) -> list[InputBooleanRecord]:
        """List all stored input_boolean helpers.

        Returns:
            List of InputBooleanRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_input_booleans())

    def create_input_boolean(self, params: CreateInputBooleanParams) -> InputBooleanRecord:
        """Create a new input_boolean helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_input_boolean(params))

    def update_input_boolean(self, helper_id: str, params: UpdateInputBooleanParams) -> InputBooleanRecord:
        """Update an existing input_boolean helper.

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_input_boolean(helper_id, params))

    def delete_input_boolean(self, helper_id: str) -> None:
        """Delete an input_boolean helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_input_boolean(helper_id))

    def list_input_numbers(self) -> list[InputNumberRecord]:
        """List all stored input_number helpers.

        Returns:
            List of InputNumberRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_input_numbers())

    def create_input_number(self, params: CreateInputNumberParams) -> InputNumberRecord:
        """Create a new input_number helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_input_number(params))

    def update_input_number(self, helper_id: str, params: UpdateInputNumberParams) -> InputNumberRecord:
        """Update an existing input_number helper.

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_input_number(helper_id, params))

    def delete_input_number(self, helper_id: str) -> None:
        """Delete an input_number helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_input_number(helper_id))

    def list_input_texts(self) -> list[InputTextRecord]:
        """List all stored input_text helpers.

        Returns:
            List of InputTextRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_input_texts())

    def create_input_text(self, params: CreateInputTextParams) -> InputTextRecord:
        """Create a new input_text helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_input_text(params))

    def update_input_text(self, helper_id: str, params: UpdateInputTextParams) -> InputTextRecord:
        """Update an existing input_text helper.

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_input_text(helper_id, params))

    def delete_input_text(self, helper_id: str) -> None:
        """Delete an input_text helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_input_text(helper_id))

    def list_input_selects(self) -> list[InputSelectRecord]:
        """List all stored input_select helpers.

        Returns:
            List of InputSelectRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_input_selects())

    def create_input_select(self, params: CreateInputSelectParams) -> InputSelectRecord:
        """Create a new input_select helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_input_select(params))

    def update_input_select(self, helper_id: str, params: UpdateInputSelectParams) -> InputSelectRecord:
        """Update an existing input_select helper.

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_input_select(helper_id, params))

    def delete_input_select(self, helper_id: str) -> None:
        """Delete an input_select helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_input_select(helper_id))

    def list_input_datetimes(self) -> list[InputDatetimeRecord]:
        """List all stored input_datetime helpers.

        Returns:
            List of InputDatetimeRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_input_datetimes())

    def create_input_datetime(self, params: CreateInputDatetimeParams) -> InputDatetimeRecord:
        """Create a new input_datetime helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_input_datetime(params))

    def update_input_datetime(self, helper_id: str, params: UpdateInputDatetimeParams) -> InputDatetimeRecord:
        """Update an existing input_datetime helper.

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_input_datetime(helper_id, params))

    def delete_input_datetime(self, helper_id: str) -> None:
        """Delete an input_datetime helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_input_datetime(helper_id))

    def list_input_buttons(self) -> list[InputButtonRecord]:
        """List all stored input_button helpers.

        Returns:
            List of InputButtonRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_input_buttons())

    def create_input_button(self, params: CreateInputButtonParams) -> InputButtonRecord:
        """Create a new input_button helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_input_button(params))

    def update_input_button(self, helper_id: str, params: UpdateInputButtonParams) -> InputButtonRecord:
        """Update an existing input_button helper.

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_input_button(helper_id, params))

    def delete_input_button(self, helper_id: str) -> None:
        """Delete an input_button helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_input_button(helper_id))

    def list_counters(self) -> list[CounterRecord]:
        """List all stored counter helpers.

        Returns:
            List of CounterRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_counters())

    def create_counter(self, params: CreateCounterParams) -> CounterRecord:
        """Create a new counter helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_counter(params))

    def update_counter(self, helper_id: str, params: UpdateCounterParams) -> CounterRecord:
        """Update an existing counter helper (stored config, not live value).

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_counter(helper_id, params))

    def delete_counter(self, helper_id: str) -> None:
        """Delete a counter helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_counter(helper_id))

    def list_timers(self) -> list[TimerRecord]:
        """List all stored timer helpers.

        Returns:
            List of TimerRecord instances representing stored configs."""

        return self.task_bucket.run_sync(self._api.list_timers())

    def create_timer(self, params: CreateTimerParams) -> TimerRecord:
        """Create a new timer helper.

        Args:
            params: Parameters for the new helper.

        Returns:
            The stored record returned by Home Assistant."""

        return self.task_bucket.run_sync(self._api.create_timer(params))

    def update_timer(self, helper_id: str, params: UpdateTimerParams) -> TimerRecord:
        """Update an existing timer helper.

        Args:
            helper_id: The ID of the helper to update.
            params: Fields to update (unset fields are left unchanged).

        Returns:
            The updated stored record."""

        return self.task_bucket.run_sync(self._api.update_timer(helper_id, params))

    def delete_timer(self, helper_id: str) -> None:
        """Delete a timer helper.

        Args:
            helper_id: The ID of the helper to delete."""

        return self.task_bucket.run_sync(self._api.delete_timer(helper_id))

    def increment_counter(self, entity_id: str) -> None:
        """Increment a counter entity's current value (live state, not stored config).

        Args:
            entity_id: The entity ID of the counter (e.g. ``"counter.motion_count"``)."""

        return self.task_bucket.run_sync(self._api.increment_counter(entity_id))

    def decrement_counter(self, entity_id: str) -> None:
        """Decrement a counter entity's current value (live state, not stored config).

        Args:
            entity_id: The entity ID of the counter (e.g. ``"counter.motion_count"``)."""

        return self.task_bucket.run_sync(self._api.decrement_counter(entity_id))

    def reset_counter(self, entity_id: str) -> None:
        """Reset a counter entity's value to its configured initial (live state, not stored config).

        Args:
            entity_id: The entity ID of the counter (e.g. ``"counter.motion_count"``)."""

        return self.task_bucket.run_sync(self._api.reset_counter(entity_id))

ws_send_and_wait(**data: Any) -> Any

Send a WebSocket message and wait for a response.

Source code in src/hassette/api/sync.py
77
78
79
80
def ws_send_and_wait(self, **data: Any) -> Any:
    """Send a WebSocket message and wait for a response."""

    return self.task_bucket.run_sync(self._api.ws_send_and_wait(**data))

ws_send_json(**data: Any) -> None

Send a WebSocket message without waiting for a response.

Source code in src/hassette/api/sync.py
82
83
84
85
def ws_send_json(self, **data: Any) -> None:
    """Send a WebSocket message without waiting for a response."""

    return self.task_bucket.run_sync(self._api.ws_send_json(**data))

rest_request(method: str, url: str, params: dict[str, Any] | None = None, data: dict[str, Any] | None = None, suppress_error_message: bool = False, **kwargs: Any) -> aiohttp.ClientResponse

Make a REST request to the Home Assistant API.

Parameters:

Name Type Description Default
method str

The HTTP method to use (e.g., "GET", "POST").

required
url str

The URL endpoint for the request.

required
params dict[str, Any] | None

Query parameters for the request.

None
data dict[str, Any] | None

JSON payload for the request.

None
suppress_error_message bool

Whether to suppress error messages.

False

Returns:

Type Description
ClientResponse

The response from the API.

Source code in src/hassette/api/sync.py
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
def rest_request(
    self,
    method: str,
    url: str,
    params: dict[str, Any] | None = None,
    data: dict[str, Any] | None = None,
    suppress_error_message: bool = False,
    **kwargs: Any,
) -> aiohttp.ClientResponse:
    """Make a REST request to the Home Assistant API.

    Args:
        method: The HTTP method to use (e.g., "GET", "POST").
        url: The URL endpoint for the request.
        params: Query parameters for the request.
        data: JSON payload for the request.
        suppress_error_message: Whether to suppress error messages.

    Returns:
        The response from the API."""

    return self.task_bucket.run_sync(
        self._api.rest_request(method, url, params, data, suppress_error_message, **kwargs)
    )

get_rest_request(url: str, params: dict[str, Any] | None = None, **kwargs: Any) -> aiohttp.ClientResponse

Make a GET request to the Home Assistant API.

Parameters:

Name Type Description Default
url str

The URL endpoint for the request.

required
params dict[str, Any] | None

Query parameters for the request.

None
kwargs Any

Additional keyword arguments to pass to the request.

{}

Returns:

Type Description
ClientResponse

The response from the API.

Source code in src/hassette/api/sync.py
112
113
114
115
116
117
118
119
120
121
122
123
def get_rest_request(self, url: str, params: dict[str, Any] | None = None, **kwargs: Any) -> aiohttp.ClientResponse:
    """Make a GET request to the Home Assistant API.

    Args:
        url: The URL endpoint for the request.
        params: Query parameters for the request.
        kwargs: Additional keyword arguments to pass to the request.

    Returns:
        The response from the API."""

    return self.task_bucket.run_sync(self._api.get_rest_request(url, params, **kwargs))

post_rest_request(url: str, data: dict[str, Any] | None = None, **kwargs: Any) -> aiohttp.ClientResponse

Make a POST request to the Home Assistant API.

Parameters:

Name Type Description Default
url str

The URL endpoint for the request.

required
data dict[str, Any] | None

JSON payload for the request.

None
kwargs Any

Additional keyword arguments to pass to the request.

{}

Returns:

Type Description
ClientResponse

The response from the API.

Source code in src/hassette/api/sync.py
125
126
127
128
129
130
131
132
133
134
135
136
def post_rest_request(self, url: str, data: dict[str, Any] | None = None, **kwargs: Any) -> aiohttp.ClientResponse:
    """Make a POST request to the Home Assistant API.

    Args:
        url: The URL endpoint for the request.
        data: JSON payload for the request.
        kwargs: Additional keyword arguments to pass to the request.

    Returns:
        The response from the API."""

    return self.task_bucket.run_sync(self._api.post_rest_request(url, data, **kwargs))

delete_rest_request(url: str, **kwargs: Any) -> aiohttp.ClientResponse

Make a DELETE request to the Home Assistant API.

Parameters:

Name Type Description Default
url str

The URL endpoint for the request.

required
kwargs Any

Additional keyword arguments to pass to the request.

{}

Returns:

Type Description
ClientResponse

The response from the API.

Source code in src/hassette/api/sync.py
138
139
140
141
142
143
144
145
146
147
148
def delete_rest_request(self, url: str, **kwargs: Any) -> aiohttp.ClientResponse:
    """Make a DELETE request to the Home Assistant API.

    Args:
        url: The URL endpoint for the request.
        kwargs: Additional keyword arguments to pass to the request.

    Returns:
        The response from the API."""

    return self.task_bucket.run_sync(self._api.delete_rest_request(url, **kwargs))

get_states_raw() -> list[HassStateDict]

Get all entities in Home Assistant as raw dictionaries.

Returns:

Type Description
list[HassStateDict]

A list of states as dictionaries.

Source code in src/hassette/api/sync.py
150
151
152
153
154
155
156
def get_states_raw(self) -> list["HassStateDict"]:
    """Get all entities in Home Assistant as raw dictionaries.

    Returns:
        A list of states as dictionaries."""

    return self.task_bucket.run_sync(self._api.get_states_raw())

get_states() -> list[BaseState]

Get all entities in Home Assistant, converted to their appropriate state types.

If a state fails to convert, it is skipped with an error logged. If there is no registered state class for a domain, the generic BaseState is used.

Returns:

Type Description
list[BaseState]

A list of states, converted to their appropriate state types.

Source code in src/hassette/api/sync.py
158
159
160
161
162
163
164
165
166
167
def get_states(self) -> list["BaseState"]:
    """Get all entities in Home Assistant, converted to their appropriate state types.

    If a state fails to convert, it is skipped with an error logged. If there is no registered
    state class for a domain, the generic BaseState is used.

    Returns:
        A list of states, converted to their appropriate state types."""

    return self.task_bucket.run_sync(self._api.get_states())

get_config() -> dict[str, Any]

Get the Home Assistant configuration.

Returns:

Type Description
dict[str, Any]

The configuration data.

Source code in src/hassette/api/sync.py
169
170
171
172
173
174
175
def get_config(self) -> dict[str, Any]:
    """Get the Home Assistant configuration.

    Returns:
        The configuration data."""

    return self.task_bucket.run_sync(self._api.get_config())

get_services() -> dict[str, Any]

Get the available services in Home Assistant.

Returns:

Type Description
dict[str, Any]

The services data.

Source code in src/hassette/api/sync.py
177
178
179
180
181
182
183
def get_services(self) -> dict[str, Any]:
    """Get the available services in Home Assistant.

    Returns:
        The services data."""

    return self.task_bucket.run_sync(self._api.get_services())

get_panels() -> dict[str, Any]

Get the available panels in Home Assistant.

Returns:

Type Description
dict[str, Any]

The panels data.

Source code in src/hassette/api/sync.py
185
186
187
188
189
190
191
def get_panels(self) -> dict[str, Any]:
    """Get the available panels in Home Assistant.

    Returns:
        The panels data."""

    return self.task_bucket.run_sync(self._api.get_panels())

fire_event(event_type: str, event_data: dict[str, Any] | None = None) -> dict[str, Any]

Fire a custom event in Home Assistant.

Parameters:

Name Type Description Default
event_type str

The type of the event to fire (e.g., "custom_event").

required
event_data dict[str, Any] | None

Additional data to include with the event.

None

Returns:

Type Description
dict[str, Any]

The response from Home Assistant.

Source code in src/hassette/api/sync.py
193
194
195
196
197
198
199
200
201
202
203
def fire_event(self, event_type: str, event_data: dict[str, Any] | None = None) -> dict[str, Any]:
    """Fire a custom event in Home Assistant.

    Args:
        event_type: The type of the event to fire (e.g., "custom_event").
        event_data: Additional data to include with the event.

    Returns:
        The response from Home Assistant."""

    return self.task_bucket.run_sync(self._api.fire_event(event_type, event_data))

call_service(domain: str, service: str, target: dict[str, str] | dict[str, list[str]] | None = None, return_response: bool | None = False, **data: Any) -> ServiceResponse | None

Call a Home Assistant service.

Parameters:

Name Type Description Default
domain str

The domain of the service (e.g., "light").

required
service str

The name of the service to call (e.g., "turn_on").

required
target dict[str, str] | dict[str, list[str]] | None

Target entity IDs or areas.

None
return_response bool | None

Whether to return the response from Home Assistant. Defaults to False.

False
**data Any

Additional data to send with the service call.

{}

Returns:

Type Description
ServiceResponse | None

ServiceResponse | None: The response from Home Assistant if return_response is True. Otherwise None.

Source code in src/hassette/api/sync.py
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
def call_service(
    self,
    domain: str,
    service: str,
    target: dict[str, str] | dict[str, list[str]] | None = None,
    return_response: bool | None = False,
    **data: Any,
) -> ServiceResponse | None:
    """Call a Home Assistant service.

    Args:
        domain: The domain of the service (e.g., "light").
        service: The name of the service to call (e.g., "turn_on").
        target: Target entity IDs or areas.
        return_response: Whether to return the response from Home Assistant. Defaults to False.
        **data: Additional data to send with the service call.

    Returns:
        ServiceResponse | None: The response from Home Assistant if return_response is True. Otherwise None."""

    return self.task_bucket.run_sync(self._api.call_service(domain, service, target, return_response, **data))

turn_on(entity_id: str | StrEnum, domain: str = 'homeassistant', **data: Any) -> None

Turn on a specific entity in Home Assistant.

Parameters:

Name Type Description Default
entity_id str | StrEnum

The ID of the entity to turn on (e.g., "light.office").

required
domain str

The domain to use for the service call (default: "homeassistant"). This calls the generic homeassistant.turn_on service, which is deprecated in Home Assistant 2024.x in favor of domain-specific services. For lights, pass domain="light"; for switches, pass domain="switch".

'homeassistant'
Source code in src/hassette/api/sync.py
227
228
229
230
231
232
233
234
235
236
237
def turn_on(self, entity_id: str | StrEnum, domain: str = "homeassistant", **data: Any) -> None:
    """Turn on a specific entity in Home Assistant.

    Args:
        entity_id: The ID of the entity to turn on (e.g., "light.office").
        domain: The domain to use for the service call (default: ``"homeassistant"``).
            This calls the generic ``homeassistant.turn_on`` service, which is deprecated
            in Home Assistant 2024.x in favor of domain-specific services. For lights,
            pass ``domain="light"``; for switches, pass ``domain="switch"``."""

    return self.task_bucket.run_sync(self._api.turn_on(entity_id, domain, **data))

turn_off(entity_id: str | StrEnum, domain: str = 'homeassistant')

Turn off a specific entity in Home Assistant.

Parameters:

Name Type Description Default
entity_id str | StrEnum

The ID of the entity to turn off (e.g., "light.office").

required
domain str

The domain to use for the service call (default: "homeassistant"). This calls the generic homeassistant.turn_off service, which is deprecated in Home Assistant 2024.x in favor of domain-specific services. For lights, pass domain="light"; for switches, pass domain="switch".

'homeassistant'
Source code in src/hassette/api/sync.py
239
240
241
242
243
244
245
246
247
248
249
def turn_off(self, entity_id: str | StrEnum, domain: str = "homeassistant"):
    """Turn off a specific entity in Home Assistant.

    Args:
        entity_id: The ID of the entity to turn off (e.g., "light.office").
        domain: The domain to use for the service call (default: ``"homeassistant"``).
            This calls the generic ``homeassistant.turn_off`` service, which is deprecated
            in Home Assistant 2024.x in favor of domain-specific services. For lights,
            pass ``domain="light"``; for switches, pass ``domain="switch"``."""

    return self.task_bucket.run_sync(self._api.turn_off(entity_id, domain))

toggle_service(entity_id: str | StrEnum, domain: str = 'homeassistant')

Toggle a specific entity in Home Assistant.

Parameters:

Name Type Description Default
entity_id str | StrEnum

The ID of the entity to toggle (e.g., "light.office").

required
domain str

The domain to use for the service call (default: "homeassistant"). This calls the generic homeassistant.toggle service, which is deprecated in Home Assistant 2024.x in favor of domain-specific services. For lights, pass domain="light"; for switches, pass domain="switch".

'homeassistant'
Source code in src/hassette/api/sync.py
251
252
253
254
255
256
257
258
259
260
261
def toggle_service(self, entity_id: str | StrEnum, domain: str = "homeassistant"):
    """Toggle a specific entity in Home Assistant.

    Args:
        entity_id: The ID of the entity to toggle (e.g., "light.office").
        domain: The domain to use for the service call (default: ``"homeassistant"``).
            This calls the generic ``homeassistant.toggle`` service, which is deprecated
            in Home Assistant 2024.x in favor of domain-specific services. For lights,
            pass ``domain="light"``; for switches, pass ``domain="switch"``."""

    return self.task_bucket.run_sync(self._api.toggle_service(entity_id, domain))

get_state_raw(entity_id: str) -> HassStateDict

Get the state of a specific entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the state for.

required

Returns:

Type Description
HassStateDict

The state of the entity as raw data.

Source code in src/hassette/api/sync.py
263
264
265
266
267
268
269
270
271
272
def get_state_raw(self, entity_id: str) -> "HassStateDict":
    """Get the state of a specific entity.

    Args:
        entity_id: The ID of the entity to get the state for.

    Returns:
        The state of the entity as raw data."""

    return self.task_bucket.run_sync(self._api.get_state_raw(entity_id))

entity_exists(entity_id: str) -> bool

Check if a specific entity exists.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to check.

required

Returns:

Type Description
bool

True if the entity exists, False otherwise.

Source code in src/hassette/api/sync.py
274
275
276
277
278
279
280
281
282
283
def entity_exists(self, entity_id: str) -> bool:
    """Check if a specific entity exists.

    Args:
        entity_id: The ID of the entity to check.

    Returns:
        True if the entity exists, False otherwise."""

    return self.task_bucket.run_sync(self._api.entity_exists(entity_id))

get_entity(entity_id: str, model: type[EntityT]) -> EntityT

Get an entity object for a specific entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get.

required
model type[EntityT]

The model class to use for the entity.

required

Returns:

Type Description
EntityT

The entity object.

Source code in src/hassette/api/sync.py
285
286
287
288
289
290
291
292
293
294
295
def get_entity(self, entity_id: str, model: type["EntityT"]) -> "EntityT":
    """Get an entity object for a specific entity.

    Args:
        entity_id: The ID of the entity to get.
        model: The model class to use for the entity.

    Returns:
        The entity object."""

    return self.task_bucket.run_sync(self._api.get_entity(entity_id, model))

get_entity_or_none(entity_id: str, model: type[EntityT]) -> EntityT | None

Get an entity object for a specific entity, or None if it does not exist.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get.

required
model type[EntityT]

The model class to use for the entity.

required

Returns:

Type Description
EntityT | None

The entity object, or None if it does not exist.

Source code in src/hassette/api/sync.py
297
298
299
300
301
302
303
304
305
306
307
def get_entity_or_none(self, entity_id: str, model: type["EntityT"]) -> "EntityT | None":
    """Get an entity object for a specific entity, or None if it does not exist.

    Args:
        entity_id: The ID of the entity to get.
        model: The model class to use for the entity.

    Returns:
        The entity object, or None if it does not exist."""

    return self.task_bucket.run_sync(self._api.get_entity_or_none(entity_id, model))

get_state(entity_id: str) -> BaseState

Get the state of a specific entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the state for.

required

Returns:

Type Description
BaseState

The state of the entity converted to the specified model type.

Source code in src/hassette/api/sync.py
309
310
311
312
313
314
315
316
317
318
def get_state(self, entity_id: str) -> "BaseState":
    """Get the state of a specific entity.

    Args:
        entity_id: The ID of the entity to get the state for.

    Returns:
        The state of the entity converted to the specified model type."""

    return self.task_bucket.run_sync(self._api.get_state(entity_id))

get_state_or_none(entity_id: str) -> BaseState | None

Get the state of a specific entity, or None if it does not exist.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the state for.

required

Returns:

Type Description
BaseState | None

The state of the entity converted to the specified model type, or None if it does not exist.

Source code in src/hassette/api/sync.py
320
321
322
323
324
325
326
327
328
329
def get_state_or_none(self, entity_id: str) -> "BaseState | None":
    """Get the state of a specific entity, or None if it does not exist.

    Args:
        entity_id: The ID of the entity to get the state for.

    Returns:
        The state of the entity converted to the specified model type, or None if it does not exist."""

    return self.task_bucket.run_sync(self._api.get_state_or_none(entity_id))

get_state_value(entity_id: str) -> Any

Get the state of a specific entity without converting it to a state object.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the state for.

required

Returns:

Type Description
Any

The state of the entity as raw data.

Note

While most default methods in this library work with state objects for strong typing, this method is designed to return the raw state value, as it is likely overkill to convert it to a state object for simple state value retrieval.

Source code in src/hassette/api/sync.py
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
def get_state_value(self, entity_id: str) -> Any:
    """Get the state of a specific entity without converting it to a state object.

    Args:
        entity_id: The ID of the entity to get the state for.

    Returns:
        The state of the entity as raw data.

    Note:
        While most default methods in this library work with state objects for
        strong typing, this method is designed to return the raw state value,
        as it is likely overkill to convert it to a state object for simple state value retrieval."""

    return self.task_bucket.run_sync(self._api.get_state_value(entity_id))

get_state_value_typed(entity_id: str) -> Any

Get the value of a specific entity's state, converted to the correct type for that state.

The return type here is Any due to the dynamic nature of this conversion, but the return type at runtime will match the expected value type for the specific state class of the entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the state for.

required

Returns:

Type Description
Any

The state of the entity converted to the specified model type.

Raises:

Type Description
TypeError

If the model is not a valid StateType subclass.

Warning

For states like SensorState the value type in Hassette is str, even if the sensor represents a number, as we cannot be sure of the actual type without additional context. For these cases, you are responsible for converting the string to the desired type.

Source code in src/hassette/api/sync.py
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
def get_state_value_typed(self, entity_id: str) -> "Any":
    """Get the value of a specific entity's state, converted to the correct type for that state.

    The return type here is Any due to the dynamic nature of this conversion, but the return type
    at runtime will match the expected value type for the specific state class of the entity.

    Args:
        entity_id: The ID of the entity to get the state for.

    Returns:
        The state of the entity converted to the specified model type.

    Raises:
        TypeError: If the model is not a valid StateType subclass.

    Warning:
        For states like `SensorState` the value type in Hassette is `str`, even if the sensor represents a number,
        as we cannot be sure of the actual type without additional context. For these cases, you are responsible
        for converting the string to the desired type."""

    return self.task_bucket.run_sync(self._api.get_state_value_typed(entity_id))

get_attribute(entity_id: str, attribute: str) -> Any | FalseySentinel

Get a specific attribute of an entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the attribute for.

required
attribute str

The name of the attribute to retrieve. Can be a dot-separated path for nested attributes.

required

Returns:

Type Description
Any | FalseySentinel

The value of the specified attribute, or MISSING_VALUE sentinel if the attribute does not exist.

Source code in src/hassette/api/sync.py
369
370
371
372
373
374
375
376
377
378
379
def get_attribute(self, entity_id: str, attribute: str) -> Any | FalseySentinel:
    """Get a specific attribute of an entity.

    Args:
        entity_id: The ID of the entity to get the attribute for.
        attribute: The name of the attribute to retrieve. Can be a dot-separated path for nested attributes.

    Returns:
        The value of the specified attribute, or MISSING_VALUE sentinel if the attribute does not exist."""

    return self.task_bucket.run_sync(self._api.get_attribute(entity_id, attribute))

get_history(entity_id: str, start_time: PlainDateTime | ZonedDateTime | Date | str, end_time: PlainDateTime | ZonedDateTime | Date | str | None = None, significant_changes_only: bool = False, minimal_response: bool = False, no_attributes: bool = False) -> list[HistoryEntry]

Get the history of a specific entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the history for.

required
start_time PlainDateTime | ZonedDateTime | Date | str

The start time for the history range.

required
end_time PlainDateTime | ZonedDateTime | Date | str | None

The end time for the history range.

None
significant_changes_only bool

Whether to only include significant changes.

False
minimal_response bool

Whether to request a minimal response.

False
no_attributes bool

Whether to exclude attributes from the response.

False

Returns:

Type Description
list[HistoryEntry]

A list of history entries for the specified entity.

Source code in src/hassette/api/sync.py
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
def get_history(
    self,
    entity_id: str,
    start_time: PlainDateTime | ZonedDateTime | Date | str,
    end_time: PlainDateTime | ZonedDateTime | Date | str | None = None,
    significant_changes_only: bool = False,
    minimal_response: bool = False,
    no_attributes: bool = False,
) -> list[HistoryEntry]:
    """Get the history of a specific entity.

    Args:
        entity_id: The ID of the entity to get the history for.
        start_time: The start time for the history range.
        end_time: The end time for the history range.
        significant_changes_only: Whether to only include significant changes.
        minimal_response: Whether to request a minimal response.
        no_attributes: Whether to exclude attributes from the response.

    Returns:
        A list of history entries for the specified entity."""

    return self.task_bucket.run_sync(
        self._api.get_history(
            entity_id, start_time, end_time, significant_changes_only, minimal_response, no_attributes
        )
    )

get_histories(entity_ids: list[str], start_time: PlainDateTime | ZonedDateTime | Date | str, end_time: PlainDateTime | ZonedDateTime | Date | str | None = None, significant_changes_only: bool = False, minimal_response: bool = False, no_attributes: bool = False) -> dict[str, list[HistoryEntry]]

Get the history for multiple entities.

Parameters:

Name Type Description Default
entity_ids list[str]

The IDs of the entities to get the history for.

required
start_time PlainDateTime | ZonedDateTime | Date | str

The start time for the history range.

required
end_time PlainDateTime | ZonedDateTime | Date | str | None

The end time for the history range.

None
significant_changes_only bool

Whether to only include significant changes.

False
minimal_response bool

Whether to request a minimal response.

False
no_attributes bool

Whether to exclude attributes from the response.

False

Returns:

Type Description
dict[str, list[HistoryEntry]]

A dictionary mapping entity IDs to their respective history entries.

Source code in src/hassette/api/sync.py
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
def get_histories(
    self,
    entity_ids: list[str],
    start_time: PlainDateTime | ZonedDateTime | Date | str,
    end_time: PlainDateTime | ZonedDateTime | Date | str | None = None,
    significant_changes_only: bool = False,
    minimal_response: bool = False,
    no_attributes: bool = False,
) -> dict[str, list[HistoryEntry]]:
    """Get the history for multiple entities.

    Args:
        entity_ids: The IDs of the entities to get the history for.
        start_time: The start time for the history range.
        end_time: The end time for the history range.
        significant_changes_only: Whether to only include significant changes.
        minimal_response: Whether to request a minimal response.
        no_attributes: Whether to exclude attributes from the response.

    Returns:
        A dictionary mapping entity IDs to their respective history entries."""

    return self.task_bucket.run_sync(
        self._api.get_histories(
            entity_ids, start_time, end_time, significant_changes_only, minimal_response, no_attributes
        )
    )

get_logbook(entity_id: str, start_time: PlainDateTime | ZonedDateTime | Date | str, end_time: PlainDateTime | ZonedDateTime | Date | str) -> list[dict]

Get the logbook entries for a specific entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to get the logbook entries for.

required
start_time PlainDateTime | ZonedDateTime | Date | str

The start time for the logbook range.

required
end_time PlainDateTime | ZonedDateTime | Date | str

The end time for the logbook range.

required

Returns:

Type Description
list[dict]

A list of logbook entries for the specified entity.

Source code in src/hassette/api/sync.py
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
def get_logbook(
    self,
    entity_id: str,
    start_time: PlainDateTime | ZonedDateTime | Date | str,
    end_time: PlainDateTime | ZonedDateTime | Date | str,
) -> list[dict]:
    """Get the logbook entries for a specific entity.

    Args:
        entity_id: The ID of the entity to get the logbook entries for.
        start_time: The start time for the logbook range.
        end_time: The end time for the logbook range.

    Returns:
        A list of logbook entries for the specified entity."""

    return self.task_bucket.run_sync(self._api.get_logbook(entity_id, start_time, end_time))

set_state(entity_id: str | StrEnum, state: Any, attributes: dict[str, Any] | None = None) -> dict

Set the state of a specific entity.

Parameters:

Name Type Description Default
entity_id str | StrEnum

The ID of the entity to set the state for.

required
state Any

The new state value to set.

required
attributes dict[str, Any] | None

Additional attributes to set for the entity.

None

Returns:

Type Description
dict

The response from Home Assistant after setting the state.

Source code in src/hassette/api/sync.py
455
456
457
458
459
460
461
462
463
464
465
466
def set_state(self, entity_id: str | StrEnum, state: Any, attributes: dict[str, Any] | None = None) -> dict:
    """Set the state of a specific entity.

    Args:
        entity_id: The ID of the entity to set the state for.
        state: The new state value to set.
        attributes: Additional attributes to set for the entity.

    Returns:
        The response from Home Assistant after setting the state."""

    return self.task_bucket.run_sync(self._api.set_state(entity_id, state, attributes))

get_camera_image(entity_id: str, timestamp: PlainDateTime | ZonedDateTime | Date | str | None = None) -> bytes

Get the latest camera image for a specific entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the camera entity to get the image for.

required
timestamp PlainDateTime | ZonedDateTime | Date | str | None

The timestamp for the image. If None, the latest image is returned.

None

Returns:

Type Description
bytes

The camera image data.

Source code in src/hassette/api/sync.py
468
469
470
471
472
473
474
475
476
477
478
479
480
def get_camera_image(
    self, entity_id: str, timestamp: PlainDateTime | ZonedDateTime | Date | str | None = None
) -> bytes:
    """Get the latest camera image for a specific entity.

    Args:
        entity_id: The ID of the camera entity to get the image for.
        timestamp: The timestamp for the image. If None, the latest image is returned.

    Returns:
        The camera image data."""

    return self.task_bucket.run_sync(self._api.get_camera_image(entity_id, timestamp))

get_calendars() -> list[dict]

Get the list of calendars.

Source code in src/hassette/api/sync.py
482
483
484
485
def get_calendars(self) -> list[dict]:
    """Get the list of calendars."""

    return self.task_bucket.run_sync(self._api.get_calendars())

get_calendar_events(calendar_id: str, start_time: PlainDateTime | ZonedDateTime | Date | str, end_time: PlainDateTime | ZonedDateTime | Date | str) -> list[dict]

Get events from a specific calendar.

Parameters:

Name Type Description Default
calendar_id str

The ID of the calendar to get events from.

required
start_time PlainDateTime | ZonedDateTime | Date | str

The start time for the event range.

required
end_time PlainDateTime | ZonedDateTime | Date | str

The end time for the event range.

required

Returns:

Type Description
list[dict]

A list of calendar events.

Source code in src/hassette/api/sync.py
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
def get_calendar_events(
    self,
    calendar_id: str,
    start_time: PlainDateTime | ZonedDateTime | Date | str,
    end_time: PlainDateTime | ZonedDateTime | Date | str,
) -> list[dict]:
    """Get events from a specific calendar.

    Args:
        calendar_id: The ID of the calendar to get events from.
        start_time: The start time for the event range.
        end_time: The end time for the event range.

    Returns:
        A list of calendar events."""

    return self.task_bucket.run_sync(self._api.get_calendar_events(calendar_id, start_time, end_time))

render_template(template: str, variables: dict | None = None) -> str

Render a template with given variables.

Parameters:

Name Type Description Default
template str

The template string to render.

required
variables dict | None

Variables to use in the template.

None

Returns:

Type Description
str

The rendered template result.

Source code in src/hassette/api/sync.py
505
506
507
508
509
510
511
512
513
514
515
def render_template(self, template: str, variables: dict | None = None) -> str:
    """Render a template with given variables.

    Args:
        template: The template string to render.
        variables: Variables to use in the template.

    Returns:
        The rendered template result."""

    return self.task_bucket.run_sync(self._api.render_template(template, variables))

delete_entity(entity_id: str) -> None

Delete a specific entity.

Parameters:

Name Type Description Default
entity_id str

The ID of the entity to delete.

required

Raises:

Type Description
RuntimeError

If the deletion fails.

Source code in src/hassette/api/sync.py
517
518
519
520
521
522
523
524
525
526
def delete_entity(self, entity_id: str) -> None:
    """Delete a specific entity.

    Args:
        entity_id: The ID of the entity to delete.

    Raises:
        RuntimeError: If the deletion fails."""

    return self.task_bucket.run_sync(self._api.delete_entity(entity_id))

list_input_booleans() -> list[InputBooleanRecord]

List all stored input_boolean helpers.

Returns:

Type Description
list[InputBooleanRecord]

List of InputBooleanRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
528
529
530
531
532
533
534
def list_input_booleans(self) -> list[InputBooleanRecord]:
    """List all stored input_boolean helpers.

    Returns:
        List of InputBooleanRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_input_booleans())

create_input_boolean(params: CreateInputBooleanParams) -> InputBooleanRecord

Create a new input_boolean helper.

Parameters:

Name Type Description Default
params CreateInputBooleanParams

Parameters for the new helper.

required

Returns:

Type Description
InputBooleanRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
536
537
538
539
540
541
542
543
544
545
def create_input_boolean(self, params: CreateInputBooleanParams) -> InputBooleanRecord:
    """Create a new input_boolean helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_input_boolean(params))

update_input_boolean(helper_id: str, params: UpdateInputBooleanParams) -> InputBooleanRecord

Update an existing input_boolean helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateInputBooleanParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
InputBooleanRecord

The updated stored record.

Source code in src/hassette/api/sync.py
547
548
549
550
551
552
553
554
555
556
557
def update_input_boolean(self, helper_id: str, params: UpdateInputBooleanParams) -> InputBooleanRecord:
    """Update an existing input_boolean helper.

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_input_boolean(helper_id, params))

delete_input_boolean(helper_id: str) -> None

Delete an input_boolean helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
559
560
561
562
563
564
565
def delete_input_boolean(self, helper_id: str) -> None:
    """Delete an input_boolean helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_input_boolean(helper_id))

list_input_numbers() -> list[InputNumberRecord]

List all stored input_number helpers.

Returns:

Type Description
list[InputNumberRecord]

List of InputNumberRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
567
568
569
570
571
572
573
def list_input_numbers(self) -> list[InputNumberRecord]:
    """List all stored input_number helpers.

    Returns:
        List of InputNumberRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_input_numbers())

create_input_number(params: CreateInputNumberParams) -> InputNumberRecord

Create a new input_number helper.

Parameters:

Name Type Description Default
params CreateInputNumberParams

Parameters for the new helper.

required

Returns:

Type Description
InputNumberRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
575
576
577
578
579
580
581
582
583
584
def create_input_number(self, params: CreateInputNumberParams) -> InputNumberRecord:
    """Create a new input_number helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_input_number(params))

update_input_number(helper_id: str, params: UpdateInputNumberParams) -> InputNumberRecord

Update an existing input_number helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateInputNumberParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
InputNumberRecord

The updated stored record.

Source code in src/hassette/api/sync.py
586
587
588
589
590
591
592
593
594
595
596
def update_input_number(self, helper_id: str, params: UpdateInputNumberParams) -> InputNumberRecord:
    """Update an existing input_number helper.

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_input_number(helper_id, params))

delete_input_number(helper_id: str) -> None

Delete an input_number helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
598
599
600
601
602
603
604
def delete_input_number(self, helper_id: str) -> None:
    """Delete an input_number helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_input_number(helper_id))

list_input_texts() -> list[InputTextRecord]

List all stored input_text helpers.

Returns:

Type Description
list[InputTextRecord]

List of InputTextRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
606
607
608
609
610
611
612
def list_input_texts(self) -> list[InputTextRecord]:
    """List all stored input_text helpers.

    Returns:
        List of InputTextRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_input_texts())

create_input_text(params: CreateInputTextParams) -> InputTextRecord

Create a new input_text helper.

Parameters:

Name Type Description Default
params CreateInputTextParams

Parameters for the new helper.

required

Returns:

Type Description
InputTextRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
614
615
616
617
618
619
620
621
622
623
def create_input_text(self, params: CreateInputTextParams) -> InputTextRecord:
    """Create a new input_text helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_input_text(params))

update_input_text(helper_id: str, params: UpdateInputTextParams) -> InputTextRecord

Update an existing input_text helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateInputTextParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
InputTextRecord

The updated stored record.

Source code in src/hassette/api/sync.py
625
626
627
628
629
630
631
632
633
634
635
def update_input_text(self, helper_id: str, params: UpdateInputTextParams) -> InputTextRecord:
    """Update an existing input_text helper.

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_input_text(helper_id, params))

delete_input_text(helper_id: str) -> None

Delete an input_text helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
637
638
639
640
641
642
643
def delete_input_text(self, helper_id: str) -> None:
    """Delete an input_text helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_input_text(helper_id))

list_input_selects() -> list[InputSelectRecord]

List all stored input_select helpers.

Returns:

Type Description
list[InputSelectRecord]

List of InputSelectRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
645
646
647
648
649
650
651
def list_input_selects(self) -> list[InputSelectRecord]:
    """List all stored input_select helpers.

    Returns:
        List of InputSelectRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_input_selects())

create_input_select(params: CreateInputSelectParams) -> InputSelectRecord

Create a new input_select helper.

Parameters:

Name Type Description Default
params CreateInputSelectParams

Parameters for the new helper.

required

Returns:

Type Description
InputSelectRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
653
654
655
656
657
658
659
660
661
662
def create_input_select(self, params: CreateInputSelectParams) -> InputSelectRecord:
    """Create a new input_select helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_input_select(params))

update_input_select(helper_id: str, params: UpdateInputSelectParams) -> InputSelectRecord

Update an existing input_select helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateInputSelectParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
InputSelectRecord

The updated stored record.

Source code in src/hassette/api/sync.py
664
665
666
667
668
669
670
671
672
673
674
def update_input_select(self, helper_id: str, params: UpdateInputSelectParams) -> InputSelectRecord:
    """Update an existing input_select helper.

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_input_select(helper_id, params))

delete_input_select(helper_id: str) -> None

Delete an input_select helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
676
677
678
679
680
681
682
def delete_input_select(self, helper_id: str) -> None:
    """Delete an input_select helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_input_select(helper_id))

list_input_datetimes() -> list[InputDatetimeRecord]

List all stored input_datetime helpers.

Returns:

Type Description
list[InputDatetimeRecord]

List of InputDatetimeRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
684
685
686
687
688
689
690
def list_input_datetimes(self) -> list[InputDatetimeRecord]:
    """List all stored input_datetime helpers.

    Returns:
        List of InputDatetimeRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_input_datetimes())

create_input_datetime(params: CreateInputDatetimeParams) -> InputDatetimeRecord

Create a new input_datetime helper.

Parameters:

Name Type Description Default
params CreateInputDatetimeParams

Parameters for the new helper.

required

Returns:

Type Description
InputDatetimeRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
692
693
694
695
696
697
698
699
700
701
def create_input_datetime(self, params: CreateInputDatetimeParams) -> InputDatetimeRecord:
    """Create a new input_datetime helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_input_datetime(params))

update_input_datetime(helper_id: str, params: UpdateInputDatetimeParams) -> InputDatetimeRecord

Update an existing input_datetime helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateInputDatetimeParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
InputDatetimeRecord

The updated stored record.

Source code in src/hassette/api/sync.py
703
704
705
706
707
708
709
710
711
712
713
def update_input_datetime(self, helper_id: str, params: UpdateInputDatetimeParams) -> InputDatetimeRecord:
    """Update an existing input_datetime helper.

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_input_datetime(helper_id, params))

delete_input_datetime(helper_id: str) -> None

Delete an input_datetime helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
715
716
717
718
719
720
721
def delete_input_datetime(self, helper_id: str) -> None:
    """Delete an input_datetime helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_input_datetime(helper_id))

list_input_buttons() -> list[InputButtonRecord]

List all stored input_button helpers.

Returns:

Type Description
list[InputButtonRecord]

List of InputButtonRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
723
724
725
726
727
728
729
def list_input_buttons(self) -> list[InputButtonRecord]:
    """List all stored input_button helpers.

    Returns:
        List of InputButtonRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_input_buttons())

create_input_button(params: CreateInputButtonParams) -> InputButtonRecord

Create a new input_button helper.

Parameters:

Name Type Description Default
params CreateInputButtonParams

Parameters for the new helper.

required

Returns:

Type Description
InputButtonRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
731
732
733
734
735
736
737
738
739
740
def create_input_button(self, params: CreateInputButtonParams) -> InputButtonRecord:
    """Create a new input_button helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_input_button(params))

update_input_button(helper_id: str, params: UpdateInputButtonParams) -> InputButtonRecord

Update an existing input_button helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateInputButtonParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
InputButtonRecord

The updated stored record.

Source code in src/hassette/api/sync.py
742
743
744
745
746
747
748
749
750
751
752
def update_input_button(self, helper_id: str, params: UpdateInputButtonParams) -> InputButtonRecord:
    """Update an existing input_button helper.

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_input_button(helper_id, params))

delete_input_button(helper_id: str) -> None

Delete an input_button helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
754
755
756
757
758
759
760
def delete_input_button(self, helper_id: str) -> None:
    """Delete an input_button helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_input_button(helper_id))

list_counters() -> list[CounterRecord]

List all stored counter helpers.

Returns:

Type Description
list[CounterRecord]

List of CounterRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
762
763
764
765
766
767
768
def list_counters(self) -> list[CounterRecord]:
    """List all stored counter helpers.

    Returns:
        List of CounterRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_counters())

create_counter(params: CreateCounterParams) -> CounterRecord

Create a new counter helper.

Parameters:

Name Type Description Default
params CreateCounterParams

Parameters for the new helper.

required

Returns:

Type Description
CounterRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
770
771
772
773
774
775
776
777
778
779
def create_counter(self, params: CreateCounterParams) -> CounterRecord:
    """Create a new counter helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_counter(params))

update_counter(helper_id: str, params: UpdateCounterParams) -> CounterRecord

Update an existing counter helper (stored config, not live value).

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateCounterParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
CounterRecord

The updated stored record.

Source code in src/hassette/api/sync.py
781
782
783
784
785
786
787
788
789
790
791
def update_counter(self, helper_id: str, params: UpdateCounterParams) -> CounterRecord:
    """Update an existing counter helper (stored config, not live value).

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_counter(helper_id, params))

delete_counter(helper_id: str) -> None

Delete a counter helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
793
794
795
796
797
798
799
def delete_counter(self, helper_id: str) -> None:
    """Delete a counter helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_counter(helper_id))

list_timers() -> list[TimerRecord]

List all stored timer helpers.

Returns:

Type Description
list[TimerRecord]

List of TimerRecord instances representing stored configs.

Source code in src/hassette/api/sync.py
801
802
803
804
805
806
807
def list_timers(self) -> list[TimerRecord]:
    """List all stored timer helpers.

    Returns:
        List of TimerRecord instances representing stored configs."""

    return self.task_bucket.run_sync(self._api.list_timers())

create_timer(params: CreateTimerParams) -> TimerRecord

Create a new timer helper.

Parameters:

Name Type Description Default
params CreateTimerParams

Parameters for the new helper.

required

Returns:

Type Description
TimerRecord

The stored record returned by Home Assistant.

Source code in src/hassette/api/sync.py
809
810
811
812
813
814
815
816
817
818
def create_timer(self, params: CreateTimerParams) -> TimerRecord:
    """Create a new timer helper.

    Args:
        params: Parameters for the new helper.

    Returns:
        The stored record returned by Home Assistant."""

    return self.task_bucket.run_sync(self._api.create_timer(params))

update_timer(helper_id: str, params: UpdateTimerParams) -> TimerRecord

Update an existing timer helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to update.

required
params UpdateTimerParams

Fields to update (unset fields are left unchanged).

required

Returns:

Type Description
TimerRecord

The updated stored record.

Source code in src/hassette/api/sync.py
820
821
822
823
824
825
826
827
828
829
830
def update_timer(self, helper_id: str, params: UpdateTimerParams) -> TimerRecord:
    """Update an existing timer helper.

    Args:
        helper_id: The ID of the helper to update.
        params: Fields to update (unset fields are left unchanged).

    Returns:
        The updated stored record."""

    return self.task_bucket.run_sync(self._api.update_timer(helper_id, params))

delete_timer(helper_id: str) -> None

Delete a timer helper.

Parameters:

Name Type Description Default
helper_id str

The ID of the helper to delete.

required
Source code in src/hassette/api/sync.py
832
833
834
835
836
837
838
def delete_timer(self, helper_id: str) -> None:
    """Delete a timer helper.

    Args:
        helper_id: The ID of the helper to delete."""

    return self.task_bucket.run_sync(self._api.delete_timer(helper_id))

increment_counter(entity_id: str) -> None

Increment a counter entity's current value (live state, not stored config).

Parameters:

Name Type Description Default
entity_id str

The entity ID of the counter (e.g. "counter.motion_count").

required
Source code in src/hassette/api/sync.py
840
841
842
843
844
845
846
def increment_counter(self, entity_id: str) -> None:
    """Increment a counter entity's current value (live state, not stored config).

    Args:
        entity_id: The entity ID of the counter (e.g. ``"counter.motion_count"``)."""

    return self.task_bucket.run_sync(self._api.increment_counter(entity_id))

decrement_counter(entity_id: str) -> None

Decrement a counter entity's current value (live state, not stored config).

Parameters:

Name Type Description Default
entity_id str

The entity ID of the counter (e.g. "counter.motion_count").

required
Source code in src/hassette/api/sync.py
848
849
850
851
852
853
854
def decrement_counter(self, entity_id: str) -> None:
    """Decrement a counter entity's current value (live state, not stored config).

    Args:
        entity_id: The entity ID of the counter (e.g. ``"counter.motion_count"``)."""

    return self.task_bucket.run_sync(self._api.decrement_counter(entity_id))

reset_counter(entity_id: str) -> None

Reset a counter entity's value to its configured initial (live state, not stored config).

Parameters:

Name Type Description Default
entity_id str

The entity ID of the counter (e.g. "counter.motion_count").

required
Source code in src/hassette/api/sync.py
856
857
858
859
860
861
862
def reset_counter(self, entity_id: str) -> None:
    """Reset a counter entity's value to its configured initial (live state, not stored config).

    Args:
        entity_id: The entity ID of the counter (e.g. ``"counter.motion_count"``)."""

    return self.task_bucket.run_sync(self._api.reset_counter(entity_id))