使用url包更新ThingSpeak上的频道

时间:2013-12-02 00:55:24

标签: go http-post raspberry-pi

我在Raspberry Pi上使用以下部分代码,以便不断上传采样[温度和温度湿度]值在ThingSpeak [https://www.thingspeak.com/]的频道上。问题是只有第一个值上传而其余值被忽略。我究竟做错了什么? values.Set创建一个以前未创建的密钥,为其分配第一个值并替换每个下一个值而没有任何问题。他们为什么不上传? http.PostForm有什么问题吗?

//imports

type Data struct {
    Temperature int
    Humidity    int
}

//....

var data Data

func httpPost(values url.Values) {
    values.Set("field1", fmt.Sprint(data.Temperature))
    values.Set("field2", fmt.Sprint(data.Humidity))
    log.Println(values)

    _, err := http.PostForm("http://api.thingspeak.com/update", values)
    if err != nil {
        log.Printf("error posting values to thingspeak: %s", err)
    }
    return
}

//....

func main() {
    dataPool := []Data{{28, 41}, {24, 43}, {27, 42}, {21, 40}}
    values := make(url.Values)
    values.Set("key", "Write API Key")

    for _, value := range dataPool {
        data = value

        //ThingSpeak update
        httpPost(values)

        time.Sleep(2 * time.Second)
    } 
}

我对网络知之甚少,但现在我通过以太网端口访问互联网,该端口连接基于集线器的卫星互联网连接[我猜不是正常的路由器连接?]所以也许这是一个行政问题[宿舍,呃]。我应该问我的网络管理员,但无论如何我都把它放在这里。欢迎任何反馈。

1 个答案:

答案 0 :(得分:2)

好的,我发现了问题所在。显然,ThingSpeak的API速率限制为15秒(http://community.thingspeak.com/documentation/api/),而我试图每隔2秒在频道上发布一次。我设置2到20,现在一切都像一个魅力。感谢您的评论。

道德课:下次彻底阅读文档:)