标签:#<标签:0x00007fc4125289f0>

我创建了一个简单的Android应用程序(主助手通知)和自定义组件,允许A19463331伟德国际ndroid的可操作通知。它与HTML5通知(我没有找到非常可靠)非常相似。试一试,让我知道你的想法。

https://github.com/Crewski/HANotify

*****更新9-10-18*****
我将HANotify功能添加到HomeAssist的分叉构建中。如果你已经安装了HomeAssist,那么在安装这个版本之前,你需要先卸载它。

可以在此处找到存储库:
https://github.com/crewski/homeassist/

*****更新8-30-18*****
我增加了发送图像和自定义图标的能力。两者都是通过URL发送的。自定义图标需要SDK >= 26。

*****更新*****
我添加了标记,dismiss,message_type,以及使用自己的FCM项目的选项

19463331伟德国际家庭助理通知

Android操作通知的家庭助理。19463331伟德国际

设置

  1. 将fcm-android.py文件复制到/custom_components/notify/文件夹中(如果没有,创建它)
  2. 在Configuration.yaml文件中,添加以下内容以初始化组件:
Notify: - 名称:Android平台:FCM-Android Server_Key(可选:仅当使用您自己的FCM项目):MyServerKey123456
  1. 重新启动家庭助19463331伟德国际理。
  2. 将Hanotify.apk文件安装到Android设备上(或在Android Studio中编译它)。
  3. 在应用程序中输入您的主19463331伟德国际助理URL和API密码,然后单击“注册*注” - 此组件需要设置API密码。
  4. 发送一些通知!

使用

发送通知

Android Attable通知设置为HTML5通知。可以发送以下参数:

标题目标消息数据:操作颜色message_type标记卸妆图像图标
范围 必需的 描述
信息 必需的 通知的正文
标题 可选的 通知的标题,默认值:主助理19463331伟德国际
目标 可选的 将通知定位到一个特定设备
数据 可选的 通知的额外参数

通知的数据部分的参数。这里的一切都是可选的。

范围 描述
颜色 六角颜色如#ff0000,默认值为蓝色
message_type. “通知”或“数据”,默认为“数据”。这是发送的FCM类型。通知具有更高的优先级,但不能包括行动或由家庭助理解雇。19463331伟德国际
标签 必须是一个整数。标记是通知的“id”。向同一标记发送新通知将覆盖当前通知,而不是创建单独的通知。
解雇 TRUE或FALSE,需要标记参数。如果为true,则通知将被驳回。
行动 ojject数组(最多3个),具有“动作”和“标题”。标题将是通知上的按钮文本,操作是在回调中发送的内容
图像 要发送的图像的URL。图像覆盖了较长的文字所以将截断更长的文字。如果包含动作,图像也会更小
图标 用于通知的图标的URL。只有在> = sdk 26.仔细选择一个带有一个trainparent背景的图标遵循Android指南。

为了发送一个没有操作的“常规”通知,您所要做的就是不将它们包含在对服务的调用中,如下所示。

- 服务:notify.android数据:消息:安妮已经到了家

这将在没有任何动作按钮的情况下发送一个简单的推送通知。

如果你想包含一些动作,像这样的东西会起作用:

- 服务:Notify.Android数据:消息:Anne已经到达了家庭数据:操作: - 行动:公开标题:开放式主页助理 - 行动:Open_door标题:敞开门19463331伟德国际


