Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
2
2401-0022-lte-fire-alarm
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
이병복
2401-0022-lte-fire-alarm
Commits
49b573dd
Commit
49b573dd
authored
Jul 11, 2024
by
이병복
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
수신기 통신 완료
parent
bbb2f516
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
87 additions
and
38 deletions
+87
-38
config.yaml
cmd/app-lte-alarm/config.yaml
+1
-1
main.go
cmd/app-lte-alarm/main.go
+86
-37
No files found.
cmd/app-lte-alarm/config.yaml
View file @
49b573dd
server_address
:
1
27.0.0.1:12345
server_address
:
1
18.46.137.10:20000
max_retries
:
3
reconnect_interval
:
5
read_timeout
:
60
...
...
cmd/app-lte-alarm/main.go
View file @
49b573dd
...
...
@@ -2,9 +2,9 @@ package main
import
(
"bytes"
"encoding/binary"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"net"
"net/http"
...
...
@@ -29,7 +29,7 @@ type Config struct {
type
LogEntry
struct
{
Size
byte
Type
uint8
DateTime
time
.
Time
DateTime
string
On
uint8
Address
[
7
]
byte
Area
[
24
]
byte
...
...
@@ -38,12 +38,12 @@ type LogEntry struct {
// JSONLogEntry 구조체 정의 (이전과 동일)
type
JSONLogEntry
struct
{
Type
uint8
`json:"type"`
DateTime
time
.
Time
`json:"dateTime"`
On
uint8
`json:"on"`
Address
string
`json:"address"`
Area
string
`json:"area"`
Device
string
`json:"device"`
Type
uint8
`json:"type"`
DateTime
string
`json:"dateTime"`
On
uint8
`json:"on"`
Address
string
`json:"address"`
Area
string
`json:"area"`
Device
string
`json:"device"`
}
var
config
Config
...
...
@@ -63,6 +63,8 @@ func main() {
os
.
Exit
(
1
)
}
fmt
.
Print
(
config
)
for
{
if
err
:=
runClient
();
err
!=
nil
{
fmt
.
Printf
(
"Error: %v
\n
"
,
err
)
...
...
@@ -99,46 +101,92 @@ func runClient() error {
}
func
handleConnection
(
conn
net
.
Conn
)
error
{
conn
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
time
.
Duration
(
config
.
ReadTimeout
)
*
time
.
Second
))
for
{
// 읽기 타임아웃 설정
conn
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
time
.
Duration
(
config
.
ReadTimeout
)
*
time
.
Second
))
// 첫 번째 바이트 (데이터 길이) 읽기
sizeBuf
:=
make
([]
byte
,
1
)
_
,
err
:=
conn
.
Read
(
sizeBuf
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"error reading size: %v"
,
err
)
}
buf
:=
make
([]
byte
,
64
)
_
,
err
:=
conn
.
Read
(
buf
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"read error: %v"
,
err
)
}
size
:=
int
(
sizeBuf
[
0
])
logEntry
,
err
:=
Deserialize
(
buf
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"deserialization error: %v"
,
err
)
}
// size가 0인 경우 처리
if
size
==
0
{
// fmt.Println("Received packet with size 0, skipping...")
continue
}
jsonData
,
err
:=
convertToJSON
(
logEntry
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"JSON conversion error: %v"
,
err
)
}
fmt
.
Printf
(
"Received size: %d
\n
"
,
size
)
// 나머지 데이터 읽기
buf
:=
make
([]
byte
,
size
-
1
)
_
,
err
=
io
.
ReadFull
(
conn
,
buf
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"error reading data: %v"
,
err
)
}
if
err
:=
sendToRESTAPI
(
jsonData
);
err
!=
nil
{
return
fmt
.
Errorf
(
"REST API error: %v"
,
err
)
}
fmt
.
Printf
(
"Received data: %v
\n
"
,
buf
)
fmt
.
Printf
(
"Received size: %v
\n
"
,
len
(
buf
))
// 전체 데이터 (크기 바이트 포함)
fullData
:=
append
(
sizeBuf
,
buf
...
)
return
nil
logEntry
,
err
:=
Deserialize
(
fullData
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"deserialization error: %v"
,
err
)
}
jsonData
,
err
:=
convertToJSON
(
logEntry
)
if
err
!=
nil
{
return
fmt
.
Errorf
(
"JSON conversion error: %v"
,
err
)
}
fmt
.
Printf
(
"JSON data: %s
\n
"
,
jsonData
)
if
err
:=
sendToRESTAPI
(
jsonData
);
err
!=
nil
{
return
fmt
.
Errorf
(
"REST API error: %v"
,
err
)
}
}
}
func
Deserialize
(
data
[]
byte
)
(
*
LogEntry
,
error
)
{
if
len
(
data
)
!=
64
{
return
nil
,
fmt
.
Errorf
(
"invalid data length: expected 64, got %d"
,
len
(
data
))
}
// if len(data) != 64 {
// return nil, fmt.Errorf("invalid data length: expected 64, got %d", len(data))
// }
fmt
.
Printf
(
"Data: %v
\n
"
,
data
)
le
:=
&
LogEntry
{}
le
.
Size
=
data
[
0
]
le
.
Type
=
data
[
1
]
year
:=
binary
.
LittleEndian
.
Uint16
(
data
[
2
:
4
])
le
.
DateTime
=
time
.
Date
(
int
(
year
),
time
.
Month
(
data
[
4
]),
int
(
data
[
5
]),
int
(
data
[
6
]),
int
(
data
[
7
]),
int
(
data
[
8
]),
0
,
time
.
UTC
)
le
.
On
=
data
[
9
]
copy
(
le
.
Address
[
:
],
data
[
10
:
17
])
copy
(
le
.
Area
[
:
],
data
[
17
:
41
])
copy
(
le
.
Device
[
:
],
data
[
41
:
])
if
le
.
Size
==
0
{
return
nil
,
fmt
.
Errorf
(
"invalid data length: expected , got %d"
,
le
.
Size
)
}
le
.
Type
=
data
[
1
]
le
.
DateTime
=
fmt
.
Sprintf
(
"%02d-%02d-%02d %02d:%02d:%02d"
,
(
int
(
data
[
2
])
+
2000
),
data
[
3
],
data
[
4
],
data
[
5
],
data
[
6
],
data
[
7
])
le
.
On
=
data
[
8
]
copy
(
le
.
Address
[
:
],
data
[
9
:
16
])
copy
(
le
.
Area
[
:
],
data
[
16
:
40
])
copy
(
le
.
Device
[
:
],
data
[
40
:
])
// 로그 출력
fmt
.
Printf
(
" Deserialized Packet:
\n
"
)
fmt
.
Printf
(
" Log_size: %d
\n
"
,
le
.
Size
)
fmt
.
Printf
(
" Log_type: %d
\n
"
,
le
.
Type
)
fmt
.
Printf
(
" Log_datetime: %s
\n
"
,
le
.
DateTime
)
fmt
.
Printf
(
" Log_On: %d
\n
"
,
le
.
On
)
fmt
.
Printf
(
" Log_Address: %d%d-%d-%d%d%d-%d
\n
"
,
le
.
Address
[
0
],
le
.
Address
[
1
],
le
.
Address
[
2
],
le
.
Address
[
3
],
le
.
Address
[
4
],
le
.
Address
[
5
],
le
.
Address
[
6
])
areaStr
,
_
:=
decodeEUCKR
(
bytes
.
TrimRight
(
le
.
Area
[
:
],
"
\x00
"
))
fmt
.
Printf
(
" Log_Area: %s
\n
"
,
areaStr
)
//50 195 254 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
deviceStr
,
_
:=
decodeEUCKR
(
bytes
.
TrimRight
(
le
.
Device
[
:
],
"
\x00
"
))
fmt
.
Printf
(
" Log_Device: %s
\n
"
,
deviceStr
)
//191 161 186 241 0 132 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
return
le
,
nil
}
...
...
@@ -148,6 +196,7 @@ func convertToJSON(le *LogEntry) ([]byte, error) {
return
nil
,
err
}
fmt
.
Printf
(
"%d
\n
"
,
len
(
le
.
Device
[
:
]))
device
,
err
:=
decodeEUCKR
(
bytes
.
TrimRight
(
le
.
Device
[
:
],
"
\x00
"
))
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -157,7 +206,7 @@ func convertToJSON(le *LogEntry) ([]byte, error) {
Type
:
le
.
Type
,
DateTime
:
le
.
DateTime
,
On
:
le
.
On
,
Address
:
string
(
bytes
.
TrimRight
(
le
.
Address
[
:
],
"
\x00
"
)
),
Address
:
fmt
.
Sprintf
(
"%d%d-%d-%d%d%d-%d"
,
le
.
Address
[
0
],
le
.
Address
[
1
],
le
.
Address
[
2
],
le
.
Address
[
3
],
le
.
Address
[
4
],
le
.
Address
[
5
],
le
.
Address
[
6
]
),
Area
:
area
,
Device
:
device
,
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment