Dzień dobry.
Potrzebuję wysyłać w interwałach co 3 minuty dane z 6 czujników z Domoticza do thingspeak. Przy wykorzystaniu send to http udaję mi się wysyłać jeden. Czy ktoś jest mi w stanie pomóc znaleźć rozwiązanie? Niestety nie znam języków programowania by napisać samemu skrypt.
EDIT.
Znalazłem na francuskich stronach skrypt LUA.
Gdyby komuś miał się przydać: https://pon.fr/exporter-des-donnees-vers-le-site-thingspeak/
witam dzięki za skrypt @elpaul ale nie mogę poradzić sobie z jednym ... mam czujnik temp + wilgotność i za nic nie wiem jak to ustawić aby z jendego urządzenia wysyłał dane do field 1 i 2 wysyła mi tylko temperaturę a wilgotnosci już niestety nie lub np 2 czujniki mam do jednego urządzenia (2 temperatury)
Nie chciało mi się tłumaczyć z francuskiego, ale wszystko na tyle logiczne, że w sumie nie trzeba.
Skrypt nie mój, ale z moimi modyfikacjami.
Popatrz na mój czujnik "Klimat w domu". Wysyłam (dla testu) temperaturę, wilgotność i ciśnienie z jednego BME280 na 3 osobne fieldy thingspeak. W "canal=" podajesz który parametr z czujnika ma wysyłać do danego fielda.
Wpisz swój write key 😀
wielkie dzięki działa
Witam, w jakiej formie wpisac swoją nazwę użytkownika i hasło domoticza przed adresem bo nie za bardzo wiem jak....
ja mam bez loginu i hasła ale w ustawieniach domoticza mam zaznaczone, ze nie wymaga logowania z mojej sieci.
nie jest potrzebne dla tego skryptu używanie loginu i hasła. Nie rozumiem twojego pytania.
A ja nie moge za cholere zmusic skryptu aby zapisywal mi dane pod wskazany przeze mnie field. Usilnie zapisuje pod jeden field
Posiadam czujnik od stacji pogody ktory odczytuje temp+humi .
Skrypt wysyla dane do thingspeak w postaci:
2019-11-03 13:40:17.851 Status: LUA: --- --- --- http://XXXXXXXXXXX:XXXX/update?key=XXXXXXXXXXXXXXX&field3=16.3;68;3&field4=16.3;68;3
2019-11-03 13:40:17.851 Status: EventSystem: Fetching URL http://XXXXXXXXXX:XXXX/update?key=XXXXXXXXXXXXXXX&field3=16.3;68;3&field4=16.3;68;3 after 0.2 seconds...
2019-11-03 13:40:17.851 Status: EventSystem: Script event triggered: Thingspeak
2019-11-03 13:40:39.128 Status: LUA: Export_ThingSpeak.lua
2019-11-03 13:40:39.128 Status: LUA: --- --- --- Export vers ThingSpeak : 13:40
2019-11-03 13:40:39.128 Status: LUA: Tunex = 16.3;68;3
2019-11-03 13:40:39.128 Status: LUA: --- --- --- Heure actuelle : 13:40
2019-11-03 13:40:39.128 Status: LUA: --- --- --- &field3=16.3;68;3
2019-11-03 13:40:39.128 Status: LUA: Tunex = 16.3;68;3
2019-11-03 13:40:39.128 Status: LUA: --- --- --- Heure actuelle : 13:40
2019-11-03 13:40:39.128 Status: LUA: --- --- --- &field3=16.3;68;3&field4=16.3;68;3
2019-11-03 13:40:39.128 Status: LUA: --- --- --- http://XXXXXXXXX:XXXX/update?key=XXXXXXXXXXXXXXXX&field3=16.3;68;3&field4=16.3;68;3
Czy ktos tu wogole zaglada??
Która wersja skryptu? Pierwsza czy druga?
A sam nie wiem.
--[[script_time_export_ThingSpeak.lua
auteur : papoo
version : 1.10
date : 18/05/2016
Principe :
exporter les données de compteurs, Températures, etc.. sur le site thingspeak.com
limite de "field" par "channel" = 8
Le script est lu toutes les minutes mais n'exporte les données que toutes les 4 minutes (temps modifiable ligne 40)
]]--
-- ============================================================================
-- Variables
local debugging = true -- true ou false
local url = '192.168.1.154:8084' -- user:pass@ip:port de domoticz
local url_thingspeak = 'http://192.168.1.154:3000/'
local API_key = 'YRWL7LACTDJSRBDA' -- API Write KEY ThingSpeak
local les_devices = {}; -- pas plus de 8 devices
-- 1er compteur : name ="nom du device 1", field=field ThingSpeak associé
les_devices[#les_devices+1] = {name="Tunex", field=3}
-- 2eme compteur : name ="nom du device 2", field=field ThingSpeak associé
-- les_devices[#les_devices+1] = {name="Tunex", field=4, nom="2", canal="2"}
-- 3eme compteur : name ="nom du device 3", field=field ThingSpeak associé
-- les_devices[3] = {name="Compteur Gaz", field=3}
-- les_devices[4] = {name="Compteur Prises", field=4}
-- les_devices[5] = {name="Compteur Lumières", field=5}
-- les_devices[6] = {name="Compteur Technique", field=6}
-- les_devices[7] = {name="DJU", field=7}
local fields =""
-- ============================================================================
commandArray = {}
function voir_les_logs (s)
if (debugging) then
print (s);
end
end
now=os.date("*t")
if now.min % 4 == 0 then -- export des données toutes les 4 minutes
print('Export_ThingSpeak.lua')
voir_les_logs("--- --- --- Export vers ThingSpeak : "..now.hour.. ":" ..now.min,debugging);
for i,d in ipairs(les_devices) do
v=otherdevices[d.name] -- v is the value attached to device d
voir_les_logs(d.name.." = "..(v or "nil"),debugging);
voir_les_logs("--- --- --- Heure actuelle : ".. now.hour .. ":" ..now.min,debugging);
if v==nil or v=="" or v=="Open" then -- multi valued ?
v=otherdevices_svalues[d.name] or ""
voir_les_logs("--- --- --- ".. d.name .." = ".. v .." & field".. d.field ,debugging);
end
fields = fields .. '&field'.. d.field .. '=' .. v
voir_les_logs("--- --- --- " .. fields ,debugging);
end
voir_les_logs("--- --- --- ".. url_thingspeak ..'update?key=' .. API_key .. fields ,debugging);
commandArray[1]={['OpenURL']=url_thingspeak ..'update?key=' .. API_key .. fields }
end -- if now
-- ============================================================================
return commandArray
No to nie będzie działać, bo ten skrypt czyta tylko jedną wartość z czujnika.
Użyj skryptu z mojego drugiego postu. Tam określasz którą wartość jeżeli czujnik podaje więcej niż jedną ma wysyłać.
Ten twoj tez probowalem
Twoj wywala cos takiego. Mimo ze ustawiony jest field 3 to laduje do field 1.
2019-11-09 07:57:00.207 Status: LUA: =========== export ThingSpeak (v1.2) ===========
2019-11-09 07:57:00.207 Status: LUA: --- --- --- Export vers ThingSpeak : 7:57
2019-11-09 07:57:00.208 Status: LUA: --- --- --- Tunex = 8.6;88;3
2019-11-09 07:57:00.208 Status: LUA: --- --- --- canal = 1
2019-11-09 07:57:00.208 Status: LUA: --- --- --- valeurs multiples dans Tunex = 8.6;88;3
2019-11-09 07:57:00.208 Status: LUA: --- --- --- Nb de point virgule = 2
2019-11-09 07:57:00.208 Status: LUA: --- --- --- valeur 1 = 8.6
2019-11-09 07:57:00.208 Status: LUA: --- --- --- valeur 2 = 88
2019-11-09 07:57:00.208 Status: LUA: --- --- --- valeur 3 = 3
2019-11-09 07:57:00.208 Status: LUA: --- --- --- valeur 4 = nil
2019-11-09 07:57:00.208 Status: LUA: --- --- --- valeur 5 = nil
2019-11-09 07:57:00.208 Status: LUA: --- --- --- http://192.168.1.154:3000/update?key=YRWL7LACTDJSRBDA&field1=8.6
2019-11-09 07:57:00.208 Status: LUA: ========= Fin export ThingSpeak (v1.2) =========
Jak ustawic zeby ladowal temp do field 3 a humi do field4 albo chociaz samo temp do field 3
2019-11-09 07:57:00.208 Status: EventSystem: Fetching URL http://192.168.1.154:3000/update?key=YRWL7LACTDJSRBDA&field1=8.6 after 0.2 seconds...
local nom_script = "export ThingSpeak"
local version = "1.2"
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local url_thingspeak = 'http://192.168.1.154:3000/'
local API_key = 'YRWL7LACTDJSRBDA' -- creer une variable de type chaine contenant votre code API Write KEY ThingSpeak
-- si vous souhaitez remonter les valeurs d'un device qui en comporte plusieurs (ex: température et hygrometrie extérieure)
-- renseigner le nom de la valeur à remonter (à partir de la deuxieme valeur) ainsi que le numero d'ordre dans canal (voir exemple ci dessous field 7 )
local les_devices = {}; -- pas plus de 8 devices
-- 1er compteur : device ="nom du device 1", field=field ThingSpeak associé, nom=nom du device si canal >1, canal=si valeur multiple n° du canal à utiliser
les_devices[#les_devices+1] = {device="Tunex", field="3", nom="", canal="1"}
-- 2eme compteur : device ="nom du device 2", field=field ThingSpeak associé
-- les_devices[#les_devices+1] = {device="Tunex", field="3", nom="2", canal="2"}
Patrz na czujniki o tej samej nazwie u mnie:
les_devices[#les_devices+1] = {device="Oregon BTH", field=1, nom="", canal="1"}
les_devices[#les_devices+1] = {device="Oregon BTH", field=2, nom="", canal="2"}
les_devices[#les_devices+1] = {device="Ciśnienie", field=3, nom="", canal=""}
les_devices[#les_devices+1] = {device="Oregon Wiatr", field=4, nom="", canal="3"}
les_devices[#les_devices+1] = {device="Oregon Wiatr", field=5, nom="", canal=""}
les_devices[#les_devices+1] = {device="Open UV - UV", field=6, nom="", canal=""}
les_devices[#les_devices+1] = {device="Oregon Deszcz", field=7, nom="", canal=""}
No i.....?
A daj Oregon BTH pod field 4 i 5 i zobaczysz co bedzie. Czy nie bedzie go ladowac do field 1 i 2.
Mam ustawiony czujnik identycznie jak u ciebie
les_devices[#les_devices+1] = {device="Tunex", field="3", nom="", canal="1"}
Jest ustawiony na field 3 a laduje go pod field 1 . Dlaczego?
Co robi parametr nom='' '' ?
nom to własna nazwa fielda którą ma wysyłać jeżeli chcesz
Thingspeak zawsze będzie zaczynał od pierwszego fielda w tym przypadku.
No to jak mam ustawic zeby wysylal mi Tunex pod field 3 zamiast pod field 1 ?
Bo z tego co obserwuje to nie ma szans zeby skrypt wysylal mi dane pod field ktory ja chce a nie pod ktory on chce:)
W takim przypadku musisz coś wysyłać pod field 1 i 2
Albo w ustawieniach thingspeaka dezaktywować field 1 i 2