【语音播报】没时间刷新闻热搜?让博灵语音通知终端读给你听!-声光报警灯|语音播报器|Modbus报警灯|网口语音播报|网络语音播报器

news2025/1/11 14:54:46

背景

每天上班太忙碌,没有时间刷微博,新闻发展的太快,生怕错过微博热搜,看着手边的博灵语音通知终端,决定自己写一个脚本,让它给我读新闻!

少废话,先看东西

实现了以下效果

  • 90分钟刷新一次热搜
  • 依次朗读这些新闻热搜
  • 因为设备放在办公室,晚上并不会扰民,只有午休需要屏蔽,当拉取时间在12点-14点时,自动推迟一小时

终端日志截图

声光报警灯播报效果

脚本运行截图

在这里插入图片描述

播报效果图

声光报警器播报效果

实现代码

热搜使用了聚合数据的热搜Api实现,脚本使用的Python3实现,因为想测试一下通知终端的Modbus TCP协议,所以采用了Modbus TCP协议推送,之后会放出HTTP协议的代码。
Modbus TCP协议说明文档点我查看

注意:

  • 需要使用pymodbus类库,根据版本不同,有两处需要修改的地方,代码中已标注
  • Modbus TCP一次只能传52个字,之后会编写HTTP版本的代码,更简单!
  • 午休时间在代码中体现,可根据自己需求自行修改
import struct
import time

# pymodbus(v2.0)使用pymodbus.client.sync
# pymodbus(v3.0)使用pymodbus.client
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.register_write_message import WriteMultipleRegistersRequest
import urllib3, json, datetime
import traceback

def encodeStr(s):
    raw = []
    for bit in s:
        bit = int.from_bytes(bit.encode('utf-8'), 'big')
        word = [0] * 2
        word[0] = (0xffff0000 & bit) >> 16
        word[1] = 0xffff & bit
        raw += word
    return raw

def sendModbusTCP(tts):
    data_arr = []
    led_style = 15
    led_color = [0] * 8
    led_color[0] = 0x8A
    led_color[1] = 0x2be2

    play_time = 0
    tone = 0
    tts_speed = 0
    led_flag = 0x0601
    empty = [0] * 2
    tts_str = encodeStr(tts)
    data_arr += [led_style] + led_color + [play_time] + [tone] + [tts_speed] + [led_flag] + empty + tts_str

    # print([hex(x) for x in data_arr])
    # print(len(data_arr))
    # 新版本pymodbus(v3.x)必须要传后面的1,旧版本pymodbus(v2.0)不能传
    # request = WriteMultipleRegistersRequest(100, data_arr, 1)
    request = WriteMultipleRegistersRequest(100, data_arr)
    try:
        res = client.execute(request)
        print(res)
    except Exception as e:
        with open('modbus.log', 'a') as f:
            f.write('\n' + datetime.datetime.now().__str__() + '\n')
            f.write(tts + '\n')
            traceback.print_exc(file=f)

if __name__ == '__main__':
    client = ModbusTcpClient(host='192.168.0.216', port=502)
    http = urllib3.PoolManager()
    while True:
        now = datetime.datetime.now()

        if 12 <= now.hour <= 14:
            print("午休时间")
            time.sleep(3600)
            continue
            
        
        print('拉取时间:' + now.__str__() + '\n')
        news = http.request('get', 'http://apis.juhe.cn/fapigx/networkhot/query?key=自己的key')
        news = news.data.decode('utf-8')
        with open('resou_raw.log', 'a', encoding='utf-8') as f:
            f.write('\n' + datetime.datetime.now().__str__() + '\n')
            f.write(news)
        news = json.loads(news)
        i = 1
        tts = ''
        with open('resou.log', 'a', encoding='utf-8') as f:
            f.write('\n' + datetime.datetime.now().__str__() + '\n')
            for item in news['result']['list']:
                print(str(i) + '-' + item['title'] + '\n')
                f.write(str(i) + item['title'] + '\n')
                if len(tts) + len(str(i) + '。' + item['title'] + ' ') > 51:
                    sendModbusTCP(tts)
                    tts = ''
                tts += str(i) + '。' + item['title'] + ' '
                i += 1
        sendModbusTCP(tts)
        time.sleep(5400)



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

