Add add_package action to seventeentrack (#144488)

* Fix schema name, add_packages -> get_packages

* Add "add_package" service

* Update description

* Update descriptions
This commit is contained in:
Cerallin 2025-05-27 03:40:12 +08:00 committed by GitHub
parent cdd3ce428f
commit 393ea0251b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 74 additions and 2 deletions

View File

@ -42,8 +42,10 @@ NOTIFICATION_DELIVERED_MESSAGE = (
VALUE_DELIVERED = "Delivered" VALUE_DELIVERED = "Delivered"
SERVICE_GET_PACKAGES = "get_packages" SERVICE_GET_PACKAGES = "get_packages"
SERVICE_ADD_PACKAGE = "add_package"
SERVICE_ARCHIVE_PACKAGE = "archive_package" SERVICE_ARCHIVE_PACKAGE = "archive_package"
ATTR_PACKAGE_STATE = "package_state" ATTR_PACKAGE_STATE = "package_state"
ATTR_PACKAGE_TRACKING_NUMBER = "package_tracking_number" ATTR_PACKAGE_TRACKING_NUMBER = "package_tracking_number"
ATTR_PACKAGE_FRIENDLY_NAME = "package_friendly_name"
ATTR_CONFIG_ENTRY_ID = "config_entry_id" ATTR_CONFIG_ENTRY_ID = "config_entry_id"

View File

@ -31,6 +31,9 @@
"get_packages": { "get_packages": {
"service": "mdi:package" "service": "mdi:package"
}, },
"add_package": {
"service": "mdi:package"
},
"archive_package": { "archive_package": {
"service": "mdi:archive" "service": "mdi:archive"
} }

View File

@ -23,6 +23,7 @@ from .const import (
ATTR_DESTINATION_COUNTRY, ATTR_DESTINATION_COUNTRY,
ATTR_INFO_TEXT, ATTR_INFO_TEXT,
ATTR_ORIGIN_COUNTRY, ATTR_ORIGIN_COUNTRY,
ATTR_PACKAGE_FRIENDLY_NAME,
ATTR_PACKAGE_STATE, ATTR_PACKAGE_STATE,
ATTR_PACKAGE_TRACKING_NUMBER, ATTR_PACKAGE_TRACKING_NUMBER,
ATTR_PACKAGE_TYPE, ATTR_PACKAGE_TYPE,
@ -31,11 +32,12 @@ from .const import (
ATTR_TRACKING_INFO_LANGUAGE, ATTR_TRACKING_INFO_LANGUAGE,
ATTR_TRACKING_NUMBER, ATTR_TRACKING_NUMBER,
DOMAIN, DOMAIN,
SERVICE_ADD_PACKAGE,
SERVICE_ARCHIVE_PACKAGE, SERVICE_ARCHIVE_PACKAGE,
SERVICE_GET_PACKAGES, SERVICE_GET_PACKAGES,
) )
SERVICE_ADD_PACKAGES_SCHEMA: Final = vol.Schema( SERVICE_GET_PACKAGES_SCHEMA: Final = vol.Schema(
{ {
vol.Required(ATTR_CONFIG_ENTRY_ID): cv.string, vol.Required(ATTR_CONFIG_ENTRY_ID): cv.string,
vol.Optional(ATTR_PACKAGE_STATE): selector.SelectSelector( vol.Optional(ATTR_PACKAGE_STATE): selector.SelectSelector(
@ -52,6 +54,14 @@ SERVICE_ADD_PACKAGES_SCHEMA: Final = vol.Schema(
} }
) )
SERVICE_ADD_PACKAGE_SCHEMA: Final = vol.Schema(
{
vol.Required(ATTR_CONFIG_ENTRY_ID): cv.string,
vol.Required(ATTR_PACKAGE_TRACKING_NUMBER): cv.string,
vol.Required(ATTR_PACKAGE_FRIENDLY_NAME): cv.string,
}
)
SERVICE_ARCHIVE_PACKAGE_SCHEMA: Final = vol.Schema( SERVICE_ARCHIVE_PACKAGE_SCHEMA: Final = vol.Schema(
{ {
vol.Required(ATTR_CONFIG_ENTRY_ID): cv.string, vol.Required(ATTR_CONFIG_ENTRY_ID): cv.string,
@ -87,6 +97,22 @@ def setup_services(hass: HomeAssistant) -> None:
] ]
} }
async def add_package(call: ServiceCall) -> None:
"""Add a new package to 17Track."""
config_entry_id = call.data[ATTR_CONFIG_ENTRY_ID]
tracking_number = call.data[ATTR_PACKAGE_TRACKING_NUMBER]
friendly_name = call.data[ATTR_PACKAGE_FRIENDLY_NAME]
await _validate_service(config_entry_id)
seventeen_coordinator: SeventeenTrackCoordinator = hass.data[DOMAIN][
config_entry_id
]
await seventeen_coordinator.client.profile.add_package(
tracking_number, friendly_name
)
async def archive_package(call: ServiceCall) -> None: async def archive_package(call: ServiceCall) -> None:
config_entry_id = call.data[ATTR_CONFIG_ENTRY_ID] config_entry_id = call.data[ATTR_CONFIG_ENTRY_ID]
tracking_number = call.data[ATTR_PACKAGE_TRACKING_NUMBER] tracking_number = call.data[ATTR_PACKAGE_TRACKING_NUMBER]
@ -138,10 +164,17 @@ def setup_services(hass: HomeAssistant) -> None:
DOMAIN, DOMAIN,
SERVICE_GET_PACKAGES, SERVICE_GET_PACKAGES,
get_packages, get_packages,
schema=SERVICE_ADD_PACKAGES_SCHEMA, schema=SERVICE_GET_PACKAGES_SCHEMA,
supports_response=SupportsResponse.ONLY, supports_response=SupportsResponse.ONLY,
) )
hass.services.async_register(
DOMAIN,
SERVICE_ADD_PACKAGE,
add_package,
schema=SERVICE_ADD_PACKAGE_SCHEMA,
)
hass.services.async_register( hass.services.async_register(
DOMAIN, DOMAIN,
SERVICE_ARCHIVE_PACKAGE, SERVICE_ARCHIVE_PACKAGE,

View File

@ -18,6 +18,22 @@ get_packages:
selector: selector:
config_entry: config_entry:
integration: seventeentrack integration: seventeentrack
add_package:
fields:
package_tracking_number:
required: true
selector:
text:
package_friendly_name:
required: true
selector:
text:
config_entry_id:
required: true
selector:
config_entry:
integration: seventeentrack
archive_package: archive_package:
fields: fields:
package_tracking_number: package_tracking_number:

View File

@ -80,6 +80,24 @@
} }
} }
}, },
"add_package": {
"name": "Add a package",
"description": "Adds a package using the 17track API.",
"fields": {
"package_tracking_number": {
"name": "Package tracking number to add",
"description": "The package with the tracking number will be added."
},
"package_friendly_name": {
"name": "Package friendly name",
"description": "The friendly name of the package to be added."
},
"config_entry_id": {
"name": "17Track service",
"description": "The selected service to add the package to."
}
}
},
"archive_package": { "archive_package": {
"name": "Archive package", "name": "Archive package",
"description": "Archives a package using the 17track API.", "description": "Archives a package using the 17track API.",