Amateurfunk: Hytera CPS und automatischer Import (Codeplug)
Hallo zusammen,
seit kurzem bin ich auch im DMR-Netz QRV ;-) Machen wir hier auf unserer IT-Seite doch mal einen kleinen Exkurs in ein sehr spannendes Themengebiet: Amateurfunk!
Als Gerät nutze ich aktuell ein Hytera MD785G, wobei hier die Konfigurations-Software leider ein graus in meinen Augen darstellt.
Um dennoch nicht alle Kanäle manuell an dem Gerät zu konfigurieren, habe ich mir ein kleines Skript gebaut, welches einen Import aller Repeater vornimmt. Das Skript ist aktuell so aufgebaut, dass es:
– mind. 2 Zonen für jedes Bundesland erstellt (1x für Scan- und Roaming-Kanäle und die restlichen für alle Relais)
– Pro Bundesland jeweils Roaming-Listen anlegt und diese in dedizierte Kanäle speichert
– Pro Bundesland jeweils Scan-Listen anlegt und diese ebenfalls in dedizierte Kanäle speichert
– …
Um das ganze zu Realisieren, habe ich mir das Tool AutoIT zur Hilfe genommen. Weiterhin habe ich versucht alle Repeater (Analog und Brandmeister/DMR) automatisiert in eine CSV zu packen. (Sollten hier weitere Infos benötigt werden, kurzer Kommentar – dann melde ich mich). Schwierigkeit war hierbei für mich, eine automatisierte Zuordnung der Repeater mit der vorliegenden Stadt in die einzelnen Bundesländer hinzubekommen. Dies konnte ich aber letztendlich auch mit „sehr komplexen Mitteln“ komplett automatisiert lösen :-)
Hier das AutoIT Skript für euch:
#include <TrayConstants.au3>
#include <GUIConstants.au3>
#include <string.au3>
#include <GUIListView.au3>
TraySetState($TRAY_ICONSTATE_SHOW)
$hGUI = "Customer Programming Software"
$hTitle = "CPS Import Script"
$sleep_low = 700
$sleep_high = 1400
$filename = "C:\Scripte\channels.csv"
; Format der Datei, Beispiele:
; <DMRID>;<Stadt>;<Bundesland>;<QRG>;<Offset>;<CTCSS>
; 262330;DB0TVH;Hannover/Stadt;NIEDERSACHSEN;439.58750;-7.600;
; 262320;DB0ATS;Hannover/Messe;NIEDERSACHSEN;439.97500;-9.400;
; -1;DB0FUS;Hannover;NIEDERSACHSEN;439.200;-7.6;85.4
$do_channel_digital = False
$do_channel_analog = False
$do_list_roaming = False
$do_list_scan = False
$do_channel_roaming = False
$do_channel_scan = True
$do_zones = False
; -----------------------------------------------------------------------------------------------------------
;
; Data Source
;
$file = FileOpen($filename, 0)
If $file = -1 Then
MsgBox(0, "error", "File doesn't exist or can't be read")
Exit
EndIf
; -----------------------------------------------------------------------------------------------------------
;
; Digital Channel
;
If($do_channel_digital) Then
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:SysTreeView321]")
Send("!e")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN 2} {RIGHT}")
Send("{ENTER}")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button44]")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button44]")
; Import Digital Channel
FileSetPos($file, 0, 0)
While 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$input = StringSplit($line, ";")
If($input[1] <> "-1") Then
Call("AddChannelDigital", $input[2] & "-1 " & $input[3], 1, $input[5], $input[6])
Call("AddChannelDigital", $input[2] & "-2 " & $input[3], 2, $input[5], $input[6])
EndIf
WEnd
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button38]")
Call("SleepMe", false)
EndIf
;
; -----------------------------------------------------------------------------------------------------------
;
; Analog Channel
;
If($do_channel_analog) Then
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:SysTreeView321]")
Send("!e")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN}")
Send("{ENTER}")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button31]")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button31]")
; Import Analog Channel
FileSetPos($file, 0, 0)
While 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$input = StringSplit($line, ";")
If($input[1] == "-1") Then
Call("AddChannelAnalog", $input[2] & " " & $input[3], $input[5], $input[6], $input[7])
EndIf
WEnd
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button25]")
Call("SleepMe", false)
EndIf
;
; -----------------------------------------------------------------------------------------------------------
;
; Roaming Lists
;
If($do_list_roaming) Then
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:SysTreeView321]")
Send("!e")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN 7}")
Send("{ENTER}")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button15]")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button15]")
; Import Roam Lists
For $ts=1 to 2
FileSetPos($file, 0, 0)
$state=""
$counterlist=1
$counteritem=1
While 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$input = StringSplit($line, ";")
if($state <> $input[4]) Then
$state=$input[4]
$counterlist=1
$counteritem=1
Call("AddListRoaming", "R TS" & $ts & " " & $counterlist & " " & $state)
EndIf
If($counteritem > 31) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddListRoaming", "R TS" & $ts & " " & $counterlist & " " & $state)
EndIf
If($input[1] <> "-1") Then
Call("AddChannelListRoaming", StringLeft($input[2] & "-" & $ts & " " & $input[3], 16))
$counteritem = $counteritem + 1
Else
EndIf
WEnd
Next
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button9]")
Call("SleepMe", false)
EndIf
;
; -----------------------------------------------------------------------------------------------------------
;
; Scan Lists
;
If($do_list_scan) Then
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:SysTreeView321]")
Send("!e")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN 6}")
Send("{ENTER}")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button18]")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button18]")
; Import Scan Lists
$state=""
$counterlist=1
$counteritem=1
; Read in lines of text until the EOF is reached
FileSetPos($file, 0, 0)
While 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$input = StringSplit($line, ";")
if($state <> $input[4]) Then
$state=$input[4]
$counterlist=1
$counteritem=1
Call("AddListScan", "Scan " & $counterlist & " " & $state)
EndIf
If($counteritem > 31) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddListScan", "Scan " & $counterlist & " " & $state)
EndIf
If($input[1] <> "-1") Then
Call("AddChannelListScan", StringLeft($input[2] & "-1 " & $input[3], 16))
$counteritem = $counteritem + 1
If($counteritem > 31) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddListScan", "Scan " & $counterlist & " " & $state)
EndIf
Call("AddChannelListScan", StringLeft($input[2] & "-2 " & $input[3], 16))
Else
Call("AddChannelListScan", StringLeft($input[2] & " " & $input[3], 16))
EndIf
$counteritem = $counteritem + 1
WEnd
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button12]")
Call("SleepMe", false)
EndIf
;
; -----------------------------------------------------------------------------------------------------------
;
; Roaming Channel
;
If($do_channel_roaming) Then
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:SysTreeView321]")
Send("!e")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN 2} {RIGHT}")
Send("{ENTER}")
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button44]")
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button44]")
Call("SleepMe", false)
Call("SleepMe", false)
$state=""
$roamlist=0
$counterlist=1
$counteritem=1
; Read in lines of text until the EOF is reached
For $ts=1 to 2
FileSetPos($file, 0, 0)
While 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$input = StringSplit($line, ";")
if($state <> $input[4]) Then
$state=$input[4]
$counterlist=1
$counteritem=1
Call("AddChannelDigital", "R TS" & $ts & " " & $counterlist & " " & $state, $ts, "433.000", "-2.0", $roamlist)
$roamlist = $roamlist + 1
EndIf
If($counteritem > 31) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddChannelDigital", "R TS" & $ts & " " & $counterlist & " " & $state, $ts, "433.000", "-2.0", $roamlist)
$roamlist = $roamlist + 1
EndIf
If($input[1] <> "-1") Then
$counteritem = $counteritem + 1
Else
EndIf
WEnd
Next
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button38]")
Call("SleepMe", false)
EndIf
;
; -----------------------------------------------------------------------------------------------------------
;
; Scan Channel
;
If($do_channel_scan) Then
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:SysTreeView321]")
Send("!e")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN 2} {RIGHT}")
Send("{ENTER}")
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button44]")
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button44]")
$state=""
$scanlist=0
$counterlist=1
$counteritem=1
; Read in lines of text until the EOF is reached
FileSetPos($file, 0, 0)
While 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$input = StringSplit($line, ";")
if($state <> $input[4]) Then
$state=$input[4]
$counterlist=1
$counteritem=1
Call("AddChannelDigital", "Scan " & $counterlist & " " & $state, 1, "433.000", "-2.0", -1, (($counterlist-1)*14)+$scanlist)
$scanlist = $scanlist + 1
EndIf
If($counteritem > 31) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddChannelDigital", "Scan " & $counterlist & " " & $state, 1, "433.000", "-2.0", -1, (($counterlist-1)*14)+$scanlist)
EndIf
If($input[1] <> "-1") Then
$counteritem = $counteritem + 1
If($counteritem > 31) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddChannelDigital", "Scan " & $counterlist & " " & $state, 1, "433.000", "-2.0", -1, (($counterlist-1)*14)+$scanlist)
EndIf
Else
EndIf
$counteritem = $counteritem + 1
WEnd
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button38]")
Call("SleepMe", false)
Call("SleepMe", false)
EndIf
;
; -----------------------------------------------------------------------------------------------------------
;
; Zones
;
If($do_zones) Then
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:SysTreeView321]")
Send("!e")
Send("{DOWN 2} {RIGHT}")
Send("{DOWN}")
Send("{ENTER}")
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button13]")
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button13]")
$maxitems=90
$state=""
$counterlist=1
$counteritem=1
; Read in lines of text until the EOF is reached
FileSetPos($file, 0, 0)
While 1
Local $line = FileReadLine($file)
If @error = -1 Then ExitLoop
$input = StringSplit($line, ";")
if($state <> $input[4]) Then
$state=$input[4]
$counterlist=1
$counteritem=1
Call("AddZone", "Z" & $counterlist & " " & $state)
$counterlist=2
Call("AddZone", "Z" & $counterlist & " " & $state)
EndIf
If($counteritem > $maxitems) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddZone", "Z" & $counterlist & " " & $state)
EndIf
If($input[1] <> "-1") Then
Call("AddChannelZone", StringLeft($input[2] & "-1" & " " & $input[3], 16))
$counteritem = $counteritem + 1
If($counteritem > $maxitems) Then
$counteritem = 1
$counterlist = $counterlist + 1
Call("AddZone", "Z" & $counterlist & " " & $state)
EndIf
Call("AddChannelZone", StringLeft($input[2] & "-2" & " " & $input[3], 16))
$counteritem = $counteritem + 1
Else
Call("AddChannelZone", StringLeft($input[2] & " " & $input[3], 16))
$counteritem = $counteritem + 1
EndIf
If($counteritem == 2) Then
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:SysListView322]")
Call("SleepMe")
ControlFocus($hGUI, "", "[CLASSNN:SysListView322]")
Call("SleepMe")
Send("{HOME}")
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:SysListView322]", "left", 1, 70, 34)
Call("SleepMe")
ControlClick($hGUI, "", "[CLASSNN:Button3]")
Call("SleepMe")
EndIf
WEnd
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button7]")
Call("SleepMe", false)
Call("SleepMe", false)
EndIf
Func SleepMe($islow = True, $message = "")
If(Not WinActive($hGUI)) Then
TrayTip($hTitle, "Please select window " & $hGUI & " for further processing.", 3)
WinWaitActive($hGUI)
EndIf
If(Not $message == "") Then
TrayTip($hTitle, $message, 3)
EndIf
If($islow) Then
Sleep($sleep_low)
Else
Sleep($sleep_high)
EndIf
EndFunc
Func AddChannelDigital($name, $ts, $rx, $offset, $roamlist=-1, $scanlist=-1)
;Traytip("CPS", "Please select CPS Tool in Channel Mask...", 1)
Call("SleepMe")
ControlFocus($hGUI, "", "[CLASSNN:Button45]")
Call("SleepMe")
Send("{SPACE}")
; Click ADD New Channel
;Traytip("CPS", "New Channel", 1)
;ControlClick($hGUI , "", "[CLASSNN:Button45]")
;Call("SleepMe", False)
;If (StringLeft(ControlGetText($hGUI, "", "[CLASSNN:Edit1]"), 3) <> "CH D") Then
; Call("SleepMe", False)
; Call("SleepMe", False)
; ControlClick($hGUI , "", "[CLASSNN:Button45]")
; Call("SleepMe", False)
; Call("SleepMe", False)
;EndIf
; Channel Alias
;Traytip("CPS", "Alias", 1)
ControlClick($hGUI , "", "[CLASSNN:Edit1]")
ControlSetText($hGUI , "", "[CLASSNN:Edit1]", $name)
Call("SleepMe")
; Timeslot
ControlClick($hGUI , "", "[CLASSNN:ComboBox2]")
Call("SleepMe")
if($ts < 2) Then
; nothing, aleady selected
Else
Send("{DOWN}")
EndIf
Call("SleepMe")
Send("{ENTER}")
Call("SleepMe")
; RX Frequency
;Traytip("CPS", "RX Frequency", 1)
ControlClick($hGUI , "", "[CLASSNN:Edit3]")
Call("SleepMe")
Send("{BS 10}")
Call("SleepMe")
Send("{DEL 10}")
Call("SleepMe")
Send($rx)
Call("SleepMe", false)
Send("{ENTER}")
Call("SleepMe", false)
; RX Group List set to None
;ControlClick($hGUI , "", "[CLASSNN:ComboBox4]")
;Call("SleepMe")
;if($ts < 2) Then
; Send("{DOWN}")
; Call("SleepMe")
;Else
; Send("{DOWN}")
; Call("SleepMe")
; Send("{DOWN}")
; Call("SleepMe")
;EndIf
;Send("{ENTER}")
;Call("SleepMe", false)
; Offset
ControlClick($hGUI , "", "[CLASSNN:Edit4]")
Call("SleepMe", false)
Send("{BS 10}")
Call("SleepMe")
Send("{DEL 10}")
Send($offset)
Call("SleepMe", false)
Send("{ENTER}")
Call("SleepMe", false)
Send("{TAB} {ENTER}")
Call("SleepMe", false)
; Copy Offset
ControlClick($hGUI , "", "[CLASSNN:Button23]")
Call("SleepMe", false)
Call("SleepMe", false)
; TX Contact Name
Send("{TAB}")
Call("SleepMe")
Send("{TAB}")
Call("SleepMe")
Send("t")
if ($ts < 2) Then
for $i=1 to 5
Send("{DOWN}")
Call("SleepMe")
Next
Else
Send("{END}")
Call("SleepMe")
;For $i=1 to 8
; Send("{UP}")
; Call("SleepMe")
;Next
EndIf
Send("{ENTER}")
Call("SleepMe")
; GPS Revert Channel
Send("{TAB}")
Call("SleepMe")
Send("s")
Call("SleepMe", False)
Send("{TAB}")
; Enable Roaming / Multisite Access
ControlFocus($hGUI, "", "[CLASSNN:Button8]")
Call("SleepMe", false)
ControlClick($hGUI, "", "[CLASSNN:Button8]")
Call("SleepMe")
ControlClick($hGUI , "", "[CLASSNN:ComboBox14]")
; Emergency System to None
Call("SleepMe")
Send("N")
Send("{ENTER}")
Call("SleepMe")
; Power to High
ControlClick($hGUI , "", "[CLASSNN:ComboBox16]")
Call("SleepMe")
Send("h")
Send("{ENTER}")
Call("SleepMe")
Send("h")
Send("{ENTER}")
Call("SleepMe", false)
; TX Admit in Call to Always
;ControlClick("Customer Programming Software", "", "[CLASSNN:ComboBox18]")
;Sleep(600)
;Send("a")
;Send("{ENTER}")
;Sleep(600)
;Send("a")
;Send("{ENTER}")
;Sleep(600)
;$roaminglist = 0
;if($roaminglist > 0) Then
; Select Roaming List
; ControlClick("Customer Programming Software", "", "[CLASSNN:Edit8]")
; Sleep(600)
; Send("{TAB}")
; if ($ts < 2) Then
; Send("{END}")
; Sleep(600)
; Else
; Send("{DOWN}")
; Sleep(600)
; Send("{DOWN}")
; Sleep(600)
; Send("{DOWN}")
; Sleep(600)
; Send("{DOWN}")
; Sleep(600)
; Send("{DOWN}")
; Sleep(600)
; Send("{DOWN}")
; Sleep(600)
; Send("{DOWN}")
; Sleep(600)
; Send("{DOWN}")
; Sleep(600)
; EndIf
; Send("{ENTER}")
; Sleep(600)
; Start Auto Roam
; ControlClick("Customer Programming Software", "", "[CLASSNN:Button9]")
; Sleep(600)
;Endif
if($roamlist>-1) Then
; Select Roaming List
Call("SleepMe", false)
ControlClick($hGUI , "", "[CLASSNN:Edit8]")
Call("SleepMe", false)
Send("{TAB}")
Call("SleepMe", false)
Send("r")
Call("SleepMe", false)
if($roamlist>0) Then
For $i=1 to $roamlist
Send("{DOWN}")
Call("SleepMe", false)
Next
EndIf
Send("{TAB}")
; Start Auto Roam
ControlClick($hGUI , "", "[CLASSNN:Button9]")
Call("SleepMe", false)
EndIf
if($scanlist>-1) Then
; Select Scan List
Call("SleepMe", false)
ControlClick($hGUI , "", "[CLASSNN:Edit8]")
Call("SleepMe", false)
Send("{TAB}")
Call("SleepMe", false)
Send("s")
Call("SleepMe", false)
if($scanlist>0) Then
For $i=1 to $scanlist
Send("{DOWN}")
Call("SleepMe", false)
Next
EndIf
Send("{TAB}")
; Start Auto Scan
ControlClick($hGUI , "", "[CLASSNN:Button1]")
Call("SleepMe", false)
EndIf
EndFunc
Func AddChannelAnalog($name, $rx, $offset, $ctcss)
;Traytip("CPS", "Please select CPS Tool in Channel Mask...", 1)
Call("SleepMe")
; Click ADD New Channel
;Traytip("CPS", "New Channel", 1)
ControlFocus($hGUI , "", "[CLASSNN:Button32]")
Call("SleepMe")
Send("{SPACE}")
Call("SleepMe")
; Channel Alias
;Traytip("CPS", "Alias", 1)
ControlClick($hGUI , "", "[CLASSNN:Edit1]")
ControlSetText($hGUI , "", "[CLASSNN:Edit1]", $name)
Call("SleepMe")
; 2-Tone
ControlFocus($hGUI , "", "[CLASSNN:ComboBox4]")
ControlClick($hGUI , "", "[CLASSNN:ComboBox4]")
Call("SleepMe")
Send("{DOWN}")
Call("SleepMe")
Send("{ENTER}")
Call("SleepMe")
; 2-Tone
ControlClick($hGUI , "", "[CLASSNN:ComboBox5]")
ControlFocus($hGUI , "", "[CLASSNN:ComboBox5]")
Call("SleepMe")
Send("{UP}")
Call("SleepMe")
Send("{ENTER}")
Call("SleepMe")
; Disable Emergency
ControlClick($hGUI , "", "[CLASSNN:ComboBox21]")
Call("SleepMe")
Send("n")
Call("SleepMe")
Send("{ENTER}")
Call("SleepMe")
; High Power
ControlClick($hGUI , "", "[CLASSNN:ComboBox23]")
Call("SleepMe")
Send("h")
Call("SleepMe")
Send("{ENTER}")
Call("SleepMe")
; RX Frequency
;Traytip("CPS", "RX Frequency", 1)
ControlClick($hGUI , "", "[CLASSNN:Edit2]")
Call("SleepMe", false)
Send("{BS 10}")
Call("SleepMe")
Send("{DEL 10}")
Call("SleepMe")
Send($rx)
Call("SleepMe")
Send("{ENTER}")
Call("SleepMe", false)
; Offset
ControlClick($hGUI , "", "[CLASSNN:Edit5]")
Call("SleepMe")
Send("{BS 10}")
Call("SleepMe")
Send("{DEL 10}")
Send($offset)
Call("SleepMe", false)
Send("{ENTER}")
Call("SleepMe", false)
; Copy Offset
Send("{TAB}")
Call("SleepMe")
Send("{SPACE}")
Call("SleepMe")
ControlClick($hGUI , "", "[CLASSNN:Button15]")
Call("SleepMe", false)
; CTCSS
if($ctcss <> "") Then
ControlFocus($hGUI , "", "[CLASSNN:ComboBox10]")
ControlClick($hGUI , "", "[CLASSNN:ComboBox10]")
Call("SleepMe", false)
Send("{DOWN}")
Call("SleepMe")
Send("{ENTER}")
Call("SleepMe")
ControlFocus($hGUI , "", "[CLASSNN:ComboBox11]")
ControlClick($hGUI , "", "[CLASSNN:ComboBox11]")
Call("SleepMe")
Send("{BS 10}")
Call("SleepMe")
Send("{DEL 10}")
Call("SleepMe")
Send($ctcss)
Call("SleepMe", false)
Send("{ENTER}")
Call("SleepMe")
EndIf
EndFunc
Func selectit($listview, $item)
Call("SleepMe", false)
ControlFocus($hGUI, "", "[CLASSNN:"&$listview&"]")
Call("SleepMe", false)
ControlFocus($hGUI, "", "[CLASSNN:"&$listview&"]")
ControlClick($hGUI, "", "[CLASSNN:"&$listview&"]")
Call("SleepMe", false)
Send("{HOME}")
Call("SleepMe")
$oldSelect = ""
$count=1
while 1
$iSelect = ControlListView($hGUI, "", $listview, "GetSelected")
$sSelect = ControlListView($hGUI, "", $listview, "GetText", $iSelect)
if($sSelect = $item) Then
ExitLoop
EndIf
Send("{DOWN}")
$count=$count+1
if($sSelect = $oldSelect) Then
ExitLoop
EndIf
$oldSelect = $sSelect
WEnd
;Call("SleepMe")
$clicker=35
;$ctlpos=ControlGetPos($hGUI, "", $listview)
;$clicker=$ctlpos[1]+8
$oldSelect = ""
$count=$count-1
$hWnd = ControlGetHandle($hGUI,"",$listview)
while 1
_GUICtrlListView_ClickItem($hWnd, $count)
Sleep(300)
;ControlClick($hGUI, "", "[CLASSNN:"&$listview&"]", "left", 1, 60, $clicker)
;MouseClick("left", $ctlpos[0]+40, $clicker)
$clicker = $clicker + 18
$iSelect = ControlListView($hGUI, "", $listview, "GetSelected")
$sSelect = ControlListView($hGUI, "", $listview, "GetText", $iSelect)
if($sSelect = $item) Then
ExitLoop
EndIf
if($sSelect = $oldSelect) Then
ExitLoop
EndIf
$oldSelect = $sSelect
$count=$count+1
WEnd
EndFunc
Func AddChannelListRoaming($name)
;Traytip("CPS", "Please select CPS Tool in Channel Mask...", 1)
Call("SleepMe", false)
; Click ADD New Channel
;Traytip("CPS", "New Channel", 1)
Call("selectit", "SysListView321", $name)
Call("SleepMe", false)
ControlFocus($hGUI , "", "[CLASSNN:Button1]")
Call("SleepMe", false)
Send("{SPACE}")
Call("SleepMe", false)
EndFunc
Func AddListRoaming($name)
Call("SleepMe")
; Click ADD New Channel
ControlFocus($hGUI, "", "[CLASSNN:Button16]")
Call("SleepMe")
Send("{SPACE}")
Call("SleepMe", false)
; List Name
ControlFocus($hGUI, "", "[CLASSNN:Edit1]")
ControlClick($hGUI, "", "[CLASSNN:Edit1]")
ControlSetText($hGUI, "", "[CLASSNN:Edit1]", $name)
Call("SleepMe")
EndFunc
Func AddChannelListScan($name)
;Traytip("CPS", "Please select CPS Tool in Channel Mask...", 1)
Call("SleepMe", false)
; Click ADD New Channel
;Traytip("CPS", "New Channel", 1)
Call("selectit", "SysListView321", $name)
Call("SleepMe", false)
ControlFocus($hGUI , "", "[CLASSNN:Button1]")
Send("{SPACE}")
Call("SleepMe", false)
EndFunc
Func AddListScan($name)
Call("SleepMe")
; Click ADD New Channel
ControlFocus($hGUI , "", "[CLASSNN:Button19]")
ControlClick($hGUI , "", "[CLASSNN:Button19]")
Call("SleepMe")
; Last Active Channel
ControlFocus($hGUI , "", "[CLASSNN:ComboBox4]")
ControlClick($hGUI , "", "[CLASSNN:ComboBox4]")
Call("SleepMe", false)
Send("{DOWN}")
Call("SleepMe", false)
Send("{ENTER}")
; List Name
ControlFocus($hGUI , "", "[CLASSNN:Edit1]")
ControlClick($hGUI , "", "[CLASSNN:Edit1]")
ControlSetText($hGUI , "", "[CLASSNN:Edit1]", $name)
Call("SleepMe")
EndFunc
Func AddChannelZone($name)
;Traytip("CPS", "Please select CPS Tool in Channel Mask...", 1)
Call("SleepMe", false)
; Click ADD New Channel
;Traytip("CPS", "New Channel", 1)
Call("selectit", "SysListView321", $name)
Call("SleepMe", false)
ControlFocus($hGUI, "", "[CLASSNN:Button2]")
Call("SleepMe")
Send("{SPACE}")
Call("SleepMe", false)
EndFunc
Func AddZone($name)
Call("SleepMe", false)
; Click ADD New Channel
ControlFocus($hGUI, "", "[CLASSNN:Button14]")
Call("SleepMe", false)
Send("{SPACE}")
Call("SleepMe", false)
; List Name
ControlFocus($hGUI, "", "[CLASSNN:Edit1]")
ControlClick($hGUI, "", "[CLASSNN:Edit1]")
ControlSetText($hGUI, "", "[CLASSNN:Edit1]", $name)
Call("SleepMe", false)
EndFunc
Mithilfe des Skriptes ist es mir nun möglich, alle Relais in Deutschland ohne manuellen Aufwand in die Hytera CPS zu importieren. Lediglich muss gewartet werden, bis das Skript alle Einträge in der CSV abgearbeitet hat.
Generell – ist nur eine persönliche Empfindung – finde ich es charmanter, die Relais mit Rufzeichen auf dem Gerät zu haben; als doch wieder das Handy aus der Tasche zu nehmen und eine Recherche auf die mir in der Nähe liegenden Relais zu fahren :-)
Viel Spaß damit!
73,
Simon




Sehr schönes Script! Funktioniert das auch mit CPS V9 ? Hast du auch etwas aktuelles?
Wo gibt es eine channels.csv die passend zu dem script ist?
Hallo, welche Endung hat dieses Script?