# HG changeset patch # User Michiel Broek # Date 1692450695 -7200 # Node ID dc9281501ca6407c69c76aac48795ee5d1319dcc # Parent d8ace3fa9ac7c915c28fb70103b9c96c61d08366 De iSpindel plato berekening is in het webscript gezet omdat er dan met meer cijfers achter de komman gerekend wordt. De uitkomst verschilt 0.25 plato! De calibratie is nu dus extern. diff -r d8ace3fa9ac7 -r dc9281501ca6 doc/bms-ch8.sgml --- a/doc/bms-ch8.sgml Sun Mar 05 12:44:33 2023 +0100 +++ b/doc/bms-ch8.sgml Sat Aug 19 15:11:35 2023 +0200 @@ -52,8 +52,10 @@ NCMD is een commando bestemd voor een node. Dit kan bijvoorbeeld een reboot commando zijn. NDATA wordt verstuurd als er veranderingen zijn voor de node, -maar ook iedere vijf minuten om aan te geven dat de node nog "levend" en aanwezig -is. +maar ook regelmatig om aan te geven dat de node nog "levend" en aanwezig +is. Deze tijd is voor ieder node type verschillend. Indien twee maal de ingestelde +tijd plus enkele seconden geen NDATA bericht is gezien dan wordt de node als +offline beschouwd. Indien deze waarde niet aanwezig is wordt 300 seconden aangehouden. DBIRTH is een of meer berichten van een apparaat wat online komt en ingeschakeld is. Een apparaat is een deel van een node. @@ -85,14 +87,20 @@ ingevuld en is de tijd dat het bericht ontvangen wordt. Het `seq' nummer wordt met ieder bericht met 1 verhoogd. Ook dit nummer is niet altijd aanwezig. +Deze payload wordt verstuurd als een node start, message_type NBIRTH. +Het wordt ook vertuurd als er iets wijzigd, bijvoorbeeld de temperatuur en op vaste +intervals. In die gevallen is het message_type NDATA. In de `metric' groep is de `interval' optioneel. Dit wordt bijvoorbeeld verstuurd door iSpindels en is de ingestelde update interval tijd in seconden. Indien dit niet aanwezig is dan wordt 300 seconden als standaard waarde gebruikt. Deze waarde wordt gebruikt om een apparaat als offline te markeren indien het langer als twee maal deze tijd niet wordt gezien. +Alle object groepen binnen het metric object kunnen maar hoeven niet aanwezig te zijn. +Dit geld ook voor de diverse items in de groepen. { "timestamp": 1532201089, + "sec": 1234, "metric": { "uuid": "b508f01c-1f82-4e8b-b0d2-d88ecfb53031", "interval":300, diff -r d8ace3fa9ac7 -r dc9281501ca6 www/ispindel/index.php --- a/www/ispindel/index.php Sun Mar 05 12:44:33 2023 +0100 +++ b/www/ispindel/index.php Sat Aug 19 15:11:35 2023 +0200 @@ -7,8 +7,21 @@ $publisher = '/usr/bin/mosquitto_pub -h '.MQTT_HOST.' -t '; $input = file_get_contents('php://input'); - //syslog(LOG_NOTICE, "ispindel " . $input); $data = json_decode($input, true ); + + if ($data['temp_units'] == 'K') { + $tempC = floatval($data['temperature']) - 273.15; + } else if ($data['temp_units'] == 'F') { + $tempC = floatval($data['temperature']) / 1.8 - 32; + } else { + $tempC = floatval($data['temperature']); + } + + /* The rounding in the tilt using less digits results in a 0.25 plato difference. Calculate here again using the calibration data. */ + $tilt = $data['angle']; + $plato = (0.00028548 * $tilt * $tilt * $tilt) + (-0.03492272 * $tilt * $tilt) + (1.617106176 * $tilt) + -21.412976092; + syslog(LOG_NOTICE, "ispindel " . $input . " plato ".$plato); + $node = 'ispindel-' . sprintf("%06x", floatval($data['ID'])); $alarm = 0; @@ -33,18 +46,10 @@ if (floatval($data['battery']) < 3.3) $alarm += 4; - if ($data['temp_units'] == 'K') { - $tempC = floatval($data['temperature']) - 273.15; - } else if ($data['temp_units'] == 'F') { - $tempC = floatval($data['temperature']) / 1.8 - 32; - } else { - $tempC = floatval($data['temperature']); - } - $uuid = 'c0ffeeee-cafe-dead-bee0-' . sprintf("%06x", 0xffffff - floatval($data['ID'])) . sprintf("%06x", floatval($data['ID'])); $topic = 'mbv1.0/ispindels/DBIRTH/' . $node; $payload = '{"unit":{"uuid":"' . $uuid .'","alias":"' . $data['name'] . '","alarm":' . $alarm . ',"interval":' . $interval; - $payload .= ',"angle":' . $data['angle'] . ',"temperature":' . $tempC . ',"battery":' . $data['battery'] . ',"gravity":' . $data['gravity'] . '}}'; + $payload .= ',"angle":' . $data['angle'] . ',"temperature":' . $tempC . ',"battery":' . $data['battery'] . ',"gravity":' . $plato . '}}'; $pub = $publisher . $topic . ' -m \'' .$payload . '\''; exec($pub); }