Skip to content

Commit df55503

Browse files
committed
全体の情報を取得することまではできた
1 parent 7533073 commit df55503

File tree

1 file changed

+114
-2
lines changed

1 file changed

+114
-2
lines changed

smartagri.go

+114-2
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,41 @@ package main
22

33
import (
44
"context"
5+
"encoding/json"
56
"errors"
7+
"fmt"
8+
"io/ioutil"
69
"log"
10+
"net/http"
711
"os"
12+
"strconv"
13+
"strings"
814

915
"github.com/aws/aws-lambda-go/lambda"
1016
alexa "github.com/ericdaugherty/alexa-skills-kit-golang"
1117
"github.com/joho/godotenv"
1218
)
1319

1420
var err = godotenv.Load()
21+
var URL = os.Getenv("APIURL")
1522
var AppID = os.Getenv("APPID")
1623

1724
var ALX = &alexa.Alexa{ApplicationID: AppID, RequestHandler: &SmartAgri{}, IgnoreApplicationID: true, IgnoreTimestamp: true}
1825

1926
type SmartAgri struct{}
2027

28+
type AgriData struct {
29+
No string `json:"no"`
30+
Date string `json:"date"`
31+
Time string `json:"time"`
32+
Temperature string `json:"temperature"`
33+
Humidity string `json:"humidity"`
34+
SoilHumidity string `json:"soil_humidity"`
35+
Co2Concentration string `json:"co2_concentration"`
36+
Wavelength string `json:"wavelength"`
37+
Illuminance string `json:"illuminance"`
38+
}
39+
2140
func (s *SmartAgri) OnSessionStarted(ctx context.Context, request *alexa.Request, session *alexa.Session, ctxPtr *alexa.Context, response *alexa.Response) error {
2241

2342
log.Printf("OnSessionStarted requestId=%s, sessionId=%s", request.RequestID, session.SessionID)
@@ -32,7 +51,9 @@ func Handle(ctx context.Context, requestEnv *alexa.RequestEnvelope) (interface{}
3251

3352
// OnLaunch called with a reqeust is received of type LaunchRequest
3453
func (s *SmartAgri) OnLaunch(ctx context.Context, request *alexa.Request, session *alexa.Session, ctxPtr *alexa.Context, response *alexa.Response) error {
35-
speechText := "こんにちは、これはローンチのテストです。"
54+
speechText := "これはスマートアグリの情報を取得できます。"
55+
speechText = speechText + "取得できる情報は 温度、湿度、二酸化炭素濃度、水分量に照度です。"
56+
speechText = speechText + "一から三号機までの情報にそれぞれアクセスできます。"
3657

3758
log.Printf("OnLaunch requestId=%s, sessionId=%s", request.RequestID, session.SessionID)
3859

@@ -53,7 +74,13 @@ func (s *SmartAgri) OnIntent(ctx context.Context, request *alexa.Request, sessio
5374
switch request.Intent.Name {
5475
case "getParamIntent":
5576
log.Println("getParamIntent triggered")
56-
speechText := "ハローワールド、これはインテントのテストです。"
77+
speechText, err := Getsmartagriinfo(request.Intent.Slots)
78+
if err != nil {
79+
fmt.Println(err)
80+
speechText = "すみません、情報を取得できませんでした。"
81+
}
82+
83+
// speechText := "コレが聞こえているということはAPIとかがおかしいよ"
5784

5885
// response.SetSimpleCard(cardTitle, speechText)
5986
response.SetOutputText(speechText)
@@ -81,6 +108,91 @@ func (s *SmartAgri) OnSessionEnded(ctx context.Context, request *alexa.Request,
81108
return nil
82109
}
83110

111+
func Getsmartagriinfo(slot map[string]alexa.IntentSlot) (string, error) {
112+
var speech string
113+
114+
// 取得する機器が指定されなくてはいけないので確認する
115+
if slot["machineNO"].Value == "" {
116+
return "取得したい機器のナンバーを一から三号機で指定してください", nil
117+
}
118+
119+
n := slot["machineNO"].Value
120+
121+
farmInfoMachineNO, err := GetFarmInfoMachineNO(n)
122+
if err != nil {
123+
return "", err
124+
}
125+
126+
if slot["parameter"].Value == "" {
127+
soilHumid, _ := strconv.ParseFloat(farmInfoMachineNO.SoilHumidity, 32)
128+
soilHumid = (soilHumid / 1024) * 100
129+
speech = n + "からの情報は、" +
130+
"温度は" + farmInfoMachineNO.Temperature + "度、" +
131+
"湿度は" + farmInfoMachineNO.Humidity + "パーセント、" +
132+
"水分量は" + strconv.FormatFloat(soilHumid, 'f', 2, 64) + "パーセント、" +
133+
"二酸化炭素濃度は" + farmInfoMachineNO.Co2Concentration + "ppm、" +
134+
"照度は" + farmInfoMachineNO.Illuminance + "ルクスです。" +
135+
"この情報は" + farmInfoMachineNO.Time + "に取得された情報です。"
136+
137+
return speech, nil
138+
}
139+
140+
return speech, nil
141+
}
142+
143+
func GetFarmInfoMachineNO(machine string) (AgriData, error) {
144+
var machineNO string
145+
146+
switch machine {
147+
case "一号機":
148+
machineNO = "1"
149+
case "二号機":
150+
machineNO = "2"
151+
case "三号機":
152+
machineNO = "3"
153+
}
154+
155+
farmstruct, err := getFarmInfoFromAPI(machineNO)
156+
157+
return farmstruct, err
158+
}
159+
160+
// APIを叩いて情報を取得する
161+
func getFarmInfoFromAPI(machineNO string) (AgriData, error) {
162+
var resdata []AgriData
163+
var tmpdata AgriData
164+
165+
res, err := http.Get(URL)
166+
if err != nil {
167+
log.Println("API呼び出せてません!!!!")
168+
return tmpdata, err
169+
}
170+
171+
defer res.Body.Close()
172+
173+
body, err := ioutil.ReadAll(res.Body)
174+
if err != nil {
175+
log.Println(err)
176+
}
177+
178+
// 返ってきたjsonじゃないjsonを}でsplitする
179+
bodystring := strings.Split(string(body), "}")
180+
181+
// } で splitしたので消えているから } をくっつけてjson unmarshall
182+
for _, jsondata := range bodystring {
183+
jsondata = jsondata + "}"
184+
json.Unmarshal([]byte(jsondata), &tmpdata)
185+
186+
// 機械Noにあった番号でstructを追加
187+
if tmpdata.No == machineNO {
188+
resdata = append(resdata, tmpdata)
189+
}
190+
191+
}
192+
log.Println(resdata[len(resdata)-1])
193+
return resdata[len(resdata)-1], nil
194+
}
195+
84196
func main() {
85197
lambda.Start(Handle)
86198
}

0 commit comments

Comments
 (0)