Luftdaten  [SOLVED]

Moderator: leecollings

svde
Posts: 28
Joined: Sunday 17 April 2016 10:36
Target OS: Linux
Domoticz version:
Contact:

Re: Luftdaten

Post by svde »

The name in your first post when you declare a virtual dummy device in Domoticz has to start with: Luftdaten...
The name of the dummy devices needs to match the name in the script. If you give the devices different names, then you'll need to edit the script to match.

Thanks for the feedback, I've edited the first post in the thread.
PieterS
Posts: 196
Joined: Wednesday 31 May 2017 16:06
Target OS: NAS (Synology & others)
Domoticz version: 2024.7
Location: NL
Contact:

Re: Luftdaten

Post by PieterS »

Thank YOU very much for spreading your knowledge. I am glad with the easy reading of the results from the sensor. :D
Synology with Domoticz build (V2024.7) in Docker
DuDo
Posts: 14
Joined: Saturday 18 November 2017 9:25
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Luftdaten

Post by DuDo »

svde wrote: Thursday 10 May 2018 16:34 dzVents script to retreive sensor data from my https://luftdaten.info sensor. This script uses features which are not available in the current stable version of Domoticz (3.8153), you'll need to upgrade to beta to use this script.

My luftdaten device contains SDS10, DHT22 and BME280 sensors. I created 4 dummy devices (name of the devices needs to match the names in the script):
  • Name: "Luftdaten PM10", Type: custom sensor, X-axis: µg/m3
  • Name: "Luftdaten PM2.5", Type: custom sensor, X-axis: µg/m3
  • Name: "Luftdaten DHT22", Type: Temp + Humidity
  • Name: "Luftdaten BME280", Type: Temp + Humidity + Baro, (optional sensor)

Code: Select all

local FQDN = 'luftdaten.xxxx.xx'

return {
        active = true,
        on = {
                timer = { 'every minute' },
                httpResponses = { 'luftdatenRetrieved' } -- matches callback string below
        },
        execute = function(domoticz, item)

                if (item.isTimer) then
                        domoticz.openURL({
                                url = 'http://' .. FQDN .. '/data.json',
                                method = 'GET',
                                callback = 'luftdatenRetrieved'
                        })

                elseif (item.isHTTPResponse) then
                        if (item.ok and item.isJSON) then -- statusCode == 2xx
                                if tonumber(item.json.age) < 60 then
-- 1: SDS_P1 PM10, 2: SDS_P2 PM2.5, 3: DHT22 temp, 4: DHT22 hum, 5: BME280 temp, 6: BME280 hum, 7: BME280 baro
                                        domoticz.devices('Luftdaten PM10').updateCustomSensor(item.json.sensordatavalues[1].value)
                                        domoticz.devices('Luftdaten PM2.5').updateCustomSensor(item.json.sensordatavalues[2].value)
                                        domoticz.devices('Luftdaten DHT22').updateTempHum(item.json.sensordatavalues[3].value,item.json.sensordatavalues[4].value,0)
-- Comment out the next 3 lines if you dont have the BME280 sensor
                                        if (tonumber (item.json.sensordatavalues[5].value) < 100) and (tonumber (item.json.sensordatavalues[7].value)/100 < 1050) then
                                                domoticz.devices('Luftdaten BME280').updateTempHumBaro(item.json.sensordatavalues[5].value,item.json.sensordatavalues[6].value,0,(item.json.sensordatavalues[7].value/100),0)
                                        end
                                end
                        else
                                -- oops
                                domoticz.log('Error fetching Luftdaten data', domoticz.LOG_ERROR)
                                domoticz.log(item.data, domoticz.LOG_ERROR)
                        end
                end
        end
}
Download links for script with different sensors: 2018.06.30: added extra check on the values coming from the BME280 sensor. I'm sometimes getting erratic readings and I don't want those to be uploaded to domoticz.
2018.10.18: added download links for scripts with different sensors.
i use this script and did only a copy past and it works but there are a few problems
i do not have a graph i just get "undefined"

also with the bme280 sensor i also get no graph and the text {{ ::'Day' | translate }} and {{ ::'Month' | translate }}

also the baro is working when i click that i get a graph.......
i only copy pasted so no fault there.

i am running beta version 4.10366 on a raspberry pi zero w
dude
Posts: 21
Joined: Friday 06 December 2013 21:07
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Luftdaten

Post by dude »

Hi thanks for this super dzEvents script

