commit c81a13bda9dcac07be40e688147dfa8ef9fe4bc9 Author: m Date: Sun Nov 12 23:32:52 2023 +0100 added items.sh diff --git a/items.sh b/items.sh new file mode 100644 index 0000000..a10ffc4 --- /dev/null +++ b/items.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +ITEMS_FILE="./Items.data" +CSV_FILE="./Airtags.csv" +CSV_HEADER="datetime,name,serialnumber,producttype,productindentifier,vendoridentifier,antennapower,systemversion,batterystatus,locationpositiontype,locationlatitude,locationlongitude,locationtimestamp,locationverticalaccuracy,locationhorizontalaccuracy,locationfloorlevel,locationaltitude,locationisinaccurate,locationisold,locationfinished,addresslabel,addressstreetaddress,addresscountrycode,addressstatecode,addressadministrativearea,addressstreetname,addresslocality,addresscountry,addressareaofinteresta,addressareaofinterestb" + +### VARS for traccar: +traccar_url="http://your.traccar.url:5055" + +copy_items_data() { + echo "Creating a copy of Items.data to prevent potential file corruption" + if ! cp -p ~/Library/Caches/com.apple.findmy.fmipcore/Items.data "$ITEMS_FILE"; then + echo "Failed to copy Items.data file. Please ensure Terminal has 'Full Disk Access' in the 'Privacy & Security' section in macOS Preferences" >&2 + exit 1 + fi +} + +create_csv_file() { + echo "Checking if $CSV_FILE exists" + if [ ! -f "$CSV_FILE" ]; then + echo "$CSV_FILE does not exist, creating one" + if ! echo "$CSV_HEADER" >> "$CSV_FILE"; then + echo "Failed to create $CSV_FILE. Please ensure the destination directory is writable." >&2 + exit 1 + fi + fi +} + +while true; do + copy_items_data + create_csv_file + + echo "Checking number of Airtags to process" + airtagsnumber=$(jq ".[].serialNumber" "$ITEMS_FILE" | wc -l) + echo "Number of Airtags to process: $airtagsnumber" + airtagsnumber=$((airtagsnumber-1)) + + for j in $(seq 0 "$airtagsnumber"); do + echo "Processing airtag number $j" + + datetime=$(date +"%Y-%m-%d %T") + + serialnumber=$(jq ".[$j].serialNumber" "$ITEMS_FILE") + name=$(jq ".[$j].name" "$ITEMS_FILE") + producttype=$(jq ".[$j].productType.type" "$ITEMS_FILE") + productindentifier=$(jq ".[$j].productType.productInformation.productIdentifier" "$ITEMS_FILE") + vendoridentifier=$(jq ".[$j].productType.productInformation.vendorIdentifier" "$ITEMS_FILE") + antennapower=$(jq ".[$j].productType.productInformation.antennaPower" "$ITEMS_FILE") + systemversion=$(jq ".[$j].systemVersion" "$ITEMS_FILE") + batterystatus=$(jq ".[$j].batteryStatus" "$ITEMS_FILE") + locationpositiontype=$(jq ".[$j].location.positionType" "$ITEMS_FILE") + locationlatitude=$(jq ".[$j].location.latitude" "$ITEMS_FILE") + locationlongitude=$(jq ".[$j].location.longitude" "$ITEMS_FILE") + locationtimestamp=$(jq ".[$j].location.timeStamp" "$ITEMS_FILE") + locationverticalaccuracy=$(jq ".[$j].location.verticalAccuracy // 0" "$ITEMS_FILE") + locationhorizontalaccuracy=$(jq ".[$j].location.horizontalAccuracy // 0" "$ITEMS_FILE") + locationfloorlevel=$(jq ".[$j].location.floorlevel // 0" "$ITEMS_FILE") + locationaltitude=$(jq ".[$j].location.altitude // 0" "$ITEMS_FILE") + locationisinaccurate=$(jq ".[$j].location.isInaccurate" "$ITEMS_FILE" | awk '{ print "\""$0"\"" }') + locationisold=$(jq ".[$j].location.isOld" "$ITEMS_FILE" | awk '{ print "\""$0"\"" }' ) + locationfinished=$(jq ".[$j].location.locationFinished" "$ITEMS_FILE" | awk '{ print "\""$0"\"" }' ) + addresslabel=$(jq ".[$j].address.label // \"\"" "$ITEMS_FILE") + addressstreetaddress=$(jq ".[$j].address.streetAddress // \"\"" "$ITEMS_FILE") + addresscountrycode=$(jq ".[$j].address.countryCode // \"\"" "$ITEMS_FILE") + addressstatecode=$(jq ".[$j].address.stateCode // \"\"" "$ITEMS_FILE") + addressadministrativearea=$(jq ".[$j].address.administrativeArea // \"\"" "$ITEMS_FILE") + addressstreetname=$(jq ".[$j].address.streetName // \"\"" "$ITEMS_FILE") + addresslocality=$(jq ".[$j].address.locality // \"\"" "$ITEMS_FILE") + addresscountry=$(jq ".[$j].address.country // \"\"" "$ITEMS_FILE") + addressareaofinteresta=$(jq ".[$j].address.areaOfInterest[0] // \"\"" "$ITEMS_FILE") + addressareaofinterestb=$(jq ".[$j].address.areaOfInterest[1] // \"\"" "$ITEMS_FILE") + + echo "Writing data to $CSV_FILE" + echo "$datetime","$name","$serialnumber","$producttype","$productindentifier","$vendoridentifier","$antennapower","$systemversion","$batterystatus","$locationpositiontype","$locationlatitude","$locationlongitude","$locationtimestamp","$locationverticalaccuracy","$locationhorizontalaccuracy","$locationfloorlevel","$locationaltitude","$locationisinaccurate","$locationisold","$locationfinished","$addresslabel","$addressstreetaddress","$addresscountrycode","$addressstatecode","$addressadministrativearea","$addressstreetname","$addresslocality","$addresscountry","$addressareaofinteresta","$addressareaofinterestb" >> "$CSV_FILE" + + + ### block to write data into traccar: + # + serialnumber=`echo $serialnumber | sed 's/\"//g'` + ### removed due to updated code: tracname=`cat ~/Desktop/Airtags/Items.data | jq .[$j].name | sed 's!"!!g'` + ### batterystatus=`cat ~/Desktop/Airtags/Items.data | jq .[$j].batteryStatus` + akku=$((batterystatus * 100)) + # send data to traccar: + wget --spider $traccar_url/?id=$serialnumber\&lat=$locationlatitude\&lon=$locationlongitude\&speed=0\&user=Airtag\&batteryLevel=$akku\&accuracy=$locationhorizontalaccuracy\×tamp=$locationtimestamp\&serialnumber=$serialnumber\&lastupdate=$locationtimestamp + # + echo "Sleep for 1 second between Airtags" + sleep 1 + # + ### END block to write data into traccar + + done + echo -e "Checking again in 1 minute...\n" + sleep 60 + +done