Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
eue
Commits
67903c3b
Commit
67903c3b
authored
Jul 02, 2021
by
KangMin An
Browse files
Update : 데이터 저장 체계 변경 및, 데이터 꼴 일부 수정.
parent
da8315fd
Changes
2
Show whitespace changes
Inline
Side-by-side
server/Data명세서.md
View file @
67903c3b
...
@@ -9,12 +9,14 @@
...
@@ -9,12 +9,14 @@
∟ Local Code (SGG/시군구)
∟ Local Code (SGG/시군구)
∟ Local Code (EMD/읍면동)
∟ Local Code (EMD/읍면동)
∟ Outside
∟ Outside
∟ weather.csv
∟ YYYY (연)
∟ YYYY (연)
∟ YYYYMM (연/월)
∟ YYYYMM (연/월)
∟ YYYYMMDD (연/월/일)
∟ YYYYMMDD (연/월/일)
∟ weather.csv
∟ weather.csv
∟ Users
∟ Users
∟ ID (사용자 개인 ID)
∟ ID (사용자 개인 ID)
∟ weather.csv
∟ YYYY (연)
∟ YYYY (연)
∟ YYYYMM (연/월)
∟ YYYYMM (연/월)
∟ YYYYMMDD (연/월/일)
∟ YYYYMMDD (연/월/일)
...
@@ -24,9 +26,17 @@
...
@@ -24,9 +26,17 @@
데이터가 저장되는 경로의 구조입니다.
데이터가 저장되는 경로의 구조입니다.
-
1차 : 지역별 대분류
-
통합 데이터
-
2차 : 사용자와 외부 정보 분류
-
3차 : 연 / 월 / 일 분류
1.
지역별 분류
2.
외부 / 내부 구분
3.
내부의 경우 사용자 아이디별 구분
-
날짜별 분류 데이터
1.
지역별 대분류
2.
사용자와 외부 정보 분류
3.
연 / 월 / 일 분류
<br><br>
<br><br>
...
@@ -38,9 +48,9 @@
...
@@ -38,9 +48,9 @@
외부 데이터는 다음과 같은 형식으로 저장됩니다.
외부 데이터는 다음과 같은 형식으로 저장됩니다.
|
Month | Date | Hour | Minute
| Temperature | Humidity | Press | Wind Speed |
|
Date
| Temperature | Humidity | Press | Wind Speed |
| :---
: | :--: | :--: | :
----: | :---------: | :------: | :-------: |
:
--------
:
|
| :---
------------------
----: | :---------: | :------: | :-------: |
--
-------- |
|
월 | 일 | 시 |
분
| 온도(℃) | 습도(%) | 기압(hPa) | 풍속(m/s) |
|
YYYYMMDDHHmm ( 연월일시
분
)
| 온도(℃) | 습도(%) | 기압(hPa) | 풍속(m/s) |
<br><br>
<br><br>
...
@@ -48,9 +58,9 @@
...
@@ -48,9 +58,9 @@
사용자가 설정한 장소의 데이터는 다음과 같은 형식으로 저장됩니다.
사용자가 설정한 장소의 데이터는 다음과 같은 형식으로 저장됩니다.
|
Month | Date | Hour | Minute
| Temperature | Humidity | Lights |
|
Date
| Temperature | Humidity | Lights |
| :---
: | :--: | :--: | :
----: | :---------: | :------: | :----: |
| :---
------------------
----: | :---------: | :------: | :----: |
|
월 | 일 | 시 |
분
| 온도(℃) | 습도(%) | 광도 |
|
YYYYMMDDHHmm ( 연월일시
분
)
| 온도(℃) | 습도(%) | 광도 |
<br><br>
<br><br>
...
...
server/src/controllers/dataController.js
View file @
67903c3b
...
@@ -31,22 +31,33 @@ const locCodeSep = (code = "") => {
...
@@ -31,22 +31,33 @@ const locCodeSep = (code = "") => {
};
};
// 데이터가 들어온 시간 데이터 생성
// 데이터가 들어온 시간 데이터 생성
const
getTimeInfo
=
()
=>
{
const
getTimeInfo
=
(
date
=
null
)
=>
{
const
cur
=
new
Date
();
let
time
;
if
(
date
==
null
)
{
const
year
=
cur
.
getFullYear
();
const
now
=
new
Date
();
const
month
=
cur
.
getMonth
()
+
1
;
const
date
=
cur
.
getDate
();
const
year
=
now
.
getFullYear
();
const
hour
=
cur
.
getHours
();
const
month
=
now
.
getMonth
()
+
1
;
const
minute
=
cur
.
getMinutes
();
const
date
=
now
.
getDate
();
const
hour
=
now
.
getHours
();
const
time
=
{
const
minute
=
now
.
getMinutes
();
time
=
{
year
:
year
,
year
:
year
,
month
:
month
<
10
?
`0
${
month
}
`
:
month
,
month
:
month
<
10
?
`0
${
month
}
`
:
month
,
date
:
date
<
10
?
`0
${
date
}
`
:
date
,
date
:
date
<
10
?
`0
${
date
}
`
:
date
,
hour
:
hour
<
10
?
`0
${
hour
}
`
:
hour
,
hour
:
hour
<
10
?
`0
${
hour
}
`
:
hour
,
minute
:
minute
<
10
?
`0
${
minute
}
`
:
minute
,
minute
:
minute
<
10
?
`0
${
minute
}
`
:
hour
,
};
}
else
{
time
=
{
year
:
date
.
substring
(
0
,
4
),
month
:
date
.
substring
(
4
,
6
),
date
:
date
.
substring
(
6
,
8
),
hour
:
date
.
substring
(
8
,
10
),
minute
:
date
.
substring
(
10
),
};
};
}
return
time
;
return
time
;
};
};
...
@@ -114,22 +125,18 @@ const storeData = (type, time, loc, dir, data) => {
...
@@ -114,22 +125,18 @@ const storeData = (type, time, loc, dir, data) => {
if
(
err
)
console
.
log
(
err
);
if
(
err
)
console
.
log
(
err
);
});
});
// 디렉토리를 새로 생성하는 경우 header 추가.
// 디렉토리를 새로 생성하는 경우 header
추가 및 데이터
추가.
const
header
=
type
==
OUT
?
OUT_DATA_HEADER
:
IN_DATA_HEADER
;
const
header
=
type
==
OUT
?
OUT_DATA_HEADER
:
IN_DATA_HEADER
;
fs
.
appendFile
(
dir
+
`/
${
fileName
}
`
,
header
,
(
err
)
=>
{
fs
.
appendFile
(
dir
+
`/
${
fileName
}
`
,
header
+
data
,
(
err
)
=>
{
if
(
err
)
console
.
log
(
err
);
else
console
.
log
(
"
Create directory and record header.
"
);
});
// 헤더 추가 후 데이터 추가
fs
.
appendFile
(
dir
+
`/
${
fileName
}
`
,
data
,
(
err
)
=>
{
if
(
err
)
console
.
log
(
err
);
if
(
err
)
console
.
log
(
err
);
else
else
{
console
.
log
(
"
Create directory and record header.
"
);
console
.
log
(
console
.
log
(
`
${
time
.
year
}
/
${
time
.
month
}
/
${
time
.
date
}
${
time
.
hour
}
:
${
`
${
time
.
year
}
/
${
time
.
month
}
/
${
time
.
date
}
${
time
.
hour
}
:
${
time
.
minute
time
.
minute
}
-
${
loc
.
EMD
}
${
type
===
OUT
?
OUTSIDE
:
USERS
}
data append.`
}
-
${
loc
.
EMD
}
${
type
===
OUT
?
OUTSIDE
:
USERS
}
data append.`
);
);
}
});
});
}
}
// 그 외의 에러는 출력
// 그 외의 에러는 출력
...
@@ -151,7 +158,7 @@ const storeData = (type, time, loc, dir, data) => {
...
@@ -151,7 +158,7 @@ const storeData = (type, time, loc, dir, data) => {
};
};
// 외부 수집기로 부터 들어온 정보 처리
// 외부 수집기로 부터 들어온 정보 처리
const
handleOutData
=
async
(
locCode
,
lat
,
lng
)
=>
{
const
handleOutData
=
async
(
locCode
,
date
,
lat
,
lng
)
=>
{
// OpenWeatherAPI로 부터 지역의 날씨 정보획득을 위해 지역의 경도와 위도, API Key, 단위 기준 metric 전달
// OpenWeatherAPI로 부터 지역의 날씨 정보획득을 위해 지역의 경도와 위도, API Key, 단위 기준 metric 전달
const
response
=
await
fetch
(
const
response
=
await
fetch
(
`https://api.openweathermap.org/data/2.5/weather?lat=
${
lat
}
&lon=
${
lng
}
&appid=
${
process
.
env
.
OPENWEATHERMAP_API_KEY
}
&units=metric`
`https://api.openweathermap.org/data/2.5/weather?lat=
${
lat
}
&lon=
${
lng
}
&appid=
${
process
.
env
.
OPENWEATHERMAP_API_KEY
}
&units=metric`
...
@@ -164,26 +171,26 @@ const handleOutData = async (locCode, lat, lng) => {
...
@@ -164,26 +171,26 @@ const handleOutData = async (locCode, lat, lng) => {
const
wind_speed
=
json
[
"
wind
"
][
"
speed
"
];
const
wind_speed
=
json
[
"
wind
"
][
"
speed
"
];
const
loc
=
locCodeSep
(
locCode
);
const
loc
=
locCodeSep
(
locCode
);
const
time
=
getTimeInfo
();
const
time
=
getTimeInfo
(
date
);
const
dirs
=
await
getDataDIR
(
loc
,
time
,
OUT
,
OUTSIDE
);
const
dirs
=
await
getDataDIR
(
loc
,
time
,
OUT
,
OUTSIDE
);
// 데이터 형식 - [ 연 월 일 시 분 | 온도 | 습도 | 기압 | 풍속 ]
// 데이터 형식 - [ 연 월 일 시 분 | 온도 | 습도 | 기압 | 풍속 ]
const
data
=
`
${
time
.
year
}${
time
.
month
}${
time
.
date
}${
time
.
hour
}${
time
.
minu
te
}
,
${
temp
}
,
${
humi
}
,
${
press
}
,
${
wind_speed
}
\n`
;
const
data
=
`
${
da
te
}
,
${
temp
}
,
${
humi
}
,
${
press
}
,
${
wind_speed
}
\n`
;
storeData
(
OUT
,
time
,
loc
,
dirs
.
base
,
data
);
storeData
(
OUT
,
time
,
loc
,
dirs
.
base
,
data
);
storeData
(
OUT
,
time
,
loc
,
dirs
.
base
+
dirs
.
time
,
data
);
storeData
(
OUT
,
time
,
loc
,
dirs
.
base
+
dirs
.
time
,
data
);
};
};
// 내부 수집기로 부터 들어온 정보 처리
// 내부 수집기로 부터 들어온 정보 처리
const
handleInData
=
async
(
id
,
locCode
,
temp
,
humi
,
lights
)
=>
{
const
handleInData
=
async
(
id
,
locCode
,
date
,
temp
,
humi
,
lights
)
=>
{
const
loc
=
locCodeSep
(
locCode
);
const
loc
=
locCodeSep
(
locCode
);
const
time
=
getTimeInfo
();
const
time
=
getTimeInfo
(
date
);
const
dirs
=
await
getDataDIR
(
loc
,
time
,
IN
,
id
);
const
dirs
=
await
getDataDIR
(
loc
,
time
,
IN
,
id
);
// 데이터 형식 - [ 연 월 일 시 분 | 온도 | 습도 | 광도 ]
// 데이터 형식 - [ 연 월 일 시 분 | 온도 | 습도 | 광도 ]
const
data
=
`
${
time
.
year
}${
time
.
month
}${
time
.
date
}${
time
.
hour
}${
time
.
minu
te
}
,
${
temp
}
,
${
humi
}
,
${
lights
}
\n`
;
const
data
=
`
${
da
te
}
,
${
temp
}
,
${
humi
}
,
${
lights
}
\n`
;
storeData
(
IN
,
time
,
loc
,
dirs
.
base
,
data
);
storeData
(
IN
,
time
,
loc
,
dirs
.
base
,
data
);
storeData
(
IN
,
time
,
loc
,
dirs
.
base
+
dirs
.
time
,
data
);
storeData
(
IN
,
time
,
loc
,
dirs
.
base
+
dirs
.
time
,
data
);
...
@@ -195,17 +202,19 @@ export const getDataInput = (req, res) => {
...
@@ -195,17 +202,19 @@ export const getDataInput = (req, res) => {
if
(
req
.
query
.
type
===
OUT
)
{
if
(
req
.
query
.
type
===
OUT
)
{
// 외부 데이터 수집기
// 외부 데이터 수집기
const
{
const
{
query
:
{
locCode
,
lat
,
lng
},
query
:
{
locCode
,
date
,
lat
,
lng
},
}
=
req
;
}
=
req
;
handleOutData
(
locCode
,
lat
,
lng
);
console
.
log
(
locCode
,
date
,
lat
,
lng
);
// handleOutData(locCode, date, lat, lng);
}
else
{
}
else
{
// 내부 데이터 수집기 동작
// 내부 데이터 수집기 동작
const
{
const
{
query
:
{
id
,
locCode
,
temp
,
humi
,
lights
},
query
:
{
id
,
locCode
,
date
,
temp
,
humi
,
lights
},
}
=
req
;
}
=
req
;
handleInData
(
id
,
locCode
,
temp
,
humi
,
lights
);
console
.
log
(
id
,
locCode
,
date
,
temp
,
humi
,
lights
);
// handleInData(id, locCode, date, temp, humi, lights);
}
}
res
.
status
(
statusCode
.
ok
).
send
(
serverMSG
.
server_ok
);
res
.
status
(
statusCode
.
ok
).
send
(
serverMSG
.
server_ok
);
...
...
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