It works for me. I've one additional question; I've not one but two Luftdaten sensors up and running and want to have the info of both sensors in Domoticz. Simple copy and run two scripts next to each other doesn't work. I'm a novice on dzEvents scripts an started to read read the wiki. But can somebody give me a hint how to retrieve and display the information for more than one sensor ?

Thanks in advance
Raspberry PI, RFX 433E, Omnik Solar, Vair Co2, 1-wire, Qubino, TTN lora, Velux KF200, Kaku, Luftdaten, Meteo
User avatar
emme
Posts: 909
Joined: Monday 27 June 2016 11:02
Target OS: Raspberry Pi / ODroid
Domoticz version: latest
Location: Milano, Italy
Contact:

Re: Luftdaten

Post by emme »

why don't move to EspEasy Mega that support the same Dust sensor and can send directly to Domoticz via HTTP or MQTT?
The most dangerous phrase in any language is:
"We always done this way"
svde
Posts: 28
Joined: Sunday 17 April 2016 10:36
Target OS: Linux
Domoticz version:
Contact:

Re: Luftdaten

Post by svde »

dude wrote: Thursday 16 May 2019 16:49 Hi thanks for this super dzEvents script

It works for me. I've one additional question; I've not one but two Luftdaten sensors up and running and want to have the info of both sensors in Domoticz. Simple copy and run two scripts next to each other doesn't work.
If each sensor has a unique hostname and domoticz device names, then it should work.
dude
Posts: 21
Joined: Friday 06 December 2013 21:07
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Luftdaten

Post by dude »

Thx svde,
If each sensor has a unique hostname and domoticz device names, then it should work.
I'm using different IP addresses instead of hostname, And yes I'm using different device names;
  • Luftdaten PM10 - Carport
    Luftdaten PM10 - Terras
Both devices reports the same sensor value and they report the value from the latest started script conform log. same counts for the PM 2.5 values

2019-05-16 20:59:02.391 Status: dzVents: Info: Handling httpResponse-events for: "luftdatenRetrieved
2019-05-16 20:59:02.391 Status: dzVents: Info: ------ Start internal script: luftdaten-47: HTTPResponse: "luftdatenRetrieved"
2019-05-16 20:59:02.397 Status: dzVents: Info: ------ Finished luftdaten-47
2019-05-16 20:59:02.397 Status: dzVents: Info: ------ Start internal script: Luftdaten-55: HTTPResponse: "luftdatenRetrieved"
2019-05-16 20:59:02.398 Status: dzVents: Info: ------ Finished Luftdaten-55

After further research, i noticed the async HTTP calls are interfering. So by using different names in callback and httpResponse. My issue was solved. Running now two sensors simultaneous. THX !

@ emme, thx for your suggestion. I like to report my values to the central Luftdaten dbase. This will be difficult with EspEasy i think
Raspberry PI, RFX 433E, Omnik Solar, Vair Co2, 1-wire, Qubino, TTN lora, Velux KF200, Kaku, Luftdaten, Meteo
jonathan12
Posts: 25
Joined: Sunday 31 December 2017 17:30
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Luftdaten

Post by jonathan12 »

How can i find the URL of my sensor? luftdaten.xxx.com
svde
Posts: 28
Joined: Sunday 17 April 2016 10:36
Target OS: Linux
Domoticz version:
Contact:

Re: Luftdaten

Post by svde »

jonathan12 wrote: Saturday 23 November 2019 13:43 How can i find the URL of my sensor? luftdaten.xxx.com
on my network systems names are automatically registered in (m)dns. I use the (short) hostname (only "luftdaten") in the script. If that doesn't happen on your network, then it may be a good idea to assign a static IP-address for the sensor and use that IP-address as the fqdn.


I've also changed the script as it seems that the senor has changed the order of the values.
User avatar
beamzer
Posts: 19
Joined: Sunday 17 August 2014 20:18
Target OS: Raspberry Pi / ODroid
Domoticz version: stable
Contact:

Re: Luftdaten  [SOLVED]

Post by beamzer »

For people with an BME280 sensor on their Luftdaten sensor...
Apparently with one of the updates, the values of humidity and pressure swapped in the json output.
Pressure data now comes before Humidity:

Code: Select all

