Ik heb een Lora node in elkaar geknutseld en daar een Arduino en een GPS aangesoldeerd.
Dit lijkt allemaal redelijk te werken. Het lora ding stuurt GPS data naar de gateway, en de gateway stuurt de data door naar de Semtech server.
De code van de Lora node is op basis van https://github.com/Lora-net/LoRaMac-node/blob/master, dus dat zou in principe goed moeten werken omdat anderen deze code ook gebruiken zonder problemen.
Nu heb ik een simpel PHP scriptje gemaakt om de data op te vragen bij de Semtech server. Dat werkt ook prima. Ik krijg binaire data binnen. Het decoderen van de latitude werkt ook goed maar het decoderen van de longitude gaat heel erg fout. De gedecodeerde longitude komt niet eens in de buurt van de waarde die ik verwacht.
Waarschijnlijk zie ik iets over het hoofd. Wie ziet de fout?
Dit is de output van het script
Dit lijkt allemaal redelijk te werken. Het lora ding stuurt GPS data naar de gateway, en de gateway stuurt de data door naar de Semtech server.
De code van de Lora node is op basis van https://github.com/Lora-net/LoRaMac-node/blob/master, dus dat zou in principe goed moeten werken omdat anderen deze code ook gebruiken zonder problemen.
Nu heb ik een simpel PHP scriptje gemaakt om de data op te vragen bij de Semtech server. Dat werkt ook prima. Ik krijg binaire data binnen. Het decoderen van de latitude werkt ook goed maar het decoderen van de longitude gaat heel erg fout. De gedecodeerde longitude komt niet eens in de buurt van de waarde die ik verwacht.
Waarschijnlijk zie ik iets over het hoofd. Wie ziet de fout?
PHP: loratest.php
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
| <?php //LORAWAN testscriptje door Rein Velt //Dit scriptje zou GPS data verzonden via Lora moeten omzetten naar een correcte lat/lon //De locatie is 52.086309,4.2830583 (alexander Gogelweg Den Haag) //De data wordt door een LoraWan/Arduino verstuurd via een gateway naar Semtech //Het decoderen van de lat gaat redelijk goed. 52.086309 is ongeveer gelijk aan 52.086310 //Het decoderen van de lon gaat behoorlijk fout. 4.2830583 (goed) is niet gelijk aan 192.86280155 (fout) define("url","http://iot.semtech.com/raw/motes/00-00-00-00-D0-99-13-DD/data"); class LoraGpsDecode { public $data; public function __construct() { $recordArr=file(url); // haal data op (csv bestand) if (count($recordArr)>0) { unset($this->recordArr[0]); $this->data=array(); while (list($rindex,$rdata)=each($recordArr)) //loop over records { $this->data[$rindex]=explode(",",$rdata); //hak de records tot velden //extract raw location data $data=substr($this->data[$rindex][3],2,12); //het derde veld bevat data. pos 2 t/m 14 is latlon //change Endian $this->data[$rindex]["rawLat"]=substr($data,4,2).substr($data,2,2).substr($data,0,2); $this->data[$rindex]["rawLon"]=substr($data,10,2).substr($data,8,2).substr($data,6,2); //decode data $this->data[$rindex]["location"]=$this->decode($this->data[$rindex]["rawLat"],$this->data[$rindex]["rawLon"]); } } } private function decode($rawLat,$rawLng) { $_lat=hexdec($rawLat)/8388608*90; //deze geeft een goede waarde $_lng=hexdec($rawLng)/8388608*180; //deze geeft een onzin waarde $res=array(); $res["lat"]=sprintf("%3.8F",$_lat); $res["lon"]=sprintf("%3.8F",$_lng); return $res; } public function dump() { $records=$this->data; while (list($index,$data)=each($records)) { print_r($data); } print "\n"; } } $p=new LoraGpsDecode(); $p->dump(); |
Dit is de output van het script
Array ( [0] => 4 [1] => 2016-03-18 19:06:59 [2] => 6905 [3] => 0078144a872389 [rawLat] => 4a1478 [rawLon] => 892387 [location] => Array ( [lat] => 52.08746910 [lon] => 192.85140753 ) ) Array ( [0] => 4 [1] => 2016-03-18 19:05:56 [2] => 6904 [3] => 0067144a442389 [rawLat] => 4a1467 [rawLon] => 892344 [location] => Array ( [lat] => 52.08728671 [lon] => 192.84996986 ) ) Array ( [0] => 4 [1] => 2016-03-18 19:04:52 [2] => 6903 [3] => 0010144abf2289 [rawLat] => 4a1410 [rawLon] => 8922bf [location] => Array ( [lat] => 52.08635330 [lon] => 192.84711599 ) ) Array ( [0] => 4 [1] => 2016-03-18 19:03:48 [2] => 6902 [3] => 000c144a9a2589 [rawLat] => 4a140c [rawLon] => 89259a [location] => Array ( [lat] => 52.08631039 [lon] => 192.86280155 ) )
[ Voor 20% gewijzigd door veltnet op 22-03-2016 12:04 ]