02 快速定位关键点并爆破

vm所进行的代码级的保护是对于软件保护的最后一层 1、API断点法 如何切换到程序的代码节的位置&#xff1f; 》od点击e->双击xxx.exe即可 程序需要读取文本框输入的内容&#xff0c;所以肯定会调用GetWindowText函数&#xff0c;所以可以ctrlg然后输入GetWindowText进行…

ChatGPT 和 Elasticsearch:分面、过滤和更多上下文

作者&#xff1a;Luca Wintergerst 在最近的一篇博客文章中&#xff0c;我们讨论了 ChatGPT 和 Elasticsearch 如何协同工作以帮助更有效地管理专有数据。 通过利用 Elasticsearch 的搜索功能和 ChatGPT 的上下文理解&#xff0c;我们演示了如何改进结果。 在这篇文章中&#…

制造业数字化转型难?低代码带来曙光

概要&#xff1a;制造业企业在数字化转型中一直面临着许多困难和挑战&#xff0c;中小企业更是如此。天翎低代码平台通过自身可视化设计、私有化部署、灵活性、扩展性和兼容性等特性&#xff0c;帮助制造业企业更好地完成数字化转型目标。不仅如此&#xff0c;天翎还推出了微鳄…

iview tree树形控件多选,自定义内容

项目中需要一个iview框架的树形控件,需要里面包含以下功能 1、控件宽度可展开,可缩小2、树形控件可搜索,并且定位到搜索的节点3、控件可以一键勾选,一键取消4、控件图标自定义5、 点击最后一个节点时可以进入到二级节点,点击上一节点可返回完整代码:listToTree文件 效果图: 具…

标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜

标准模版库 https://blog.csdn.net/shaozheng0503/article/details/129101932?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168802585416800211563089%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id1688025854168…

前端判断img图片未能正确加载时显示一个默认图片。img标签onerror事件设置了本地默认图片还是不显示的问题

前端img标签中引用后端交给的图片地址时&#xff0c;有可能这个路径下图片被删除或者损坏了&#xff0c;那么页面在加载img图片时就显示为&#xff0c;太丑了。 img标签有个onerror事件&#xff0c;就是当图片未被正确加载的时候调用此事件&#xff0c;写的时候在onerror事件里…

安装国产系统Kylin-Desktop实战

前言 随着国产化系统的呼声越来越高&#xff0c;再加上今年6月红帽公司发表声明&#xff0c;只有付费才能拿到代码的通告&#xff0c;学习国产化势在必行。 在众多的国产化系统中&#xff0c;我选择了排名比较高的系统&#xff0c;今天我们就一起来安装下麒麟的操作系统 &…

习题-集合框架

目录 1.打印信息 2.ArrayList的使用 User类 测试类 3.Set的使用 汽车类 测试类 4.ArrayList使用 5.新闻 新闻类 测试类 6.返回索引 7.删除重复QQ 8.Map集合操作 9.成绩排序 学生类 测试类 10.Map基础题 学员类 测试类 11.遍历Map综合-国家名称 12.Collec…

1. Linux手写简单的线程池

目录 一、线程池的概念二、线程池的核心组件三、数据结构设计1、任务队列2、线程池 四、接口设计1、创建线程池2、销毁线程池3、抛出任务的接口 五、实现一个线程池及测试1、测试单生成者——多消费者2、测试多生产者——多消费者3、thrd_pool.h4、thrd_pool.c5、main.c6、thrd…

<C语言> 操作符