curl http://---IP ADDRESS---/data.json
{"software_version": "NRZ-2019-125-B1", "age":"65", "sensordatavalues":[{"value_type":"SDS_P1","value":"826.93"},{"value_type":"SDS_P2","value":"95.77"},{"value_type":"BME280_temperature","value":"10.68"},{"value_type":"BME280_pressure","value":"98219.00"},{"value_type":"BME280_humidity","value":"90.94"},{"value_type":"samples","value":"2491522"},{"value_type":"min_micro","value":"55"},{"value_type":"max_micro","value":"370429"},{"value_type":"signal","value":"-9"}]}
So the dzVents script has to be slightly modified:

Code: Select all

return {
	active = true,
	on = {
		timer = { 'every minute' },
		httpResponses = { 'luftdatenRetrieved' } -- matches callback string below
	},
	execute = function(domoticz, item)

		if (item.isTimer) then
			domoticz.openURL({
				url = 'http://---IP ADDRESS---/data.json',
				method = 'GET',
				callback = 'luftdatenRetrieved'
			})

		elseif (item.isHTTPResponse) then
			if (item.ok and item.isJSON) then -- statusCode == 2xx
				if tonumber(item.json.age) < 60 then
-- OLD: 1: SDS_P1 PM10, 2: SDS_P2 PM2.5, 3: BME280 temp, 4: BME280 hum, 5: BME280 baro
-- 1: SDS_P1 PM10, 2: SDS_P2 PM2.5, 3: BME280 temp, 4: BME280 baro, 5: BME280 hum
					domoticz.devices('Luftdaten PM10').updateCustomSensor(item.json.sensordatavalues[1].value)
					domoticz.devices('Luftdaten PM2.5').updateCustomSensor(item.json.sensordatavalues[2].value)
					if (tonumber (item.json.sensordatavalues[3].value) < 100) and (tonumber (item.json.sensordatavalues[5].value) < 105000) then
--						domoticz.devices('Luftdaten BME280').updateTempHumBaro(item.json.sensordatavalues[3].value,item.json.sensordatavalues[4].value,0,(item.json.sensordatavalues[5].value/100),0)
						domoticz.devices('Luftdaten BME280').updateTempHumBaro(item.json.sensordatavalues[3].value,item.json.sensordatavalues[5].value,0,(item.json.sensordatavalues[4].value/100),0)
					end
				end
			else
				-- oops
				domoticz.log('Error fetching Luftdaten data', domoticz.LOG_ERROR)
				domoticz.log(item.data, domoticz.LOG_ERROR)
			end
		end
	end
}
Ewald....
Domoticz stable on a Raspberry Pi 3
RFXtrx433E - RFLink - Smartmeter (through RasPi-Zero-W) - Hue - BMP180 - DHT22 - Wemos D1 Mini's with PIR
MJAvH
Posts: 2
Joined: Saturday 25 April 2020 1:37
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Contact:

Re: Luftdaten

Post by MJAvH »

Hello,

This script uses features which are available in the current stable version of Domoticz 2020.1 and dzVents Version: 3.0.1?

Or I need to upgrade to latest beta?

I'm asking because in my case I have this in logs:

Code: Select all

2020-04-25 01:44:00.652 Status: dzVents: Info: Handling httpResponse-events for: "luftdatenRetrieved"
2020-04-25 01:44:00.653 Status: dzVents: Info: ------ Start internal script: Script 02 Luftdaten: HTTPResponse: "luftdatenRetrieved"
2020-04-25 01:44:00.654 Status: dzVents: Info: ------ Finished Script 02 Luftdaten
And notnig else.

All virtual sensors were correctly created and are present in Domoticz

Thx for your suggestions.
svde
Posts: 28
Joined: Sunday 17 April 2016 10:36
Target OS: Linux
Domoticz version:
Contact:

Re: Luftdaten

Post by svde »

MJAvH wrote: Saturday 25 April 2020 1:48 This script uses features which are available in the current stable version of Domoticz 2020.1 and dzVents Version: 3.0.1?

Or I need to upgrade to latest beta?
It should work with 2020.1. I just updated the text on the initial post. Thanks for mentioning this.
I'm asking because in my case I have this in logs:

Code: Select all

2020-04-25 01:44:00.652 Status: dzVents: Info: Handling httpResponse-events for: "luftdatenRetrieved"
2020-04-25 01:44:00.653 Status: dzVents: Info: ------ Start internal script: Script 02 Luftdaten: HTTPResponse: "luftdatenRetrieved"
2020-04-25 01:44:00.654 Status: dzVents: Info: ------ Finished Script 02 Luftdaten
And notnig else.

