Page 1 of 1

LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by careskou
Har ett projekt för att övervaka en tank via min ZNet. Har en MIMOLight som med funktioner som BinarySwitch och Multilevelsensor. Allt funkar fint och jag kan avläsa mätvärden ( fyra siffror, ingen speciell typ) och jag kan manövrera switchen allt via Telldus live. I appen visas dock inget sensorvärde.

Mitt problem/önskan jag vill översätta mätvärdet till % och få det att visas i appen.

Jag har skapat ett första försök till LUA kod och kan manövrera switchen men när jag skall försöka läsa av mätvärdet har jag problem. Jag utgår från LUA exemplet att ändra temeraturvärdet utifrån vindvärdet.
Jag kan se i Live att sensorn har ID 4

Code: Select all

local tankSensor = 4
local deviceManager = require "telldus.DeviceManager"
local trigger = "Tank_level" -- Name of the device
local tankValue = deviceManager:device(tankSensor).sensorValue()
Ovanstående kod ger följande felmeddelande:
Could not load lua script Tanklevel.lua: unbound method sensorValue() must be called with DeviceNode instance as first argument (got nothing instead)

Hur skall en "DeviceNode instance" programmeras ?

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
Börja med att testa att ändra . till :

Code: Select all

local tankValue = deviceManager:device(tankSensor):sensorValue()
Sen tror jag att deviceManager:device() returnerar tomt i ditt fall. Du bör ha en koll på detta:

Code: Select all

local tankDevice = deviceManager:device(tankSensor)
if tankDevice == nil then
  return
end
Slutligen finns det en smidigare funktion att plocka ut enheterna än att använda device id.

Code: Select all

local tankDevice = deviceManager:findByName('Namnet på din tanksensor')

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by careskou
Med koden nedan får jag inget felmeddelande men heller ingen utdata när jag ändrar sensorns läge, vad är det jag missar?

Code: Select all

local deviceManager = require "telldus.DeviceManager"
local tankSensor = deviceManager:findByName('Tank_level')

local tankDevice = deviceManager:device(tankSensor)
if tankDevice == nil then
  return
end

local tankValue = deviceManager:device(tankSensor):sensorValue()

function onSensorValueUpdated(device, valueType, value, scale)
	print(tankValue)
end

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
Om det är hela scriptet så ser det inte så rätt ut. Du bör väl inte hämta värdet innan funktionen har körts?

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by careskou
Jag har lite problem att förstå logiken, svårt att läsa sig till i LUA tutorials.

Jag har en device som heter "Tank_level"

Code: Select all

local deviceManager = require "telldus.DeviceManager"
local tankSensor = deviceManager:findByName('Tank_level')
Detta funkar och jag kan manövrera switchen

När jag skall försöka avläsa sensorns värde definierar jag

Code: Select all

local tankDevice = deviceManager:device(tankSensor)
Fråga: Hur vet jag som skall stå inom parentesen? det är en multilevelsensor på device "Tank_Level" jag vill avläsa.
I Telldus Live har både Switchen och Sensorn samma namn

När jag sedan vill hämta värdet är detta rätt kod?

Code: Select all

tankValue = deviceManager:device(tankSensor):sensorValue()
Och sedan visa värdet

Code: Select all

Print(sensorValue)

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
careskou wrote:När jag skall försöka avläsa sensorns värde definierar jag

Code: Select all

local tankDevice = deviceManager:device(tankSensor)
Detta är ju lite redundant. Du har ju redan hämtat ut devicen ovan med findByName.
I Telldus Live har både Switchen och Sensorn samma namn
I Telldus Live! är sensorer och enheter uppdelade. I lua är det en och samma enhet.

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by careskou
Fortfarande svårt att få några värden ur sensorn

Code: Select all

 local deviceManager = require "telldus.DeviceManager"
    local tankSensor = deviceManager:findByName('Tank_level')

    function onSensorValueUpdated(device, valueType, value, scale)
    local tankValue = deviceManager:device(tankSensor):sensorValue()  
		print(tankValue, tankSensor)
    end
Ovanstående kod går igång utan fel men vid första uppdatering av sensorn får jag nedanstående felmeddelande
"Could not execute function onSensorValueUpdated: [string "<python>"]:5: attempt to index a nil value"
Något tips vad det är som är fel?

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
Det verkar inte som du läste mitt inlägg ovan. DeviceManager:device() tar endast ett id som parameter. Du kan inte skicka in en device. Vet inte riktigt vad det skulle returnera då?
Funktionen är till för att få ut en device. Det behöver du inte göra två gånger.

Sen borde du också ha en koll på vilken sensor som uppdateras i metoden, det är inte säkert att det alltid är din tank sensor som uppdaterats.

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by careskou
Läst men inte förstått..
Det är uppenbart att jag behöver studera hur LUA är implementerat i Znet. Har läst en del LUA tutorials men inte hittat något som hjälper för denna applikation, förutom när man väl har hämtat ut data sensorer etc.
Finns det något tips hur man bäst lär sig?

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag

Re: LUA för MIMOLite och ZNet Light

Posted: Fri Mar 17, 2023 9:45 am
by careskou
Tack för tipsen nu ramlade poletten ned. Med nedanstående kod fick jag ut sensorvärdet och kan börja räkna om värdet till % mm

Code: Select all

local deviceManager = require "telldus.DeviceManager"

	function onSensorValueUpdated()
	local device = deviceManager:findByName('Tank_level') 
	if device == nil then
		return
	end
	if device:name() ~= 'Tank_level' then
		return
	end
	local Tankvalue = device:sensorValue(0,1)
	local TankPCT = Tankvalue/150 
	
	print("Sensor uppdatering %s %s ",  Tankvalue , TankPCT )
		
end
utdata
Script Tanklevel.lua loaded

Sensor uppdatering 1670 11.1333333333