Sensors - aaronwmorris/indi-allsky GitHub Wiki
Overview
indi-allsky supports reading external sensors (eg temperature) with SBCs like Raspberry Pi.
Unsupported Hardware
If you have an unsupported sensor, please open an Enhancement Issue and I will investigate adding support. It may take a week or two if I have to order the part.
GPIO Permissions
If you receive a PermissionDenied
exception when accessing GPIO pins
https://github.com/aaronwmorris/indi-allsky/wiki/GPIO-Permissions
Raspberry Pi 5 - RuntimeError: Cannot determine SOC peripheral base address
source virtualenv/indi-allsky/bin/activate
pip uninstall RPi.GPIO rpi.lgpio
pip install --upgrade rpi.lgpio
Sensor Units
Sensor values may be reported in either Celcius or Fahrenheit depending on the setting for Temperature Display
on the Camera tab under configuration.
Slots
Data is shared between the indi-allsky processes using a multiprocessing Array. Each sensor module supports a different number of sensors. Some sensors only support a single type, others support multiple eg temperature, humidity, pressure, etc. The code will populate multiple slots of data based on the sensor type.
All slots are floating point values.
System Temperature Slots
There are 30 (0-29) slots for system temperatures.
- 0 is the camera temperature
- 1-9 are reserved for future use
- Slots 10-29 are for all sensor values returned by
psutil.sensors_temperatures()
. Raspberry Pi 1-4 will have a single sensor value (CPU temp), Pi5 has 2 temperatures (CPU Temp, GPU Temp). Generic PCs can have many temperatures returned. The order of the temperature values is not controllable, the first is NOT always the CPU temperature. The order and label for the temperatures can be seen on the System page.
User Slots
There are 30 (0-29) sensor slots for user data.
- 0 is the camera temperature
- 1 is the dew heater state (duty cycle)
- 2 is the dew point temperature
- 3 is the frost point temperature
- 4 is the fan state (duty cycle)
- 5 is the heat index
- 6 is the wind direction in degrees
- 7 is sqm
- 8-9 are reserved for future use
- Slots 10-29 are available to be assigned for sensors.
Testing sensors
There is a test script will will execute the same code that indi-allsky utilizes so you do not have to start the program to validate their behavior.
source virtualenv/indi-allsky/bin/activate
./misc/sensor_test.py
Interfaces
I2C
The I2C interface needs to be activated on your SBC. This can be done with sudo raspi-config
on Raspberry Pi systems. sudo armbian-config
on Armbian.
Use i2cdetect -y 1
to inspect the I2C bus to find the correct address for your device.
sudo apt-get install i2c-tools
SPI
The SPI interface needs to be activated on your SBC. This can be done with sudo raspi-config
on Raspberry Pi systems.
1-Wire
The 1-Wire interface needs to be activated on your SBC. This can be done with sudo raspi-config
on Raspberry Pi systems.
The default 1-Wire pin on Raspberry Pi devices is GPIO4 (pin 7). This can be overridden in /boot/firmware/config.txt
dtoverlay=w1-gpio,gpiopin=5
Sensors
Sensor | Type | Status |
---|---|---|
OpenWeather Map API | Temp | Working |
Weather Underground API | Temp | Working |
Astrospheric API | Temp | Working |
Ambient Weather API | Temp | Working |
Ecowitt API | Temp | Not tested |
MQTT Broker | Working | |
DS18x20 | Temp | Working |
DHT11 | Temp | Working |
DHT21 | Temp | My sample did not work |
DHT22 | Temp | Working |
SHT3x | Temp | Working - Heater untested |
SHT4x | Temp | Working - Heater untested |
HTU21D | Temp | Working |
HTU31D | Temp | Not tested - Heater untested |
AHT10/20 | Temp | Working |
BMP180 | Temp | Working |
BMP/BME280 | Temp | Working - BMP modules do not report humidity |
BME680 | Temp | Working |
Si7021 | Temp | Working - Heater untested |
SCD-30 | Temp | Untested |
SCD-4x | Temp | Untested |
MLX90614 | Sky Temp | Working |
MLX90640 | Thermal Camera | Working |
TMP36 via ADS1015 | Temp | Working |
TMP36 via ADS1115 | Temp | Untested |
LM35 via ADS1015 | Temp | Untested |
LM35 via ADS1115 | Temp | Untested |
TSL2561 | Light | Working |
TSL2591 | Light | Working |
VEML7700 | Light | Working |
BH1750 | Light | Working |
SI1145 | Light | Working |
LTR390 | Light | Working |
OpenWeather Map
The OpenWeather Map API may be used to query local weather conditions for your location. This is not a physical sensor, but data is returned for your local weather conditions based on longitude and latitude.
https://openweathermap.org/api
The API is queried every 5 minutes, therefore there should be no more than 288 (automated) queries per day.
Returns 9 values:
temperature
"Feels Like" temperature
humidity
pressure
clouds percent
wind speed
wind gusts
1h rain
1h snow
Additional values:
dew point
frost point
heat index
wind direction
Weather Underground
The Weather Underground API may be used to query weather conditions. This is not a physical sensor, but data is returned for your local weather conditions based on a given Station ID.
The API is queried every 5 minutes, therefore there should be no more than 288 (automated) queries per day.
Note: The Pin/Port
field is used for the Station ID
Returns 8 values:
temperature
humidity
pressure
wind speed
wind gusts
total rain
solar radiation
uv
Additional values:
dew point
frost point
heat index
wind direction
Astrospheric
The Astrospheric API may be used to query weather conditions. This is not a physical sensor, but data is returned for your local weather conditions based on a given Latitude/Longitude.
The API is queried every 120 minutes, therefore there should be no more than 12 (automated) queries per day.
Note: As of January 2025, users are granted 100 API credits per day and each call to the API incurs a cost of 5 credits.
Returns 5 values:
temperature
atmospheric seeing
atmospheric transparency
clouds percent
wind speed
Additional values:
dew point
frost point
wind direction
Ambient Weather
The Ambient Weather API may be used to query weather conditions provided by your local weather device. This is not a physical sensor, but data is returned for your local weather conditions provided by your Ambient Weather internet connected device.
https://www.ambientweather.net/
The API is queried every 5 minutes.
Returns 9 values:
temperature
feels like seeing
relative humidity
atmospheric pressure
wind speed
wind gust speed
1hr rain
solar radiation
uv
Additional values:
dew point
frost point
heat index
wind direction
Ambient Weather requires three values to access their API:
- API Key - Obtained from your ambientweather.net Dashboard, Account, then API Keys. Create a new API Key or re-use an existing one.
- Application Key - Obtained from the same page as the API Key. Create an Application key by clicking the Developers
Click here
link. You're asked to describe the application that you are developing. Indicate that you'll be using the API to get data for a personal All Sky camera. - Device MAC Address - Obtained from the Devices page.
NOTE: Not all values will populate with data. Values will only be populated for the data sent by your weather station.
Ecowitt
The Ecowitt API may be used to query weather conditions provided by your local weather device. This is not a physical sensor, but data is returned for your local weather conditions provided by your Ecowitt internet connected device.
The API is queried every 5 minutes.
Returns 9 values:
temperature
feels like seeing
relative humidity
atmospheric pressure
wind speed
wind gust speed
1hr rain
solar radiation
uv
Additional values:
dew point
frost point
heat index
wind direction
Ecowitt requires three values to access their API:
- API Key - Obtained from your ecowitt.net Dashboard. Click your account icon then User Profile Create a new API Key or re-use an existing one.
- Application Key - Obtained from the same page as the API Key. You're asked to describe the application that you are developing. Indicate that you'll be using the API to get data for a personal All Sky camera.
- Device MAC Address - Obtained from the Devices page (unconfirmed).
MQTT Broker Sensor
A sensor value from an MQTT Broker may be queried. The Pin
field is used for the topic subscription. Up to 5 topics may be subscribed by providing a comma separated list. eg topic1,base/topic2
The payload for the topics must be a value that can be converted to a float.
Returns 5 float values
DS18x20 Dallas Temperature Sensor
This sensor is a 1-Wire interface type device. On Raspberry Pi, the default 1-Wire pin is GPIO4 (pin 7). The Pin in the indi-allsky config is not used.
Returns 1 value:
temperature
DHT11/21/22 Temperature Sensor
This sensor only requires a single pin and in some cases a pull up resistor.
Returns 2 values:
temperature
humidity
BMP180 Temperature Sensor
The BMP180 has an i2c interface. Common I2C addresses are 0x77
and 0x76
.
Returns 2 values: temperature
and pressure
(hPa)
Pin | I2C | Note |
---|---|---|
VCC | 5v on 5 pin sensors, 3.3v on 4 pin modules | |
GND | ||
SLC | SLC | Raspi pin 5 (GPIO 3) |
SDA | SDA | Raspi pin 3 (GPIO 2) |
3.3 | Not available on 4 pin modules |
BMP/BME280 Temperature Sensor
The BME280 can be used in either i2c or SPI modes. Common I2C addresses are 0x77
and 0x76
.
Returns 3 values:
temperature
humidity
pressure
Pin | I2C | SPI | Note |
---|---|---|---|
VCC | Usually 3.3v | ||
GND | |||
SLC | SLC | SCLK | I2C - Raspi pin 5 (GPIO 3)SPI - Raspi pin 23 (SCLK) (GPIO 11) |
SDA | SDA | MISO | I2C - Raspi pin 3 (GPIO 2)SPI - Raspi pin 19 (MOSI) (GPIO 10) |
CSB | CS | SPI - Any GPIO pin | |
SDO | MOSI | SPI - Raspi pin 21 (MISO) (GPIO 9) |
BMP280
BMP280 does not support humidity measurements. Chip ID 0x58
. Without the humidity measurement, dew point calculations will not be available.
RuntimeError: Failed to find BME280! Chip ID 0x58
If you receive this Exception, you need to edit virtualenv/indi-allsky/lib/python3.##/site-packages/adafruit_bme280/basic.py
and set _BME280_CHIPID
to 0x58
BME680 Temperature Sensor
The BME680 can be used in either i2c or SPI modes. Common I2C addresses are 0x77
and 0x76
.
Returns 4 values:
temperature
humidity
pressure
gas
(ohm)
Pin | I2C | SPI | Note |
---|---|---|---|
VCC | Usually 3.3v | ||
GND | |||
SLC | SLC | SCLK | I2C - Raspi pin 5 (GPIO 3)SPI - Raspi pin 23 (SCLK) (GPIO 11) |
SDA | SDA | MISO | I2C - Raspi pin 3 (GPIO 2)SPI - Raspi pin 19 (MOSI) (GPIO 10) |
SDO | MOSI | SPI - Raspi pin 21 (MISO) (GPIO 9) | |
CSB | CS | SPI - Any GPIO pin |
BME680 notes
- The initial humidity measurement may always be 100%. Subsequent measurements should be correct.
Si7021 Temperature Sensor
The Si7021 has an i2c interface. Default I2C address is 0x40
.
An internal heater is available for high humidity environments.
Returns 2 values
temperature
humidity
SHT3x Temperature Sensor
The SHT3x has an i2c interface. Common I2C addresses are 0x44
and 0x45
.
An internal heater is available for high humidity environments.
Returns 2 values
temperature
humidity
SHT40/41/45 Temperature Sensor
The SHT4x has an i2c interface. Common I2C addresses are 0x44
and 0x45
.
An internal heater is available for high humidity environments.
Returns 2 values
temperature
humidity
HTU21D Temperature Sensor
The HTU21D has an i2c interface. Default I2C address is 0x40
.
Returns 2 values
temperature
humidity
HTU31D Temperature Sensor
The HTU31D has an i2c interface. Common I2C addresses are 0x40
and 0x41
.
An internal heater is available for high humidity environments.
Returns 2 values
temperature
humidity
AHT10/20 Temperature Sensor
The AHTx0 has an i2c interface. Default I2C address is 0x38
.
Returns 2 values
temperature
humidity
SCD-30 Temperature Sensor
The SCD30 has an i2c interface. Default I2C address is 0x61
.
Returns 3 values
temperature
humidity
CO2
SCD-4x Temperature Sensor
The SCD40 and SCD41 has an i2c interface. Default I2C address is 0x62
.
Returns 3 values
temperature
humidity
CO2
AHT10/20 Temperature Sensor
The AHTx0 has an i2c interface. Default I2C address is 0x38
.
Returns 2 values
temperature
humidity
TMP36 Temperature Sensor via ADS1x15 ADC
The ADS1x15 ADC has an i2c interface. Common I2C addresses are 0x48
, 0x49
, 0x4a
, and 0x4b
The ADC reads the analog voltage from the TMP36 sensor which is converted to the temperature value.
Returns 1 value
temperature
LM35 Temperature Sensor via ADS1x15 ADC
The ADS1x15 ADC has an i2c interface. Common I2C addresses are 0x48
, 0x49
, 0x4a
, and 0x4b
The ADC reads the analog voltage from the LM35 sensor which is converted to the temperature value.
Returns 1 value
temperature
MLX90614 Sky Temperature
This MLX90614 has an i2c interface. Default i2c address is 0x5a
Note: My module was not detected with i2cdetect, but it still worked.
Returns 2 values:
temperature
sky_temperature
MLX90640 Thermal Camera
This MLX90640 has an i2c interface. Default i2c address is 0x33
Thermal image is TBD.
Returns 1 value:
avg_temperature
TSL2561 Light Sensor
The TSL2561 has an i2c interface. Default i2c address is 0x39
Returns 3 values:
lux
broadband
infrared
TSL2591 Light Sensor
The TSL2561 has an i2c interface. Default i2c address is 0x29
Returns 4 values:
lux
visible
infrared
full_spectrum
VEML7700 Light Sensor
The VEML7700 has an i2c interface. Default i2c address is 0x10
Returns 4 values:
lux
light
white light
BH1750 Light Sensor
The BH1750 has an i2c interface. Default i2c address is 0x23
Returns 1 value:
lux
SI1145 UV Light Sensor
The SI1145 has an i2c interface. Default i2c address is 0x60
Returns 3 values:
visible
ir
uv index
LTR390 UV Light Sensor
The LTR390 has an i2c interface. Default i2c address is 0x53
Returns 4 values:
uv
light
uv index
lux
Test Data Generator
This simulates a sensor with 4 data points. For development systems.
Returns 4 values