Hallo
ich versuche für unsere Schule eine SenseBox Home über Lora zu verbinden, aber bin so oft gescheitert immer wieder…
Hab dann die Zeit der Corona-bedingten Schließung genutzt und mich wieder dran begeben… und auf einmal ging es.
Habe die Box über die opensensemap konfigurieriert und dann auch alles bei TTn eingestellt.
Habe dann als decoder json genommen, weil ich gelesen habe, dies wäre nötig für den feinstaub sensor.
als decoder habe ich folgendes benutzt:
/**
- Convert the array of bytes to an unsigned integer, LSB.
- BEWARE: This is only safe up to 0x1FFFFFFFFFFFFF, so: 6 bytes.
*/
function uint(bytes) {
return bytes.reduceRight(function(acc, b) {
// We expect an unsigned value, so to support more than 3 bytes
// don’t use any bitwise operators, which would always yield a
// signed 32 bits integer instead.
return acc * 0x100 + b;
}, 0);
}
function Decoder(bytes) {
var i = 0;
var decoded = {};
// The index in the bytes array that needs to be handled next;
// use along with „i++“ which returns the current value, and
// then increments it for the next usage
// Temperature with 0.0013 precision, -18.000 through 67.000, LSB
var temperature = uint(bytes.slice(i, i+=2)) / 771 - 18;
// Unary plus operator to cast string result of toFixed to number
temperature = +temperature.toFixed(3);
// Relative humidity with 0.01 precision, 0.00 through 100.00, LSB
var humidity = uint(bytes.slice(i, i+=2)) / 100;
// Pressure with 0.012 precision, 300.00 through 1100.00, LSB
var pressure = uint(bytes.slice(i, i+=2)) / 81.9187 + 300;
pressure = +pressure.toFixed(2);
var lux = bytes[i] | bytes[i+1]<<8 | bytes[i+2]<<16;
i = i + 3
var uv = bytes[i] | bytes[i+1]<<8 | bytes[i+2]<<16;
i = i + 3
var pm10 = uint(bytes.slice(i, i+=2)) / 10;
var pm25 = uint(bytes.slice(i, i+=2)) / 10;
var soilTemp1 = uint(bytes.slice(i, i+=2)) / 771 - 18;
soilTemp1 = +soilTemp1.toFixed(3);
var soilMoist1 = uint(bytes.slice(i, i+=2)) / 100;
var soilTemp2 = uint(bytes.slice(i, i+=2)) / 771 - 18;
soilTemp2 = +soilTemp2.toFixed(3);
var soilMoist2 = uint(bytes.slice(i, i+=2)) / 100;
var distance = bytes[i] | bytes[i+1]<<8 | bytes[i+2]<<16;
i = i + 3
decoded[‚5ead412b712645001b942eb1‘] = temperature
decoded[‚5ead412b712645001b942eb0‘] = humidity
decoded[‚5ead412b712645001b942eaf‘] = pressure
decoded[‚5ead412b712645001b942eae‘] = lux
decoded[‚5ead412b712645001b942ead‘] = uv
decoded[‚5ead412b712645001b942eac‘] = pm10
decoded[‚5ead412b712645001b942eab‘] = pm25
return decoded;
}
Nun funktioniert es… aber leider nur mit einer Station. Habe nämlich das gleiche mit der zweiten Station gemacht. Alles konfiguriert, profil bei ttn angelegt etc…
aber irgendwie scheint es Probleme mit der Integration zu geben.
denn diese Werte werden auch auf der opensensemap dargestellt:
Aber es werden keine kontinuierlichen Messdaten aufgenommen und weiter geleitet… nun weiß ich nimmer weiter…
Brauche eure Hilfe
liebe Grüße Tobias