经常扫描的时候通过自动扫描仪,正面扫一次,反面扫一次,但是反面是逆页序的,如果手工拼在一起,特别费劲。所以可以用python写个小工具自动拼在一起,扫描完成后,奇数页命名为odd.pdf,偶数页命名为even.pdf,和这个小工具放在一个目录下,就可以实现自动合并。PyPDF2这个package不能用3.0版本及往上的,后面的函数名改了,2.12.1版本没问题。

import os
import ntpath
import sys

import PyPDF2

class File:
    def __init__(self, path: str):
        if not ntpath.exists(path):
            print('文件不存在')
            raise FileNotFoundError
        self.abspath = ntpath.abspath(path)
        self.filetype = ntpath.splitext(self.abspath)[1]
        self.filename = ntpath.splitext(ntpath.basename(self.abspath))[0]
        self.dirpath = ntpath.dirname(self.abspath) + '\\'

def merge(file1, file2):
    a = File(file1)
    b = File(file2)
    if a.filetype != '.pdf' or b.filetype != '.pdf':
        print('文件类型错误')
        os.system('pause')
        exit(1)
    f1 = open('odd.pdf', 'rb')
    f2 = open('even.pdf', 'rb')
    reader1 = PyPDF2.PdfFileReader(f1)
    reader2 = PyPDF2.PdfFileReader(f2)
    writer = PyPDF2.PdfFileWriter()
    if reader1.numPages != reader2.numPages:
        print('页数不相等')
        os.system('pause')
        exit(2)
    for i in range(reader1.numPages):
        writer.addPage(reader1.getPage(i))
        writer.addPage(reader2.getPage(-(i + 1)))
    newf = open('combine.pdf', "wb")
    writer.write(newf)
    f1.close()
    f2.close()
    newf.close()


def main():
    import sys, os

    config_name = 'myapp.cfg'

    if getattr(sys, 'frozen', False):
        application_path = os.path.dirname(sys.executable)
        running_mode = 'Frozen/executable'
    else:
        try:
            app_full_path = os.path.realpath(__file__)
            application_path = os.path.dirname(app_full_path)
            running_mode = "Non-interactive (e.g. 'python myapp.py')"
        except NameError:
            application_path = os.getcwd()
            running_mode = 'Interactive'

    config_full_path = os.path.join(application_path, config_name)

    print('Running mode:', running_mode)
    print('  Appliction path  :', application_path)
    os.chdir(application_path)

    merge("odd.pdf","even.pdf")
  #  args: list = sys.argv[1:]
 #   i = len(args)
  #  if i >= 2 and i % 2 == 0:
  #      args.sort()
  #      for j in range(0, i, 2):
  #          merge(args[j], args[j + 1])


if __name__ == '__main__':
    main()

我这里编译好的可以直接运行的版本

HA其实消耗不了多少系统资源,hassos居然要树莓派3以上的硬件,不信这个邪,之前已经通过hassbian再树莓派1b上实现ha(hassbian完美支持ha),就是Python的版本比较低,插件得要降版本才行。于是想着要不干脆试试彻底从Raspbian安装ha试试看。虽然这里是用的树莓1b,但我相信高于1b也是可以的,很多人的树莓派2代不用放在那吃灰了。

首先下载最新的Raspbian的镜像(清华源链接),注意是lite,桌面版有图形界面极度消耗资源,树莓派1b扛不住的,接下来无论是dd还是用别的软件烧录到sd卡上自便,我在Mac上习惯性用dd

sudo dd if=2020-02-13-raspbian-buster-lite.img of=/dev/rdiskX bs=5m

如果有显示器,外接键盘可以直接进到系统,否则在boot分区下新建ssh空文件,开机自动打开ssh服务

用nano修改apt源/etc/apt/sources.list,我用南大的源

deb http://mirror.nju.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

修改/etc/apt/sources.list.d/raspi.list如下(注意南大源给出的说明上漏了debian/)

deb http://mirror.nju.edu.cn/raspberrypi/debian/ buster main

老规矩

sudo apt-get update
sudo apt-get upgare

接下来慢慢等吧,更新完后修改一下系统设置

sudo raspi-config
继续阅读

13年的时候,入手一枚树莓派1b,曾经派上过大用场,放在宿舍作为中继跳板,实验室只能用贵的不行学校流量,宿舍可以接商用宽带,因此在树莓派上pppoe拨号的同时,作为VPN接入服务器在校园网上搭一条VPN链路就可以在实验室享受便宜的宽带了。这个树莓派已经陪着快10年了,外面的塑料壳子已经破损,胶布将就粘着用。接着往后不需要作为宽带中转的话,还是习惯性把树莓派插着,看着上面的灯在闪就很解压。

突然有一天脑洞大开,想用苹果的Homekit来控制小米的各种智能开关,因为每次手机开个小米app就要翻半天,Homekit只需要喊一声“Hey Siri“,就能控制了。

翻阅一圈发现有个封装好的HASSOS系统很方便,把系统烧录到卡上就能用了,目前最新版的官方镜像只支持树莓派3或4,于是只能下个老版本的支持树莓派的试一试,然后在Preparing Home Assistant卡了半天,花了一天时间重装了三回,还是挂着外网的环境,都没有用。其实吧HASSOS基础无论版本怎么样,都会强制安装最新版本的2022.07.07的Docker,直接在我的机器上挂了。因为在Docker里面,虽然部署方便,但是出了问题很难查找,然后就放弃了,试试在一个干净的Raspbian系统上来安装。

继续阅读