增加voice_num priority配置
This commit is contained in:
parent
c5ea72b4a6
commit
011f9a2a4c
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-12 00:55
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0009_auto_20220704_1504'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='priority',
|
||||
field=models.PositiveSmallIntegerField(default=1, help_text='1-99', verbose_name='优先级'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='voice_num',
|
||||
field=models.PositiveSmallIntegerField(default=2, verbose_name='播放次数'),
|
||||
),
|
||||
]
|
|
@ -19,10 +19,12 @@ class EventCate(CommonAModel):
|
|||
)
|
||||
code = models.CharField('标识', max_length=10, unique=True)
|
||||
name = models.CharField('名称', max_length=20, unique=True)
|
||||
priority = models.PositiveSmallIntegerField('优先级', default=1, help_text='1-99')
|
||||
trigger = models.PositiveSmallIntegerField('触发方式', default=10, choices=EVENT_TRIGGER_CHOICES)
|
||||
self_algo = models.BooleanField('识别算法', default=False)
|
||||
speaker_on = models.BooleanField('开启喇叭报警', default=True)
|
||||
voice_person = models.PositiveSmallIntegerField('声音选择', default=0, help_text='0女声3男声')
|
||||
voice_num = models.PositiveSmallIntegerField('播放次数', default=2)
|
||||
speakers = models.ManyToManyField(TDevice, verbose_name='固定喇叭', blank=True, related_name='ec_speakers')
|
||||
filter_area_level = models.PositiveSmallIntegerField('固定喇叭区域级别过滤', choices=Area.AREA_LEVEL_CHOICES,
|
||||
default=Area.AREA_1)
|
||||
|
|
|
@ -31,7 +31,8 @@ class EventCateListSerializer(CustomModelSerializer):
|
|||
class EventCateUpdateSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = EventCate
|
||||
fields = ['speaker_on', 'speakers', 'filter_area_level', 'voice_person', 'handle_minute']
|
||||
fields = ['speaker_on', 'speakers', 'filter_area_level',
|
||||
'voice_person', 'handle_minute', 'voice_num', 'priority']
|
||||
|
||||
|
||||
class NotifySettingsSerializer(CustomModelSerializer):
|
||||
|
|
|
@ -118,7 +118,9 @@ def save_voice_and_speak(event: Event):
|
|||
Args:
|
||||
event (Event): _description_
|
||||
"""
|
||||
_, event.voice, _ = generate_voice(event.voice_msg, event.cates.first().voice_person)
|
||||
main_cate = event.cates.all().order_by('priority', 'create_time').first()
|
||||
v_p, v_num = main_cate.voice_person, main_cate.voice_num
|
||||
_, event.voice, _ = generate_voice(event.voice_msg, v_p)
|
||||
event.save()
|
||||
sps = list(TDevice.objects.filter(area=event.area, type=TDevice.DEVICE_SPEAKER).values_list('code', flat=True))
|
||||
if len(sps) == 0: # 如果当前区域没有喇叭就找覆盖区的喇叭
|
||||
|
@ -130,7 +132,7 @@ def save_voice_and_speak(event: Event):
|
|||
if n.code not in sps:
|
||||
sps.append(n.code)
|
||||
if sps:
|
||||
spClient.speak(event.voice, sps)
|
||||
spClient.speak(event.voice, sps, v_num)
|
||||
|
||||
|
||||
def create_remind(event: Event):
|
||||
|
@ -222,7 +224,7 @@ def dispatch_dahua_event(data: dict):
|
|||
if alarm_type in [1001003, 1001000] and vchannel: # 内部人员/或陌生人报警
|
||||
# 查看加载的算法
|
||||
algo_codes = list(AlgoChannel.objects.filter(vchannel=vchannel).exclude(
|
||||
algo__code=None).values_list('algo__code', flat=True))
|
||||
algo__code=None).order_by('algo__priority', 'algo__create_time').values_list('algo__code', flat=True))
|
||||
area = vchannel.area # 视频所在区域
|
||||
if algo_codes and area: # 如果加载了算法且视频通道绑定区域才继续
|
||||
face_img_o = dhClient.get_full_pic(data['info']['alarmPicture'])
|
||||
|
|
|
@ -109,12 +109,13 @@ class SpClient:
|
|||
raise APIException(**SP_REQUEST_ERROR)
|
||||
return 'error', SP_REQUEST_ERROR
|
||||
|
||||
def speak(self, path: str, sns: list):
|
||||
def speak(self, path: str, sns: list, v_num: int):
|
||||
"""播放报警声
|
||||
|
||||
Args:
|
||||
path (str): 资源本地地址
|
||||
sns (list): 喇叭sn队列
|
||||
v_num (int): 播放次数
|
||||
"""
|
||||
json = {
|
||||
"sns": sns,
|
||||
|
@ -129,7 +130,9 @@ class SpClient:
|
|||
}]
|
||||
}
|
||||
}
|
||||
self.request(**spapis['send_to_device'], json=json)
|
||||
while v_num > 0:
|
||||
self.request(**spapis['send_to_device'], json=json)
|
||||
v_num = v_num - 1
|
||||
return
|
||||
|
||||
def _get_response_ms(self):
|
||||
|
|
Loading…
Reference in New Issue