我正在使用raspberry pi和Firebase开发设备/产品......
系统流程如下:用户在我的网站上购买设备,她可以使用相同的凭据登录移动应用程序。
目前,我依赖于一些如何生成的uniuqe id放入设备,以便从设备和设备与Firebase实时数据库进行数据交互...
现在我需要知道设备是在线还是离线。答案应该是可能的两个解决方案。因为我想通知用户:“您的设备处于脱机状态”...
1-关于当前代码(依赖于唯一ID):如果可能,我该如何实现。
2-更改系统到基于用户:如果我实现这个我必须考虑系统。设备没有显示输入也没有键盘。例如,当用户更改密码时会发生什么?
谢谢..
答案 0 :(得分:3)
你想要的是onDisconnect
当您的设备启动时,您需要设置onDisconnect
来更改其状态,甚至开火:
var lastOnlineRef = firebase.database().ref("devices/1234/lastOnline");
lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP);
var isOnlineRef = firebase.database().ref("devices/1234/isOnline");
isOnlineRef.onDisconnect().set(false);
对于用户来说,我并不完全确定我理解。如果您使用以下路径将您的设备与您的UID隔离开来:/devices/UID
它们独立于用户而存在。
对于您的用户,您只需创建所有设备的列表:/users/UID/devices
{
1234: 1234,
5678: 5678
}
然后在您的应用中,您首先获取他们的设备列表,然后创建对它们的引用。
在Angular中看起来像:
// in the ts
public userDevices = this.db.list('/users/UID/devices').valueChanges();
public getDeviceObservable(deviceId: string) {
return this.db.object('/devices/' + deviceId).valueChanges();
}
//in the template
<div *ngFor="let deviceId of userDevices | async">
<ng-container *ngIf="getDeviceObservable(deviceId) | async as device">
{{ device | json }}
</ng-container>
</div>
在模板中放置一个getObservable并不是最好的做法,你也可以在组件中做到这一点,但这与switchMap等完全相同。