All virtual sensors were correctly created and are present in Domoticz

Thx for your suggestions.
Interesting. We'll need to troubleshoot a bit...
Benneton
Posts: 111
Joined: Thursday 08 December 2016 9:46
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Luftdaten

Post by Benneton »

Hi

Thank you very much svde!!
Copied your script and adopted it to my home situation ans it worked straight away.
I have version 2020.2.

Bernard
WvdM78
Posts: 9
Joined: Wednesday 01 April 2020 14:49
Target OS: Raspberry Pi / ODroid
Domoticz version: 2023.1
Location: The Netherlands
Contact:

Re: Luftdaten

Post by WvdM78 »

I am trying to add a luftdaten sensor near my street (not my own) in domoticz via public url. Could you help me which url needs to be inserted in the script? It appears that the api of luftdaten is migrated to sensor.community?

I have found http://data.sensor.community/airrohr/v1 ... /<sensorid> but this doesn't work (yet).

Thanks in advance. I am using Domoticz 2020.2 beta 12221.
svde
Posts: 28
Joined: Sunday 17 April 2016 10:36
Target OS: Linux
Domoticz version:
Contact:

Re: Luftdaten

Post by svde »

WvdM78 wrote: Wednesday 12 August 2020 12:56 I am trying to add a luftdaten sensor near my street (not my own) in domoticz via public url.
It's only meant to work with your own luftdaten sensor. A different script will need to be written for your idea.
WvdM78
Posts: 9
Joined: Wednesday 01 April 2020 14:49
Target OS: Raspberry Pi / ODroid
Domoticz version: 2023.1
Location: The Netherlands
Contact:

Re: Luftdaten

Post by WvdM78 »

svde wrote: Wednesday 12 August 2020 14:24
WvdM78 wrote: Wednesday 12 August 2020 12:56 I am trying to add a luftdaten sensor near my street (not my own) in domoticz via public url.
It's only meant to work with your own luftdaten sensor. A different script will need to be written for your idea.
Thanks for your reply. I have some Json / Rest api experience but not much, I'll try. If I get something working I'll share it here.
Stimpy68
Posts: 40
Joined: Wednesday 09 May 2018 16:37
Target OS: Linux
Domoticz version:
Location: The Hague, The Netherlands
Contact:

Re: Luftdaten

Post by Stimpy68 »

Hi, I have a problem when the sensor doesn't have any data, domoticz reports this with a very high spike and that messes up al the history stats (2.5PPM always reports a 32 value in domoticz).
Aantekening 2020-08-18 160208.png
Aantekening 2020-08-18 160208.png (17.49 KiB) Viewed 5869 times
Aantekening 2020-08-18 161002.png
Aantekening 2020-08-18 161002.png (51.29 KiB) Viewed 5869 times
Aantekening 2020-08-18 161031.png
Aantekening 2020-08-18 161031.png (15.38 KiB) Viewed 5869 times
Don't have a clue why once or twice a day the sensor has no data at all (no reboots occured, it is the same as rebooting the sensor, it takes about 2 minutes before the first values are measured, when the script calls for the valuas it gets "-" And the log says:

Code: Select all

 2020-08-18 15:58:00.321 Error: dzVents: Error: (3.0.2) An error occurred when calling event handler Luftdaten
2020-08-18 15:58:00.321 Error: dzVents: Error: (3.0.2) /domoticz/scripts/dzVents/generated_scripts/Luftdaten.lua:25: attempt to index a nil value (field '?')
2020-08-18 16:02:00.407 Error: dzVents: Error: (3.0.2) An error occurred when calling event handler Luftdaten
2020-08-18 16:02:00.407 Error: dzVents: Error: (3.0.2) /domoticz/scripts/dzVents/generated_scripts/Luftdaten.lua:25: attempt to index a nil value (field '?') 
Is there anyway to let the script ignore the fact that there is no data/value?
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Luftdaten

Post by waaren »

Stimpy68 wrote: Tuesday 18 August 2020 16:14 Hi, I have a problem when the sensor doesn't have any data, domoticz reports this with a very high spike and that messes up al the history stats (2.5PPM always reports a 32 value in domoticz).

Is there anyway to let the script ignore the fact that there is no data/value?
There are different versions of the script in use. If you share the version you have in use now, I will have a look.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Stimpy68
Posts: 40
Joined: Wednesday 09 May 2018 16:37
Target OS: Linux
Domoticz version:
Location: The Hague, The Netherlands
Contact:

