From 34f21791cc2e65b8e40c6cf5340ae053f8596952 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sun, 7 Jun 2026 00:04:19 +0000 Subject: [PATCH] Catch bad OwnTrack data, add WH51 soil sensor --- main.py | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/main.py b/main.py index ad5b12f..3e7d6d5 100644 --- a/main.py +++ b/main.py @@ -269,6 +269,15 @@ class SoilSensor(Sensor): except TypeError: pass +class WH51SoilSensor(Sensor): + type_ = 'soil' + bad_keys = [ + 'model', + 'mic', + 'battery_ok', + ] + update_period = 60*30 + class P2ProScaleSensor(Sensor): type_ = 'scale' skip_cooldown = 60.0 * 60 * 18 # 18 hours @@ -399,19 +408,27 @@ async def fetch_mqtt(): async def owntracks(request): - data = await request.json() - logging.debug('Web data: %s', str(data)) + try: + data = await request.json() + logging.debug('Web data: %s', str(data)) - if data.get('_type', '') == 'location': - data['id'] = data['topic'].split('/')[-1] - data['timestamp'] = datetime.utcfromtimestamp(data['tst']) - if 'inregions' in data: - data['inregions'] = ','.join(data['inregions']) - await process_data(data) - else: - logging.info('Not a location, skipping.') + if data.get('_type', '') == 'location': + data['id'] = data['topic'].split('/')[-1] + data['timestamp'] = datetime.utcfromtimestamp(data['tst']) + if 'inregions' in data: + data['inregions'] = ','.join(data['inregions']) + await process_data(data) + else: + logging.info('Not a location, skipping.') - return web.Response() + return web.json_response({'status': 'ok'}, status=200) + except BaseException as e: + logging.exception('Problem with OwnTracks data: {} - {}'.format(e.__class__.__name__, str(e))) + try: + logging.info('Data: %s', str(data)) + except: + pass + return web.json_response({'error': str(e)}, status=500) def share_sha256(measurement, share_start, share_end, api_key): @@ -691,7 +708,7 @@ if __name__ == '__main__': sensors.add(AirSensor('air1', 'Laundry Room')) sensors.add(AirSensor('air2', 'Bedroom')) sensors.add(AirSensor('air3', 'Kitchen')) - sensors.add(Acurite606TX('185', 'Outside', 0.0)) + sensors.add(Acurite606TX('252', 'Outside', 0.0)) sensors.add(AcuRite6002RM('999999', 'Seeds', 0.0)) # A sensors.add(AcuRite6002RM('999998', 'Misc', 0.7, -1.0)) # A sensors.add(AcuRite6002RM('12516', 'Basement', 0.7, -1.0)) # A @@ -702,6 +719,7 @@ if __name__ == '__main__': sensors.add(SoilSensor('soil1', 'Dumb Cane')) sensors.add(SoilSensor('soil2', 'Kitchen Pothos')) sensors.add(SoilSensor('soil3', 'Dracaena')) + sensors.add(WH51SoilSensor('0fafff', 'Side Garden')) sensors.add(P2ProScaleSensor('scale1', 'Master Bathroom')) sensors.add(QotMotionSensor('qot_dc3c', 'Bedroom'))