From 3b83bae866f824f7da45cf4eb4527e16b9a091cc Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Tue, 7 Jan 2025 22:00:35 -0500 Subject: [PATCH 01/13] Table works before matTable --- client/stillbox/src/app/talkgroup.ts | 13 ++++++++-- .../alert-rule-builder.component.html | 2 +- .../alert-rule-builder.component.ts | 25 ++++++++++++++++--- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/client/stillbox/src/app/talkgroup.ts b/client/stillbox/src/app/talkgroup.ts index 475d810..98cd013 100644 --- a/client/stillbox/src/app/talkgroup.ts +++ b/client/stillbox/src/app/talkgroup.ts @@ -15,11 +15,20 @@ export class AlertTime { } export class AlertRule { - times: AlertTime[]; + times: string[]; + timesProc: AlertTime[]; mult: number; - constructor(times: AlertTime[], mult: number) { + constructor(times: string[], mult: number) { this.times = times; + this.timesProc = []; + times.forEach((tm) => { + let sr = tm.split('+'); + this.timesProc.push({ + time: sr[0], + duration: sr[1], + }); + }); this.mult = mult; } } diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html index 845b56a..ccf9ace 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html @@ -10,7 +10,7 @@ - @for (time of rule.times; track $index) { + @for (time of rule | ruleProc; track $index) { {{ time.time }} diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts index 5f9a30a..18ac0e6 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts @@ -1,9 +1,28 @@ -import { Component, Input, Output, EventEmitter } from '@angular/core'; -import { AlertRule } from '../../../talkgroup'; +import { + Component, + Input, + Output, + EventEmitter, + Pipe, + PipeTransform, +} from '@angular/core'; +import { AlertRule, AlertTime } from '../../../talkgroup'; + +@Pipe({ + name: 'ruleProc', + standalone: true, + pure: true, +}) +export class AlertRulePipe implements PipeTransform { + transform(rule: AlertRule, args?: any): AlertTime[] { + let tm = new AlertRule(rule.times, rule.mult); + return tm.timesProc; + } +} @Component({ selector: 'alert-rule-builder', - imports: [], + imports: [AlertRulePipe], templateUrl: './alert-rule-builder.component.html', styleUrl: './alert-rule-builder.component.scss', }) From 21f2ef59bf9d6169d1b925f3c3a5753824fe238b Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Tue, 7 Jan 2025 22:00:35 -0500 Subject: [PATCH 02/13] Table works before matTable --- client/stillbox/src/app/talkgroup.ts | 13 ++++++++-- .../alert-rule-builder.component.html | 2 +- .../alert-rule-builder.component.ts | 25 ++++++++++++++++--- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/client/stillbox/src/app/talkgroup.ts b/client/stillbox/src/app/talkgroup.ts index 475d810..98cd013 100644 --- a/client/stillbox/src/app/talkgroup.ts +++ b/client/stillbox/src/app/talkgroup.ts @@ -15,11 +15,20 @@ export class AlertTime { } export class AlertRule { - times: AlertTime[]; + times: string[]; + timesProc: AlertTime[]; mult: number; - constructor(times: AlertTime[], mult: number) { + constructor(times: string[], mult: number) { this.times = times; + this.timesProc = []; + times.forEach((tm) => { + let sr = tm.split('+'); + this.timesProc.push({ + time: sr[0], + duration: sr[1], + }); + }); this.mult = mult; } } diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html index 845b56a..ccf9ace 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html @@ -10,7 +10,7 @@ - @for (time of rule.times; track $index) { + @for (time of rule | ruleProc; track $index) { {{ time.time }} diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts index 5f9a30a..18ac0e6 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts @@ -1,9 +1,28 @@ -import { Component, Input, Output, EventEmitter } from '@angular/core'; -import { AlertRule } from '../../../talkgroup'; +import { + Component, + Input, + Output, + EventEmitter, + Pipe, + PipeTransform, +} from '@angular/core'; +import { AlertRule, AlertTime } from '../../../talkgroup'; + +@Pipe({ + name: 'ruleProc', + standalone: true, + pure: true, +}) +export class AlertRulePipe implements PipeTransform { + transform(rule: AlertRule, args?: any): AlertTime[] { + let tm = new AlertRule(rule.times, rule.mult); + return tm.timesProc; + } +} @Component({ selector: 'alert-rule-builder', - imports: [], + imports: [AlertRulePipe], templateUrl: './alert-rule-builder.component.html', styleUrl: './alert-rule-builder.component.scss', }) From ac2f5ba8646521fc16ea875a263117b5b0aa2e3b Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Tue, 7 Jan 2025 22:17:27 -0500 Subject: [PATCH 03/13] Alert rules --- client/stillbox/src/app/talkgroup.ts | 6 +- .../talkgroup-record.component.html | 2 +- pkg/alerting/rules/alertrules_test.go | 2 +- pkg/database/batch.go | 16 +++--- pkg/database/models.go | 4 +- pkg/database/talkgroups.go | 8 +-- pkg/database/talkgroups.sql.go | 56 +++++++++---------- pkg/talkgroups/tgstore/store.go | 2 +- .../xport/radioref/testdata/riscon.json | 2 +- sql/postgres/migrations/001_initial.up.sql | 4 +- sql/postgres/queries/talkgroups.sql | 18 +++--- sql/sqlc.yaml | 2 +- 12 files changed, 61 insertions(+), 61 deletions(-) diff --git a/client/stillbox/src/app/talkgroup.ts b/client/stillbox/src/app/talkgroup.ts index 98cd013..5a62385 100644 --- a/client/stillbox/src/app/talkgroup.ts +++ b/client/stillbox/src/app/talkgroup.ts @@ -70,7 +70,7 @@ export class Talkgroup { tags!: string[]; alert!: boolean; system?: System; - alert_config!: AlertRule[]; + alert_rules!: AlertRule[]; weight!: number; learned?: boolean; icon?: string; @@ -86,7 +86,7 @@ export class Talkgroup { metadata: Metadata | null, tags: string[], alert: boolean, - alert_config: AlertRule[], + alert_rules: AlertRule[], weight: number, system?: System, learned?: boolean, @@ -122,6 +122,6 @@ export interface TalkgroupUpdate { metadata: Object | null; tags: string[] | null; alert: boolean | null; - alert_config: AlertRule[] | null; + alert_rules: AlertRule[] | null; weight: number | null; } diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html index 8af8e85..9e8a867 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html @@ -108,7 +108,7 @@ >
- +
} @else { diff --git a/pkg/alerting/rules/alertrules_test.go b/pkg/alerting/rules/alertrules_test.go index 8f4e5f7..74290e0 100644 --- a/pkg/alerting/rules/alertrules_test.go +++ b/pkg/alerting/rules/alertrules_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/require" ) -func TestAlertConfig(t *testing.T) { +func TestAlertRules(t *testing.T) { parseTests := []struct { name string tg talkgroups.ID diff --git a/pkg/database/batch.go b/pkg/database/batch.go index ea9beb3..7b42a46 100644 --- a/pkg/database/batch.go +++ b/pkg/database/batch.go @@ -30,7 +30,7 @@ INSERT INTO talkgroup_versions(time, created_by, metadata, tags, alert, - alert_config, + alert_rules, weight, learned ) SELECT NOW(), $1, @@ -43,7 +43,7 @@ INSERT INTO talkgroup_versions(time, created_by, tg.metadata, tg.tags, tg.alert, - tg.alert_config, + tg.alert_rules, tg.weight, tg.learned FROM talkgroups tg WHERE tg.system_id = $2 AND tg.tgid = $3 @@ -98,7 +98,7 @@ func (b *StoreTGVersionBatchResults) Close() error { const upsertTalkgroup = `-- name: UpsertTalkgroup :batchone INSERT INTO talkgroups AS tg ( - system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_config, weight, learned + system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_rules, weight, learned ) VALUES ( $1, $2, @@ -122,10 +122,10 @@ SET metadata = COALESCE($7, tg.metadata), tags = COALESCE($8, tg.tags), alert = COALESCE($9, tg.alert), - alert_config = COALESCE($10, tg.alert_config), + alert_rules = COALESCE($10, tg.alert_rules), weight = COALESCE($11, tg.weight), learned = COALESCE($12, tg.learned) -RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_config, weight, learned, ignored +RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_rules, weight, learned, ignored ` type UpsertTalkgroupBatchResults struct { @@ -144,7 +144,7 @@ type UpsertTalkgroupParams struct { Metadata jsontypes.Metadata `json:"metadata"` Tags []string `json:"tags"` Alert interface{} `json:"alert"` - AlertConfig rules.AlertRules `json:"alert_config"` + AlertRules rules.AlertRules `json:"alert_rules"` Weight pgtype.Numeric `json:"weight"` Learned *bool `json:"learned"` } @@ -162,7 +162,7 @@ func (q *Queries) UpsertTalkgroup(ctx context.Context, arg []UpsertTalkgroupPara a.Metadata, a.Tags, a.Alert, - a.AlertConfig, + a.AlertRules, a.Weight, a.Learned, } @@ -194,7 +194,7 @@ func (b *UpsertTalkgroupBatchResults) QueryRow(f func(int, Talkgroup, error)) { &i.Metadata, &i.Tags, &i.Alert, - &i.AlertConfig, + &i.AlertRules, &i.Weight, &i.Learned, &i.Ignored, diff --git a/pkg/database/models.go b/pkg/database/models.go index 2448e92..fdc390b 100644 --- a/pkg/database/models.go +++ b/pkg/database/models.go @@ -117,7 +117,7 @@ type Talkgroup struct { Metadata jsontypes.Metadata `json:"metadata,omitempty"` Tags []string `json:"tags,omitempty"` Alert bool `json:"alert,omitempty"` - AlertConfig rules.AlertRules `json:"alert_config,omitempty"` + AlertRules rules.AlertRules `json:"alert_rules,omitempty"` Weight float32 `json:"weight,omitempty"` Learned bool `json:"learned,omitempty"` Ignored bool `json:"ignored,omitempty"` @@ -137,7 +137,7 @@ type TalkgroupVersion struct { Metadata []byte `json:"metadata,omitempty"` Tags []string `json:"tags,omitempty"` Alert *bool `json:"alert,omitempty"` - AlertConfig []byte `json:"alert_config,omitempty"` + AlertRules []byte `json:"alert_rules,omitempty"` Weight *float32 `json:"weight,omitempty"` Learned *bool `json:"learned,omitempty"` Ignored *bool `json:"ignored,omitempty"` diff --git a/pkg/database/talkgroups.go b/pkg/database/talkgroups.go index faa2bed..0022f8a 100644 --- a/pkg/database/talkgroups.go +++ b/pkg/database/talkgroups.go @@ -52,7 +52,7 @@ func (t *TGTuples) Append(sys, tg uint32) { // Below queries are here because sqlc refuses to parse unnest(x, y) const getTalkgroupsWithLearnedBySysTGID = `SELECT -tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_config, tg.weight, sys.id, sys.name, tg.learned, tg.ignored +tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_rules, tg.weight, sys.id, sys.name, tg.learned, tg.ignored FROM talkgroups tg JOIN systems sys ON tg.system_id = sys.id JOIN UNNEST($1::INT4[], $2::INT4[]) AS tgt(sys, tg) ON (tg.system_id = tgt.sys AND tg.tgid = tgt.tg);` @@ -82,7 +82,7 @@ func (q *Queries) GetTalkgroupsWithLearnedBySysTGID(ctx context.Context, ids TGT &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.System.ID, &i.System.Name, @@ -99,7 +99,7 @@ func (q *Queries) GetTalkgroupsWithLearnedBySysTGID(ctx context.Context, ids TGT return items, nil } -const getTalkgroupsBySysTGID = `SELECT tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_config, tg.weight, tg.learned, tg.ignored, sys.id, sys.name FROM talkgroups tg +const getTalkgroupsBySysTGID = `SELECT tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_rules, tg.weight, tg.learned, tg.ignored, sys.id, sys.name FROM talkgroups tg JOIN systems sys ON tg.system_id = sys.id JOIN UNNEST($1::INT4[], $2::INT4[]) AS tgt(sys, tg) ON (tg.system_id = tgt.sys AND tg.tgid = tgt.tg) WHERE tg.learned IS NOT TRUE;` @@ -124,7 +124,7 @@ func (q *Queries) GetTalkgroupsBySysTGID(ctx context.Context, ids TGTuples) ([]G &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, diff --git a/pkg/database/talkgroups.sql.go b/pkg/database/talkgroups.sql.go index 1f552a3..458edcc 100644 --- a/pkg/database/talkgroups.sql.go +++ b/pkg/database/talkgroups.sql.go @@ -27,7 +27,7 @@ INSERT INTO talkgroups( $3, $4, $5 -) RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_config, weight, learned, ignored +) RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_rules, weight, learned, ignored ` type AddLearnedTalkgroupParams struct { @@ -58,7 +58,7 @@ func (q *Queries) AddLearnedTalkgroup(ctx context.Context, arg AddLearnedTalkgro &i.Metadata, &i.Tags, &i.Alert, - &i.AlertConfig, + &i.AlertRules, &i.Weight, &i.Learned, &i.Ignored, @@ -129,7 +129,7 @@ func (q *Queries) GetSystemName(ctx context.Context, systemID int) (string, erro } const getTalkgroup = `-- name: GetTalkgroup :one -SELECT talkgroups.id, talkgroups.system_id, talkgroups.tgid, talkgroups.name, talkgroups.alpha_tag, talkgroups.tg_group, talkgroups.frequency, talkgroups.metadata, talkgroups.tags, talkgroups.alert, talkgroups.alert_config, talkgroups.weight, talkgroups.learned, talkgroups.ignored FROM talkgroups +SELECT talkgroups.id, talkgroups.system_id, talkgroups.tgid, talkgroups.name, talkgroups.alpha_tag, talkgroups.tg_group, talkgroups.frequency, talkgroups.metadata, talkgroups.tags, talkgroups.alert, talkgroups.alert_rules, talkgroups.weight, talkgroups.learned, talkgroups.ignored FROM talkgroups WHERE (system_id, tgid) = ($1, $2) ` @@ -151,7 +151,7 @@ func (q *Queries) GetTalkgroup(ctx context.Context, systemID int32, tGID int32) &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -205,7 +205,7 @@ func (q *Queries) GetTalkgroupTags(ctx context.Context, systemID int32, tGID int const getTalkgroupWithLearned = `-- name: GetTalkgroupWithLearned :one SELECT -tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_config, tg.weight, tg.learned, tg.ignored, sys.id, sys.name +tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_rules, tg.weight, tg.learned, tg.ignored, sys.id, sys.name FROM talkgroups tg JOIN systems sys ON tg.system_id = sys.id WHERE (tg.system_id, tg.tgid) = ($1, $2) @@ -230,7 +230,7 @@ func (q *Queries) GetTalkgroupWithLearned(ctx context.Context, systemID int32, t &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -241,7 +241,7 @@ func (q *Queries) GetTalkgroupWithLearned(ctx context.Context, systemID int32, t } const getTalkgroupsWithAllTags = `-- name: GetTalkgroupsWithAllTags :many -SELECT talkgroups.id, talkgroups.system_id, talkgroups.tgid, talkgroups.name, talkgroups.alpha_tag, talkgroups.tg_group, talkgroups.frequency, talkgroups.metadata, talkgroups.tags, talkgroups.alert, talkgroups.alert_config, talkgroups.weight, talkgroups.learned, talkgroups.ignored FROM talkgroups +SELECT talkgroups.id, talkgroups.system_id, talkgroups.tgid, talkgroups.name, talkgroups.alpha_tag, talkgroups.tg_group, talkgroups.frequency, talkgroups.metadata, talkgroups.tags, talkgroups.alert, talkgroups.alert_rules, talkgroups.weight, talkgroups.learned, talkgroups.ignored FROM talkgroups WHERE tags && ARRAY[$1] ` @@ -269,7 +269,7 @@ func (q *Queries) GetTalkgroupsWithAllTags(ctx context.Context, tags []string) ( &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -285,7 +285,7 @@ func (q *Queries) GetTalkgroupsWithAllTags(ctx context.Context, tags []string) ( } const getTalkgroupsWithAnyTags = `-- name: GetTalkgroupsWithAnyTags :many -SELECT talkgroups.id, talkgroups.system_id, talkgroups.tgid, talkgroups.name, talkgroups.alpha_tag, talkgroups.tg_group, talkgroups.frequency, talkgroups.metadata, talkgroups.tags, talkgroups.alert, talkgroups.alert_config, talkgroups.weight, talkgroups.learned, talkgroups.ignored FROM talkgroups +SELECT talkgroups.id, talkgroups.system_id, talkgroups.tgid, talkgroups.name, talkgroups.alpha_tag, talkgroups.tg_group, talkgroups.frequency, talkgroups.metadata, talkgroups.tags, talkgroups.alert, talkgroups.alert_rules, talkgroups.weight, talkgroups.learned, talkgroups.ignored FROM talkgroups WHERE tags @> ARRAY[$1] ` @@ -313,7 +313,7 @@ func (q *Queries) GetTalkgroupsWithAnyTags(ctx context.Context, tags []string) ( &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -330,7 +330,7 @@ func (q *Queries) GetTalkgroupsWithAnyTags(ctx context.Context, tags []string) ( const getTalkgroupsWithLearned = `-- name: GetTalkgroupsWithLearned :many SELECT -tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_config, tg.weight, tg.learned, tg.ignored, sys.id, sys.name +tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_rules, tg.weight, tg.learned, tg.ignored, sys.id, sys.name FROM talkgroups tg JOIN systems sys ON tg.system_id = sys.id WHERE ignored IS NOT TRUE @@ -361,7 +361,7 @@ func (q *Queries) GetTalkgroupsWithLearned(ctx context.Context) ([]GetTalkgroups &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -380,7 +380,7 @@ func (q *Queries) GetTalkgroupsWithLearned(ctx context.Context) ([]GetTalkgroups const getTalkgroupsWithLearnedBySystem = `-- name: GetTalkgroupsWithLearnedBySystem :many SELECT -tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_config, tg.weight, tg.learned, tg.ignored, sys.id, sys.name +tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_rules, tg.weight, tg.learned, tg.ignored, sys.id, sys.name FROM talkgroups tg JOIN systems sys ON tg.system_id = sys.id WHERE tg.system_id = $1 @@ -411,7 +411,7 @@ func (q *Queries) GetTalkgroupsWithLearnedBySystem(ctx context.Context, system i &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -448,7 +448,7 @@ func (q *Queries) GetTalkgroupsWithLearnedBySystemCount(ctx context.Context, sys const getTalkgroupsWithLearnedBySystemP = `-- name: GetTalkgroupsWithLearnedBySystemP :many SELECT -tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_config, tg.weight, tg.learned, tg.ignored, sys.id, sys.name +tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_rules, tg.weight, tg.learned, tg.ignored, sys.id, sys.name FROM talkgroups tg JOIN systems sys ON tg.system_id = sys.id WHERE tg.system_id = $1 AND @@ -512,7 +512,7 @@ func (q *Queries) GetTalkgroupsWithLearnedBySystemP(ctx context.Context, arg Get &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -549,7 +549,7 @@ func (q *Queries) GetTalkgroupsWithLearnedCount(ctx context.Context, filter *str const getTalkgroupsWithLearnedP = `-- name: GetTalkgroupsWithLearnedP :many SELECT -tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_config, tg.weight, tg.learned, tg.ignored, sys.id, sys.name +tg.id, tg.system_id, tg.tgid, tg.name, tg.alpha_tag, tg.tg_group, tg.frequency, tg.metadata, tg.tags, tg.alert, tg.alert_rules, tg.weight, tg.learned, tg.ignored, sys.id, sys.name FROM talkgroups tg JOIN systems sys ON tg.system_id = sys.id WHERE ignored IS NOT TRUE AND @@ -611,7 +611,7 @@ func (q *Queries) GetTalkgroupsWithLearnedP(ctx context.Context, arg GetTalkgrou &i.Talkgroup.Metadata, &i.Talkgroup.Tags, &i.Talkgroup.Alert, - &i.Talkgroup.AlertConfig, + &i.Talkgroup.AlertRules, &i.Talkgroup.Weight, &i.Talkgroup.Learned, &i.Talkgroup.Ignored, @@ -639,7 +639,7 @@ INSERT INTO talkgroups( metadata, tags, alert, - alert_config, + alert_rules, weight, learned, ignored @@ -654,7 +654,7 @@ SELECT metadata, tags, alert, - alert_config, + alert_rules, weight, learned, ignored @@ -665,12 +665,12 @@ FROM talkgroup_versions tgv ON CONFLICT (system_id, tgid) DO UPDATE SET metadata = excluded.metadata, tags = excluded.tags, alert = excluded.alert, - alert_config = excluded.alert_config, + alert_rules = excluded.alert_rules, weight = excluded.weight, learned = excluded.learner, ignored = excluded.ignored WHERE tgv.id = ANY($1) -RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_config, weight, learned, ignored +RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_rules, weight, learned, ignored ` func (q *Queries) RestoreTalkgroupVersion(ctx context.Context, versionIds int) (Talkgroup, error) { @@ -687,7 +687,7 @@ func (q *Queries) RestoreTalkgroupVersion(ctx context.Context, versionIds int) ( &i.Metadata, &i.Tags, &i.Alert, - &i.AlertConfig, + &i.AlertRules, &i.Weight, &i.Learned, &i.Ignored, @@ -730,11 +730,11 @@ SET metadata = COALESCE($5, metadata), tags = COALESCE($6, tags), alert = COALESCE($7, alert), - alert_config = COALESCE($8, alert_config), + alert_rules = COALESCE($8, alert_rules), weight = COALESCE($9, weight), learned = COALESCE($10, learned) WHERE id = $11 OR (system_id = $12 AND tgid = $13) -RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_config, weight, learned, ignored +RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_rules, weight, learned, ignored ` type UpdateTalkgroupParams struct { @@ -745,7 +745,7 @@ type UpdateTalkgroupParams struct { Metadata jsontypes.Metadata `json:"metadata"` Tags []string `json:"tags"` Alert *bool `json:"alert"` - AlertConfig rules.AlertRules `json:"alert_config"` + AlertRules rules.AlertRules `json:"alert_rules"` Weight *float32 `json:"weight"` Learned *bool `json:"learned"` ID *int32 `json:"id"` @@ -762,7 +762,7 @@ func (q *Queries) UpdateTalkgroup(ctx context.Context, arg UpdateTalkgroupParams arg.Metadata, arg.Tags, arg.Alert, - arg.AlertConfig, + arg.AlertRules, arg.Weight, arg.Learned, arg.ID, @@ -781,7 +781,7 @@ func (q *Queries) UpdateTalkgroup(ctx context.Context, arg UpdateTalkgroupParams &i.Metadata, &i.Tags, &i.Alert, - &i.AlertConfig, + &i.AlertRules, &i.Weight, &i.Learned, &i.Ignored, diff --git a/pkg/talkgroups/tgstore/store.go b/pkg/talkgroups/tgstore/store.go index 6a2a47f..cf45be8 100644 --- a/pkg/talkgroups/tgstore/store.go +++ b/pkg/talkgroups/tgstore/store.go @@ -414,7 +414,7 @@ func (t *cache) Weight(ctx context.Context, id tgsp.ID, tm time.Time) float64 { m := float64(tg.Weight) - m *= tg.AlertConfig.Apply(tm) + m *= tg.AlertRules.Apply(tm) return float64(m) } diff --git a/pkg/talkgroups/xport/radioref/testdata/riscon.json b/pkg/talkgroups/xport/radioref/testdata/riscon.json index 9651b05..596c99e 100644 --- a/pkg/talkgroups/xport/radioref/testdata/riscon.json +++ b/pkg/talkgroups/xport/radioref/testdata/riscon.json @@ -1 +1 @@ -[{"id":0,"system_id":197,"tgid":2,"name":"Intercity Fire","alpha_tag":"Intercity FD","tg_group":"Statewide Mutual Aid/Intersystem","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":1,"system_id":197,"tgid":3,"name":"Intercity Police","alpha_tag":"Intercity PD","tg_group":"Statewide Mutual Aid/Intersystem","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":2,"system_id":197,"tgid":21,"name":"North Dispatch ","alpha_tag":"RISP N Disp","tg_group":"State Police - District A (North)","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":3,"system_id":197,"tgid":22,"name":"North Car-to-Car/Information","alpha_tag":"RISP N Car","tg_group":"State Police - District A (North)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":4,"system_id":197,"tgid":24,"name":"North Tactical Ops 1","alpha_tag":"RISP N Tac 1","tg_group":"State Police - District A (North)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":5,"system_id":197,"tgid":23,"name":"North Tactical Ops 2","alpha_tag":"RISP N Tac 2","tg_group":"State Police - District A (North)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":6,"system_id":197,"tgid":25,"name":"South Dispatch ","alpha_tag":"RISP S Disp","tg_group":"State Police - District B (South)","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":7,"system_id":197,"tgid":27,"name":"South Car-to-Car/Information","alpha_tag":"RISP S Car","tg_group":"State Police - District B (South)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":8,"system_id":197,"tgid":16,"name":"State Fire Marshall","alpha_tag":"State FMO","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":9,"system_id":197,"tgid":1038,"name":"Northern Rhode Island Fire Chiefs","alpha_tag":"NRI Fire Chi","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":10,"system_id":197,"tgid":1041,"name":"Southern Rhode Island Fire Chiefs","alpha_tag":"SRI Fire Chi","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":11,"system_id":197,"tgid":1314,"name":"Tanker Taskforce 1","alpha_tag":"Tanker TF 1","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":12,"system_id":197,"tgid":194,"name":"Lifepact Ambulance (Statewide)","alpha_tag":"Lifepact Amb","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":13,"system_id":197,"tgid":212,"name":"Fatima St Josephs","alpha_tag":"Fatima-St Joes","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["Business"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":14,"system_id":197,"tgid":220,"name":"Health 1","alpha_tag":"Health 1","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":{"encrypted":true},"tags":["EMS-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":15,"system_id":197,"tgid":221,"name":"Health 2","alpha_tag":"Health 2","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":{"encrypted":true},"tags":["EMS-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":16,"system_id":197,"tgid":222,"name":"Department of Health - Statewide","alpha_tag":"Dept of HealthSW","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["EMS-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":17,"system_id":197,"tgid":228,"name":"DMAT South","alpha_tag":"DMAT South","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":{"encrypted":true},"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":18,"system_id":197,"tgid":232,"name":"Life Span Net 1","alpha_tag":"Life Span 1","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["EMS-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":19,"system_id":197,"tgid":234,"name":"RI Hospital Operations","alpha_tag":"RI Hosp Ops","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["Business"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":20,"system_id":197,"tgid":120,"name":"Law Enforcement Operations","alpha_tag":"DEM PD Ops","tg_group":"Department of Environmental Management","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":21,"system_id":197,"tgid":122,"name":"Law Enforcement Police","alpha_tag":"DEM Police","tg_group":"Department of Environmental Management","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":22,"system_id":197,"tgid":10,"name":"Emergency Management Agency 1","alpha_tag":"EMA-1","tg_group":"Emergency Management Agency","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":23,"system_id":197,"tgid":20,"name":"Emergency Management Agency","alpha_tag":"EMA","tg_group":"Emergency Management Agency","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":24,"system_id":197,"tgid":4,"name":"Wide Area 3","alpha_tag":"Wide Area 3","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":25,"system_id":197,"tgid":5,"name":"Wide Area 4","alpha_tag":"Wide Area 4","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":26,"system_id":197,"tgid":6,"name":"Wide Area 5","alpha_tag":"Wide Area 5","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":27,"system_id":197,"tgid":7,"name":"Wide Area 6","alpha_tag":"Wide Area 6","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":28,"system_id":197,"tgid":1018,"name":"Southwide CH-1","alpha_tag":"SOUTHWIDE 1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":29,"system_id":197,"tgid":1019,"name":"Southwide CH-2","alpha_tag":"SOUTHWIDE 2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":30,"system_id":197,"tgid":1022,"name":"Wide Area 7","alpha_tag":"WIDE AREA 7","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":31,"system_id":197,"tgid":1023,"name":"Wide Area 8","alpha_tag":"WIDE AREA 8","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":32,"system_id":197,"tgid":1025,"name":"Inland Marine Interop","alpha_tag":"Inland Marine IO","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":33,"system_id":197,"tgid":1037,"name":"Southside CH 5","alpha_tag":"SOUTHSIDE 5","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":34,"system_id":197,"tgid":1173,"name":"North Wide 1","alpha_tag":"NORTHWIDE1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":35,"system_id":197,"tgid":1174,"name":"North Wide 2","alpha_tag":"NORTHWIDE2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":36,"system_id":197,"tgid":1177,"name":"North Wide 5","alpha_tag":"NORTHWIDE5","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":37,"system_id":197,"tgid":1185,"name":"Metro Wide 1","alpha_tag":"METROWIDE1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":38,"system_id":197,"tgid":1186,"name":"Metro Wide 2","alpha_tag":"METROWIDE2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":39,"system_id":197,"tgid":1187,"name":"Metro Wide 3","alpha_tag":"METROWIDE3","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":40,"system_id":197,"tgid":1335,"name":"East Wide 1","alpha_tag":"EASTWIDE 1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":41,"system_id":197,"tgid":1336,"name":"East Wide 2","alpha_tag":"EASTWIDE 2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":42,"system_id":197,"tgid":1337,"name":"East Wide 3","alpha_tag":"EASTWIDE 3","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":43,"system_id":197,"tgid":11186,"name":"Metro Wide 2","alpha_tag":"METROWIDE2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":44,"system_id":197,"tgid":1033,"name":"Tanker Taskforce ","alpha_tag":"TANK TF","tg_group":"Statewide Emergency Response","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":45,"system_id":197,"tgid":1034,"name":"Hazmat 1","alpha_tag":"HZT DC1","tg_group":"Statewide Emergency Response","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":46,"system_id":197,"tgid":1035,"name":"Hazmat 2","alpha_tag":"HZT DC2","tg_group":"Statewide Emergency Response","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":47,"system_id":197,"tgid":176,"name":"Department of Transportation - Primary","alpha_tag":"RIDOT Primary","tg_group":"Department of Transportation","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":48,"system_id":197,"tgid":4421,"name":"Newport Pell Bridge Operations","alpha_tag":"RITBA - Pell Bdg","tg_group":"Tunnel and Bridge Authority","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":49,"system_id":197,"tgid":274,"name":"Providence VA Police","alpha_tag":"VA Police","tg_group":"Federal","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":50,"system_id":197,"tgid":186,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":{"encrypted":true},"tags":["Transportation"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":51,"system_id":197,"tgid":187,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":52,"system_id":197,"tgid":188,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":53,"system_id":197,"tgid":189,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":54,"system_id":197,"tgid":190,"name":"Rhode Island Public Transit. Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":55,"system_id":197,"tgid":304,"name":"Fire Operations","alpha_tag":"Quonset ANGB FD","tg_group":"Quonset ANGB","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":56,"system_id":197,"tgid":17,"name":"Airport Police Operations","alpha_tag":"TF Green PD","tg_group":"Rhode Island Airport Commission","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":57,"system_id":197,"tgid":19,"name":"Airport Fire Operations","alpha_tag":"TF Green FD","tg_group":"Rhode Island Airport Commission","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":58,"system_id":197,"tgid":1126,"name":"University of Rhode Island Police - Dispatch","alpha_tag":"URI PD","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":59,"system_id":197,"tgid":1131,"name":"University of Rhode Island - EMS","alpha_tag":"URI EMS","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["EMS Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":60,"system_id":197,"tgid":1348,"name":"St. George's School (Middletown) - Security","alpha_tag":"St George Sec","tg_group":"College/Education Security","frequency":null,"metadata":null,"tags":["Security"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":61,"system_id":197,"tgid":10228,"name":"Rhode Island School of Design - Security","alpha_tag":"RISD Secuty","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Security"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":62,"system_id":197,"tgid":10229,"name":"Providence College Security - Dispatch","alpha_tag":"PROV COLL","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Security"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":63,"system_id":197,"tgid":10230,"name":"Rhode Island College Security","alpha_tag":"RI COL SEC","tg_group":"College/Education Security","frequency":null,"metadata":null,"tags":["Security"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":64,"system_id":197,"tgid":11001,"name":"Brown University Police - Dispatch","alpha_tag":"BROWN UNIV","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":65,"system_id":197,"tgid":11002,"name":"Brown University Police - Car-to-Car","alpha_tag":"BROWN CAR","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":66,"system_id":197,"tgid":11003,"name":"Brown University Police - Tactical","alpha_tag":"BROWN TAC","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":67,"system_id":197,"tgid":12,"name":"Metro Wide 2","alpha_tag":"METROWIDE2","tg_group":"Statewide Misc.","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":68,"system_id":197,"tgid":14,"name":"Metro Wide 4","alpha_tag":"METROWIDE4","tg_group":"Statewide Misc.","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":69,"system_id":197,"tgid":70,"name":"RI Traffic Tribunal Security","alpha_tag":"TFC TRIBUNAL","tg_group":"Statewide Misc.","frequency":null,"metadata":{"encrypted":true},"tags":["Security"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":70,"system_id":197,"tgid":168,"name":"Rhode Island Red Cross - Primary","alpha_tag":"Red Cross 1","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":71,"system_id":197,"tgid":169,"name":"Rhode Island Red Cross - Secondary","alpha_tag":"Red Cross 2","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":72,"system_id":197,"tgid":223,"name":"Statewide Nursing Homes Net","alpha_tag":"NURSING HM","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":73,"system_id":197,"tgid":243,"name":"Hospital Operations","alpha_tag":"Slater Hosp Ops","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Business"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":74,"system_id":197,"tgid":244,"name":"Slater Hospital Security","alpha_tag":"Slater Hosp Sec","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Security"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":75,"system_id":197,"tgid":1042,"name":"County Fireground","alpha_tag":"WashCo FireG","tg_group":"Washington County","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":76,"system_id":197,"tgid":1479,"name":"County Fire Station/Station","alpha_tag":"WashCo FireS","tg_group":"Washington County","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":77,"system_id":197,"tgid":1712,"name":"Fire 1 Dispatch","alpha_tag":"BarringtnFD1","tg_group":"Barrington","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":78,"system_id":197,"tgid":1713,"name":"Fire 2","alpha_tag":"BarringtnFD2","tg_group":"Barrington","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":79,"system_id":197,"tgid":1715,"name":"Police Operations","alpha_tag":"BarringtonPD 1","tg_group":"Barrington","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":80,"system_id":197,"tgid":1716,"name":"Police Secondary","alpha_tag":"BarringtonPD 2","tg_group":"Barrington","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":81,"system_id":197,"tgid":1744,"name":"Fire Operations (Patch from VHF)","alpha_tag":"Bristol FD","tg_group":"Bristol","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":82,"system_id":197,"tgid":1755,"name":"Harbormaster","alpha_tag":"Bristol Harbor","tg_group":"Bristol","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":83,"system_id":197,"tgid":2003,"name":"Police","alpha_tag":"Burrville PD","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":84,"system_id":197,"tgid":2004,"name":"Police 2","alpha_tag":"Burrvl PD2","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":85,"system_id":197,"tgid":2005,"name":"Police 3 Detectives","alpha_tag":"Burrvl PD3","tg_group":"Burrillville","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":86,"system_id":197,"tgid":2006,"name":"Police 4","alpha_tag":"Burrvl PD4","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":87,"system_id":197,"tgid":2000,"name":"Fire Misc (Ops are VHF)","alpha_tag":"Burrvl FD","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":88,"system_id":197,"tgid":2001,"name":"Fire TAC-1","alpha_tag":"Burvl FDTAC1","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":89,"system_id":197,"tgid":2009,"name":"Fire TAC-2","alpha_tag":"Burvl FDTAC2","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":90,"system_id":197,"tgid":2002,"name":"EMS Misc (Ops are VHF)","alpha_tag":"Burrvl EMS","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["EMS-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":91,"system_id":197,"tgid":2007,"name":"Town-Wide","alpha_tag":"Burrvl Town","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Multi-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":92,"system_id":197,"tgid":2008,"name":"Emergency Management","alpha_tag":"Burrvl EMA","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":93,"system_id":197,"tgid":1838,"name":"Police 1 Dispatch","alpha_tag":"CentFallsPD1","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":94,"system_id":197,"tgid":1839,"name":"Police 2","alpha_tag":"CentFallsPD2","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":95,"system_id":197,"tgid":1835,"name":"Fire Dispatch (Simulcast of UHF)","alpha_tag":"CentFalls FD 1","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":96,"system_id":197,"tgid":1836,"name":"Fireground","alpha_tag":"CentFalls FD 2","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":97,"system_id":197,"tgid":1425,"name":"Police Operations - Simulcast of UHF","alpha_tag":"CharlestownPD","tg_group":"Charlestown","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":98,"system_id":197,"tgid":1429,"name":"EMS - Linked to 151.3325","alpha_tag":"Chastown EMS","tg_group":"Charlestown","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":99,"system_id":197,"tgid":1483,"name":"Police 1 - Dispatch","alpha_tag":"Coventry PD","tg_group":"Coventry","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":100,"system_id":197,"tgid":1484,"name":"Police 2","alpha_tag":"Coventry PD2","tg_group":"Coventry","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":101,"system_id":197,"tgid":1480,"name":"Fire","alpha_tag":"Coventry FD","tg_group":"Coventry","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":102,"system_id":197,"tgid":1500,"name":"Fire - Dispatch/Operations","alpha_tag":"Cranston FD Disp","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":103,"system_id":197,"tgid":1501,"name":"Fire - Fireground 2","alpha_tag":"Cranston FD FG2","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":104,"system_id":197,"tgid":1502,"name":"Fire - Fireground 3","alpha_tag":"Cranston FD FG3","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":105,"system_id":197,"tgid":1503,"name":"Fire - Fireground 4","alpha_tag":"Cranston FD FG4","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":106,"system_id":197,"tgid":1504,"name":"Fire - Admin/Alt Fireground 5","alpha_tag":"Cranston FD Admi","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":107,"system_id":197,"tgid":1520,"name":"Fire","alpha_tag":"Cumberland FD","tg_group":"Cumberland","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":108,"system_id":197,"tgid":1523,"name":"Police Secondary","alpha_tag":"Cumberland PD","tg_group":"Cumberland","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":109,"system_id":197,"tgid":1776,"name":"Fire Talk Around","alpha_tag":"E Greenwich F-TA","tg_group":"East Greenwich","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":110,"system_id":197,"tgid":1779,"name":"Police Operations","alpha_tag":"E Greenwich PD","tg_group":"East Greenwich","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":111,"system_id":197,"tgid":1869,"name":"Police 1 - Dispatch","alpha_tag":"E Prov PD 1","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":112,"system_id":197,"tgid":1872,"name":"Police 2","alpha_tag":"E Prov PD 2","tg_group":"East Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":113,"system_id":197,"tgid":1870,"name":"Police 3","alpha_tag":"E Prov PD 3","tg_group":"East Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":114,"system_id":197,"tgid":1883,"name":"Detectives","alpha_tag":"E Prov PD12","tg_group":"East Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":115,"system_id":197,"tgid":1866,"name":"Fire - Dispatch/Operations","alpha_tag":"E Prov FD 1","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":116,"system_id":197,"tgid":1867,"name":"Fire \"Channel 2\"","alpha_tag":"E Prov FD 2","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":117,"system_id":197,"tgid":1878,"name":"Fire \"Channel 3\"","alpha_tag":"E Prov FD 3","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":118,"system_id":197,"tgid":2064,"name":"Fire - Fireground","alpha_tag":"Exeter FD-G","tg_group":"Exeter","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":119,"system_id":197,"tgid":1904,"name":"Fire","alpha_tag":"Foster Fire","tg_group":"Foster","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":120,"system_id":197,"tgid":1939,"name":"Police","alpha_tag":"Glocester PD","tg_group":"Glocester","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":121,"system_id":197,"tgid":1940,"name":"Police Secondary","alpha_tag":"Glocester PD 2","tg_group":"Glocester","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":122,"system_id":197,"tgid":1410,"name":"Police","alpha_tag":"Hopkinton PD","tg_group":"Hopkinton","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":123,"system_id":197,"tgid":1100,"name":"Police 1 - Dispatch","alpha_tag":"Jamestown PD 1","tg_group":"Jamestown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":124,"system_id":197,"tgid":1101,"name":"Police 2","alpha_tag":"Jamestown PD 2","tg_group":"Jamestown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":125,"system_id":197,"tgid":1108,"name":"Fire","alpha_tag":"Jamestown FD","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":126,"system_id":197,"tgid":1120,"name":"Fireground 1","alpha_tag":"Jamestown FG 1","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":127,"system_id":197,"tgid":1121,"name":"Fireground 2","alpha_tag":"Jamestown FG 2","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":128,"system_id":197,"tgid":1114,"name":"Public Works","alpha_tag":"Jamestown DPW","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":129,"system_id":197,"tgid":1107,"name":"Town Schools","alpha_tag":"Jamestown School","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Schools"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":130,"system_id":197,"tgid":1619,"name":"Police Operations","alpha_tag":"Johnston PD","tg_group":"Johnston","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":131,"system_id":197,"tgid":1616,"name":"Fire Operations","alpha_tag":"Johnston FD","tg_group":"Johnston","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":132,"system_id":197,"tgid":1617,"name":"Fireground","alpha_tag":"Johnston FG","tg_group":"Johnston","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":133,"system_id":197,"tgid":1683,"name":"Police F1","alpha_tag":"Lincoln Police","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":134,"system_id":197,"tgid":1684,"name":"Police F2","alpha_tag":"Lincoln Police 2","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":135,"system_id":197,"tgid":1680,"name":"Fire Dispatch","alpha_tag":"Lincoln Fire 1","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":136,"system_id":197,"tgid":1681,"name":"Fireground 2","alpha_tag":"Lincoln Fire 2","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":137,"system_id":197,"tgid":1691,"name":"Fireground 3","alpha_tag":"Lincoln Fire 3","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":138,"system_id":197,"tgid":1682,"name":"EMS","alpha_tag":"Lincoln EMS","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":139,"system_id":197,"tgid":1688,"name":"Emergency Management","alpha_tag":"Lincoln EMA","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":140,"system_id":197,"tgid":1687,"name":"Townwide","alpha_tag":"Lincoln Townwide","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":141,"system_id":197,"tgid":1692,"name":"Public Works","alpha_tag":"Lincoln DPW","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":142,"system_id":197,"tgid":1264,"name":"Police","alpha_tag":"LittleCompPD","tg_group":"Little Compton","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":143,"system_id":197,"tgid":1266,"name":"Fire","alpha_tag":"LittleCompFD","tg_group":"Little Compton","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":144,"system_id":197,"tgid":1338,"name":"Police Operations","alpha_tag":"MiddletownPD","tg_group":"Middletown","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":145,"system_id":197,"tgid":1343,"name":"Fire Operations","alpha_tag":"Middletown FD","tg_group":"Middletown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":146,"system_id":197,"tgid":1345,"name":"Townwide","alpha_tag":"MiddletownTW","tg_group":"Middletown","frequency":null,"metadata":null,"tags":["Multi-Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":147,"system_id":197,"tgid":1001,"name":"Police - Dispatch","alpha_tag":"Narrag PD 1","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":148,"system_id":197,"tgid":1002,"name":"Police - Car/Car","alpha_tag":"Narrag PD 2","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":149,"system_id":197,"tgid":1003,"name":"Police - Special Details 1/Town Beaches","alpha_tag":"Narrag PD 3","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":150,"system_id":197,"tgid":1004,"name":"Police - Special Details 2","alpha_tag":"Narrag PD 4","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":151,"system_id":197,"tgid":1005,"name":"Police - Harbormaster","alpha_tag":"Narrag PD 5","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":152,"system_id":197,"tgid":1007,"name":"Police - Detectives","alpha_tag":"Narrag PD 7","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":153,"system_id":197,"tgid":1008,"name":"Police - Detectives","alpha_tag":"Narrag PD 8","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":154,"system_id":197,"tgid":1006,"name":"Fire - Dispatch","alpha_tag":"Narrag FD","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":155,"system_id":197,"tgid":1012,"name":"Fire - Fireground 1","alpha_tag":"Narrag FDFG1","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":156,"system_id":197,"tgid":1013,"name":"Fire - Fireground 2","alpha_tag":"Narrag FDFG2","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":157,"system_id":197,"tgid":1016,"name":"Fire - Administration","alpha_tag":"Narrag FD AD","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":158,"system_id":197,"tgid":1014,"name":"Fire - EMS Ops","alpha_tag":"Narrag EMS","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":159,"system_id":197,"tgid":1017,"name":"Public Works","alpha_tag":"Narrag DPW","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":160,"system_id":197,"tgid":1010,"name":"Town Administration","alpha_tag":"Narrag TownA","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":161,"system_id":197,"tgid":1011,"name":"Townwide Interop","alpha_tag":"Narrag IOP","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":162,"system_id":197,"tgid":1376,"name":"Police","alpha_tag":"New Shore PD","tg_group":"New Shoreham","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":163,"system_id":197,"tgid":1300,"name":"Police 1 - Dispatch","alpha_tag":"Newport PD 1","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":164,"system_id":197,"tgid":1302,"name":"Police 2 - Records","alpha_tag":"Newport PD 2","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":165,"system_id":197,"tgid":1304,"name":"Police 4 - Tactical 1","alpha_tag":"Newport PD 4","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":166,"system_id":197,"tgid":1307,"name":"Police 7 - Tactical 4","alpha_tag":"Newport PD 7","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":167,"system_id":197,"tgid":1308,"name":"Police 8 - Tactical 5","alpha_tag":"Newport PD 8","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":168,"system_id":197,"tgid":1303,"name":"Fire Dispatch/Operations","alpha_tag":"Newport FD1","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":169,"system_id":197,"tgid":1305,"name":"Fireground Ops 1","alpha_tag":"Newport FG1","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":170,"system_id":197,"tgid":1306,"name":"Fireground Ops 2","alpha_tag":"Newport FG2","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":171,"system_id":197,"tgid":1301,"name":"Fire - Training","alpha_tag":"Newport FDT","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":172,"system_id":197,"tgid":1291,"name":"Water Department","alpha_tag":"Newport Water","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":173,"system_id":197,"tgid":1293,"name":"Public Works","alpha_tag":"Newport DPW","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":174,"system_id":197,"tgid":1297,"name":"Citywide Events","alpha_tag":"Newport Evnt","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":175,"system_id":197,"tgid":1312,"name":"Newport Citywide","alpha_tag":"Newport CW","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":176,"system_id":197,"tgid":1285,"name":"Police 1 - Dispatch","alpha_tag":"NKing PD 1","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":177,"system_id":197,"tgid":1286,"name":"Police 2 - Admin","alpha_tag":"NKing PD 2","tg_group":"North Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":178,"system_id":197,"tgid":1287,"name":"Police 3 - Car/Car","alpha_tag":"NKing PD 3","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":179,"system_id":197,"tgid":1280,"name":"Fire - Dispatch","alpha_tag":"NKing Fire D","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":180,"system_id":197,"tgid":1281,"name":"Fire - Fireground","alpha_tag":"NKing Fire G","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":181,"system_id":197,"tgid":1536,"name":"Police 1 - Dispatch","alpha_tag":"NorthPrv PD1","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":182,"system_id":197,"tgid":1537,"name":"Police 2 - Car/Car","alpha_tag":"NorthPrv PD2","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":183,"system_id":197,"tgid":1538,"name":"Police 3 - Tactical","alpha_tag":"NorthPrv PD3","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":184,"system_id":197,"tgid":1547,"name":"Fire Dispatch ","alpha_tag":"NorthPrv FDD","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":185,"system_id":197,"tgid":1548,"name":"Fire 2","alpha_tag":"NorthPrv Fire 2","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":186,"system_id":197,"tgid":1549,"name":"Fire 3","alpha_tag":"NorthPrv Fire 3","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":187,"system_id":197,"tgid":1550,"name":"Fire 4","alpha_tag":"NorthPrv Fire 4","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":188,"system_id":197,"tgid":1551,"name":"Fire 5","alpha_tag":"NorthPrv Fire 5","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":189,"system_id":197,"tgid":1552,"name":"Fire 6","alpha_tag":"NorthPrv Fire 6","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":190,"system_id":197,"tgid":1544,"name":"Townwide 1","alpha_tag":"NorthPrv TownW 1","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":191,"system_id":197,"tgid":1545,"name":"Townwide 2","alpha_tag":"NorthPrv TownW 2","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":192,"system_id":197,"tgid":1554,"name":"Public Works","alpha_tag":"NorthPrv DPW","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":193,"system_id":197,"tgid":1971,"name":"Police","alpha_tag":"N Smithfd PD","tg_group":"North Smithfield","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":194,"system_id":197,"tgid":1968,"name":"Fire Dispatch/Operations","alpha_tag":"N Smithfield FD","tg_group":"North Smithfield","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":195,"system_id":197,"tgid":1969,"name":"Fire Secondary","alpha_tag":"N Smithfield FD2","tg_group":"North Smithfield","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":196,"system_id":197,"tgid":1981,"name":"Fireground","alpha_tag":"N Smithfield FD3","tg_group":"North Smithfield","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":197,"system_id":197,"tgid":1440,"name":"Fire - Operations","alpha_tag":"Pawtucket FD 1","tg_group":"Pawtucket","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":198,"system_id":197,"tgid":1441,"name":"Fireground","alpha_tag":"Pawtucket FG","tg_group":"Pawtucket","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":199,"system_id":197,"tgid":1442,"name":"EMS Tac","alpha_tag":"Pawtucket EMSTac","tg_group":"Pawtucket","frequency":null,"metadata":null,"tags":["EMS-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":200,"system_id":197,"tgid":1248,"name":"Police","alpha_tag":"PortsmouthPD","tg_group":"Portsmouth","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":201,"system_id":197,"tgid":1253,"name":"Fire Dispatch (Patch to VHF Primary)","alpha_tag":"Portsmouth FD","tg_group":"Portsmouth","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":202,"system_id":197,"tgid":1255,"name":"Fireground","alpha_tag":"Portsmouth FG","tg_group":"Portsmouth","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":203,"system_id":197,"tgid":1262,"name":"Island Fire Dispatch","alpha_tag":"Prudence Isl FD","tg_group":"Portsmouth","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":204,"system_id":197,"tgid":10000,"name":"Police - All Call - Emergency Broadcasts","alpha_tag":"PPD ATG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":205,"system_id":197,"tgid":10001,"name":"Police 1 - Dispatch","alpha_tag":"PPD CH 1","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":206,"system_id":197,"tgid":10002,"name":"Police 2","alpha_tag":"PPD CH 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":207,"system_id":197,"tgid":10003,"name":"Police 3","alpha_tag":"PPD CH 3","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":208,"system_id":197,"tgid":10004,"name":"Police 4","alpha_tag":"PPD CH-4","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":209,"system_id":197,"tgid":10005,"name":"Police 5 -Detectives 1","alpha_tag":"PPD DETEC 1","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":210,"system_id":197,"tgid":10006,"name":"Police 6 - Car-to-Car","alpha_tag":"PPD T/A","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":211,"system_id":197,"tgid":10007,"name":"Police 7 - Narcotics 1","alpha_tag":"PPD NARC 1","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":212,"system_id":197,"tgid":10008,"name":"Police 8 - Narcotics 2","alpha_tag":"PPD NARC 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":213,"system_id":197,"tgid":10009,"name":"Police 9 - Detectives 2","alpha_tag":"PPD DETEC 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":214,"system_id":197,"tgid":10010,"name":"Police 10 - Special Details 1","alpha_tag":"PPD DETAIL 1","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":215,"system_id":197,"tgid":10011,"name":"Police 11 - Special Details 2","alpha_tag":"PPD DETAIL 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":216,"system_id":197,"tgid":10012,"name":"Police 12 - Corrections Security","alpha_tag":"PPD CORR SEC","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":217,"system_id":197,"tgid":10013,"name":"Police 13 - Special Response Unit","alpha_tag":"PPD SRU","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":218,"system_id":197,"tgid":10014,"name":"Police 14 - Administration","alpha_tag":"PPD ADMIN","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":219,"system_id":197,"tgid":10100,"name":"Fire All Call - Emergency Broadcasts","alpha_tag":"PROV FD ATG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":220,"system_id":197,"tgid":10101,"name":"Fire Dispatch","alpha_tag":"PFD DISPATCH","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":221,"system_id":197,"tgid":10107,"name":"Fireground 2","alpha_tag":"PFD CH-2 FG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":222,"system_id":197,"tgid":10108,"name":"Fireground 3","alpha_tag":"PFD CH-3 FG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":223,"system_id":197,"tgid":10109,"name":"Fireground 4","alpha_tag":"PFD CH-4 FG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":224,"system_id":197,"tgid":10102,"name":"Fire 5","alpha_tag":"PFD CH-5","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":225,"system_id":197,"tgid":10103,"name":"Fire 6","alpha_tag":"PFD CH-6","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":226,"system_id":197,"tgid":10104,"name":"Fire 7","alpha_tag":"PFD CH-7","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":227,"system_id":197,"tgid":10110,"name":"Fire - Mutual Aid 1","alpha_tag":"PFD M/A 1","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":228,"system_id":197,"tgid":10111,"name":"Fire - Mutual Aid 2","alpha_tag":"PFD M/A 2","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":229,"system_id":197,"tgid":10112,"name":"Fire - Mutual Aid 3","alpha_tag":"PFD M/A 3","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":230,"system_id":197,"tgid":10113,"name":"Fireground 8","alpha_tag":"PFD Fireground 8","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":231,"system_id":197,"tgid":10105,"name":"Fire - Administration","alpha_tag":"PFD ADMIN","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":232,"system_id":197,"tgid":10106,"name":"Fire - Communications","alpha_tag":"PFD COMM","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":233,"system_id":197,"tgid":10207,"name":"Public Works","alpha_tag":"PROV DPW","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":234,"system_id":197,"tgid":2035,"name":"Police","alpha_tag":"Richmond PD","tg_group":"Richmond","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":235,"system_id":197,"tgid":2042,"name":"Chariho Regional High School","alpha_tag":"Chariho Reg HS","tg_group":"Richmond","frequency":null,"metadata":null,"tags":["Schools"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":236,"system_id":197,"tgid":1460,"name":"Police","alpha_tag":"Scituate PD","tg_group":"Scituate","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":237,"system_id":197,"tgid":1463,"name":"Fire Operations","alpha_tag":"Scituate FD","tg_group":"Scituate","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":238,"system_id":197,"tgid":1651,"name":"Police Operations","alpha_tag":"SmithfieldPD","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":239,"system_id":197,"tgid":1652,"name":"Police Secondary","alpha_tag":"Smfld PD 2","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":240,"system_id":197,"tgid":1653,"name":"Police Detectives","alpha_tag":"Smfld PD Det","tg_group":"Smithfield","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":241,"system_id":197,"tgid":1654,"name":"Police Admin","alpha_tag":"Smfld PD Adm","tg_group":"Smithfield","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":242,"system_id":197,"tgid":1661,"name":"Police Details","alpha_tag":"Smfld PD Dtl","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":243,"system_id":197,"tgid":1648,"name":"Fire - Fireground","alpha_tag":"SmithfieldFD","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":244,"system_id":197,"tgid":1655,"name":"Town-Wide","alpha_tag":"Smfld Town","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Multi-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":245,"system_id":197,"tgid":1657,"name":"Emergency Management","alpha_tag":"Smfld EMA","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":246,"system_id":197,"tgid":1660,"name":"Public Works","alpha_tag":"Smfld DPW","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":247,"system_id":197,"tgid":1225,"name":"Police 1 - Dispatch","alpha_tag":"SKing PD 1","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":248,"system_id":197,"tgid":1226,"name":"Police 2 - Car/Car","alpha_tag":"SKing PD 2","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":249,"system_id":197,"tgid":1235,"name":"Police 3 - Tactical","alpha_tag":"SKing PD 3","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":250,"system_id":197,"tgid":1236,"name":"Police 5 - Tactical","alpha_tag":"SKing PD 5","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":251,"system_id":197,"tgid":1232,"name":"Fire - UHF Simulcast","alpha_tag":"SKing FD Lnk","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":252,"system_id":197,"tgid":1240,"name":"Fire - Detail","alpha_tag":"SKing Fire D","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":253,"system_id":197,"tgid":1227,"name":"Union Fire District - Fireground 1","alpha_tag":"UnionFD FG 1","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":254,"system_id":197,"tgid":1237,"name":"Union Fire District - Fireground 2","alpha_tag":"UnionFD FG 2","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":255,"system_id":197,"tgid":1026,"name":"Union Fire District - Special Events","alpha_tag":"UnionFD Evnt","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":256,"system_id":197,"tgid":1015,"name":"EMS","alpha_tag":"SKing EMS","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["EMS Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":257,"system_id":197,"tgid":1316,"name":"Police (Simulcast 482.9625)","alpha_tag":"Tiverton PD","tg_group":"Tiverton","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":258,"system_id":197,"tgid":1315,"name":"Fire (Simulcast 471.7875)","alpha_tag":"Tiverton FD","tg_group":"Tiverton","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":259,"system_id":197,"tgid":1162,"name":"Fire","alpha_tag":"Warwick FD","tg_group":"Warwick","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":260,"system_id":197,"tgid":1170,"name":"Fireground","alpha_tag":"Warwick FG","tg_group":"Warwick","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":261,"system_id":197,"tgid":1805,"name":"Police","alpha_tag":"W Greenwh PD","tg_group":"West Greenwich","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":262,"system_id":197,"tgid":1806,"name":"Police Secondary","alpha_tag":"W GreenwichPD2","tg_group":"West Greenwich","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":263,"system_id":197,"tgid":1208,"name":"Fire Operations","alpha_tag":"W Warwick FD","tg_group":"West Warwick","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":264,"system_id":197,"tgid":1050,"name":"Police 1 - Dispatch","alpha_tag":"Westerly PD1","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":265,"system_id":197,"tgid":1051,"name":"Police 2","alpha_tag":"Westerly PD2","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":266,"system_id":197,"tgid":1052,"name":"Police 3","alpha_tag":"Westerly PD3","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":267,"system_id":197,"tgid":1053,"name":"Police 4","alpha_tag":"Westerly PD4","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":268,"system_id":197,"tgid":1054,"name":"Police 5 - Reserve Officers","alpha_tag":"Westerly PD5","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":269,"system_id":197,"tgid":1064,"name":"Police 6 - Traffic Division","alpha_tag":"Westerly PD6","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":270,"system_id":197,"tgid":1063,"name":"Fire Operations","alpha_tag":"Westerly FD","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":271,"system_id":197,"tgid":1072,"name":"Police/Fire/EMS Ops","alpha_tag":"Westerly PFE","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Multi-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":272,"system_id":197,"tgid":1082,"name":"EMS Operations","alpha_tag":"Westerly EMS ","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":273,"system_id":197,"tgid":1363,"name":"Police 1 - Dispatch","alpha_tag":"Woonskt PD 1","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":274,"system_id":197,"tgid":1364,"name":"Police 2","alpha_tag":"Woonskt PD 2","tg_group":"Woonsocket","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":275,"system_id":197,"tgid":1360,"name":"Fire Dispatch - Operations","alpha_tag":"Woonsocket FD D","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":276,"system_id":197,"tgid":1361,"name":"Fire Secondary","alpha_tag":"Woonsocket FD 2","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":277,"system_id":197,"tgid":1354,"name":"Fire - Fireground 3","alpha_tag":"Woonskt FD 3","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":278,"system_id":197,"tgid":1367,"name":"Citywide","alpha_tag":"Woonskt City","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Multi-Talk"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":279,"system_id":197,"tgid":1368,"name":"Public Works - Streets","alpha_tag":"Woonsocket PW","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":280,"system_id":197,"tgid":1,"name":"RISCON Radio Technicians","alpha_tag":"Radio Techs","tg_group":"Radio Technicians","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":281,"system_id":197,"tgid":10125,"name":"RISCON Radio Technicians","alpha_tag":"Radio Techs","tg_group":"Radio Technicians","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_config":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false}] \ No newline at end of file +[{"id":0,"system_id":197,"tgid":2,"name":"Intercity Fire","alpha_tag":"Intercity FD","tg_group":"Statewide Mutual Aid/Intersystem","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":1,"system_id":197,"tgid":3,"name":"Intercity Police","alpha_tag":"Intercity PD","tg_group":"Statewide Mutual Aid/Intersystem","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":2,"system_id":197,"tgid":21,"name":"North Dispatch ","alpha_tag":"RISP N Disp","tg_group":"State Police - District A (North)","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":3,"system_id":197,"tgid":22,"name":"North Car-to-Car/Information","alpha_tag":"RISP N Car","tg_group":"State Police - District A (North)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":4,"system_id":197,"tgid":24,"name":"North Tactical Ops 1","alpha_tag":"RISP N Tac 1","tg_group":"State Police - District A (North)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":5,"system_id":197,"tgid":23,"name":"North Tactical Ops 2","alpha_tag":"RISP N Tac 2","tg_group":"State Police - District A (North)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":6,"system_id":197,"tgid":25,"name":"South Dispatch ","alpha_tag":"RISP S Disp","tg_group":"State Police - District B (South)","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":7,"system_id":197,"tgid":27,"name":"South Car-to-Car/Information","alpha_tag":"RISP S Car","tg_group":"State Police - District B (South)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":8,"system_id":197,"tgid":16,"name":"State Fire Marshall","alpha_tag":"State FMO","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":9,"system_id":197,"tgid":1038,"name":"Northern Rhode Island Fire Chiefs","alpha_tag":"NRI Fire Chi","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":10,"system_id":197,"tgid":1041,"name":"Southern Rhode Island Fire Chiefs","alpha_tag":"SRI Fire Chi","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":11,"system_id":197,"tgid":1314,"name":"Tanker Taskforce 1","alpha_tag":"Tanker TF 1","tg_group":"Statewide Fire","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":12,"system_id":197,"tgid":194,"name":"Lifepact Ambulance (Statewide)","alpha_tag":"Lifepact Amb","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":13,"system_id":197,"tgid":212,"name":"Fatima St Josephs","alpha_tag":"Fatima-St Joes","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["Business"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":14,"system_id":197,"tgid":220,"name":"Health 1","alpha_tag":"Health 1","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":{"encrypted":true},"tags":["EMS-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":15,"system_id":197,"tgid":221,"name":"Health 2","alpha_tag":"Health 2","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":{"encrypted":true},"tags":["EMS-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":16,"system_id":197,"tgid":222,"name":"Department of Health - Statewide","alpha_tag":"Dept of HealthSW","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["EMS-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":17,"system_id":197,"tgid":228,"name":"DMAT South","alpha_tag":"DMAT South","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":{"encrypted":true},"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":18,"system_id":197,"tgid":232,"name":"Life Span Net 1","alpha_tag":"Life Span 1","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["EMS-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":19,"system_id":197,"tgid":234,"name":"RI Hospital Operations","alpha_tag":"RI Hosp Ops","tg_group":"Statewide EMS and Hospitals","frequency":null,"metadata":null,"tags":["Business"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":20,"system_id":197,"tgid":120,"name":"Law Enforcement Operations","alpha_tag":"DEM PD Ops","tg_group":"Department of Environmental Management","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":21,"system_id":197,"tgid":122,"name":"Law Enforcement Police","alpha_tag":"DEM Police","tg_group":"Department of Environmental Management","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":22,"system_id":197,"tgid":10,"name":"Emergency Management Agency 1","alpha_tag":"EMA-1","tg_group":"Emergency Management Agency","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":23,"system_id":197,"tgid":20,"name":"Emergency Management Agency","alpha_tag":"EMA","tg_group":"Emergency Management Agency","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":24,"system_id":197,"tgid":4,"name":"Wide Area 3","alpha_tag":"Wide Area 3","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":25,"system_id":197,"tgid":5,"name":"Wide Area 4","alpha_tag":"Wide Area 4","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":26,"system_id":197,"tgid":6,"name":"Wide Area 5","alpha_tag":"Wide Area 5","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":27,"system_id":197,"tgid":7,"name":"Wide Area 6","alpha_tag":"Wide Area 6","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":28,"system_id":197,"tgid":1018,"name":"Southwide CH-1","alpha_tag":"SOUTHWIDE 1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":29,"system_id":197,"tgid":1019,"name":"Southwide CH-2","alpha_tag":"SOUTHWIDE 2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":30,"system_id":197,"tgid":1022,"name":"Wide Area 7","alpha_tag":"WIDE AREA 7","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":31,"system_id":197,"tgid":1023,"name":"Wide Area 8","alpha_tag":"WIDE AREA 8","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":32,"system_id":197,"tgid":1025,"name":"Inland Marine Interop","alpha_tag":"Inland Marine IO","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":33,"system_id":197,"tgid":1037,"name":"Southside CH 5","alpha_tag":"SOUTHSIDE 5","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":34,"system_id":197,"tgid":1173,"name":"North Wide 1","alpha_tag":"NORTHWIDE1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":35,"system_id":197,"tgid":1174,"name":"North Wide 2","alpha_tag":"NORTHWIDE2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":36,"system_id":197,"tgid":1177,"name":"North Wide 5","alpha_tag":"NORTHWIDE5","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":37,"system_id":197,"tgid":1185,"name":"Metro Wide 1","alpha_tag":"METROWIDE1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":38,"system_id":197,"tgid":1186,"name":"Metro Wide 2","alpha_tag":"METROWIDE2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":39,"system_id":197,"tgid":1187,"name":"Metro Wide 3","alpha_tag":"METROWIDE3","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":40,"system_id":197,"tgid":1335,"name":"East Wide 1","alpha_tag":"EASTWIDE 1","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":41,"system_id":197,"tgid":1336,"name":"East Wide 2","alpha_tag":"EASTWIDE 2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":42,"system_id":197,"tgid":1337,"name":"East Wide 3","alpha_tag":"EASTWIDE 3","tg_group":"Statewide Area/Events","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":43,"system_id":197,"tgid":11186,"name":"Metro Wide 2","alpha_tag":"METROWIDE2","tg_group":"Statewide Area/Events","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":44,"system_id":197,"tgid":1033,"name":"Tanker Taskforce ","alpha_tag":"TANK TF","tg_group":"Statewide Emergency Response","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":45,"system_id":197,"tgid":1034,"name":"Hazmat 1","alpha_tag":"HZT DC1","tg_group":"Statewide Emergency Response","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":46,"system_id":197,"tgid":1035,"name":"Hazmat 2","alpha_tag":"HZT DC2","tg_group":"Statewide Emergency Response","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":47,"system_id":197,"tgid":176,"name":"Department of Transportation - Primary","alpha_tag":"RIDOT Primary","tg_group":"Department of Transportation","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":48,"system_id":197,"tgid":4421,"name":"Newport Pell Bridge Operations","alpha_tag":"RITBA - Pell Bdg","tg_group":"Tunnel and Bridge Authority","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":49,"system_id":197,"tgid":274,"name":"Providence VA Police","alpha_tag":"VA Police","tg_group":"Federal","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":50,"system_id":197,"tgid":186,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":{"encrypted":true},"tags":["Transportation"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":51,"system_id":197,"tgid":187,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":52,"system_id":197,"tgid":188,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":53,"system_id":197,"tgid":189,"name":"Rhode Island Public Transit Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":54,"system_id":197,"tgid":190,"name":"Rhode Island Public Transit. Auth.","alpha_tag":"RIPTA","tg_group":"RIPTA","frequency":null,"metadata":null,"tags":["Transportation"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":55,"system_id":197,"tgid":304,"name":"Fire Operations","alpha_tag":"Quonset ANGB FD","tg_group":"Quonset ANGB","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":56,"system_id":197,"tgid":17,"name":"Airport Police Operations","alpha_tag":"TF Green PD","tg_group":"Rhode Island Airport Commission","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":57,"system_id":197,"tgid":19,"name":"Airport Fire Operations","alpha_tag":"TF Green FD","tg_group":"Rhode Island Airport Commission","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":58,"system_id":197,"tgid":1126,"name":"University of Rhode Island Police - Dispatch","alpha_tag":"URI PD","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":59,"system_id":197,"tgid":1131,"name":"University of Rhode Island - EMS","alpha_tag":"URI EMS","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["EMS Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":60,"system_id":197,"tgid":1348,"name":"St. George's School (Middletown) - Security","alpha_tag":"St George Sec","tg_group":"College/Education Security","frequency":null,"metadata":null,"tags":["Security"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":61,"system_id":197,"tgid":10228,"name":"Rhode Island School of Design - Security","alpha_tag":"RISD Secuty","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Security"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":62,"system_id":197,"tgid":10229,"name":"Providence College Security - Dispatch","alpha_tag":"PROV COLL","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Security"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":63,"system_id":197,"tgid":10230,"name":"Rhode Island College Security","alpha_tag":"RI COL SEC","tg_group":"College/Education Security","frequency":null,"metadata":null,"tags":["Security"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":64,"system_id":197,"tgid":11001,"name":"Brown University Police - Dispatch","alpha_tag":"BROWN UNIV","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":65,"system_id":197,"tgid":11002,"name":"Brown University Police - Car-to-Car","alpha_tag":"BROWN CAR","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":66,"system_id":197,"tgid":11003,"name":"Brown University Police - Tactical","alpha_tag":"BROWN TAC","tg_group":"College/Education Security","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":67,"system_id":197,"tgid":12,"name":"Metro Wide 2","alpha_tag":"METROWIDE2","tg_group":"Statewide Misc.","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":68,"system_id":197,"tgid":14,"name":"Metro Wide 4","alpha_tag":"METROWIDE4","tg_group":"Statewide Misc.","frequency":null,"metadata":{"encrypted":true},"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":69,"system_id":197,"tgid":70,"name":"RI Traffic Tribunal Security","alpha_tag":"TFC TRIBUNAL","tg_group":"Statewide Misc.","frequency":null,"metadata":{"encrypted":true},"tags":["Security"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":70,"system_id":197,"tgid":168,"name":"Rhode Island Red Cross - Primary","alpha_tag":"Red Cross 1","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":71,"system_id":197,"tgid":169,"name":"Rhode Island Red Cross - Secondary","alpha_tag":"Red Cross 2","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":72,"system_id":197,"tgid":223,"name":"Statewide Nursing Homes Net","alpha_tag":"NURSING HM","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":73,"system_id":197,"tgid":243,"name":"Hospital Operations","alpha_tag":"Slater Hosp Ops","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Business"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":74,"system_id":197,"tgid":244,"name":"Slater Hospital Security","alpha_tag":"Slater Hosp Sec","tg_group":"Statewide Misc.","frequency":null,"metadata":null,"tags":["Security"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":75,"system_id":197,"tgid":1042,"name":"County Fireground","alpha_tag":"WashCo FireG","tg_group":"Washington County","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":76,"system_id":197,"tgid":1479,"name":"County Fire Station/Station","alpha_tag":"WashCo FireS","tg_group":"Washington County","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":77,"system_id":197,"tgid":1712,"name":"Fire 1 Dispatch","alpha_tag":"BarringtnFD1","tg_group":"Barrington","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":78,"system_id":197,"tgid":1713,"name":"Fire 2","alpha_tag":"BarringtnFD2","tg_group":"Barrington","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":79,"system_id":197,"tgid":1715,"name":"Police Operations","alpha_tag":"BarringtonPD 1","tg_group":"Barrington","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":80,"system_id":197,"tgid":1716,"name":"Police Secondary","alpha_tag":"BarringtonPD 2","tg_group":"Barrington","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":81,"system_id":197,"tgid":1744,"name":"Fire Operations (Patch from VHF)","alpha_tag":"Bristol FD","tg_group":"Bristol","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":82,"system_id":197,"tgid":1755,"name":"Harbormaster","alpha_tag":"Bristol Harbor","tg_group":"Bristol","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":83,"system_id":197,"tgid":2003,"name":"Police","alpha_tag":"Burrville PD","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":84,"system_id":197,"tgid":2004,"name":"Police 2","alpha_tag":"Burrvl PD2","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":85,"system_id":197,"tgid":2005,"name":"Police 3 Detectives","alpha_tag":"Burrvl PD3","tg_group":"Burrillville","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":86,"system_id":197,"tgid":2006,"name":"Police 4","alpha_tag":"Burrvl PD4","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":87,"system_id":197,"tgid":2000,"name":"Fire Misc (Ops are VHF)","alpha_tag":"Burrvl FD","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":88,"system_id":197,"tgid":2001,"name":"Fire TAC-1","alpha_tag":"Burvl FDTAC1","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":89,"system_id":197,"tgid":2009,"name":"Fire TAC-2","alpha_tag":"Burvl FDTAC2","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":90,"system_id":197,"tgid":2002,"name":"EMS Misc (Ops are VHF)","alpha_tag":"Burrvl EMS","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["EMS-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":91,"system_id":197,"tgid":2007,"name":"Town-Wide","alpha_tag":"Burrvl Town","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Multi-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":92,"system_id":197,"tgid":2008,"name":"Emergency Management","alpha_tag":"Burrvl EMA","tg_group":"Burrillville","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":93,"system_id":197,"tgid":1838,"name":"Police 1 Dispatch","alpha_tag":"CentFallsPD1","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":94,"system_id":197,"tgid":1839,"name":"Police 2","alpha_tag":"CentFallsPD2","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":95,"system_id":197,"tgid":1835,"name":"Fire Dispatch (Simulcast of UHF)","alpha_tag":"CentFalls FD 1","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":96,"system_id":197,"tgid":1836,"name":"Fireground","alpha_tag":"CentFalls FD 2","tg_group":"Central Falls","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":97,"system_id":197,"tgid":1425,"name":"Police Operations - Simulcast of UHF","alpha_tag":"CharlestownPD","tg_group":"Charlestown","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":98,"system_id":197,"tgid":1429,"name":"EMS - Linked to 151.3325","alpha_tag":"Chastown EMS","tg_group":"Charlestown","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":99,"system_id":197,"tgid":1483,"name":"Police 1 - Dispatch","alpha_tag":"Coventry PD","tg_group":"Coventry","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":100,"system_id":197,"tgid":1484,"name":"Police 2","alpha_tag":"Coventry PD2","tg_group":"Coventry","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":101,"system_id":197,"tgid":1480,"name":"Fire","alpha_tag":"Coventry FD","tg_group":"Coventry","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":102,"system_id":197,"tgid":1500,"name":"Fire - Dispatch/Operations","alpha_tag":"Cranston FD Disp","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":103,"system_id":197,"tgid":1501,"name":"Fire - Fireground 2","alpha_tag":"Cranston FD FG2","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":104,"system_id":197,"tgid":1502,"name":"Fire - Fireground 3","alpha_tag":"Cranston FD FG3","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":105,"system_id":197,"tgid":1503,"name":"Fire - Fireground 4","alpha_tag":"Cranston FD FG4","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":106,"system_id":197,"tgid":1504,"name":"Fire - Admin/Alt Fireground 5","alpha_tag":"Cranston FD Admi","tg_group":"Cranston","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":107,"system_id":197,"tgid":1520,"name":"Fire","alpha_tag":"Cumberland FD","tg_group":"Cumberland","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":108,"system_id":197,"tgid":1523,"name":"Police Secondary","alpha_tag":"Cumberland PD","tg_group":"Cumberland","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":109,"system_id":197,"tgid":1776,"name":"Fire Talk Around","alpha_tag":"E Greenwich F-TA","tg_group":"East Greenwich","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":110,"system_id":197,"tgid":1779,"name":"Police Operations","alpha_tag":"E Greenwich PD","tg_group":"East Greenwich","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":111,"system_id":197,"tgid":1869,"name":"Police 1 - Dispatch","alpha_tag":"E Prov PD 1","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":112,"system_id":197,"tgid":1872,"name":"Police 2","alpha_tag":"E Prov PD 2","tg_group":"East Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":113,"system_id":197,"tgid":1870,"name":"Police 3","alpha_tag":"E Prov PD 3","tg_group":"East Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":114,"system_id":197,"tgid":1883,"name":"Detectives","alpha_tag":"E Prov PD12","tg_group":"East Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":115,"system_id":197,"tgid":1866,"name":"Fire - Dispatch/Operations","alpha_tag":"E Prov FD 1","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":116,"system_id":197,"tgid":1867,"name":"Fire \"Channel 2\"","alpha_tag":"E Prov FD 2","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":117,"system_id":197,"tgid":1878,"name":"Fire \"Channel 3\"","alpha_tag":"E Prov FD 3","tg_group":"East Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":118,"system_id":197,"tgid":2064,"name":"Fire - Fireground","alpha_tag":"Exeter FD-G","tg_group":"Exeter","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":119,"system_id":197,"tgid":1904,"name":"Fire","alpha_tag":"Foster Fire","tg_group":"Foster","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":120,"system_id":197,"tgid":1939,"name":"Police","alpha_tag":"Glocester PD","tg_group":"Glocester","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":121,"system_id":197,"tgid":1940,"name":"Police Secondary","alpha_tag":"Glocester PD 2","tg_group":"Glocester","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":122,"system_id":197,"tgid":1410,"name":"Police","alpha_tag":"Hopkinton PD","tg_group":"Hopkinton","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":123,"system_id":197,"tgid":1100,"name":"Police 1 - Dispatch","alpha_tag":"Jamestown PD 1","tg_group":"Jamestown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":124,"system_id":197,"tgid":1101,"name":"Police 2","alpha_tag":"Jamestown PD 2","tg_group":"Jamestown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":125,"system_id":197,"tgid":1108,"name":"Fire","alpha_tag":"Jamestown FD","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":126,"system_id":197,"tgid":1120,"name":"Fireground 1","alpha_tag":"Jamestown FG 1","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":127,"system_id":197,"tgid":1121,"name":"Fireground 2","alpha_tag":"Jamestown FG 2","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":128,"system_id":197,"tgid":1114,"name":"Public Works","alpha_tag":"Jamestown DPW","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":129,"system_id":197,"tgid":1107,"name":"Town Schools","alpha_tag":"Jamestown School","tg_group":"Jamestown","frequency":null,"metadata":null,"tags":["Schools"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":130,"system_id":197,"tgid":1619,"name":"Police Operations","alpha_tag":"Johnston PD","tg_group":"Johnston","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":131,"system_id":197,"tgid":1616,"name":"Fire Operations","alpha_tag":"Johnston FD","tg_group":"Johnston","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":132,"system_id":197,"tgid":1617,"name":"Fireground","alpha_tag":"Johnston FG","tg_group":"Johnston","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":133,"system_id":197,"tgid":1683,"name":"Police F1","alpha_tag":"Lincoln Police","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":134,"system_id":197,"tgid":1684,"name":"Police F2","alpha_tag":"Lincoln Police 2","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":135,"system_id":197,"tgid":1680,"name":"Fire Dispatch","alpha_tag":"Lincoln Fire 1","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":136,"system_id":197,"tgid":1681,"name":"Fireground 2","alpha_tag":"Lincoln Fire 2","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":137,"system_id":197,"tgid":1691,"name":"Fireground 3","alpha_tag":"Lincoln Fire 3","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":138,"system_id":197,"tgid":1682,"name":"EMS","alpha_tag":"Lincoln EMS","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":139,"system_id":197,"tgid":1688,"name":"Emergency Management","alpha_tag":"Lincoln EMA","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":140,"system_id":197,"tgid":1687,"name":"Townwide","alpha_tag":"Lincoln Townwide","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":141,"system_id":197,"tgid":1692,"name":"Public Works","alpha_tag":"Lincoln DPW","tg_group":"Lincoln","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":142,"system_id":197,"tgid":1264,"name":"Police","alpha_tag":"LittleCompPD","tg_group":"Little Compton","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":143,"system_id":197,"tgid":1266,"name":"Fire","alpha_tag":"LittleCompFD","tg_group":"Little Compton","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":144,"system_id":197,"tgid":1338,"name":"Police Operations","alpha_tag":"MiddletownPD","tg_group":"Middletown","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":145,"system_id":197,"tgid":1343,"name":"Fire Operations","alpha_tag":"Middletown FD","tg_group":"Middletown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":146,"system_id":197,"tgid":1345,"name":"Townwide","alpha_tag":"MiddletownTW","tg_group":"Middletown","frequency":null,"metadata":null,"tags":["Multi-Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":147,"system_id":197,"tgid":1001,"name":"Police - Dispatch","alpha_tag":"Narrag PD 1","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":148,"system_id":197,"tgid":1002,"name":"Police - Car/Car","alpha_tag":"Narrag PD 2","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":149,"system_id":197,"tgid":1003,"name":"Police - Special Details 1/Town Beaches","alpha_tag":"Narrag PD 3","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":150,"system_id":197,"tgid":1004,"name":"Police - Special Details 2","alpha_tag":"Narrag PD 4","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":151,"system_id":197,"tgid":1005,"name":"Police - Harbormaster","alpha_tag":"Narrag PD 5","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":152,"system_id":197,"tgid":1007,"name":"Police - Detectives","alpha_tag":"Narrag PD 7","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":153,"system_id":197,"tgid":1008,"name":"Police - Detectives","alpha_tag":"Narrag PD 8","tg_group":"Narragansett","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":154,"system_id":197,"tgid":1006,"name":"Fire - Dispatch","alpha_tag":"Narrag FD","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":155,"system_id":197,"tgid":1012,"name":"Fire - Fireground 1","alpha_tag":"Narrag FDFG1","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":156,"system_id":197,"tgid":1013,"name":"Fire - Fireground 2","alpha_tag":"Narrag FDFG2","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":157,"system_id":197,"tgid":1016,"name":"Fire - Administration","alpha_tag":"Narrag FD AD","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":158,"system_id":197,"tgid":1014,"name":"Fire - EMS Ops","alpha_tag":"Narrag EMS","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":159,"system_id":197,"tgid":1017,"name":"Public Works","alpha_tag":"Narrag DPW","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":160,"system_id":197,"tgid":1010,"name":"Town Administration","alpha_tag":"Narrag TownA","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Other"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":161,"system_id":197,"tgid":1011,"name":"Townwide Interop","alpha_tag":"Narrag IOP","tg_group":"Narragansett","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":162,"system_id":197,"tgid":1376,"name":"Police","alpha_tag":"New Shore PD","tg_group":"New Shoreham","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":163,"system_id":197,"tgid":1300,"name":"Police 1 - Dispatch","alpha_tag":"Newport PD 1","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":164,"system_id":197,"tgid":1302,"name":"Police 2 - Records","alpha_tag":"Newport PD 2","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":165,"system_id":197,"tgid":1304,"name":"Police 4 - Tactical 1","alpha_tag":"Newport PD 4","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":166,"system_id":197,"tgid":1307,"name":"Police 7 - Tactical 4","alpha_tag":"Newport PD 7","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":167,"system_id":197,"tgid":1308,"name":"Police 8 - Tactical 5","alpha_tag":"Newport PD 8","tg_group":"Newport","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":168,"system_id":197,"tgid":1303,"name":"Fire Dispatch/Operations","alpha_tag":"Newport FD1","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":169,"system_id":197,"tgid":1305,"name":"Fireground Ops 1","alpha_tag":"Newport FG1","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":170,"system_id":197,"tgid":1306,"name":"Fireground Ops 2","alpha_tag":"Newport FG2","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":171,"system_id":197,"tgid":1301,"name":"Fire - Training","alpha_tag":"Newport FDT","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":172,"system_id":197,"tgid":1291,"name":"Water Department","alpha_tag":"Newport Water","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":173,"system_id":197,"tgid":1293,"name":"Public Works","alpha_tag":"Newport DPW","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":174,"system_id":197,"tgid":1297,"name":"Citywide Events","alpha_tag":"Newport Evnt","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":175,"system_id":197,"tgid":1312,"name":"Newport Citywide","alpha_tag":"Newport CW","tg_group":"Newport","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":176,"system_id":197,"tgid":1285,"name":"Police 1 - Dispatch","alpha_tag":"NKing PD 1","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":177,"system_id":197,"tgid":1286,"name":"Police 2 - Admin","alpha_tag":"NKing PD 2","tg_group":"North Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":178,"system_id":197,"tgid":1287,"name":"Police 3 - Car/Car","alpha_tag":"NKing PD 3","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":179,"system_id":197,"tgid":1280,"name":"Fire - Dispatch","alpha_tag":"NKing Fire D","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":180,"system_id":197,"tgid":1281,"name":"Fire - Fireground","alpha_tag":"NKing Fire G","tg_group":"North Kingstown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":181,"system_id":197,"tgid":1536,"name":"Police 1 - Dispatch","alpha_tag":"NorthPrv PD1","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":182,"system_id":197,"tgid":1537,"name":"Police 2 - Car/Car","alpha_tag":"NorthPrv PD2","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":183,"system_id":197,"tgid":1538,"name":"Police 3 - Tactical","alpha_tag":"NorthPrv PD3","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":184,"system_id":197,"tgid":1547,"name":"Fire Dispatch ","alpha_tag":"NorthPrv FDD","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":185,"system_id":197,"tgid":1548,"name":"Fire 2","alpha_tag":"NorthPrv Fire 2","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":186,"system_id":197,"tgid":1549,"name":"Fire 3","alpha_tag":"NorthPrv Fire 3","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":187,"system_id":197,"tgid":1550,"name":"Fire 4","alpha_tag":"NorthPrv Fire 4","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":188,"system_id":197,"tgid":1551,"name":"Fire 5","alpha_tag":"NorthPrv Fire 5","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":189,"system_id":197,"tgid":1552,"name":"Fire 6","alpha_tag":"NorthPrv Fire 6","tg_group":"North Providence","frequency":null,"metadata":{"encrypted":true},"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":190,"system_id":197,"tgid":1544,"name":"Townwide 1","alpha_tag":"NorthPrv TownW 1","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":191,"system_id":197,"tgid":1545,"name":"Townwide 2","alpha_tag":"NorthPrv TownW 2","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Interop"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":192,"system_id":197,"tgid":1554,"name":"Public Works","alpha_tag":"NorthPrv DPW","tg_group":"North Providence","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":193,"system_id":197,"tgid":1971,"name":"Police","alpha_tag":"N Smithfd PD","tg_group":"North Smithfield","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":194,"system_id":197,"tgid":1968,"name":"Fire Dispatch/Operations","alpha_tag":"N Smithfield FD","tg_group":"North Smithfield","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":195,"system_id":197,"tgid":1969,"name":"Fire Secondary","alpha_tag":"N Smithfield FD2","tg_group":"North Smithfield","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":196,"system_id":197,"tgid":1981,"name":"Fireground","alpha_tag":"N Smithfield FD3","tg_group":"North Smithfield","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":197,"system_id":197,"tgid":1440,"name":"Fire - Operations","alpha_tag":"Pawtucket FD 1","tg_group":"Pawtucket","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":198,"system_id":197,"tgid":1441,"name":"Fireground","alpha_tag":"Pawtucket FG","tg_group":"Pawtucket","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":199,"system_id":197,"tgid":1442,"name":"EMS Tac","alpha_tag":"Pawtucket EMSTac","tg_group":"Pawtucket","frequency":null,"metadata":null,"tags":["EMS-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":200,"system_id":197,"tgid":1248,"name":"Police","alpha_tag":"PortsmouthPD","tg_group":"Portsmouth","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":201,"system_id":197,"tgid":1253,"name":"Fire Dispatch (Patch to VHF Primary)","alpha_tag":"Portsmouth FD","tg_group":"Portsmouth","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":202,"system_id":197,"tgid":1255,"name":"Fireground","alpha_tag":"Portsmouth FG","tg_group":"Portsmouth","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":203,"system_id":197,"tgid":1262,"name":"Island Fire Dispatch","alpha_tag":"Prudence Isl FD","tg_group":"Portsmouth","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":204,"system_id":197,"tgid":10000,"name":"Police - All Call - Emergency Broadcasts","alpha_tag":"PPD ATG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":205,"system_id":197,"tgid":10001,"name":"Police 1 - Dispatch","alpha_tag":"PPD CH 1","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":206,"system_id":197,"tgid":10002,"name":"Police 2","alpha_tag":"PPD CH 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":207,"system_id":197,"tgid":10003,"name":"Police 3","alpha_tag":"PPD CH 3","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":208,"system_id":197,"tgid":10004,"name":"Police 4","alpha_tag":"PPD CH-4","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":209,"system_id":197,"tgid":10005,"name":"Police 5 -Detectives 1","alpha_tag":"PPD DETEC 1","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":210,"system_id":197,"tgid":10006,"name":"Police 6 - Car-to-Car","alpha_tag":"PPD T/A","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":211,"system_id":197,"tgid":10007,"name":"Police 7 - Narcotics 1","alpha_tag":"PPD NARC 1","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":212,"system_id":197,"tgid":10008,"name":"Police 8 - Narcotics 2","alpha_tag":"PPD NARC 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":213,"system_id":197,"tgid":10009,"name":"Police 9 - Detectives 2","alpha_tag":"PPD DETEC 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":214,"system_id":197,"tgid":10010,"name":"Police 10 - Special Details 1","alpha_tag":"PPD DETAIL 1","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":215,"system_id":197,"tgid":10011,"name":"Police 11 - Special Details 2","alpha_tag":"PPD DETAIL 2","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":216,"system_id":197,"tgid":10012,"name":"Police 12 - Corrections Security","alpha_tag":"PPD CORR SEC","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":217,"system_id":197,"tgid":10013,"name":"Police 13 - Special Response Unit","alpha_tag":"PPD SRU","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":218,"system_id":197,"tgid":10014,"name":"Police 14 - Administration","alpha_tag":"PPD ADMIN","tg_group":"Providence (City)","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":219,"system_id":197,"tgid":10100,"name":"Fire All Call - Emergency Broadcasts","alpha_tag":"PROV FD ATG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":220,"system_id":197,"tgid":10101,"name":"Fire Dispatch","alpha_tag":"PFD DISPATCH","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":221,"system_id":197,"tgid":10107,"name":"Fireground 2","alpha_tag":"PFD CH-2 FG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":222,"system_id":197,"tgid":10108,"name":"Fireground 3","alpha_tag":"PFD CH-3 FG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":223,"system_id":197,"tgid":10109,"name":"Fireground 4","alpha_tag":"PFD CH-4 FG","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":224,"system_id":197,"tgid":10102,"name":"Fire 5","alpha_tag":"PFD CH-5","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":225,"system_id":197,"tgid":10103,"name":"Fire 6","alpha_tag":"PFD CH-6","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":226,"system_id":197,"tgid":10104,"name":"Fire 7","alpha_tag":"PFD CH-7","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":227,"system_id":197,"tgid":10110,"name":"Fire - Mutual Aid 1","alpha_tag":"PFD M/A 1","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":228,"system_id":197,"tgid":10111,"name":"Fire - Mutual Aid 2","alpha_tag":"PFD M/A 2","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":229,"system_id":197,"tgid":10112,"name":"Fire - Mutual Aid 3","alpha_tag":"PFD M/A 3","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":230,"system_id":197,"tgid":10113,"name":"Fireground 8","alpha_tag":"PFD Fireground 8","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":231,"system_id":197,"tgid":10105,"name":"Fire - Administration","alpha_tag":"PFD ADMIN","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":232,"system_id":197,"tgid":10106,"name":"Fire - Communications","alpha_tag":"PFD COMM","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":233,"system_id":197,"tgid":10207,"name":"Public Works","alpha_tag":"PROV DPW","tg_group":"Providence (City)","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":234,"system_id":197,"tgid":2035,"name":"Police","alpha_tag":"Richmond PD","tg_group":"Richmond","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":235,"system_id":197,"tgid":2042,"name":"Chariho Regional High School","alpha_tag":"Chariho Reg HS","tg_group":"Richmond","frequency":null,"metadata":null,"tags":["Schools"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":236,"system_id":197,"tgid":1460,"name":"Police","alpha_tag":"Scituate PD","tg_group":"Scituate","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":237,"system_id":197,"tgid":1463,"name":"Fire Operations","alpha_tag":"Scituate FD","tg_group":"Scituate","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":238,"system_id":197,"tgid":1651,"name":"Police Operations","alpha_tag":"SmithfieldPD","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":239,"system_id":197,"tgid":1652,"name":"Police Secondary","alpha_tag":"Smfld PD 2","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":240,"system_id":197,"tgid":1653,"name":"Police Detectives","alpha_tag":"Smfld PD Det","tg_group":"Smithfield","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":241,"system_id":197,"tgid":1654,"name":"Police Admin","alpha_tag":"Smfld PD Adm","tg_group":"Smithfield","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":242,"system_id":197,"tgid":1661,"name":"Police Details","alpha_tag":"Smfld PD Dtl","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":243,"system_id":197,"tgid":1648,"name":"Fire - Fireground","alpha_tag":"SmithfieldFD","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":244,"system_id":197,"tgid":1655,"name":"Town-Wide","alpha_tag":"Smfld Town","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Multi-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":245,"system_id":197,"tgid":1657,"name":"Emergency Management","alpha_tag":"Smfld EMA","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Emergency Ops"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":246,"system_id":197,"tgid":1660,"name":"Public Works","alpha_tag":"Smfld DPW","tg_group":"Smithfield","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":247,"system_id":197,"tgid":1225,"name":"Police 1 - Dispatch","alpha_tag":"SKing PD 1","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":248,"system_id":197,"tgid":1226,"name":"Police 2 - Car/Car","alpha_tag":"SKing PD 2","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":249,"system_id":197,"tgid":1235,"name":"Police 3 - Tactical","alpha_tag":"SKing PD 3","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":250,"system_id":197,"tgid":1236,"name":"Police 5 - Tactical","alpha_tag":"SKing PD 5","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":251,"system_id":197,"tgid":1232,"name":"Fire - UHF Simulcast","alpha_tag":"SKing FD Lnk","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":252,"system_id":197,"tgid":1240,"name":"Fire - Detail","alpha_tag":"SKing Fire D","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":253,"system_id":197,"tgid":1227,"name":"Union Fire District - Fireground 1","alpha_tag":"UnionFD FG 1","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":254,"system_id":197,"tgid":1237,"name":"Union Fire District - Fireground 2","alpha_tag":"UnionFD FG 2","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":255,"system_id":197,"tgid":1026,"name":"Union Fire District - Special Events","alpha_tag":"UnionFD Evnt","tg_group":"South Kingstown","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":256,"system_id":197,"tgid":1015,"name":"EMS","alpha_tag":"SKing EMS","tg_group":"South Kingstown","frequency":null,"metadata":{"encrypted":true},"tags":["EMS Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":257,"system_id":197,"tgid":1316,"name":"Police (Simulcast 482.9625)","alpha_tag":"Tiverton PD","tg_group":"Tiverton","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":258,"system_id":197,"tgid":1315,"name":"Fire (Simulcast 471.7875)","alpha_tag":"Tiverton FD","tg_group":"Tiverton","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":259,"system_id":197,"tgid":1162,"name":"Fire","alpha_tag":"Warwick FD","tg_group":"Warwick","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":260,"system_id":197,"tgid":1170,"name":"Fireground","alpha_tag":"Warwick FG","tg_group":"Warwick","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":261,"system_id":197,"tgid":1805,"name":"Police","alpha_tag":"W Greenwh PD","tg_group":"West Greenwich","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":262,"system_id":197,"tgid":1806,"name":"Police Secondary","alpha_tag":"W GreenwichPD2","tg_group":"West Greenwich","frequency":null,"metadata":null,"tags":["Law Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":263,"system_id":197,"tgid":1208,"name":"Fire Operations","alpha_tag":"W Warwick FD","tg_group":"West Warwick","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":264,"system_id":197,"tgid":1050,"name":"Police 1 - Dispatch","alpha_tag":"Westerly PD1","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":265,"system_id":197,"tgid":1051,"name":"Police 2","alpha_tag":"Westerly PD2","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":266,"system_id":197,"tgid":1052,"name":"Police 3","alpha_tag":"Westerly PD3","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":267,"system_id":197,"tgid":1053,"name":"Police 4","alpha_tag":"Westerly PD4","tg_group":"Westerly","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":268,"system_id":197,"tgid":1054,"name":"Police 5 - Reserve Officers","alpha_tag":"Westerly PD5","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":269,"system_id":197,"tgid":1064,"name":"Police 6 - Traffic Division","alpha_tag":"Westerly PD6","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":270,"system_id":197,"tgid":1063,"name":"Fire Operations","alpha_tag":"Westerly FD","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":271,"system_id":197,"tgid":1072,"name":"Police/Fire/EMS Ops","alpha_tag":"Westerly PFE","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["Multi-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":272,"system_id":197,"tgid":1082,"name":"EMS Operations","alpha_tag":"Westerly EMS ","tg_group":"Westerly","frequency":null,"metadata":null,"tags":["EMS Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":273,"system_id":197,"tgid":1363,"name":"Police 1 - Dispatch","alpha_tag":"Woonskt PD 1","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Law Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":274,"system_id":197,"tgid":1364,"name":"Police 2","alpha_tag":"Woonskt PD 2","tg_group":"Woonsocket","frequency":null,"metadata":{"encrypted":true},"tags":["Law Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":275,"system_id":197,"tgid":1360,"name":"Fire Dispatch - Operations","alpha_tag":"Woonsocket FD D","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Fire-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":276,"system_id":197,"tgid":1361,"name":"Fire Secondary","alpha_tag":"Woonsocket FD 2","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Fire Dispatch"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":277,"system_id":197,"tgid":1354,"name":"Fire - Fireground 3","alpha_tag":"Woonskt FD 3","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Fire-Tac"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":278,"system_id":197,"tgid":1367,"name":"Citywide","alpha_tag":"Woonskt City","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Multi-Talk"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":279,"system_id":197,"tgid":1368,"name":"Public Works - Streets","alpha_tag":"Woonsocket PW","tg_group":"Woonsocket","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":280,"system_id":197,"tgid":1,"name":"RISCON Radio Technicians","alpha_tag":"Radio Techs","tg_group":"Radio Technicians","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false},{"id":281,"system_id":197,"tgid":10125,"name":"RISCON Radio Technicians","alpha_tag":"Radio Techs","tg_group":"Radio Technicians","frequency":null,"metadata":null,"tags":["Public Works"],"alert":true,"alert_rules":null,"weight":1,"ignored":false,"system":{"id":197,"name":"RISCON"},"learned":false}] \ No newline at end of file diff --git a/sql/postgres/migrations/001_initial.up.sql b/sql/postgres/migrations/001_initial.up.sql index 0a8e2a8..b9c9304 100644 --- a/sql/postgres/migrations/001_initial.up.sql +++ b/sql/postgres/migrations/001_initial.up.sql @@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS talkgroups( metadata JSONB, tags TEXT[] NOT NULL DEFAULT '{}', alert BOOLEAN NOT NULL DEFAULT 'true', - alert_config JSONB, + alert_rules JSONB, weight REAL NOT NULL DEFAULT 1.0, learned BOOLEAN NOT NULL DEFAULT FALSE, ignored BOOLEAN NOT NULL DEFAULT FALSE, @@ -62,7 +62,7 @@ CREATE TABLE IF NOT EXISTS talkgroup_versions( metadata JSONB, tags TEXT[], alert BOOLEAN, - alert_config JSONB, + alert_rules JSONB, weight REAL, learned BOOLEAN, ignored BOOLEAN diff --git a/sql/postgres/queries/talkgroups.sql b/sql/postgres/queries/talkgroups.sql index 8483937..2c10354 100644 --- a/sql/postgres/queries/talkgroups.sql +++ b/sql/postgres/queries/talkgroups.sql @@ -137,7 +137,7 @@ SET metadata = COALESCE(sqlc.narg('metadata'), metadata), tags = COALESCE(sqlc.narg('tags'), tags), alert = COALESCE(sqlc.narg('alert'), alert), - alert_config = COALESCE(sqlc.narg('alert_config'), alert_config), + alert_rules = COALESCE(sqlc.narg('alert_rules'), alert_rules), weight = COALESCE(sqlc.narg('weight'), weight), learned = COALESCE(sqlc.narg('learned'), learned) WHERE id = sqlc.narg('id') OR (system_id = sqlc.narg('system_id') AND tgid = sqlc.narg('tgid')) @@ -145,7 +145,7 @@ RETURNING *; -- name: UpsertTalkgroup :batchone INSERT INTO talkgroups AS tg ( - system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_config, weight, learned + system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, tags, alert, alert_rules, weight, learned ) VALUES ( @system_id, @tgid, @@ -156,7 +156,7 @@ INSERT INTO talkgroups AS tg ( sqlc.narg('metadata'), COALESCE(sqlc.narg('tags'), '{}'::text[])::text[], COALESCE(sqlc.narg('alert'), TRUE), - sqlc.narg('alert_config'), + sqlc.narg('alert_rules'), COALESCE(sqlc.narg('weight'), 1.0)::numeric, COALESCE(sqlc.narg('learned'), FALSE)::boolean ) @@ -169,7 +169,7 @@ SET metadata = COALESCE(sqlc.narg('metadata'), tg.metadata), tags = COALESCE(sqlc.narg('tags'), tg.tags), alert = COALESCE(sqlc.narg('alert'), tg.alert), - alert_config = COALESCE(sqlc.narg('alert_config'), tg.alert_config), + alert_rules = COALESCE(sqlc.narg('alert_rules'), tg.alert_rules), weight = COALESCE(sqlc.narg('weight'), tg.weight), learned = COALESCE(sqlc.narg('learned'), tg.learned) RETURNING *; @@ -185,7 +185,7 @@ INSERT INTO talkgroup_versions(time, created_by, metadata, tags, alert, - alert_config, + alert_rules, weight, learned ) SELECT NOW(), @submitter, @@ -198,7 +198,7 @@ INSERT INTO talkgroup_versions(time, created_by, tg.metadata, tg.tags, tg.alert, - tg.alert_config, + tg.alert_rules, tg.weight, tg.learned FROM talkgroups tg WHERE tg.system_id = @system_id AND tg.tgid = @tgid; @@ -231,7 +231,7 @@ INSERT INTO talkgroups( metadata, tags, alert, - alert_config, + alert_rules, weight, learned, ignored @@ -246,7 +246,7 @@ SELECT metadata, tags, alert, - alert_config, + alert_rules, weight, learned, ignored @@ -257,7 +257,7 @@ FROM talkgroup_versions tgv ON CONFLICT (system_id, tgid) DO UPDATE SET metadata = excluded.metadata, tags = excluded.tags, alert = excluded.alert, - alert_config = excluded.alert_config, + alert_rules = excluded.alert_rules, weight = excluded.weight, learned = excluded.learner, ignored = excluded.ignored diff --git a/sql/sqlc.yaml b/sql/sqlc.yaml index a5c0059..54898f7 100644 --- a/sql/sqlc.yaml +++ b/sql/sqlc.yaml @@ -27,7 +27,7 @@ sql: go_type: "time.Time" - db_type: "pg_catalog.text" go_type: "string" - - column: "talkgroups.alert_config" + - column: "talkgroups.alert_rules" go_type: import: "dynatron.me/x/stillbox/pkg/alerting/rules" type: "AlertRules" From cfd8584c9b1ffa421684faf5349205d6faff3385 Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Tue, 7 Jan 2025 22:18:53 -0500 Subject: [PATCH 04/13] Alert Rules UI --- client/stillbox/src/app/talkgroup.ts | 6 +++--- .../talkgroup-record/talkgroup-record.component.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/stillbox/src/app/talkgroup.ts b/client/stillbox/src/app/talkgroup.ts index 98cd013..5a62385 100644 --- a/client/stillbox/src/app/talkgroup.ts +++ b/client/stillbox/src/app/talkgroup.ts @@ -70,7 +70,7 @@ export class Talkgroup { tags!: string[]; alert!: boolean; system?: System; - alert_config!: AlertRule[]; + alert_rules!: AlertRule[]; weight!: number; learned?: boolean; icon?: string; @@ -86,7 +86,7 @@ export class Talkgroup { metadata: Metadata | null, tags: string[], alert: boolean, - alert_config: AlertRule[], + alert_rules: AlertRule[], weight: number, system?: System, learned?: boolean, @@ -122,6 +122,6 @@ export interface TalkgroupUpdate { metadata: Object | null; tags: string[] | null; alert: boolean | null; - alert_config: AlertRule[] | null; + alert_rules: AlertRule[] | null; weight: number | null; } diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html index 8af8e85..9e8a867 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html @@ -108,7 +108,7 @@ >
- +
} @else { From dea68f2126132157118d894b43214d6f0405028d Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Thu, 9 Jan 2025 13:44:43 -0500 Subject: [PATCH 05/13] Set maxAge --- pkg/auth/jwt.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/auth/jwt.go b/pkg/auth/jwt.go index 4dc8bf6..99c2ba7 100644 --- a/pkg/auth/jwt.go +++ b/pkg/auth/jwt.go @@ -245,6 +245,7 @@ func (a *Auth) routeAuth(w http.ResponseWriter, r *http.Request) { Path: "/", HttpOnly: true, Secure: true, + MaxAge: 60 * 60 * 24 * 30, // one month } cookie.Domain = r.Host From c65bf3c8e71518193424e2d3af1c1c6ec201280d Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Thu, 9 Jan 2025 13:44:43 -0500 Subject: [PATCH 06/13] Set maxAge (#99) --- pkg/auth/jwt.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/auth/jwt.go b/pkg/auth/jwt.go index 4dc8bf6..99c2ba7 100644 --- a/pkg/auth/jwt.go +++ b/pkg/auth/jwt.go @@ -245,6 +245,7 @@ func (a *Auth) routeAuth(w http.ResponseWriter, r *http.Request) { Path: "/", HttpOnly: true, Secure: true, + MaxAge: 60 * 60 * 24 * 30, // one month } cookie.Domain = r.Host From 7e667d81ab163b24ef6510fe573ee73f31e17e48 Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Thu, 9 Jan 2025 23:58:21 -0500 Subject: [PATCH 07/13] Mat table alert rule builder wip --- .../src/app/calls/calls.component.html | 6 ++- .../stillbox/src/app/calls/calls.component.ts | 2 +- client/stillbox/src/app/talkgroup.ts | 20 +++++---- .../alert-rule-builder.component.html | 41 ++++++++----------- .../alert-rule-builder.component.ts | 16 +++++--- .../talkgroup-record.component.ts | 4 ++ 6 files changed, 48 insertions(+), 41 deletions(-) diff --git a/client/stillbox/src/app/calls/calls.component.html b/client/stillbox/src/app/calls/calls.component.html index 3cbc7a4..7c2891d 100644 --- a/client/stillbox/src/app/calls/calls.component.html +++ b/client/stillbox/src/app/calls/calls.component.html @@ -169,7 +169,11 @@ - +
diff --git a/client/stillbox/src/app/calls/calls.component.ts b/client/stillbox/src/app/calls/calls.component.ts index 5ff0ae1..c82e9f4 100644 --- a/client/stillbox/src/app/calls/calls.component.ts +++ b/client/stillbox/src/app/calls/calls.component.ts @@ -394,7 +394,7 @@ export class CallsComponent { add: this.selection.selected.map((s, i, a) => { s.incidents++; return s.id; - }), + }), }) .subscribe({ next: () => { diff --git a/client/stillbox/src/app/talkgroup.ts b/client/stillbox/src/app/talkgroup.ts index 5a62385..7c8b2f7 100644 --- a/client/stillbox/src/app/talkgroup.ts +++ b/client/stillbox/src/app/talkgroup.ts @@ -15,21 +15,19 @@ export class AlertTime { } export class AlertRule { - times: string[]; - timesProc: AlertTime[]; - mult: number; + times!: string[]; + mult!: number; - constructor(times: string[], mult: number) { - this.times = times; - this.timesProc = []; - times.forEach((tm) => { + public getTimes(): AlertTime[] { + let timesProc = []; + this.times.forEach((tm) => { let sr = tm.split('+'); - this.timesProc.push({ + timesProc.push({ time: sr[0], duration: sr[1], }); }); - this.mult = mult; + return timesProc; } } @@ -93,6 +91,10 @@ export class Talkgroup { icon?: string, ) { this.iconSvg = this.iconMap(this.metadata?.icon!); + this.alert_rules = this.alert_rules.map((x) => + Object.assign(new AlertRule(), x), + ); + console.log(this.alert_rules); } iconMap(icon: string): string { diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html index ccf9ace..41284f9 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.html @@ -1,30 +1,21 @@
@for (rule of rules; track $index) { -
- - - - - - - - - - @for (time of rule | ruleProc; track $index) { - - - - - } @empty { - - - - } - +
+
StartDuration
- {{ time.time }} - - {{ time.duration }} -
No times
+ + + + + + + + + + + + + +
Time{{ time.time }}Duration{{ time.duration }}Multiplier{{ rule.mult }}
} @empty { diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts index 18ac0e6..56b6a1d 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/alert-rule-builder/alert-rule-builder.component.ts @@ -7,31 +7,37 @@ import { PipeTransform, } from '@angular/core'; import { AlertRule, AlertTime } from '../../../talkgroup'; +import { MatTableModule } from '@angular/material/table'; @Pipe({ - name: 'ruleProc', + name: 'ruleTimes', standalone: true, pure: true, }) export class AlertRulePipe implements PipeTransform { transform(rule: AlertRule, args?: any): AlertTime[] { - let tm = new AlertRule(rule.times, rule.mult); - return tm.timesProc; + return rule.getTimes(); } } @Component({ selector: 'alert-rule-builder', - imports: [AlertRulePipe], + imports: [MatTableModule, AlertRulePipe], templateUrl: './alert-rule-builder.component.html', styleUrl: './alert-rule-builder.component.scss', }) export class AlertRuleBuilderComponent { - @Input() rules: AlertRule[] = []; + @Input() rules!: AlertRule[]; @Output() rulesChange: EventEmitter = new EventEmitter< AlertRule[] >(); + displayedColumns = ['time', 'duration', 'multiplier']; + + ngOnInit() { + this.rules = this.rules; + } + emit() { this.rulesChange.emit(this.rules); } diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts index 60e0504..269acac 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts @@ -7,6 +7,7 @@ import { IconMap, iconMapping, TGID, + AlertRule, } from '../../talkgroup'; import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { TalkgroupService } from '../talkgroups.service'; @@ -157,6 +158,9 @@ export class TalkgroupRecordComponent { .getTalkgroup(Number(this.tgid.sys), Number(this.tgid.tg)) .pipe( tap((tg) => { + tg.alert_rules = tg.alert_rules.map((x) => + Object.assign(new AlertRule(), x), + ); this.form.patchValue(tg); this.form.controls['tagInput'].setValue(''); this.form.controls['tagsControl'].setValue(this.tg?.tags ?? []); From af9a534c1e9778659dbfd9da9bbc159ed03f6260 Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Fri, 10 Jan 2025 20:07:13 -0500 Subject: [PATCH 08/13] m3u link --- .../stillbox/src/app/incidents/incident/incident.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/stillbox/src/app/incidents/incident/incident.component.html b/client/stillbox/src/app/incidents/incident/incident.component.html index b60261d..3ca8921 100644 --- a/client/stillbox/src/app/incidents/incident/incident.component.html +++ b/client/stillbox/src/app/incidents/incident/incident.component.html @@ -1,7 +1,7 @@ @let inc = inc$ | async;
-

{{ inc?.name }}

+

{{ inc?.name }} playlist_play

From 1c1c4ea6e8363e778f9dbab720222d9c92ceeb0d Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Fri, 10 Jan 2025 20:10:14 -0500 Subject: [PATCH 09/13] api --- .../stillbox/src/app/incidents/incident/incident.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/stillbox/src/app/incidents/incident/incident.component.html b/client/stillbox/src/app/incidents/incident/incident.component.html index 3ca8921..d742ca8 100644 --- a/client/stillbox/src/app/incidents/incident/incident.component.html +++ b/client/stillbox/src/app/incidents/incident/incident.component.html @@ -1,7 +1,7 @@ @let inc = inc$ | async;
-

{{ inc?.name }} playlist_play

+

{{ inc?.name }} playlist_play

From 4d2eaefe1fb52b37e7bd119d5a722743676ef878 Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Fri, 10 Jan 2025 20:15:13 -0500 Subject: [PATCH 10/13] Write order for m3u --- pkg/rest/incidents.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/rest/incidents.go b/pkg/rest/incidents.go index e69f5f2..7488aeb 100644 --- a/pkg/rest/incidents.go +++ b/pkg/rest/incidents.go @@ -202,7 +202,7 @@ func (ia *incidentsAPI) getCallsM3U(w http.ResponseWriter, r *http.Request) { return } - var b bytes.Buffer + b := new(bytes.Buffer) callUrl := common.PtrTo(*ia.baseURL) @@ -220,7 +220,7 @@ func (ia *incidentsAPI) getCallsM3U(w http.ResponseWriter, r *http.Request) { callUrl.Path = "/api/call/" + c.ID.String() - fmt.Fprintf(w, "#EXTINF:%d,%s%s (%s)\n%s\n\n", + fmt.Fprintf(b, "#EXTINF:%d,%s%s (%s)\n%s\n\n", c.Duration.Seconds(), tg.StringTag(true), from, From 185237cd01db3f6613cb45c711498c4771353d94 Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Sat, 11 Jan 2025 16:38:27 -0500 Subject: [PATCH 11/13] fix api spam --- client/stillbox/src/app/talkgroups/talkgroups.service.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/client/stillbox/src/app/talkgroups/talkgroups.service.ts b/client/stillbox/src/app/talkgroups/talkgroups.service.ts index c309d01..7a41161 100644 --- a/client/stillbox/src/app/talkgroups/talkgroups.service.ts +++ b/client/stillbox/src/app/talkgroups/talkgroups.service.ts @@ -33,7 +33,7 @@ export class TalkgroupService { private subscriptions = new Subscription(); constructor(private http: HttpClient) { this.tgs$ = this.fetchAll.pipe(switchMap(() => this.getTalkgroups())); - this.tags$ = this.fetchAll.pipe(switchMap(() => this.getAllTags())); + this.tags$ = this.fetchAll.pipe(switchMap(() => this.getAllTags()), shareReplay()); this.fillTgMap(); } @@ -52,11 +52,8 @@ export class TalkgroupService { getTalkgroup(sys: number, tg: number): Observable { const key = this.tgKey(sys, tg); if (!this._getTalkgroup.get(key)) { - return this.tgs$.pipe( - switchMap((talkg) => - talkg.filter((tgv) => tgv.tgid == tg && tgv.system_id == sys), - ), - ); + let rs = new ReplaySubject(); + this._getTalkgroup.set(key, rs); } return this._getTalkgroup.get(key)!; } From 5c07b8c15aebc6e6a6fb503f601ee0b123add94c Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Sat, 11 Jan 2025 16:42:18 -0500 Subject: [PATCH 12/13] fix spinner on TGs with no rules --- .../src/app/incidents/incident/incident.component.html | 7 ++++++- .../talkgroup-record/talkgroup-record.component.ts | 7 ++++--- client/stillbox/src/app/talkgroups/talkgroups.service.ts | 5 ++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/client/stillbox/src/app/incidents/incident/incident.component.html b/client/stillbox/src/app/incidents/incident/incident.component.html index d742ca8..e9b8612 100644 --- a/client/stillbox/src/app/incidents/incident/incident.component.html +++ b/client/stillbox/src/app/incidents/incident/incident.component.html @@ -1,7 +1,12 @@ @let inc = inc$ | async;
-

{{ inc?.name }} playlist_play

+

+ {{ inc?.name }} + playlist_play +

diff --git a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts index 269acac..ae0937c 100644 --- a/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts +++ b/client/stillbox/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts @@ -158,9 +158,10 @@ export class TalkgroupRecordComponent { .getTalkgroup(Number(this.tgid.sys), Number(this.tgid.tg)) .pipe( tap((tg) => { - tg.alert_rules = tg.alert_rules.map((x) => - Object.assign(new AlertRule(), x), - ); + console.log('tap run'); + tg.alert_rules = tg.alert_rules + ? tg.alert_rules.map((x) => Object.assign(new AlertRule(), x)) + : []; this.form.patchValue(tg); this.form.controls['tagInput'].setValue(''); this.form.controls['tagsControl'].setValue(this.tg?.tags ?? []); diff --git a/client/stillbox/src/app/talkgroups/talkgroups.service.ts b/client/stillbox/src/app/talkgroups/talkgroups.service.ts index 7a41161..0896b64 100644 --- a/client/stillbox/src/app/talkgroups/talkgroups.service.ts +++ b/client/stillbox/src/app/talkgroups/talkgroups.service.ts @@ -33,7 +33,10 @@ export class TalkgroupService { private subscriptions = new Subscription(); constructor(private http: HttpClient) { this.tgs$ = this.fetchAll.pipe(switchMap(() => this.getTalkgroups())); - this.tags$ = this.fetchAll.pipe(switchMap(() => this.getAllTags()), shareReplay()); + this.tags$ = this.fetchAll.pipe( + switchMap(() => this.getAllTags()), + shareReplay(), + ); this.fillTgMap(); } From e01f20f1fc3bcdfcbd4f10c19fb8cb95b78017bf Mon Sep 17 00:00:00 2001 From: Daniel Ponte Date: Fri, 10 Jan 2025 20:20:00 -0500 Subject: [PATCH 13/13] incident call order --- pkg/database/batch.go | 22 ++++++------ pkg/database/incidents.sql.go | 1 + pkg/database/models.go | 58 +++++++++++++++--------------- pkg/database/talkgroups.sql.go | 24 ++++++------- sql/postgres/queries/incidents.sql | 3 +- 5 files changed, 55 insertions(+), 53 deletions(-) diff --git a/pkg/database/batch.go b/pkg/database/batch.go index 7b42a46..3001e0d 100644 --- a/pkg/database/batch.go +++ b/pkg/database/batch.go @@ -135,18 +135,18 @@ type UpsertTalkgroupBatchResults struct { } type UpsertTalkgroupParams struct { - SystemID int32 `json:"system_id"` - TGID int32 `json:"tgid"` - Name *string `json:"name"` - AlphaTag *string `json:"alpha_tag"` - TGGroup *string `json:"tg_group"` - Frequency *int32 `json:"frequency"` - Metadata jsontypes.Metadata `json:"metadata"` - Tags []string `json:"tags"` - Alert interface{} `json:"alert"` + SystemID int32 `json:"system_id"` + TGID int32 `json:"tgid"` + Name *string `json:"name"` + AlphaTag *string `json:"alpha_tag"` + TGGroup *string `json:"tg_group"` + Frequency *int32 `json:"frequency"` + Metadata jsontypes.Metadata `json:"metadata"` + Tags []string `json:"tags"` + Alert interface{} `json:"alert"` AlertRules rules.AlertRules `json:"alert_rules"` - Weight pgtype.Numeric `json:"weight"` - Learned *bool `json:"learned"` + Weight pgtype.Numeric `json:"weight"` + Learned *bool `json:"learned"` } func (q *Queries) UpsertTalkgroup(ctx context.Context, arg []UpsertTalkgroupParams) *UpsertTalkgroupBatchResults { diff --git a/pkg/database/incidents.sql.go b/pkg/database/incidents.sql.go index 28a46a2..d422db0 100644 --- a/pkg/database/incidents.sql.go +++ b/pkg/database/incidents.sql.go @@ -180,6 +180,7 @@ FROM incidents_calls ic, LATERAL ( FROM swept_calls sc WHERE sc.id = ic.swept_call_id ) c WHERE ic.incident_id = $1 +ORDER BY ic.call_date ASC ` type GetIncidentCallsRow struct { diff --git a/pkg/database/models.go b/pkg/database/models.go index fdc390b..66ff0ed 100644 --- a/pkg/database/models.go +++ b/pkg/database/models.go @@ -107,40 +107,40 @@ type System struct { } type Talkgroup struct { - ID int `json:"id,omitempty"` - SystemID int32 `json:"system_id,omitempty"` - TGID int32 `json:"tgid,omitempty"` - Name *string `json:"name,omitempty"` - AlphaTag *string `json:"alpha_tag,omitempty"` - TGGroup *string `json:"tg_group,omitempty"` - Frequency *int32 `json:"frequency,omitempty"` - Metadata jsontypes.Metadata `json:"metadata,omitempty"` - Tags []string `json:"tags,omitempty"` - Alert bool `json:"alert,omitempty"` + ID int `json:"id,omitempty"` + SystemID int32 `json:"system_id,omitempty"` + TGID int32 `json:"tgid,omitempty"` + Name *string `json:"name,omitempty"` + AlphaTag *string `json:"alpha_tag,omitempty"` + TGGroup *string `json:"tg_group,omitempty"` + Frequency *int32 `json:"frequency,omitempty"` + Metadata jsontypes.Metadata `json:"metadata,omitempty"` + Tags []string `json:"tags,omitempty"` + Alert bool `json:"alert,omitempty"` AlertRules rules.AlertRules `json:"alert_rules,omitempty"` - Weight float32 `json:"weight,omitempty"` - Learned bool `json:"learned,omitempty"` - Ignored bool `json:"ignored,omitempty"` + Weight float32 `json:"weight,omitempty"` + Learned bool `json:"learned,omitempty"` + Ignored bool `json:"ignored,omitempty"` } type TalkgroupVersion struct { - ID int `json:"id,omitempty"` - Time pgtype.Timestamptz `json:"time,omitempty"` - CreatedBy *int32 `json:"created_by,omitempty"` - Deleted *bool `json:"deleted,omitempty"` - SystemID *int32 `json:"system_id,omitempty"` - TGID *int32 `json:"tgid,omitempty"` - Name *string `json:"name,omitempty"` - AlphaTag *string `json:"alpha_tag,omitempty"` - TGGroup *string `json:"tg_group,omitempty"` - Frequency *int32 `json:"frequency,omitempty"` - Metadata []byte `json:"metadata,omitempty"` - Tags []string `json:"tags,omitempty"` - Alert *bool `json:"alert,omitempty"` + ID int `json:"id,omitempty"` + Time pgtype.Timestamptz `json:"time,omitempty"` + CreatedBy *int32 `json:"created_by,omitempty"` + Deleted *bool `json:"deleted,omitempty"` + SystemID *int32 `json:"system_id,omitempty"` + TGID *int32 `json:"tgid,omitempty"` + Name *string `json:"name,omitempty"` + AlphaTag *string `json:"alpha_tag,omitempty"` + TGGroup *string `json:"tg_group,omitempty"` + Frequency *int32 `json:"frequency,omitempty"` + Metadata []byte `json:"metadata,omitempty"` + Tags []string `json:"tags,omitempty"` + Alert *bool `json:"alert,omitempty"` AlertRules []byte `json:"alert_rules,omitempty"` - Weight *float32 `json:"weight,omitempty"` - Learned *bool `json:"learned,omitempty"` - Ignored *bool `json:"ignored,omitempty"` + Weight *float32 `json:"weight,omitempty"` + Learned *bool `json:"learned,omitempty"` + Ignored *bool `json:"ignored,omitempty"` } type User struct { diff --git a/pkg/database/talkgroups.sql.go b/pkg/database/talkgroups.sql.go index 458edcc..bc378e5 100644 --- a/pkg/database/talkgroups.sql.go +++ b/pkg/database/talkgroups.sql.go @@ -738,19 +738,19 @@ RETURNING id, system_id, tgid, name, alpha_tag, tg_group, frequency, metadata, t ` type UpdateTalkgroupParams struct { - Name *string `json:"name"` - AlphaTag *string `json:"alpha_tag"` - TGGroup *string `json:"tg_group"` - Frequency *int32 `json:"frequency"` - Metadata jsontypes.Metadata `json:"metadata"` - Tags []string `json:"tags"` - Alert *bool `json:"alert"` + Name *string `json:"name"` + AlphaTag *string `json:"alpha_tag"` + TGGroup *string `json:"tg_group"` + Frequency *int32 `json:"frequency"` + Metadata jsontypes.Metadata `json:"metadata"` + Tags []string `json:"tags"` + Alert *bool `json:"alert"` AlertRules rules.AlertRules `json:"alert_rules"` - Weight *float32 `json:"weight"` - Learned *bool `json:"learned"` - ID *int32 `json:"id"` - SystemID *int32 `json:"system_id"` - TGID *int32 `json:"tgid"` + Weight *float32 `json:"weight"` + Learned *bool `json:"learned"` + ID *int32 `json:"id"` + SystemID *int32 `json:"system_id"` + TGID *int32 `json:"tgid"` } func (q *Queries) UpdateTalkgroup(ctx context.Context, arg UpdateTalkgroupParams) (Talkgroup, error) { diff --git a/sql/postgres/queries/incidents.sql b/sql/postgres/queries/incidents.sql index f504919..214a123 100644 --- a/sql/postgres/queries/incidents.sql +++ b/sql/postgres/queries/incidents.sql @@ -141,7 +141,8 @@ FROM incidents_calls ic, LATERAL ( sc.transcript FROM swept_calls sc WHERE sc.id = ic.swept_call_id ) c -WHERE ic.incident_id = @id; +WHERE ic.incident_id = @id +ORDER BY ic.call_date ASC; -- name: GetIncident :one SELECT