[HowTo] Alternate way of saving battery when using 4G/LTE
-
What it does:
- Script I: Switch to 2G when screen is locked and switch back to 4G when screen is unlocked. TELEports or Dekko notifications work well.
- Alternative script II: Switch to 2G when screen is off and switch back to 4G when screen is on (regardless of screen lock). TELEports or Dekko notifications work well.
- Alternative script III: Turn off cellular data when screen is off and turn on cellular data again when screen is on (regardless of screen lock). No TELEports or Dekko notifications when screen is off.
Precondition: Working 4G connection which drains battery when device is inactive (screen is locked or off).
Originally made for Xiaomi Mi A2 and tested on it but can be useful for any device.
Create a script "/home/phablet/lte-battery-saver"
Script I:#!/bin/bash primary_preference="lte" saving_preference="gsm" sim_slot="/ril_0" interface=org.freedesktop.DBus.Properties member=PropertiesChanged dbus-monitor --session "type=signal,interface='${interface}',member='${member}'" | while read -r line; do if [[ ${line} == *"com.canonical.UnityGreeter"* ]]; then read; read; read -r line if [[ ${line} == *"IsActive"* ]]; then read -r line [[ ${line} == *"true"* ]] && /usr/share/ofono/scripts/set-tech-preference "${sim_slot}" "${saving_preference}" 1>/dev/null [[ ${line} == *"false"* ]] && /usr/share/ofono/scripts/set-tech-preference "${sim_slot}" "${primary_preference}" 1>/dev/null fi fi done
Make script executable
chmod u+x /home/phablet/lte-battery-saver
Create an upstart session job "/home/phablet/.config/upstart/lte-battery-saver.conf"
description "LTE battery saver" start on started dbus stop on stopped dbus exec /home/phablet/lte-battery-saver
Start the job
start lte-battery-saver
or reboot the phone.
NOTES (Script I and Alternative script II):
- Change "/ril_0" to "/ril_1" if your data SIM is in slot 2 (see sim_slot variable)
- If switching back doesn't work, try to set primary_preference variable to "any"
- To switch between 3G and 2G replace "lte" with "umts" (see primary_preference variable)
- To switch between 4G and 3G replace "gsm" with "umts" (see saving_preference variable)
To apply the changes, restart the job
restart lte-battery-saver
or reboot the phone.
To remove all changes
stop lte-battery-saver rm /home/phablet/.config/upstart/lte-battery-saver.conf rm /home/phablet/lte-battery-saver
Alternative script II:
#!/bin/bash primary_preference="lte" saving_preference="gsm" sim_slot="/ril_0" interface=com.canonical.Unity.Screen member=DisplayPowerStateChange dbus-monitor --system "type=signal,interface='${interface}',member='${member}'" | while read -r line; do if [[ ${line} == *"int32 0" ]]; then read /usr/share/ofono/scripts/set-tech-preference "${sim_slot}" "${saving_preference}" 1>/dev/null elif [[ ${line} == *"int32 1" ]]; then read /usr/share/ofono/scripts/set-tech-preference "${sim_slot}" "${primary_preference}" 1>/dev/null fi done
Alternative script III:
#!/bin/bash interface=com.canonical.Unity.Screen member=DisplayPowerStateChange dbus-monitor --system "type=signal,interface='${interface}',member='${member}'" | while read -r line; do if [[ ${line} == *"int32 0" ]]; then read dbus-send --type=method_call --dest=com.ubuntu.connectivity1 /com/ubuntu/connectivity1/Private org.freedesktop.DBus.Properties.Set string:com.ubuntu.connectivity1.Private string:MobileDataEnabled variant:boolean:false elif [[ ${line} == *"int32 1" ]]; then read dbus-send --type=method_call --dest=com.ubuntu.connectivity1 /com/ubuntu/connectivity1/Private org.freedesktop.DBus.Properties.Set string:com.ubuntu.connectivity1.Private string:MobileDataEnabled variant:boolean:true fi done
-
@c4pp4 Thank you!
Could be useful for the Volla UT, which I find is currently a very large power consumer despite its 4700 mA battery. Recharges every 24 hours on average (I use the internet quite regularly but..).I installed it. Seems to work well.
But maybe it would be nice if you could make a .click of your procedure (if possible).
-
It makes me think now that it would be useful to have a direct switch accessible by the indicator bar (network or battery) to switch directly from 4g to 2g and vice versa.
-
@domubpkm
I talked about that feature once, as i turn on 4G only when i need lot of bandwich to save battery when not needed, and got negative return... -
@keneda Yes, I've read it and I still think it would be useful
There is no obligation to use it.
-
@domubpkm said in [HowTo] Alternate way of saving battery when using 4G/LTE:
I still think it would be useful
I still think too ^^
BTW @c4pp4 tweak is a good thing too. -
@keneda Lots of things could be useful, and indeed, no one would be forcing anyone to use it if they didn't want to.
But: implementing the feature would take time and effort from some developer. The feature would have to be implemented, tests would have to be written to check that the implementation is correct, and more importantly, remains correct when changes are made to the feature. And from there on out both the feature and the tests would have to be maintained in perpetuity (not having a feature encourages workarounds, removing a feature incurs rage).
So yes, from the user's perspective, more features are better, since everyone need only use what they find useful. But the developers must maintain all the features equally, irrespective of their frequency of usage. So you can understand why "I think it would be useful" is not a sufficiently compelling argument to take on the burden of maintenance of a new feature.
-
One way to save battery power, as seen with my Volla, is to turn off cellular data when not needed and turn it back on when needed. This does not prevent the use of phone and SMS functions.
It is the fact of being connected to a 4G, 3G or even 2G network that really drains the battery and even more so when the sky is not clear (inappropriate atmospheric conditions): there the overconsumption can get out of hand. -
@domubpkm Problem is that prevents from receiving MMS.
-
@keneda Yes, nothing is perfect! For mails, they arrive well once the cellular data has been reactivated. For MMS, when cellular data OFF, a SMS informs the recipient that the MMS could not be recovered.
-
@domubpkm There is a pull request waiting for approval, which handles all the trouble when receiving MMS while cellular data is off. Feel free to test and report.
-
Hello c4pp4,
thanks for your work on the topic of battery saving.
I did the test on my Sony Xperia X (F5121). The device switches to G2 as promised. However, when the device wakes up, it does not switch back to LTE.
Unfortunately for me, my network provider no longer supports G2, so I have no connection to the antenna, i.e. "The subscriber is currently unavailable".
Now I want to remove the script or the changes I made.
Is that possible?
And how do I do that?
Could you support me.
Greetings MarioTranslated with www.DeepL.com/Translator (free version)
-
To do that, i deleted the script (lte-battery-saver) and the upstart session job (lte-battery-saver.conf) and rebooted the smartphone.
-
@mario-ch Hello,
what kind of connections are available in your case? I can help you to tweak the script for your needs.Anyway to take back the changes, remove both files:
rm /home/phablet/lte-battery-saver rm /home/phablet/.config/upstart/lte-battery-saver.conf
-
@c4pp4 As it seems, or rather I think 3G would work.
-
@mario-ch You mean switch to 3G when display is off and switch back to 4G when on?
-
@c4pp4 yep, that's exactly what i mean.
-
@mario-ch Ok give me some time, I will test it on my xperia x and let you know.
BTW you can try it on your own when you replace "gsm" with "umts".
-
@mario-ch In case of Xperia X (maybe it's related to Halium 7.1) we have to set it to "lte" option instead of "any", so the script for your needs (3G<->4G) is here:
#!/bin/bash interface=org.freedesktop.DBus.Properties member=PropertiesChanged dbus-monitor --session "type=signal,interface='${interface}',member='${member}'" | while read -r line; do if [[ ${line} == *"com.canonical.UnityGreeter"* ]]; then read && read && read -r line if [[ ${line} == *"IsActive"* ]]; then read -r line [[ ${line} == *"true"* ]] && /usr/share/ofono/scripts/set-tech-preference /ril_0 umts 1>/dev/null [[ ${line} == *"false"* ]] && /usr/share/ofono/scripts/set-tech-preference /ril_0 lte 1>/dev/null fi fi done
-
@jezek said in [HowTo] Alternate way of saving battery when using 4G/LTE:
which handles all the trouble when receiving MMS while cellular data is off
Hello. You done a huge work..! congratulations.
Does it mean that the main purpose of the work is that MMS could be received normally with cellular data OFF ?