"""Constants for Mail and Packages.""" from __future__ import annotations from typing import Final from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, BinarySensorEntityDescription, ) from homeassistant.components.sensor import SensorDeviceClass, SensorEntityDescription from homeassistant.helpers.entity import EntityCategory DOMAIN = "mail_and_packages" DOMAIN_DATA = f"{DOMAIN}_data" VERSION = "0.4.2" ISSUE_URL = "http://github.com/moralmunky/Home-Assistant-Mail-And-Packages" PLATFORM = "sensor" PLATFORMS = ["binary_sensor", "camera", "sensor"] DATA = "data" COORDINATOR = "coordinator_mail" OVERLAY = ["overlay.png", "vignette.png", "white.png"] SERVICE_UPDATE_FILE_PATH = "update_file_path" CAMERA = "cameras" CONFIG_VER = 10 # Attributes ATTR_AMAZON_IMAGE = "amazon_image" ATTR_COUNT = "count" ATTR_CODE = "code" ATTR_ORDER = "order" ATTR_TRACKING = "tracking" ATTR_TRACKING_NUM = "tracking_#" ATTR_IMAGE = "image" ATTR_IMAGE_PATH = "image_path" ATTR_SERVER = "server" ATTR_IMAGE_NAME = "image_name" ATTR_EMAIL = "email" ATTR_SUBJECT = "subject" ATTR_BODY = "body" ATTR_PATTERN = "pattern" ATTR_USPS_MAIL = "usps_mail" # Configuration Properties CONF_ALLOW_EXTERNAL = "allow_external" CONF_CAMERA_NAME = "camera_name" CONF_CUSTOM_IMG = "custom_img" CONF_CUSTOM_IMG_FILE = "custom_img_file" CONF_STORAGE = "storage" CONF_FOLDER = "folder" CONF_PATH = "image_path" CONF_DURATION = "gif_duration" CONF_SCAN_INTERVAL = "scan_interval" CONF_IMAGE_SECURITY = "image_security" CONF_IMAP_TIMEOUT = "imap_timeout" CONF_GENERATE_MP4 = "generate_mp4" CONF_AMAZON_FWDS = "amazon_fwds" CONF_AMAZON_DAYS = "amazon_days" CONF_VERIFY_SSL = "verify_ssl" CONF_IMAP_SECURITY = "imap_security" CONF_AMAZON_DOMAIN = "amazon_domain" # Defaults DEFAULT_CAMERA_NAME = "Mail USPS Camera" DEFAULT_NAME = "Mail And Packages" DEFAULT_PORT = "993" DEFAULT_FOLDER = '"INBOX"' DEFAULT_PATH = "custom_components/mail_and_packages/images/" DEFAULT_IMAGE_SECURITY = True DEFAULT_IMAP_TIMEOUT = 60 DEFAULT_GIF_DURATION = 5 DEFAULT_SCAN_INTERVAL = 30 DEFAULT_GIF_FILE_NAME = "mail_today.gif" DEFAULT_AMAZON_FWDS = "(none)" DEFAULT_ALLOW_EXTERNAL = False DEFAULT_CUSTOM_IMG = False DEFAULT_CUSTOM_IMG_FILE = "custom_components/mail_and_packages/images/mail_none.gif" DEFAULT_AMAZON_DAYS = 3 DEFAULT_AMAZON_DOMAIN = "amazon.com" DEFAULT_STORAGE = "custom_components/mail_and_packages/images/" # Amazon AMAZON_DOMAINS = [ "amazon.com", "amazon.ca", "amazon.co.uk", "amazon.in", "amazon.de", "amazon.it", "amazon.com.au", "amazon.pl", "amazon.es", "amazon.fr", "amazon.ae", "amazon.nl", ] AMAZON_DELIVERED_SUBJECT = [ "Delivered: Your", "Consegna effettuata:", "Dostarczono:", "Geliefert:", "Livré", "Entregado:", "Bezorgd:", "Livraison : Votre", "Zugestellt: deine", ] AMAZON_SHIPMENT_TRACKING = [ "shipment-tracking", "order-update", "conferma-spedizione", "confirmar-envio", "versandbestaetigung", "confirmation-commande", "verzending-volgen", "update-bestelling", ] AMAZON_EMAIL = ["order-update@", "update-bestelling@", "versandbestaetigung@"] AMAZON_PACKAGES = "amazon_packages" AMAZON_ORDER = "amazon_order" AMAZON_DELIVERED = "amazon_delivered" AMAZON_IMG_PATTERN = ( "(https://)([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-;]*[\\w@?^=%&/~+#-;])?" ) AMAZON_HUB = "amazon_hub" AMAZON_HUB_CODE = "amazon_hub_code" AMAZON_HUB_EMAIL = [ "thehub@amazon.com", "order-update@amazon.com", "amazonlockers@amazon.com", "versandbestaetigung@amazon.de", ] AMAZON_HUB_SUBJECT = "ready for pickup from Amazon Hub Locker" AMAZON_HUB_SUBJECT_SEARCH = "(a package to pick up)(.*)(\\d{6})" AMAZON_HUB_BODY = "(Your pickup code is )(\\d{6})" AMAZON_TIME_PATTERN = [ "will arrive:", "estimated delivery date is:", "guaranteed delivery date is:", "Arriving:", "Arriverà:", "arriving:", "Dostawa:", "Zustellung:", "Entrega:", "A chegar:", "Arrivée :", "Verwachte bezorgdatum:", "Votre date de livraison prévue est :", ] AMAZON_TIME_PATTERN_END = [ "Previously expected:", "This contains", "Track your", "Per tracciare il tuo pacco", "View or manage order", "Acompanhar", "Seguimiento", "Verfolge deine(n) Artikel", "Lieferung verfolgen", "Ihr Paket verfolgen", "Suivre", "Volg je pakket", "Je pakket volgen", ] AMAZON_EXCEPTION_SUBJECT = "Delivery update:" AMAZON_EXCEPTION_BODY = "running late" AMAZON_EXCEPTION = "amazon_exception" AMAZON_EXCEPTION_ORDER = "amazon_exception_order" AMAZON_PATTERN = "[0-9]{3}-[0-9]{7}-[0-9]{7}" AMAZON_LANGS = [ "it_IT", "it_IT.UTF-8", "pl_PL", "pl_PL.UTF-8", "de_DE", "de_DE.UTF-8", "es_ES", "es_ES.UTF-8", "pt_PT", "pt_PT.UTF-8", "pt_BR", "pt_BR.UTF-8", "fr_CA", "fr_CA.UTF-8", "", ] # Sensor Data SENSOR_DATA = { # USPS "usps_delivered": { "email": ["auto-reply@usps.com"], "subject": ["Item Delivered"], }, "usps_delivering": { "email": ["auto-reply@usps.com"], "subject": ["Expected Delivery on", "Out for Delivery"], "body": ["Your item is out for delivery"], }, "usps_exception": { "email": ["auto-reply@usps.com"], "subject": ["Delivery Exception"], }, "usps_packages": {}, "usps_tracking": {"pattern": ["9[2345]\\d{15,26}"]}, "usps_mail": { "email": [ "USPSInformedDelivery@usps.gov", "USPSInformeddelivery@email.informeddelivery.usps.com", "USPSInformeddelivery@informeddelivery.usps.com", "USPS Informed Delivery", ], "subject": ["Your Daily Digest"], }, "usps_mail_delivered": { "email": [ "USPSInformedDelivery@usps.gov", "USPSInformeddelivery@email.informeddelivery.usps.com", "USPSInformeddelivery@informeddelivery.usps.com", "USPS Informed Delivery", ], "subject": ["Your Mail Was Delivered"], }, # UPS "ups_delivered": { "email": ["mcinfo@ups.com"], "subject": [ "Your UPS Package was delivered", "Your UPS Packages were delivered", "Your UPS Parcel was delivered", "Your UPS Parcels were delivered", "Votre colis UPS a été livré", ], }, "ups_delivering": { "email": ["mcinfo@ups.com"], "subject": [ "UPS Update: Package Scheduled for Delivery Today", "UPS Update: Follow Your Delivery on a Live Map", "UPS Pre-Arrival: Your Driver is Arriving Soon! Follow on a Live Map", "UPS Update: Parcel Scheduled for Delivery Today", "Mise à jour UPS : Livraison du colis prévue demain", "Mise à jour UPS : Livraison du colis prévue aujourd'hui", ], }, "ups_exception": { "email": ["mcinfo@ups.com"], "subject": ["UPS Update: New Scheduled Delivery Date"], }, "ups_packages": {}, "ups_tracking": {"pattern": ["1Z?[0-9A-Z]{16}"]}, # FedEx "fedex_delivered": { "email": ["TrackingUpdates@fedex.com", "fedexcanada@fedex.com"], "subject": [ "Your package has been delivered", "Your packages have been delivered", "Your shipment was delivered", ], }, "fedex_delivering": { "email": ["TrackingUpdates@fedex.com", "fedexcanada@fedex.com"], "subject": [ "Delivery scheduled for today", "Your package is scheduled for delivery today", "Your package is now out for delivery", "Your shipment is out for delivery today", "out for delivery today", ], }, "fedex_packages": {}, "fedex_tracking": {"pattern": ["\\d{12,20}"]}, # Canada Post "capost_delivered": { "email": [ "donotreply@canadapost.postescanada.ca", "donotreply-nepasrepondre@notifications.canadapost-postescanada.ca", ], "subject": [ "Delivery Notification", ], }, "capost_delivering": {}, "capost_packages": {}, "capost_tracking": {}, # DHL "dhl_delivered": { "email": [ "donotreply_odd@dhl.com", "NoReply.ODD@dhl.com", "noreply@dhl.de", "pl.no.reply@dhl.com", "support@dhl.com", ], "subject": [ "DHL On Demand Delivery", "Powiadomienie o przesyłce", "Paket wurde zugestellt", "DHL Shipment Notification", ], "body": [ "has been delivered", "została doręczona", "ist angekommen", 'Notification for shipment event group "Delivered', " - Delivered - ", ], }, "dhl_delivering": { "email": [ "donotreply_odd@dhl.com", "NoReply.ODD@dhl.com", "noreply@dhl.de", "pl.no.reply@dhl.com", "support@dhl.com", ], "subject": [ "DHL On Demand Delivery", "Paket kommt heute", "kommt heute", "Paket wird gleich zugestellt", "Powiadomienie o przesyłce", "DHL Shipment Notification", ], "body": [ "scheduled for delivery TODAY", "zostanie dziś do Państwa doręczona", "wird Ihnen heute", "heute zwischen", " - Shipment is out with courier for delivery - ", "Shipment is scheduled for delivery", "voraussichtlich innerhalb", ], }, "dhl_packages": {}, "dhl_tracking": {"pattern": ["\\d{10,11}"]}, # Hermes.co.uk "hermes_delivered": { "email": ["donotreply@myhermes.co.uk"], "subject": ["Hermes has successfully delivered your"], }, "hermes_delivering": { "email": [ "donotreply@myhermes.co.uk", "noreply@paketankuendigung.myhermes.de", ], "subject": [ "parcel is now with your local Hermes courier", "Ihre Hermes Sendung", "Deine Hermes Sendung", ], "body": [ "Voraussichtliche Zustellung", ], }, "hermes_packages": {}, "hermes_tracking": {"pattern": ["\\d{11,20}"]}, # Royal Mail "royal_delivered": { "email": ["no-reply@royalmail.com"], "subject": ["has been delivered"], }, "royal_delivering": { "email": ["no-reply@royalmail.com"], "subject": ["is on its way", "to be delivered today"], }, "royal_packages": {}, "royal_tracking": {"pattern": ["[A-Za-z]{2}[0-9]{9}GB"]}, # Poczta Polska SA "poczta_polska_delivered": {}, "poczta_polska_delivering": { "email": ["informacja@poczta-polska.pl", "powiadomienia@allegromail.pl"], "subject": ["Poczta Polska S.A. eINFO"], }, "poczta_polska_packages": {}, "poczta_polska_tracking": { # http://emonitoring.poczta-polska.pl/?numer=00359007738913296666 "pattern": ["\\d{20}"] }, # InPost.pl "inpost_pl_delivered": { "email": [ "powiadomienia@inpost.pl", "info@paczkomaty.pl", "powiadomienia@allegromail.pl", ], "subject": [ "InPost - Potwierdzenie odbioru", "InPost - Paczka umieszczona w Paczkomacie", ], }, "inpost_pl_delivering": { "email": [ "powiadomienia@inpost.pl", "info@paczkomaty.pl", "powiadomienia@allegromail.pl", ], "subject": [ "Kurier InPost: Twoja paczka jest w drodze", "prawie u Ciebie", ], }, "inpost_pl_packages": {}, "inpost_pl_tracking": { # https://inpost.pl/sledzenie-przesylek?number=520113017830399002575123 "pattern": ["\\d{24}"] }, # DPD Poland "dpd_com_pl_delivered": { "email": [ "KurierDPD0@dpd.com.pl", "KurierDPD1@dpd.com.pl", "KurierDPD2@dpd.com.pl", "KurierDPD3@dpd.com.pl", "KurierDPD4@dpd.com.pl", "KurierDPD5@dpd.com.pl", "KurierDPD6@dpd.com.pl", "KurierDPD7@dpd.com.pl", "KurierDPD8@dpd.com.pl", "KurierDPD9@dpd.com.pl", "KurierDPD10@dpd.com.pl", "powiadomienia@allegromail.pl", ], "subject": ["została doręczona"], }, "dpd_com_pl_delivering": { "email": [ "KurierDPD0@dpd.com.pl", "KurierDPD1@dpd.com.pl", "KurierDPD2@dpd.com.pl", "KurierDPD3@dpd.com.pl", "KurierDPD4@dpd.com.pl", "KurierDPD5@dpd.com.pl", "KurierDPD6@dpd.com.pl", "KurierDPD7@dpd.com.pl", "KurierDPD8@dpd.com.pl", "KurierDPD9@dpd.com.pl", "KurierDPD10@dpd.com.pl", "powiadomienia@allegromail.pl", ], "subject": [ "Bezpieczne doręczenie", "przesyłka została nadana", ], "body": ["Dziś doręczamy", "DPD Polska"], }, "dpd_com_pl_packages": {}, "dpd_com_pl_tracking": { # https://tracktrace.dpd.com.pl/parcelDetails?p1=13490015284111 "pattern": [ "\\d{13}[A-Z0-9]{1,2}", ], }, # DPD "dpd_delivered": { "email": [ "noreply@service.dpd.de", ], "subject": [ "Ihr Paket ist da!", ], }, "dpd_delivering": { "email": [ "noreply@service.dpd.de", ], "subject": [ "Bald ist ihr DPD Paket da", "kommt Ihr DPD Paket", ], "body": [ "Paketnummer", ], }, "dpd_packages": {}, "dpd_tracking": { # https://tracktrace.dpd.com.pl/parcelDetails?p1=13490015284111 "pattern": [ "\\d{11,20}", ], }, # GLS "gls_delivered": { "email": [ "noreply@gls-group.eu", "powiadomienia@allegromail.pl", ], "subject": [ "informacja o dostawie", "wurde durch GLS zugestellt", ], "body": [ "została dzisiaj dostarczona", "Adresse erfolgreich zugestellt", ], }, "gls_delivering": { "email": [ "noreply@gls-group.eu", "powiadomienia@allegromail.pl", ], "subject": [ "paczka w drodze", "ist unterwegs", ], "body": [ "Zespół GLS", "GLS-Team", ], }, "gls_packages": {}, "gls_tracking": { # https://gls-group.eu/GROUP/en/parcel-tracking?match=51687952111 "pattern": ["\\d{11,12}"] }, # Australia Post "auspost_delivered": { "email": ["noreply@notifications.auspost.com.au"], "subject": ["Your shipment has been delivered"], }, "auspost_delivering": { "email": ["noreply@notifications.auspost.com.au"], "subject": ["is on its way", "is coming today"], }, "auspost_packages": {}, "auspost_tracking": {"pattern": ["\\d{7,10,12}|[A-Za-z]{2}[0-9]{9}AU "]}, # Evri "evri_delivered": { "email": ["do-not-reply@evri.com"], "subject": ["successfully delivered"], }, "evri_delivering": { "email": ["do-not-reply@evri.com"], "subject": ["is now with your local Evri courier for delivery"], }, "evri_packages": {}, "evri_tracking": {"pattern": ["H[0-9A-Z]{15}"]}, # DHL Parcel NL "dhl_parcel_nl_delivered": { "email": ["noreply@dhlparcel.nl"], "subject": ["Je pakket is bezorgd"], }, "dhl_parcel_nl_delivering": { "email": ["noreply@dhlparcel.nl"], "subject": ["We staan vandaag", "We staan vanavond"], }, "dhl_parcel_nl_packages": {}, "dhl_parcel_nl_tracking": {"pattern": ["[0-9A-Z]{12,24}"]}, # Bonshaw Distribution Network "bonshaw_distribution_network_delivered": { "email": ["parcel_tracking@bonshawdelivery.com"], "subject": ["Parcel Delivered! Commande Livrée!"], }, "bonshaw_distribution_network_delivering": { "email": ["parcel_tracking@bonshawdelivery.com"], "subject": ["Parcel Out for Delivery! En attente de livraison!"], }, "bonshaw_distribution_network_packages": { "email": ["parcel_tracking@bonshawdelivery.com"], "subject": ["Your package has been received!"], }, "bonshaw_distribution_network_tracking": {"pattern": ["BNI[0-9]{9}"]}, # Purolator "purolator_delivered": { "email": ["NotificationService@purolator.com"], "subject": ["Purolator - Your shipment is delivered"], }, "purolator_delivering": { "email": ["NotificationService@purolator.com"], "subject": ["Purolator - Your shipment is out for delivery"], }, "purolator_packages": { "email": ["NotificationService@purolator.com"], "subject": ["Purolator - Your shipment has been picked up"], }, "purolator_tracking": {"pattern": ["\\d{12,15}"]}, # Intelcom "intelcom_delivered": { "email": [ "notifications@intelcom.ca", "notifications@dragonflyshipping.ca", "notifications@dragonflyshipping.com", ], "subject": [ "Your order has been delivered!", "Your package has been delivered", "Hooray! Your package is here", "Votre commande a été livrée!", "Votre colis a été livré!", ], }, "intelcom_delivering": { "email": [ "notifications@intelcom.ca", "notifications@dragonflyshipping.ca", "notifications@dragonflyshipping.com", ], "subject": [ "Your package is on the way!", "Your package is on its way", "Votre colis est en chemin!", ], }, "intelcom_packages": { "email": [ "notifications@intelcom.ca", "notifications@dragonflyshipping.ca", "notifications@dragonflyshipping.com", ], "subject": [ "Your package has been received!", "We've received your package", ], }, "intelcom_tracking": {"pattern": ["INTLCMD[0-9]{9}"]}, # Walmart "walmart_delivering": { "email": ["help@walmart.com"], "subject": ["Out for delivery"], }, "walmart_delivered": { "email": ["help@walmart.com"], "subject": [ "Your order was delivered", "Some of your items were delivered", "Delivered:", "Arrived:", ], }, "walmart_exception": { "email": ["help@walmart.com"], "subject": ["delivery is delayed"], }, "walmart_tracking": {"pattern": ["#[0-9]{7}-[0-9]{7,8}"]}, # BuildingLink "buildinglink_delivered": { "email": ["notify@buildinglink.com"], "subject": [ "Your Amazon order has arrived", "delivery has arrived", "You have a package delivery", "You have a delivery at the front desk", "You have a DHL delivery", "You have an envelope", ], }, "buildinglink_tracking": {}, # Post NL "post_nl_delivering": { "email": ["noreply@notificatie.postnl.nl"], "subject": ["Je pakket is onderweg", "De chauffer is onderweg"], }, "post_nl_exception": { "email": ["noreply@notificatie.postnl.nl"], "subject": ["We hebben je gemist"], }, "post_nl_delivered": { "email": ["noreply@notificatie.postnl.nl"], "subject": ["Je pakket is bezorgd"], }, "post_nl_packages": {}, "post_nl_tracking": {"pattern": ["3S?[0-9A-Z]{14}"]}, # Post DE "post_de_delivering": { "email": [ "ankuendigung@brief.deutschepost.de", ], "subject": [ "Ein Brief kommt in Kürze bei Ihnen an", "Ein Brief ist unterwegs zu Ihnen", ], }, "post_de_delivered": {}, "post_de_packages": {}, "post_de_tracking": {}, # Post Austria "post_at_delivering": { "email": ["MeineSendung@post.at"], "subject": ["Sendung ist in Zustellung"], }, "post_at_exception": {}, "post_at_delivered": { "email": ["MeineSendung@post.at"], "subject": ["Ihre Sendung wurde Zugestellt"], }, "post_at_packages": {}, "post_at_tracking": {"pattern": ["[0-9]{22}"]}, } # Sensor definitions SENSOR_TYPES: Final[dict[str, SensorEntityDescription]] = { "mail_updated": SensorEntityDescription( name="Mail Updated", icon="mdi:update", key="mail_updated", entity_category=EntityCategory.DIAGNOSTIC, device_class=SensorDeviceClass.TIMESTAMP, ), # USPS "usps_mail": SensorEntityDescription( name="Mail USPS Mail", native_unit_of_measurement="piece(s)", icon="mdi:mailbox-up", key="usps_mail", ), "usps_delivered": SensorEntityDescription( name="Mail USPS Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="usps_delivered", ), "usps_delivering": SensorEntityDescription( name="Mail USPS Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="usps_delivering", ), "usps_exception": SensorEntityDescription( name="Mail USPS Exception", native_unit_of_measurement="package(s)", icon="mdi:archive-alert", key="usps_exception", ), "usps_packages": SensorEntityDescription( name="Mail USPS Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="usps_packages", ), # UPS "ups_delivered": SensorEntityDescription( name="Mail UPS Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="ups_delivered", ), "ups_delivering": SensorEntityDescription( name="Mail UPS Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="ups_delivering", ), "ups_exception": SensorEntityDescription( name="Mail UPS Exception", native_unit_of_measurement="package(s)", icon="mdi:archive-alert", key="ups_exception", ), "ups_packages": SensorEntityDescription( name="Mail UPS Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="ups_packages", ), # FedEx "fedex_delivered": SensorEntityDescription( name="Mail FedEx Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="fedex_delivered", ), "fedex_delivering": SensorEntityDescription( name="Mail FedEx Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="fedex_delivering", ), "fedex_packages": SensorEntityDescription( name="Mail FedEx Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="fedex_packages", ), # Amazon "amazon_packages": SensorEntityDescription( name="Mail Amazon Packages", native_unit_of_measurement="package(s)", icon="mdi:package", key="amazon_packages", ), "amazon_delivered": SensorEntityDescription( name="Mail Amazon Packages Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="amazon_delivered", ), "amazon_exception": SensorEntityDescription( name="Mail Amazon Exception", native_unit_of_measurement="package(s)", icon="mdi:archive-alert", key="amazon_exception", ), "amazon_hub": SensorEntityDescription( name="Mail Amazon Hub Packages", native_unit_of_measurement="package(s)", icon="mdi:package", key="amazon_hub", ), # Canada Post "capost_delivered": SensorEntityDescription( name="Mail Canada Post Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="capost_delivered", ), "capost_delivering": SensorEntityDescription( name="Mail Canada Post Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="capost_delivering", ), "capost_packages": SensorEntityDescription( name="Mail Canada Post Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="capost_packages", ), # DHL "dhl_delivered": SensorEntityDescription( name="Mail DHL Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="dhl_delivered", ), "dhl_delivering": SensorEntityDescription( name="Mail DHL Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="dhl_delivering", ), "dhl_packages": SensorEntityDescription( name="Mail DHL Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="dhl_packages", ), # Hermes "hermes_delivered": SensorEntityDescription( name="Mail Hermes Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="hermes_delivered", ), "hermes_delivering": SensorEntityDescription( name="Mail Hermes Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="hermes_delivering", ), "hermes_packages": SensorEntityDescription( name="Mail Hermes Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="hermes_packages", ), # Royal Mail "royal_delivered": SensorEntityDescription( name="Mail Royal Mail Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="royal_delivered", ), "royal_delivering": SensorEntityDescription( name="Mail Royal Mail Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="royal_delivering", ), "royal_packages": SensorEntityDescription( name="Mail Royal Mail Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="royal_packages", ), # Australia Post "auspost_delivered": SensorEntityDescription( name="Mail AusPost Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="auspost_delivered", ), "auspost_delivering": SensorEntityDescription( name="Mail AusPost Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="auspost_delivering", ), "auspost_packages": SensorEntityDescription( name="Mail AusPost Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="auspost_packages", ), # Poczta Polska SA # "poczta_polska_delivered": SensorEntityDescription( # name="Poczta Polska Delivered", # native_unit_of_measurement="package(s)", # icon="mdi:package-variant", # key="poczta_polska_delivered", # ), "poczta_polska_delivering": SensorEntityDescription( name="Mail Poczta Polska Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="poczta_polska_delivering", ), "poczta_polska_packages": SensorEntityDescription( name="Mail Poczta Polska Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="poczta_polska_packages", ), # InPost.pl "inpost_pl_delivering": SensorEntityDescription( name="Mail InPost.pl Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="inpost_pl_delivering", ), "inpost_pl_delivered": SensorEntityDescription( name="Mail InPost.pl Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="inpost_pl_delivered", ), "inpost_pl_packages": SensorEntityDescription( name="Mail InPost.pl Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="inpost_pl_packages", ), # DPD Poland "dpd_com_pl_delivering": SensorEntityDescription( name="Mail DPD.com.pl Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="dpd_com_pl_delivering", ), "dpd_com_pl_delivered": SensorEntityDescription( name="Mail DPD.com.pl Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="dpd_com_pl_delivered", ), "dpd_com_pl_packages": SensorEntityDescription( name="Mail DPD.com.pl Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="dpd_com_pl_packages", ), # DPD "dpd_delivering": SensorEntityDescription( name="Mail DPD Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="dpd_delivering", ), "dpd_delivered": SensorEntityDescription( name="Mail DPD Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="dpd_delivered", ), "dpd_packages": SensorEntityDescription( name="Mail DPD Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="dpd_packages", ), # GLS "gls_delivering": SensorEntityDescription( name="Mail GLS Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="gls_delivering", ), "gls_delivered": SensorEntityDescription( name="Mail GLS Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="gls_delivered", ), "gls_packages": SensorEntityDescription( name="Mail GLS Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="gls_packages", ), # Evri "evri_delivered": SensorEntityDescription( name="Mail Evri Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="evri_delivered", ), "evri_delivering": SensorEntityDescription( name="Mail Evri Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="evri_delivering", ), "evri_packages": SensorEntityDescription( name="Mail Evri Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="evri_packages", ), # DHL Parcel NL "dhl_parcel_nl_delivering": SensorEntityDescription( name="DHL Parcel NL Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="dhl_parcel_nl_delivering", ), "dhl_parcel_nl_delivered": SensorEntityDescription( name="DHL Parcel NL Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="dhl_parcel_nl_delivered", ), "dhl_parcel_nl_packages": SensorEntityDescription( name="DHL Parcel NL Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="dhl_parcel_nl_packages", ), # Bonshaw Distribution Network "bonshaw_distribution_network_delivered": SensorEntityDescription( name="Mail Bonshaw Distribution Network Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="bonshaw_distribution_network_delivered", ), "bonshaw_distribution_network_delivering": SensorEntityDescription( name="Mail Bonshaw Distribution Network Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="bonshaw_distribution_network_delivering", ), "bonshaw_distribution_network_packages": SensorEntityDescription( name="Mail Bonshaw Distribution Network Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="bonshaw_distribution_network_packages", ), # Purolator "purolator_delivered": SensorEntityDescription( name="Mail Purolator Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="purolator_delivered", ), "purolator_delivering": SensorEntityDescription( name="Mail Purolator Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="purolator_delivering", ), "purolator_packages": SensorEntityDescription( name="Mail Purolator Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="purolator_packages", ), # Intelcom "intelcom_delivered": SensorEntityDescription( name="Mail Intelcom Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="intelcom_delivered", ), "intelcom_delivering": SensorEntityDescription( name="Mail Intelcom Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="intelcom_delivering", ), "intelcom_packages": SensorEntityDescription( name="Mail Intelcom Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="intelcom_packages", ), # Walmart "walmart_delivering": SensorEntityDescription( name="Mail Walmart Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="walmart_delivering", ), "walmart_delivered": SensorEntityDescription( name="Mail Walmart Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="walmart_delivered", ), "walmart_exception": SensorEntityDescription( name="Mail Walmart Exception", native_unit_of_measurement="package(s)", icon="mdi:archive-alert", key="walmart_exception", ), # BuildingLink "buildinglink_delivered": SensorEntityDescription( name="Mail BuildingLink Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="buildinglink_delivered", ), # Post NL "post_nl_delivering": SensorEntityDescription( name="Post NL Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="post_nl_delivering", ), "post_nl_exception": SensorEntityDescription( name="Post NL Missed Delivery", native_unit_of_measurement="package(s)", icon="mdi:truck-alert", key="post_nl_exception", ), "post_nl_delivered": SensorEntityDescription( name="Post NL Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="post_nl_delivered", ), "post_nl_packages": SensorEntityDescription( name="Post NL Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="post_nl_packages", ), # Post DE "post_de_delivering": SensorEntityDescription( name="Post DE Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="post_de_delivering", ), # "post_de_delivered": SensorEntityDescription( # name="Post DE Delivered", # native_unit_of_measurement="package(s)", # icon="mdi:truck-delivery", # key="post_de_delivered", # ), "post_de_packages": SensorEntityDescription( name="Post DE Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="post_de_packages", ), # Post Austria "post_at_delivering": SensorEntityDescription( name="Post AT Delivering", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="post_at_delivering", ), "post_at_delivered": SensorEntityDescription( name="Post AT Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="post_at_delivered", ), "post_at_packages": SensorEntityDescription( name="Post AT Packages", native_unit_of_measurement="package(s)", icon="mdi:package-variant-closed", key="post_at_packages", ), ### # !!! Insert new sensors above these two !!! ### "zpackages_delivered": SensorEntityDescription( name="Mail Packages Delivered", native_unit_of_measurement="package(s)", icon="mdi:package-variant", key="zpackages_delivered", ), "zpackages_transit": SensorEntityDescription( name="Mail Packages In Transit", native_unit_of_measurement="package(s)", icon="mdi:truck-delivery", key="zpackages_transit", ), } IMAGE_SENSORS: Final[dict[str, SensorEntityDescription]] = { "usps_mail_image_system_path": SensorEntityDescription( name="Mail Image System Path", icon="mdi:folder-multiple-image", key="usps_mail_image_system_path", entity_category=EntityCategory.DIAGNOSTIC, ), "usps_mail_image_url": SensorEntityDescription( name="Mail Image URL", icon="mdi:link-variant", key="usps_mail_image_url", entity_category=EntityCategory.DIAGNOSTIC, ), } BINARY_SENSORS: Final[dict[str, BinarySensorEntityDescription]] = { "usps_update": BinarySensorEntityDescription( name="USPS Image Updated", key="usps_update", device_class=BinarySensorDeviceClass.UPDATE, ), "amazon_update": BinarySensorEntityDescription( name="Amazon Image Updated", key="amazon_update", device_class=BinarySensorDeviceClass.UPDATE, ), "usps_mail_delivered": BinarySensorEntityDescription( name="USPS Mail Delivered", key="usps_mail_delivered", entity_registry_enabled_default=False, ), } # Name CAMERA_DATA = { "usps_camera": ["Mail USPS Camera"], "amazon_camera": ["Mail Amazon Delivery Camera"], } # Sensor Index SENSOR_NAME = 0 SENSOR_UNIT = 1 SENSOR_ICON = 2 # For sensors with delivering and delivered statuses SHIPPERS = [ "capost", "dhl", "fedex", "ups", "usps", "hermes", "royal", "auspost", "inpost_pl", "dpd_com_pl", "dpd", "gls", "dhl_parcel_nl", "bonshaw_distribution_network", "purolator", "intelcom", "post_nl", "post_at", ]