Re: Luftdaten

Post by Stimpy68 »

waaren wrote: Tuesday 18 August 2020 17:39 There are different versions of the script in use. If you share the version you have in use now, I will have a look.
Thanks! I only have the SDS011, no other sensors on it. Here is the one I use:

Code: Select all

local FQDN = '192.168.0.85'

return {
	active = true,
	on = {
		timer = { 'every minute' },
		httpResponses = { 'luftdatenRetrieved' } -- matches callback string below
	},
	execute = function(domoticz, item)

		if (item.isTimer) then
			domoticz.openURL({
				url = 'http://' .. FQDN .. '/data.json',
				method = 'GET',
				callback = 'luftdatenRetrieved'
			})
			
		elseif (item.isHTTPResponse) then
			if (item.ok and item.isJSON) then -- statusCode == 2xx
				if tonumber(item.json.age) < 60 then
-- 1: SDS_P1 PM10, 2: SDS_P2 PM2.5, 3: DHT22 temp, 4: DHT22 hum, 5: BME280 temp, 6: BME280 baro, 7: BME280 hum
                    domoticz.devices('Fijn stof PM10').updateCustomSensor(item.json.sensordatavalues[1].value)
                    domoticz.devices('Fijn stof PM2.5').updateCustomSensor(item.json.sensordatavalues[2].value)
--					domoticz.devices('Luftdaten DHT22').updateTempHum(item.json.sensordatavalues[3].value,item.json.sensordatavalues[4].value,0)
					if (tonumber (item.json.sensordatavalues[5].value) < 100) and (tonumber (item.json.sensordatavalues[6].value) < 105000) then
--					domoticz.devices('Luftdaten BME280').updateTempHumBaro(item.json.sensordatavalues[5].value,item.json.sensordatavalues[7].value,0,(item.json.sensordatavalues[6].value/100),0)
					end
				end
			else
				-- oops
				domoticz.log('Error fetching Luftdaten data', domoticz.LOG_ERROR)
				domoticz.log(item.data, domoticz.LOG_ERROR)
			end
		end
	end
}
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Luftdaten

Post by waaren »

Stimpy68 wrote: Wednesday 19 August 2020 6:09 Here is the one I use:
Can you try with this?

Code: Select all

local FQDN = '192.168.0.85'

return {
    active = true,
    on = {
        timer = { 'every minute' },
        httpResponses = { 'luftdatenRetrieved' } -- matches callback string below
    },
    execute = function(domoticz, item)

        if (item.isTimer) then
            domoticz.openURL({
                url = 'http://' .. FQDN .. '/data.json',
                method = 'GET',
                callback = 'luftdatenRetrieved'
            })

        elseif (item.isHTTPResponse) then
            if (item.ok and item.isJSON) then -- statusCode == 2xx
                if tonumber(item.json.age) < 60 then
-- 1: SDS_P1 PM10, 2: SDS_P2 PM2.5, 3: DHT22 temp, 4: DHT22 hum, 5: BME280 temp, 6: BME280 baro, 7: BME280 hum
                    domoticz.log(item.json,domoticz.LOG_FORCE)
                    domoticz.devices('Fijn stof PM10').updateCustomSensor(item.json.sensordatavalues[1].value)
                    domoticz.devices('Fijn stof PM2.5').updateCustomSensor(item.json.sensordatavalues[2].value)
--                    domoticz.devices('Luftdaten DHT22').updateTempHum(item.json.sensordatavalues[3].value,item.json.sensordatavalues[4].value,0)
                    if item.json.sensordatavalues[5] and item.json.sensordatavalues[6] and item.json.sensordatavalues[6].value and item.json.sensordatavalues[6].value then
                        if ( ( tonumber (item.json.sensordatavalues[5].value) or 100 ) < 100) and ( (tonumber (item.json.sensordatavalues[6].value) or 105000 ) < 105000) then
    --                        domoticz.devices('Luftdaten BME280').updateTempHumBaro(item.json.sensordatavalues[5].value,
                                            item.json.sensordatavalues[7].value,0,(item.json.sensordatavalues[6].value/100),0)
                        end
                    end
                end
            else
                -- oops
                domoticz.log('Error fetching Luftdaten data', domoticz.LOG_ERROR)
                domoticz.log(item.data, domoticz.LOG_ERROR)
            end
        end
    end
}
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest