View Single Post
Old 12-16-2021, 08:56 PM   #7
lclrc
Member
lclrc began at the beginning.
 
Posts: 10
Karma: 16
Join Date: Oct 2021
Device: kindle: Voyage, Paperwhite3
Quote:
Originally Posted by katadelos View Post
I got bored and wrote a quick script that should handle your use case:

Code:
import subprocess
from http.server import *

class KindleLipcHandler(BaseHTTPRequestHandler):
    def _set_backlight_level(self, level):
        subprocess.run(
            f"lipc-set-prop com.lab126.powerd flIntensity {level}", 
            shell=True
        )

    def _get_backlight_level(self):
        level = subprocess.check_output(
            "lipc-get-prop com.lab126.powerd flIntensity", 
            shell=True
        )
        return int(level.strip().decode())

    def _wakeup(self):
        subprocess.run(
            "lipc-set-prop com.lab126.powerd wakeUp 1", 
            shell=True
        )

    def handle_backlight(self, path_tokens):
        action = path_tokens[-1]
        current_level = self._get_backlight_level()
        new_level = current_level

        if action == "up":
            if current_level < 24:
                new_level = current_level + 1
        elif action == "down":
            if current_level > 0:
                new_level = current_level - 1
        elif action.isdigit():
            if int(action) in range(0,25):
                new_level = int(action)

        if new_level != current_level:
            self._set_backlight_level(new_level)
            return 1

        return 0

    def handle_wake(self):
        self._wakeup()        
        return 1

    def do_GET(self):
        path_tokens = self.path.split("/")
        t_len = len(path_tokens)
        ret = 0
        if t_len == 3:
            if path_tokens[1] == "backlight":
                ret = self.handle_backlight(path_tokens)
        elif t_len == 2:
            if path_tokens[1] == "wake":
                ret = self.handle_wake()

        if ret:
            self.send_response(200)
        else:
            self.send_response(500)
        self.send_header("Content-type", "text/html")
        self.end_headers()

        if ret:
            res = "<html>OK</html>"
        else:
            res = "<html>FAIL</html>"
        self.wfile.write(res.encode())

def run(server_class=HTTPServer, handler_class=KindleLipcHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()

run()
It provides a very simple API accessible over HTTP with the following endpoints:
  • http://{device_ip}/wake - Wake device from sleep
  • http://{device_ip}/brightness/up - Set brightness to next level up
  • http://{device_ip}/brightness/down - Set brightness to next level down
  • http://{device_ip}/brightness/{0,24} - Set brightness to specific level

To run it, install NiLuJe's build of Python3 from here, save the script above to /mnt/us/server.py and run nohup python3 /mnt/us/server.py & from a shell using SSH.

You'll probably need to open port 8000 on the firewall of the Kindle before you can call the endpoints over WiFi.
Good idea!
I use this method to turn pages and exec some other commands with remote dongle.
lclrc is offline   Reply With Quote