在路由器上实现蜻蜓FM节目更新提醒

小米路由器Mini挪用了网口的指示灯,41口用作GPIO口,现在用来抓取蜻蜓FM的网页,如果感兴趣的节目更新了,就点亮LED灯,实现提醒功能,及时收听节目 🐶🐶🐶🐶🐶

代码如下

package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"strings"
	"time"

	"github.com/parnurzeal/gorequest"
	"github.com/tidwall/gjson"
)

type GPIO struct{}

func (r GPIO) Pin(name string) GPIO_Pin {
	pin := GPIO_Pin{name}
	filename := pin.Filename()
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		// export gpio pin
		ioutil.WriteFile("/sys/class/gpio/export", []byte(pin.Name), 0666)
	}
	return pin
}

type GPIO_Pin struct {
	Name string
}

func (r GPIO_Pin) Filename() string {
	return "/sys/class/gpio/gpio" + r.Name
}
func (r GPIO_Pin) write(where, what string) GPIO_Pin {
	filename := r.Filename() + "/" + where
	ioutil.WriteFile(filename, []byte(what), 0666)
	return r
}

func (r GPIO_Pin) read(where string) string {
	filename := r.Filename() + "/" + where
	b, _ := os.ReadFile(filename)
	return strings.Trim(string(b), "\r\n ")
}

func (r GPIO_Pin) Output() GPIO_Pin {
	return r.write("direction", "out")
}
func (r GPIO_Pin) Input() GPIO_Pin {
	return r.write("direction", "in")
}
func (r GPIO_Pin) High() GPIO_Pin {
	return r.write("value", "1")
}
func (r GPIO_Pin) Low() GPIO_Pin {
	return r.write("value", "0")
}

func main() {
	fmt.Println("QingTing FM Curl")
	last_program := ""
	gpio := GPIO{}
	gpio.Pin("41").Output().High()

	for {
		_, body, _ := gorequest.New().Get("https://i.qingting.fm/capi/v3/channel/387255?user_id=null").End()
		value := gjson.Get(body, "data.latest_program")
		name := value.String()

		fmt.Println(name)

		if name != "" {
			if last_program == "" {
				last_program = name
			}

			// not enter if is active
			if gpio.Pin("41").read("value") == "1" {
				if last_program != name {
					last_program = name
					fmt.Print("Set low")
					gpio.Pin("41").Output().Low()
				} else {
					fmt.Print("Set high")
					gpio.Pin("41").Output().High()
				}
			}
		}

		// every 10min
		time.Sleep(time.Second * 60 * 10)
	}
}

上传到路由器运行,网口灯亮则节目更新,手动设置LED灭以后进入下一个提醒周期

路由器空间有限,优先上传到/tmp目录,或者是U盘目录运行

运行测试如下

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值