Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215

Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215
应用层开发笔记 – 扎老铁
Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215

Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215
Warning: mysqli_num_fields() expects parameter 1 to be mysqli_result, boolean given in /www/wwwroot/dev.zhalaotie.com/wp-includes/wp-db.php on line 3215
class="post-52886 post type-post status-publish format-standard hentry">

应用层开发笔记

权限

权限在客户端实现,采用 angular 机制+自定义方法实现。

三个用户三种权限,

初级权限,0 0 是匿名,未登录即是匿名

中级,部分功能

高级,所有功能

功耗计算

计算方法:

累计节能=额定能耗-实际功耗

额定功耗=额定功率*亮灯时长

如何取数据:

实际能耗,从设备寄存器的累积能耗取,目前由于没有高杆灯设备,先在设备表加个字段取

亮灯时长,从设备寄存器的累计亮灯时长取(小时为单位),目前由于没有高杆灯设备,先在设备表加个字段取

额定功率,设备表加个字段

无故障运行时间

设备

/// <summary>
/// 获取设备无故障运行时间
/// </summary>
/// <returns>The safe run day by device identifier.</returns>
/// <param name=”wc”>Wc.</param>
/// <param name=”deviceId”>Device identifier.</param>
/// <param name=”currDate”>Curr date.</param>
public int GetSafeRunDayByDeviceId

(IContext wc, string deviceId, DateTime? currDate = null)
{
// 当前时间
var date = currDate ?? DateTime.Now;

var dev = DeviceDefRepository.Instance.Get(deviceId);

// 字段说明:
lledAt 安装时间
Date 警报时间
FixedAt 故障修复时间,表示最后一次故障修复时间(原来的警报设备被修复后,就不会产生警报了,同时会更新 【AlarmFixedAt 故障修复时间】,并将 【AlarmDate 警报时间】设置为 null)

// 取得【故障修复时间】/【安装时间】/【创建时间】
var startDate = dev.AlarmFixedAt??dev.InstalledAt?? dev.CreatedAt;
if (startDate == null)
{
Logger.Warn($”Device#{deviceId} not setted  {nameof(dev.CreatedAt)}”);
return -1;
}
// 警报时间
var ad = dev.AlarmDate;
if (date<ad)
{
return 0;
}
// 计算无故障运行时间(计算结果小于 0 ,则表示有故障运行时间)
// 如果产生过警报且未被修复:则用【警报时间】 – 最后一次【故障修复时间】,
//(减出来是负数的,则表示产生故障已经多少天了,所以前端要判断,小于 0 则显示 0)

// 如果产生过警报但已被修复,或从未产生过警报,则用【当前时间】 – 【安装时间】
return dev.AlarmDate == null ? (date – startDate.Value).Days : ((dev.AlarmDate.Value- startDate.Value).Days);

}

全局的计算是这样的:

如果设备表 AlarmDate 字段不为 null,则 无故障运行时间为0,表示有设备产生了故障还未被修复

否则的话,即当前没有设备有故障(或曾经有故障但已经被修复了),

那么取得 max 的 AlarmFixedAt (如果全部为 null,则取 InstalledAt ,如果 InstalledAt 全部为 null,则取 CreatedAt),把取得的做为 startDate,这个逻辑上和单个设备一样。

如果 startDate 为 null (一般是没有任何设备),则返回 0。

然后,当前时间 – startDate

再解释一次:

如果设备表 AlarmDate 字段为 null,则用无故障运行时间为 当前时间 – max(AlarmFixedAt) or min(InstalledAt) or in(CreatedAt)

如果为不为 null,则无故障运行时间为 0 天,表示有设备产生了故障还未被修复

sql 里面,判断如果这个字段为null则取其它字段,有个函数的,调一下就可以了,可以嵌套。

客户端界面光色样式 控制(CSS)

.nh-dev-color-def-not-open{
background: $nonOpenColor;
}
.nh-dev-color-def-offline{
background: $offlineColor;
}
.nh-dev-color-def-red{
background:$redColor;
}
.nh-dev-color-def-white{
background: $whiteColor;
}
.nh-dev-color-def-unsupported{
background: #3492f3;
}

DeviceUtility.getDeviceColorDef

bx_bitlab_iot_devicepropertychange

设备寄存器属性变化时,会将设备寄存器变化的值写入此表。

用户界面操作和设备轮询(轮询时设备属性一般不会变,但如果刚好时间点变化,则可能会,比如从白天变成黑夜),均会对设备属性变化进行检测。

发表评论

电子邮件地址不会被公开。