-
Notifications
You must be signed in to change notification settings - Fork 0
/
SparkfunWeatherboard.java
89 lines (81 loc) · 2.5 KB
/
SparkfunWeatherboard.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package com.buglabs.xbee.protocol;
import java.util.HashMap;
import java.util.Map;
import com.buglabs.xbee.XBeeController;
import com.rapplogic.xbee.api.ApiId;
import com.rapplogic.xbee.api.XBeeAddress;
import com.rapplogic.xbee.api.XBeeAddress16;
import com.rapplogic.xbee.api.XBeeAddress64;
import com.rapplogic.xbee.api.XBeeResponse;
import com.rapplogic.xbee.api.wpan.RxResponse;
import com.rapplogic.xbee.util.ByteUtils;
public class SparkfunWeatherboard extends BaseXBeeProtocol {
public SparkfunWeatherboard(){
}
public SparkfunWeatherboard(int[] address, XBeeController con) {
super(address, con);
// TODO Auto-generated constructor stub
}
@Override
public Map<String, Object> parse(XBeeResponse res) {
Map<String, Object> ret = null;
if (res.getApiId() != ApiId.RX_16_RESPONSE)
return ret;
RxResponse pkt = (RxResponse) res;
String data = ByteUtils.toString(pkt.getData());
data = data.replaceAll("\n", "");
data = data.replaceAll("\r", "");
if (data.charAt(0) == '$'){
data = data.substring(2,data.length()-2);
String[] values = data.split(",");
ret = new HashMap<String, Object>();
ret.put("Temperature", values[0]);
ret.put("Humidity",values[1]);
ret.put("Dewpoint",values[2]);
ret.put("Pressure",values[3]);
ret.put("Light",values[4]);
ret.put("Wind Speed",values[5]);
ret.put("Wind Direction",values[6]);
ret.put("Rainfall",values[7]);
ret.put("Battery",values[8]);
last = ret;
}
return ret;
}
@Override
public String toString(Map<String, Object> data) {
String ret = "";
ret += "Weather data from "+Integer.toHexString(((int[])data.get("address"))[1])+"\r\n";
ret += "Temperature: "+data.get("Temperature")+"\r\n";
ret += "Humidity: "+data.get("Humidity")+"\r\n";
ret += "Dewpoint: "+data.get("Dewpoint")+"\r\n";
ret += "Pressure: "+data.get("Pressure")+"\r\n";
ret += "Light: "+data.get("Light")+"\r\n";
return ret;
}
@Override
public boolean parseable(XBeeResponse res){
if (res.getApiId() != ApiId.RX_16_RESPONSE)
return false;
RxResponse pkt = (RxResponse) res;
String data = ByteUtils.toString(pkt.getData());
data = data.replaceAll("\n", "");
data = data.replaceAll("\r", "");
if (data.charAt(0) != '$')
return false;
data = data.substring(2);
String[] values = data.split(",");
if (values.length != 10){
return false;
}
if (!values[9].contains("*")){
return false;
}
int[] floats = {0,2,3,4,5,7,8};
for (int idx:floats){
if (!values[idx].contains("."))
return false;
}
return true;
}
}