这将有两个按钮,一个是“开放式门”和一个“开放式家庭助理”的按钮。19463331伟德国际在此示例中为每个按钮(“打开”或“Open_Door”的操作将返回回调。

处理回调

回调被推到事件总线。它可以通过fcm_android_notimations访问它。单击。按下的按钮的“动作”包含在Event_data中。所以自动化看起来像:

- 别名:测试响应触发器: -  event_data:action:open_door event_type:fcm_android_notifications.clicked平台:事件条件:[] action: -  data:entity_id:light.front_door服务:light.turn_on

这个怎么运作

单击应用程序上的注册时,它将Firebase令牌发送回主助手。19463331伟德国际该标记被保存到FCM-Android-Registrats.conf文件中。此令牌是用于识别发送通知的设备的内容。如果通知涉及操作,则将设备的令牌包含在回调中。在处理回调之前,请检查令牌,用于针对FCM-Android-Registration.conf文件进行有效性。

使用您自己的FCM项目

如果要使用自己的新功能或现有的FCM项目,请按照下列步骤操作。基本上你只是使用server_key.在Configuration.yaml和应用程序中的其他Google-services.json。

  1. 登录到https://console.firebase.google.com.
  2. 创建一个新项目或使用一个现有项目
  3. 单击项目概述旁边的设置图标,然后选择项目设置
  4. 单击云消息选项卡并找到遗留服务器密钥
  5. 在你的配置。yaml文件,使用server_key变量的遗留服务器密钥:
  6. 返回Firebase设置页面,单击“常规”选项卡
  7. 在“您的应用程序”下单击“添加应用程序”按钮
  8. 选择为您的Android应用程序添加Firebase
  9. 输入“com.crewski.hanotify”,用于android包名称,然后单击“注册”应用程序
    一种。如果您计划更改Android应用程序的包名称,您将在此输入新名称
  10. 下载Google-services.json
  11. 替换在Android应用程序中找到的Google-services.json与您刚下载的谷歌应用程序。
  12. 编译并安装你的新应用程序
43喜欢

我会尝试它给你一些反馈!

1像

感谢!
它很棒!:+1:

如何定义目标?
通过简单地替换注册文件fcm_android_registations.conf中的“未命名设备”,然后在自动化中使用名称?

编辑:
刚尝试了重命名的方法,它的工作正常。
然后我添加了第二个设备,文件fcm_android_registrations.conf中的名称重命名为“未命名的设备”和“未命名的Device_2”。

1像

该命名方案从HTML5.PY文件中拉出。我会看看,看看我是否可以弄清楚。我很高兴休息为你工作!

有可能翻译组件吗?

2喜欢

我现在一点地玩了一下,它很棒:+1:

再次谢谢,为了开发它。

我同意@j.assuncao- 它会产生一个奇妙的标准组成部分!

2喜欢

可操作的通知很棒。我有两个问题。每当我重新启动raspberry pi时,我都会在apk中重新注册。有没有办法防止这种情况?

我有一个关于自动化的事件数据处理的另一个问题。让我们说我有一个像这样的自动化,有2个动作:

...  - 服务:Notify.Android数据:消息:“去睡觉?”数据:操作: - 操作:Sleep_room1标题:Room1  - 操作:Sleep_room2标题:Room2

如何基于哪些事件数据/单击该操作的其他自动化中使用模板?到目前为止我已经尝试过,它不起作用:

—alias: push sleep trigger:—event_data: action: sleep_room1 event_type: fcm_android_notifications。点击平台:事件- event_data: action: sleep_room2 event_type: fcm_android_notifications。点击平台:事件动作:-服务:脚本。Turn_on data_template: entity_id: > {% if trigger.event.;数据["action"] == "sleep_room1" %}脚本。Room1_readytosleep{%如果触发器。数据["action"] == "sleep_room2" % } script.room2_readytosleep { % endif % }

确认一下,您必须公开HA实例才能让它工作,对吗?

琼斯,谢谢你的尝试。等我有机会再研究一下你的问题。您知道是否fcm_android_notifictions .conf文件在重新启动后仍然存在吗?

我从未尝试使用自动化的模板。我会用它弄乱它并回报。如果你以前弄清楚,请告诉我们。谢谢。

1像

这取决于您想要使用的位置/。对于家庭网络之外的可操作通知,您需要打开。通知仍然可以工作,只是回调不会。如果您与您的HA相同的网络,一切都应该正常工作。如果您没有打开,并且在您出去时想要通知,您需要在您的家庭网络上注册该应用程序。

1像

赦免@Crewski.你的工作没有问题。我的Oneplus3将应用程序设置为电池优化模式。它将正常工作。文件也是持久性的。自动化对我来说仍然不清楚……

感谢更新。我注意到我的像素2上的一些延迟通知。我认为它与通知的优先级别有关。我要添加一个选项可将优先级设置为高。希望这会解决它。

刚刚尝试过它,它真的很好。做得好

1像

@Jones.,它看起来像你需要做的唯一事情就是改变你的第二次说明是elif。侧面说明,您也可以使用trigger.event.data.action而不是trigger.event.data [“action”] ......但它们都似乎工作。尝试一下,看看它是否有效:

—alias: push sleep trigger:—event_data: action: sleep_room1 event_type: fcm_android_notifications。点击平台:事件- event_data: action: sleep_room2 event_type: fcm_android_notifications。点击平台:事件动作:-服务:脚本。Turn_on data_template: entity_id: > {% if trigger.event.;数据["action"] == "sleep_room1" %}脚本。{% elif触发器。数据["action"] == "sleep_room2" % } script.room2_readytosleep { % endif % }

这是我的测试,以模仿你是如何写的东西。

别名:测试响应触发器: -  event_type:fcm_android_notification.clicked平台:事件event_data:front  -  event_type:fcm_android_notifications.clicked platform:event event_data:action:action:back条件:[] action: -  data_template:ority_id:> {%如果触发器.event.data [“action”] =='front'%} light.front_door {%elif trigger.event.data [“action”] =='back'%} light.pergola {%Endif%}服务:Light。影像

@j.assuncao,你在说语言翻译吗?如果是这样,我相信它可以,但我不知道如何做到这一点。你有机会指出我的正确方向,我会看到我能做什么吗?谢谢。

谢谢你的努力。这两种方法我都试过了,但不知为何都不适合我:

错误(mainthread)[homeassistant.core]脚本的无效服务数据...

我想知道hass抱怨什么,因为我所做的只是传递一个entity_id:思维:

更新:
得到它的工作。原因是格式差: see_no_evil:再次感谢您的工作@Crewski.可操作的通知是Alsways的东西,我真的来自Android,你可以让他们成为可能。作为@ danielperna84.我也想知道一些关于隐私问题和技术背景的见解。再接再厉!

1像

做得好。也要尝试一下。

有些问题:

  1. 由于这似乎使用Firebase消息传递(FCM),我想有一个(硬编码的?)您正在运行的目标 - 服务器,所有消息都通过。有什么值得注意的数据的隐私?
  2. 用户是否有可能编译自己的APK并使用私人服务器使用它?如果是这样,你能写一份关于如何做到的小指南吗?
  3. 我得到了这个错误,还有1.和2.无关紧要,因为实际上是组件是FCM服务器?组件中有一个API密钥,这让我认为它已到达您的服务器。但也许不是。

因此,我通常会要求提供整个体系结构的更多细节以及如果用户想要如何自定义它。我希望您的应用程序的想法作为模板要编译与私人服务器一起使用。

2喜欢

这是一个FCM服务器,不是他自己的。在GitHub repo中有Android studio代码,如果你想自编译,或者你想看看所有都在做什么。

这就是我好奇的。我询问的原因是因为我上次看着Firebase是你必须在Google Dev控制台中创建一个应用程序(就像我回忆起来,就像在HASS中的Google Assistant集成一样)。由于这似乎不需要使用我所假设的这个组件,因此已经采取了这一步骤,因此也是随附的服务器处理消息传递。

关于编译的问题是,如果需要,汇编将其适应自己的服务器基础架构。如前所述,代码中有一个API密钥。这个关键来自哪里?如果我改变它怎么办?重点是,我希望通过其他人独立于其他人的Google应用程序工作。

编辑:
为了澄清我为什么如此怀疑云服务器的存在:我做了自动化通知平台,使用FCM。在那种特定情况下,App Creator运营的服务器。因此,我认为它也可能像组件一样。

嘿伙计们,安全绝对是一个有效的问题。作为@Nicholi_Knight我使用的是FCM服务器,它与谷歌服务相匹配。如果有人想要使用他们自己的,他们将需要更改fcm-android.py中的API_KEY变量,以匹配他们的遗留云消息键。然后下载一个谷歌服务。json(使用com.crewski.hanotify作为id),并替换android应用程序中的一个。

App / Component组合使用FCM和REST API。FCM仅涉及HA到APP的通知。其他一切都在REST API上。快速故障是:

  1. 该应用程序通过POST请求向HA发送Firebase令牌(唯一的每个设备)以注册它。这是您在FCM-Android-Registration.conf文件中找到的令牌。
  2. 当发送通知时,HA通过FCM将其发送到应用程序。我使用FCM的“registration_ids”部分,使它只被发送到你已经注册的设备。通知被发送为“数据”类型,而不是“通知”类型,这样我就可以包含操作。
  3. 如果单击某个操作,该操作将通过POST请求发送回HA。在这个POST请求中,包含了来自设备的令牌。HA首先检查这个令牌以确保它在fcm-android-registrations.conf中,然后处理剩下的。如果没有匹配,则抛出一个错误。

我看到的唯一数据是应用程序中安装了多少个设备,我认为CCM的发送计数。我没有看到它被发送到的地方。我没有收到你们的任何随机通知,所以它正在工作。:+1:在让我们说我确实收到了你的通知的机会上,如果我试图通过一个动作回复它,它将被发送到我的HA,因为响应超过了REST API。

希望这篇文章能够很好地涵盖这些内容,从而缓解一些担忧。说了这么多,我在和@Alexxander0想办法在你自己的Firebase项目中使用应用程序,而不需要重新编译应用程序。这需要在运行时进行配置。希望我们能继续。

如果我需要进一步扩展,请告诉我。我很高兴你们正在脱离它!

@ danielperna84.,我会在为您使用自己的Firebase项目进行指导下进行。我可以制作它,以便您可以将API_KEY作为Configuration.yaml文件的一部分。如果没有使用,它可以默认到我的。当我得到这种改变并写完时,我会告诉你。

3喜欢