1.算术操作符 加法&#xff08;&#xff09;&#xff1a;用于将两个操作数相加。减法&#xff08;-&#xff09;&#xff1a;用于将第一个操作数减去第二个操作数。乘法&#xff08;*&#xff09;&#xff1a;用于将两个操作数相乘。除法&#xff08;/&#xff09;&#xff1a;…

使用JavaScript获取随机数序列

使用Javascript 生成随机数 要在 Javascript 中生成随机数&#xff0c;可以使用 Math 对象的 random() 方法。该方法返回一个大于等于 0 小于 1 的伪随机浮点数。 Javascript中的 Math.random() 函数是一个用于生成随机数的内置函数。 MDN 官方解释 Math.random() 函数返回…

idea常用快捷方式,保姆级!图文并茂【建议收藏】

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 给大家分享一下idea在开发过程中使用的快捷方式把&#xff0c;可以极大的提升生产力&#xff0c;提高自己的开发速度&#xff0c;需要在开发中不断地使用&#xff0c;…

《Linux操作系统编程》 第十章 线程与线程控制: 线程的创建、终止和取消,detach以及线程属性

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

arcgis-elasticsearch矢量数据导入及索引设计工具

插件说明 插件支持单图层导入和多图层同时导入&#xff0c;依赖elasticsearch包和urlLib包&#xff0c;使用之前请用pip安装&#xff0c;具体的依赖包的requirements.txt文件放在压缩包里面了。 pip install -r requirements.txt插件下载地址&#xff1a;https://download.cs…

DocuSign:在全球电子签名市场具有巨大上涨潜力的SaaS股

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结 &#xff08;1&#xff09;DocuSign的核心电子签名业务还在持续增长&#xff0c;尽管在疫情后增速有所放缓&#xff0c;但第一季度的收入已经达到了6.61亿美元&#xff0c;增长率为12%。 &#xff08;2&#xff09;Do…

Linux:通过wget下载安装mysql数据库(5.7版本)

目前&#xff0c;主要使用的MySQL有5.7和8.0两个版本&#xff0c;在安装上&#xff0c;5.7和8.0版本基本一致&#xff0c;区别只在于配置root密码和远程登陆上不同。本次将以5.7版本作为对象&#xff0c;进行后续安装。 1.wget下载MySQL安装文件 下载完成&#xff0c;得到mysq…

PySpark如何输入数据到Spark中?【RDD对象】

PySpark支持多种数据的输入&#xff0c;在输入完成后&#xff0c;都会得到一个&#xff1a;RDD类的对象RDD全称为弹性分布式数据集(Resilient Distributed Datasets)&#xff0c;PySpark针对数据的处理&#xff0c;都是以RDD对象作为载体&#xff0c;即&#xff1a; •数据存储…

ansible实训-Day3(playbook的原理、结构及其基本使用)

一、前言 该篇是对ansible实训第三天内容的归纳总结&#xff0c;主要包括playbook组件的原理、结构及其基本使用方式。 二、Playbook 原理 Playbook是Ansible的核心组件之一&#xff0c;它是用于定义任务和配置的自动化脚本。 Ansible Playbook使用YAML语法编写&#xff0c;可…

Linux 学习记录42(C++篇)

Linux 学习记录42(C篇) 本文目录 Linux 学习记录42(C篇)一、class 类1. 类中的this指针(1. this指针的格式(2. 使用this指针 2. 类中特殊的成员函数(1. 构造函数>1 格式/定义>2 调用构造函数的时机>3 构造函数的初始化列表 (2. 析构函数>1 功能/格式>2 析构函数…

Redis的数据复制到另一台Redis

Redis的数据复制到另一台Redis 最近用到一个问题&#xff0c;需要把Redis的数据复制到另一台Redis&#xff0c;现在总结下解决问题的方法 解决方法一&#xff1a; redis-dump导出 [root ~]# redis-dump -u :password172.20.0.1:6379 > 172.20.0.1.jsonredis-load导入 [ro…