From b10994417f98e5581946fc45c3346d9723c6d9dd Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Wed, 10 Jul 2024 13:21:48 +0200 Subject: [PATCH] Update birdnet_to_mqtt.py --- birdnet-pi/rootfs/helpers/birdnet_to_mqtt.py | 31 ++++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/birdnet-pi/rootfs/helpers/birdnet_to_mqtt.py b/birdnet-pi/rootfs/helpers/birdnet_to_mqtt.py index 3a4385e12..076a64aae 100644 --- a/birdnet-pi/rootfs/helpers/birdnet_to_mqtt.py +++ b/birdnet-pi/rootfs/helpers/birdnet_to_mqtt.py @@ -54,16 +54,22 @@ def on_connect(client, userdata, flags, rc, properties=None): else: logging.error(f"Failed to connect, return code {rc}\n") -#def call_php_function(bird_name): -# php_code = f""" -# -# """ -# process = subprocess.Popen(['php'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) -# stdout, _ = process.communicate(php_code.encode()) -# return stdout.decode().strip() +def get_bird_code(scientific_name): + with open('/home/pi/BirdNET-Pi/scripts/ebird.php', 'r') as file: + data = file.read() + + # Extract the array from the PHP file + array_str = re.search(r'\$ebirds = \[(.*?)\];', data, re.DOTALL).group(1) + + # Convert the PHP array to a Python dictionary + bird_dict = {} + for line in array_str.split('\n'): + if '=>' in line: + key, value = map(lambda x: x.strip(' "'), line.split('=>')) + bird_dict[key] = value + + # Return the corresponding value for the given bird's scientific name + return bird_dict.get(scientific_name) # this little hack is to make each received record for the all birds section unique # the date and time that the log returns is only down to the 1 second accuracy, do @@ -101,13 +107,13 @@ for row in file_row_generator(syslog): # timestamp raw_ts = high_bird_fields[0] + ' ' + high_bird_fields[1] - bird['ts'] = str(datetime.datetime.timestamp(dateparser.parse(raw_ts))) + #bird['ts'] = str(datetime.datetime.timestamp(dateparser.parse(raw_ts))) bird['Date'] = high_bird_fields[0] bird['Time'] = high_bird_fields[1] bird['ScientificName'] = high_bird_fields[2] bird['CommonName'] = high_bird_fields[3] bird['Confidence'] = high_bird_fields[4] - # bird['SpeciesCode'] = call_php_function(high_bird_fields[2]) + bird['SpeciesCode'] = get_bird_code(high_bird_fields[2]) bird['ClipName'] = high_bird_fields[11] # build a url from scientific name of bird that can be used to lookup info about bird @@ -119,4 +125,3 @@ for row in file_row_generator(syslog): print('Posted to MQTT : ok') mqttc.publish(mqtt_topic_confident_birds, json_bird, 1) -