首页 > 其他分享 >Tasker配合ntfy接收通知

Tasker配合ntfy接收通知

时间:2024-09-23 09:45:36浏览次数:7  
标签:Tasker ntfy 发送 https notification const 接收 taskerLog

ntfy是一个在设备间传递消息的工具。可以直接使用官方提供的服务,也可以自建。类似的工具还有很多,例如gotify等等。这里以ntfy为例,其他工具也大多支持GETPUT的方式发送和接收消息。

Tasker是一个在安卓设备上非常流行的自动化工具,可以发送GET请求与ntfy服务器通讯来接收消息。

ntfy发送和接收消息

发送消息

ntfy支持众多的发送消息方式,这里以PUT json为例。更多内容参考https://docs.ntfy.sh/publish/

注意URL中不包含topic,而是放在了JSON中。文档中的示例:

fetch('https://ntfy.sh', {
    method: 'POST',
    body: JSON.stringify({
        "topic": "mytopic",
        "message": "Disk space is low at 5.1 GB",
        "title": "Low disk space alert",
        "tags": ["warning","cd"],
        "priority": 4,
        "attach": "https://filesrv.lan/space.jpg",
        "filename": "diskspace.jpg",
        "click": "https://homecamera.lan/xasds1h2xsSsa/",
        "actions": [{ "action": "view", "label": "Admin panel", "url": "https://filesrv.lan/admin" }]
    })
})

接收消息

这里和发送消息类似。可以使用Javascript中的fetch函数发送GET请求。返回的数据为JSON格式。

利用Tasker接收消息

由于涉及到从网络上获取信息,所以存在比较高的失败可能性,因此需要添加大量的错误处理逻辑。为了整体流程清晰,强烈建议将逻辑完全写在一个Javascript脚本中。

// ntfy的每个消息都有一个ID。利用这个ID可以只获取最新的消息。

let lastNotification;
try {
    lastNotification = global('%NotificationID');
} catch (e) {
    lastNotification = 'notificationID';
    console.log('Run in browser');
}
const ntfyUrl = 'https://ntfy.sh/mytopic/json?poll=1&since=' + lastNotification;

// 日志输出。根据情况输出到浏览器控制台或者手机日志文件。
const taskerLog = function (str) {
    const isOnMobile = typeof flash === 'function';
    if (isOnMobile) {
        writeFile('ntfy.log', str + '\n', true);
    } else {
        console.log(str);
    }
}

// fetch notifications from ntfy
const fetchNotifications = function () {
    taskerLog('开始查询URL: ' + ntfyUrl);
    fetch(ntfyUrl)
        .then(response => {
            taskerLog('Fetch response status:');
            taskerLog(response.status);
            return response.text()
        })
        .then(data => {
            if (data) {
                const lines = data.trim().split('\n');
                lines.forEach(line => {
                    let latestID;
                    let latestTime = 0;
                    try {
                        const notification = JSON.parse(line);
                        const title = notification.title || "New Notification";
                        const message = notification.message || "You have a new notification.";
                        const id = notification.id;
                        const time = notification.time;
                        if (time > latestTime) {
                            latestID = id;
                        }

                        taskerLog(title);
                        taskerLog(message);

                        // 将得到的信息传递给另一个任务“通知栏提醒”。
                        let result = performTask(
                            '通知栏提醒', local('%priority'), title, message
                        );
                        taskerLog(result);

                        setGlobal('%NotificationID', latestID);
                    } catch (e) {
                        throw new Error('Error parsing JSON' + e + 'Line:' + line);
                    }
                })
            } else {
                taskerLog('No new notifications.');
            }
        })
        .then(r => exit())
        .catch(error => {
            taskerLog('Error fetching notifications: ' + error);
        });
    taskerLog('查询结束');
}

fetchNotifications();

由于Tasker中的Javascript不支持直接发送通知栏提醒,所以需要另外创建一个Task。利用performTask启动Task并传递相关参数。

“通知栏提醒”这个Task中仅需要包含Notify这一个ActionAction中可以使用%par1%par2这样的变量获取前面传递的参数。Notify中的具体内容可以根据情况填写。

