Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Python library and command line interface for Aranet4, Aranet2, Aranet Radiation and Aranet Radon Plus sensors.
pip3 install aranet4
aranetctl
or use as libraryNote: Smart Home Integrations must be enabled in Aranet4 mobile app for full support.
$ aranetctl -h
usage: aranetctl.py [-h] [--scan] [-u URL] [-r] [-s DATE] [-e DATE] [-o FILE] [-w] [-l COUNT] [--xt] [--xh] [--xp] [--xc] [--set-interval MINUTES]
[--set-integrations {on,off}] [--set-range {normal,extended}]
[device_mac]
positional arguments:
device_mac Aranet4 Bluetooth Address
options:
-h, --help show this help message and exit
--scan Scan Aranet4 devices
-r, --records Fetch historical log records
Options for current reading:
-u URL, --url URL Remote url for current value push
Filter History Log Records:
-s DATE, --start DATE
Records range start (UTC time, example: 2019-09-29T14:00:00
-e DATE, --end DATE Records range end (UTC time, example: 2019-09-30T14:00:00
-o FILE, --output FILE
Save records to a file
-w, --wait Wait until new data point available
-l COUNT, --last COUNT
Get <COUNT> last records
--xt Don't get temperature records
--xh Don't get humidity records
--xp Don't get pressure records
--xc Don't get co2 records
Change device settings:
--set-interval MINUTES
Change update interval
--set-integrations {on,off}
Toggle Smart Home Integrations
--set-range {normal,extended}
Change bluetooth range
Usage: aranetctl --scan
Output:
=======================================
Name: Aranet4 00001
Address: AA:BB:CC:DD:EE:FF
RSSI: -83 dBm
---------------------------------------
CO2: 484 ppm
Temperature: 20.9 °C
Humidity: 43 %
Pressure: 1024.8 hPa
Battery: 3 %
Status Display: GREEN
Age: 9/60
Note: To receive current measurements, Smart Home Integrations must be enabled and firmware version must be v1.2.0 or newer.
Usage: aranetctl XX:XX:XX:XX:XX:XX
Output:
--------------------------------------
Connected: Aranet4 00000 | v0.3.1
Updated 51 s ago. Intervals: 60 s
5040 total readings
--------------------------------------
CO2: 904 ppm
Temperature: 19.9 C
Humidity: 51 %
Pressure: 997.0 hPa
Battery: 96 %
Status Display: GREEN
--------------------------------------
Write full log to screen:
Usage: aranetctl XX:XX:XX:XX:XX:XX -r
-------------------------------------------------------------
Device Name : Aranet4 00000
Device Version : v0.3.1
-------------------------------------------------------------
id | date | co2 | temp | hum | pressure |
-------------------------------------------------------------
1 | 2022-02-18T14:15:44 | 844 | 21.8 | 50 | 985.6 |
2 | 2022-02-18T14:20:44 | 846 | 21.8 | 50 | 985.9 |
3 | 2022-02-18T14:25:44 | 843 | 22.0 | 50 | 986.4 |
4 | 2022-02-18T14:30:44 | 881 | 22.1 | 50 | 986.4 |
5 | 2022-02-18T14:35:44 | 854 | 22.1 | 50 | 987.3 |
6 | 2022-02-18T14:40:44 | 867 | 22.2 | 50 | 987.5 |
7 | 2022-02-18T14:45:44 | 883 | 22.1 | 50 | 988.1 |
8 | 2022-02-18T14:50:44 | 921 | 22.1 | 50 | 988.6 |
9 | 2022-02-18T14:55:44 | 930 | 22.0 | 50 | 989.1 |
10 | 2022-02-18T15:00:44 | 954 | 22.0 | 50 | 989.5 |
-------------------------------------------------------------
Usage: aranetctl XX:XX:XX:XX:XX:XX -r -o aranet4.csv
Output file format: Date,CO2,Temperature,Humidity,Pressure
Output file example:
date,co2,temperature,humidity,pressure
2022-02-18 10:05:47,1398,23.2,53,986.6
2022-02-18 10:10:47,1155,23.1,50,986.3
import aranet4
device_mac = "XX:XX:XX:XX:XX:XX"
current = aranet4.client.get_current_readings(device_mac)
print("co2 reading:", current.co2)
print("Temperature:", current.temperature)
print("Humidity:", current.humidity)
print("Pressure:", current.pressure)
import aranet4
device_mac = "XX:XX:XX:XX:XX:XX"
history = aranet4.client.get_all_records(
device_mac, entry_filter={"humi": False, "pres": False}
)
print(f"{'Date':^20} | {'CO2':^10} | {'Temperature':^10} ")
for entry in history.value:
print(f"{entry.date.isoformat():^20} | {entry.co2:^10} | {entry.temperature:^10}")
Get current measurements from device Returns CurrentReading object:
class CurrentReading:
name: str = ""
version: str = ""
temperature: float = -1
humidity: int = -1
pressure: float = -1
co2: int = -1
battery: int = -1
status: int = -1
interval: int = -1
ago: int = -1
stored: int = -1
Get stored datapoints from device. Apply any filters if required
entry_filter
is a dictionary that can have the following values:
last
: int : Get last n entriesstart
: datetime : Get entries after specified timeend
: datetime : Get entries before specified timetemp
: bool : Get temperature data points (default = True)humi
: bool : Get humidity data points (default = True)pres
: bool : Get pressure data points (default = True)co2
: bool : Get co2 data points (default = True)Returns CurrentReading object:
class Record:
name: str
version: str
records_on_device: int
filter: Filter
value: List[RecordItem] = field(default_factory=list)
Which includes these objects:
class RecordItem:
date: datetime
temperature: float
humidity: int
pressure: float
co2: int
class Filter:
begin: int
end: int
incl_temperature: bool
incl_humidity: bool
incl_pressure: bool
incl_co2: bool
FAQs
Aranet Python client
We found that aranet4 demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.