From a9bbc42981b4b3188ff696d17379a7d9e083c641 Mon Sep 17 00:00:00 2001 From: Oscar Calvo <2091582+ocalvo@users.noreply.github.com> Date: Sat, 18 Apr 2020 13:26:22 -0700 Subject: [PATCH] Fix a bug where long sms messages get cut off (#34359) * Fix a bug where long sms messages get cut off * Clean up Co-authored-by: Martin Hjelmare --- homeassistant/components/sms/notify.py | 31 +++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/sms/notify.py b/homeassistant/components/sms/notify.py index 0a47e0aad25..0c088772d80 100644 --- a/homeassistant/components/sms/notify.py +++ b/homeassistant/components/sms/notify.py @@ -34,14 +34,29 @@ class SMSNotificationService(BaseNotificationService): def send_message(self, message="", **kwargs): """Send SMS message.""" - # Prepare message data - # We tell that we want to use first SMSC number stored in phone - gammu_message = { - "Text": message, - "SMSC": {"Location": 1}, - "Number": self.number, + smsinfo = { + "Class": -1, + "Unicode": False, + "Entries": [{"ID": "ConcatenatedTextLong", "Buffer": message}], } try: - self.gateway.SendSMS(gammu_message) + # Encode messages + encoded = gammu.EncodeSMS(smsinfo) # pylint: disable=no-member except gammu.GSMError as exc: # pylint: disable=no-member - _LOGGER.error("Sending to %s failed: %s", self.number, exc) + _LOGGER.error("Encoding message %s failed: %s", message, exc) + return + + # Send messages + for encoded_message in encoded: + # Prepare message data + gammu_message = { + "Text": encoded_message["Text"], + # We tell that we want to use first SMSC number stored in phone + "SMSC": {"Location": 1}, + "Number": self.number, + } + try: + # Actually send the message + self.gateway.SendSMS(gammu_message) + except gammu.GSMError as exc: # pylint: disable=no-member + _LOGGER.error("Sending to %s failed: %s", self.number, exc)