标签:Tasker,ntfy,发送,https,notification,const,接收,taskerLog
From: https://www.cnblogs.com/flyingicedragon/p/18426419

相关文章

  • PHP命令行脚本接收参数
    使用$argvor$argc参数接收<?phpecho"接收到{$argc}个参数";print_r($argv);phptest.php接收到1个参数Array(   [0]=>test.php)phptest.phpabcd接收到5个参数Array(   [0]=>test.php   [1]=>a   [2]=>b   [3]=>c......
  • 接收网络包的过程——从硬件网卡解析到IP层
    当一些网络包到来触发了中断,内核处理完这些网络包之后,我们可以先进入主动轮询poll网卡的方式,主动去接收到来的网络包。如果一直有,就一直处理,等处理告一段落,就返回干其他的事情。当再有下一批网络包到来的时候,再中断,再轮询poll。这样就会大大减少中断的数量,提升网络处理的效率,这......
  • Python Email库:发送与接收邮件完整指南!
    PythonEmail库如何集成?怎么优化PythonEmail库性能?Python作为一种强大的编程语言,提供了丰富的库来处理电子邮件,其中最著名的就是PythonEmail库。AokSend将深入探讨如何使用PythonEmail库来发送和接收邮件,帮助你掌握这一关键技能。PythonEmail库:安装配置只需确保你的Pyt......
  • 短信的多样性:如何按发送与接收方式进行分类
    短信的简介短信,全称为ShortMessageService,简称SMS,是一种通过手机或其他电信终端直接发送或接收的通信服务。它最初是基于文本和数字的消息形式,但随着技术的进步,已经发展到可以支持图像、语音、视频和表情等多种类型的消息。短信的字符数限制通常为160个英文或数字字符,或者70......
  • Network成功接收数据但与控制台打印不一致
    今天尝试和后端进行数据对接时发生了一个匪夷所思的问题(万恶的控制台)描述前端可以给后端正常发送请求,后端可以接收到正确数据并根据业务流程进行处理,但前端使用控制台打印时与后端返回的数据不一致(没关注Network的返回结果)。后端使用Postman发送请求进行测试却一切正常,可以正......
  • UART——通用异步接收发送器
    数字系统是以1和0的形式共享和存储信息。要与具有不同架构的多个设备共享此信息,我们需要一种通用的数据交换方法。这就是各种通信协议发挥作用的地方,其中之一就是通用异步接收器发送器(UART)。它是嵌入式电子产品中最常用的通信协议之一。它是一种串行、全双工、异步......
  • 使用WebSocket协议实现在ESP32上音频接收播放
     主要目的:学习WebSocket通讯协议和ESP32开发所需配置:Pycharm,python3.12,ESP32S3N16R8, 扬声器(8欧,2W), 功放模块:MAX98357I2SAMP。一、介绍 1、WebSocket协议 WebSocket是一种网络通信协议,位于OSI模型的应用层。它提供了在单个TCP连接上进行全双工通信的能力,使得客......
  • 解决Java8中使用LocalDate接收参数异常 not supported by default
    背景在spring项目中经常遇到需要传参为时间类型的参数,java8提供了很方便的日期:LocalDate时间:LocalTime及LocalDateTime类型,在spring接口中直接使用这些类型接收入参时会报错Java8date/timetypejava.time.LocalDatenotsupportedbydefault原因是jackson库默认......
  • stm32使用cubumx配置串口不定长接收
    前言此方法利用stm32的uart+dma来实现不定长接收,利用dma中的空闲中断。设置USART1为异步通信方式使能串口1全部中断设置USART1_RX的DMA中断接收 速度设置最大(其实用115200没有影响但为保证工程严谨性)检查中断优先级这两个中断是否开启  生成代码后......
  • 【开源分享】PHP 在线客服系统源码 全开源无加密,支持自动刷新 网页即时接收消息
    智能化在线客服系统也是其中一个必备功能。其智能化主要体现在细节中,在保持客服人员工作正常进行的情况下,让效率变高。智能化在线客服系统采取“轮询”的工单分配方式,让合适的客服人员处理合适的问题;提供“视图”功能,让客服人员专注于重要工单;强大的“搜索”功能,迅速锁定目标客户......