Hello, I’m using my own gateway and the connection between the sensor and the gateway is working fine. Here’s my latest version of the webhook, but it’s still not working. I found this discussion with this GitHub project; do you think it would be helpful for my situation?
https://forum.sensor.community/t/integration-ttn/1248/2
https://github.com/bertrik/sensor-data-bridge
<?php
// DevEUI du capteur à traiter
$allowed_dev_eui = '-----i hide it----';
// Lire le JSON envoyé par TTN
$input = file_get_contents('php://input');
// Débogage : sauvegarder le JSON brut pour vérification
file_put_contents('debug_ttndata.json', $input.PHP_EOL, FILE_APPEND);
// Décoder le JSON
$data = json_decode($input, true);
// Vérifier si uplink_message et frm_payload existent
if (!isset($data['uplink_message']['frm_payload'])) {
http_response_code(400);
echo "Missing frm_payload";
exit;
}
// Vérifier que le DevEUI correspond
$dev_eui = $data['end_device_ids']['dev_eui'] ?? '';
if ($dev_eui !== $allowed_dev_eui) {
http_response_code(400);
echo "Unknown device";
exit;
}
// Décoder le frm_payload (base64)
$payload_base64 = $data['uplink_message']['frm_payload'];
$payload_bin = base64_decode($payload_base64);
// Supposons que le payload contient 4 floats de 4 bytes chacun (ex: température, humidité, pression, autre)
$values = [];
if (strlen($payload_bin) === 16) { // 4 floats * 4 bytes
for ($i = 0; $i < 4; $i++) {
$chunk = substr($payload_bin, $i*4, 4);
$values[] = unpack("G", $chunk)[1]; // "G" = float 32-bit big endian
}
}
// Ici tu peux envoyer $values vers ta base ou Carto
// Exemple simple : sauvegarde CSV
$line = date('c') . ',' . implode(',', $values) . PHP_EOL;
file_put_contents('sensor_data.csv', $line, FILE_APPEND);
http_response_code(200);
echo "OK";
?>