UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Witam:)
Mam czujnik czystości powietrza z którego chciałbym mieć też odczyty w Domoticzu.
Z czujnika odczytuję dane po wpisaniu http://IP_CZUNIKA/data.json i otrzymuję dane w takim formacie:
{"software_version": "NAMF-2020-35", "age":"109", "measurements":"12620", "sensordatavalues":[{"value_type":"SDS_P1","value":"16.15"},{"value_type":"SDS_P2","value":"6.85"},{"value_type":"BME280_temperature","value":"0.61"},{"value_type":"BME280_humidity","value":"77.41"},{"value_type":"BME280_pressure","value":"100426.16"},{"value_type":"HECA_temperature","value":"3.47"},{"value_type":"HECA_humidity","value":"75.41"},{"value_type":"samples","value":"125682"},{"value_type":"min_micro","value":"1105"},{"value_type":"max_micro","value":"114772"},{"value_type":"signal","value":"-81"}]}
W jaki sposób można odczytać te dane w Domoticzu i przypisać pod jakiś konkretny wskaźnik?
@prychol z tego Air Monitor możesz pobierać dane za pomocą żądań http metoda GET . Najbardziej optymalny do tego jest skrypt dzVents . Przykład ze strony wiki
return { on = { timer = { 'every 5 minutes' }, httpResponses = { 'energyRetrieved' } }, execute = function ( domoticz , item ) if ( item . isTimer ) then domoticz . openURL ({ url = 'http: // url / to / service' , method = 'GET' , callback = 'energyRetrieved' }) elseif (pozycja . isHTTPResponse ) to if ( item . ok ) then - statusCode == 2xx local current = item . json . konsumpcja domoticz . urządzenia ( „myCurrentUsage” ). updateEnergy ( current ) end end end }
Zmieniając dane na np temperatura zamiast current , wstawiając odpowiedni interwał czasowy i poprawny URL masz pobieranie temp do wirtualnego czujnika w domoticz
Dziękuję za odpowiedź:)
Trochę mnie oświeciłeś, bo mam przecież w podobny sposób zrobione odczyty danych o COVID19 ze strony:
https://coronavirus-19-api.herokuapp.com/countries/Poland
Jak znajdę trochę czasu i uda mi się to zrobić to dam znać, a jak mi się nie uda to będę dopytywał dalej:)
@kosiarz78 cześć, niestety nie działałem już z tym z powodu braku czasu
Po wielu godzinach udało mi sie to ogarnąć 🙂 działa i to najważniejsze tylko chyba "Nam" i cały projekt upadł już..
@kosiarz78 super, a podpowiedziałbyś jak to zrobić? może w jakiejś wolnej chwili dodałbym w końcu te odczyty do Domoticza 😉
DzVents w domoticz. trzeba utworzyć wirtualne czujniki o nazwach z kodu i dodać kod do domoticz:
local FQDN = 'ip.czujnika' 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 for i, t2 in pairs(item.json.sensordatavalues) do if (t2.value_type == 'SDS_P1') then domoticz.devices('Luftdaten PM10').updateCustomSensor(t2.value) elseif (t2.value_type == 'SDS_P2') then domoticz.devices('Luftdaten PM2.5').updateCustomSensor(t2.value) elseif (t2.value_type == 'HECA_temperature') then temperature = t2.value elseif (t2.value_type == 'HECA_humidity') then humidity = t2.value elseif (t2.value_type == 'BME280_temperature') then BME280_temperature = t2.value elseif (t2.value_type == 'BME280_pressure') then BME280_pressure = t2.value/100 elseif (t2.value_type == 'BME280_humidity') then BME280_humidity = t2.value end end -- if (SDS_P1 ~= nil) then -- domoticz.devices('Luftdaten PM10').updateCustomSensor(SDS_P1) -- end -- if (SDS_P2 ~= nil) then -- domoticz.devices('Luftdaten PM2.5').updateCustomSensor(SDS_P2) -- end if (HECA_temperature ~= nil and HECA_humidity ~= nil) then domoticz.devices('Luftdaten DHT22').updateTempHum(temperature,humidity,0) end if (BME280_temperature ~= nil and BME280_humidity ~= nil and BME280_pressure ~= nil) then -- if (tonumber (BME280_temperature) < 100) and (tonumber (BME280_pressure) < 1050) then domoticz.devices('Luftdaten BME280').updateTempHumBaro(BME280_temperature,BME280_humidity,0,BME280_pressure,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 }
@kosiarz78 dziękuję Ci bardzo:)
a działają Ci wszystkie pomiary, bo u mnie odczytuje tylko BME 280, a brak mam odczytów z HECA oraz PM2.5 i PM10?
sprawdź czy json widać : http://192.168.x.x/data.json?
jak widać to ok
trzeba dostosować nazwy czujników z kodu do jsnon
nazwy: Luftdaten PM2.5, Luftdaten PM10 (oba Custom Sensor)
@kosiarz78 a widzisz, ten typ sensora źle wybrałem, już jest ok:) Wielkie dzięki jeszcze raz:D