Just wondering since I know a lot of people quietly use a screen-area-select -> tesseract OCR -> clipboard shortcut.

  • I separate subjects of interest into different Firefox windows, in different workspaces – so I have an extension title them and a startup script parse text to ask the compositor to put them in the correct workspace (lets me restart more conveniently).
  • I have automatically-set different-orientation wallpapers for using my 2-in-1 depending on whether I use it in portrait or landscape (kind of just for looks, but I don’t think if anyone else adds a wallpaper change to their screen rotation keybind).
  • irotsoma
    link
    fedilink
    arrow-up
    1
    ·
    13 hours ago

    I’d love to see your implementation specs, code, pr any other technical details you’d like to share. I’m setting up home assistant and one of the things I want it to do is replace the functions of my thermostat and add some additional details.

    I used to have a Nest Thermostat, but my furnace needed to be replaced a couple of months back and I got a Mitsubishi heat pump, but their thermostat sucks, and it isnt compatible with Nest because it’s all wireless. I installed the WiFi add-on to the furnace so I can use the app, too, but it also sucks pretty bad. Plus I miss the functionality of it turning down the heat when I’m away to save money and turning it back on before I get home.

    So I’m planning to implement my own solution and documenting and open sourcing everything. But it’s going to be several months before I get to doing it due to other more urgent projects. So, I’m looking at everything available. I definitely will be setting up a small display to replace the thermostat and having motion detectors to turn on the display when you approach it to see the temperature and such and to supplement the home/away detection.

    Anyway, I would love to see your implementation to see how you did this piece of it.

    • atzanteol@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 hours ago

      It’s really quite simple - but works pretty well. There are 3 components:

      Kiosk service

      A simple systemd service that starts a kiosk script.

      [Unit]
      Description=Kiosk
      Wants=graphical.target
      After=graphical.target
      
      [Service]
      Environment=DISPLAY=:0.0
      Environment=XAUTHORITY=/home/pi/.Xauthority
      Type=simple
      ExecStart=/bin/bash /home/pi/kiosk.sh
      Restart=on-abort
      User=pi
      Group=pi
      
      [Install]
      WantedBy=graphical.target
      

      Kiosk script

      The script in /home/pi/kiosk.sh just starts a web browser in full-screen mode pointed at my home assistant instance:

      #!/bin/bash
      
      xset s noblank
      xset s off
      xset -dpms
      
      export DISPLAY=:0.0 
      
      echo 0 > /sys/class/backlight/rpi_backlight/bl_power
      
      LANDING_PAGE="https://homeassistant.example.com"
      
      unclutter -idle 0.5 -root &
      
      /usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk $LANDING_PAGE
      
      

      Display service

      I have a very simple python/flask service that runs and exposes an endpoint that lets you turn on/off the display. It’s called by a homeassistant automation for when the motion detector senses or hasn’t sensed movement.

      Here’s the python - I have this started from another “kiosk.service” systemd service as well.

      #!/usr/bin/env python3
      import subprocess
      
      from flask import Flask
      from flask_restful import Api, Resource
      
      def turn_off_display():
          with(open(backlight_dev, 'w')) as dev:
              dev.write("1")
      
      
      def turn_on_display():
          with(open(backlight_dev, 'w')) as dev:
              dev.write("0")
      
      
      class DisplayController(Resource):
          def get(self, state):
              if state == 'off':
                  turn_off_display()
              elif state == 'on':
                  turn_on_display()
              else:
                  return {'message': f'Unknown state {state} - should be off/on'}, 500
              return {"message": "Success"}
      
      
      def init():
          turn_on_display()
      
      
      if __name__ == "__main__":
          init()
          app = Flask(__name__)
          api = Api(app)
          api.add_resource(DisplayController, '/display/<string:state>')
          app.run(debug=False, host='0.0.0.0', port=3000)
      

      You can then have the HA rest action call this with “http://pidisplay:3000/display/on” or off.