Page 1 of 1
Going from scientific to number with decimal/period
Posted: Friday 22 January 2021 21:41
by YOYO
Hello,
So im still working on a script thats gonna tell me how much energy im taking from the city heating net here.
Therefor im calculation how much Gj im using on a specific moment.
The problem is that the result of the calculation comes with a verry small number:
Code: Select all
2021-01-22 21:38:00.410 Status: dzVents: Actueel vermogen van Stadsverwarming = 1.0876193105556e-05 Gj
When i put this into a virtual sensor its telling me im using a full Gj on a moment notice.
Im guessing the counter cant handle scientific numbers like e-05.
Is there a way to tell dzvents not to use the scientific notation but a normal (Real in programming language) notation?
Re: Going from scientific to number with decimal/period
Posted: Friday 22 January 2021 22:17
by waaren
YOYO wrote: ↑Friday 22 January 2021 21:41
Is there a way to tell dzvents not to use the scientific notation but a normal (Real in programming language) notation?
dzVents = Lua and in Lua you can do
Code: Select all
local scientific = 1.0876193105556e-05
print(string.format("%f",scientific))
Re: Going from scientific to number with decimal/period
Posted: Friday 22 January 2021 22:54
by YOYO
Hi Waaren,
Thats works for printing i see.
But to transfer this to a virtual sensor cant be working in my reasoning as you make a string out of a number?
Try'd to look up if a .format is available for numbers but cant find something like that?
Re: Going from scientific to number with decimal/period
Posted: Friday 22 January 2021 23:07
by waaren
YOYO wrote: ↑Friday 22 January 2021 22:54
But to transfer this to a virtual sensor cant be working in my reasoning as you make a string out of a number?
Did you try ? I see no reason why it should not work.
To be sure I tested with
Code: Select all
return {
on = {
timer = {
'every minute',
}
},
execute = function(domoticz, device)
local scientific = 1.0876193105556e+07
print(string.format("%f",scientific))
domoticz.devices(823).updateCounter(string.format("%f",scientific))
end
}
executes without issues.
Re: Going from scientific to number with decimal/period
Posted: Friday 22 January 2021 23:12
by YOYO
Yes i did and got this one back:
Code: Select all
2021-01-22 23:10:00.553 Error: dzVents: Error: (3.0.2) Stadsverwarming: /config/scripts/dzVents/generated_scripts/Script #3.lua:59: attempt to index a nil value
Re: Going from scientific to number with decimal/period
Posted: Friday 22 January 2021 23:18
by waaren
YOYO wrote: ↑Friday 22 January 2021 23:12
Yes i did and got this one back:
Code: Select all
2021-01-22 23:10:00.553 Error: dzVents: Error: (3.0.2) Stadsverwarming: /config/scripts/dzVents/generated_scripts/Script #3.lua:59: attempt to index a nil value
As I showed in my previous post this error is not because of the string / number conversion.
Maybe I can help if you also share the script.
Re: Going from scientific to number with decimal/period
Posted: Friday 22 January 2021 23:35
by YOYO
waaren wrote: ↑Friday 22 January 2021 23:18
As I showed in my previous post this error is not because of the string / number conversion.
Maybe I can help if you also share the script.
Seems youre right again.
I am missing the check on syntax of defined variables because a small type error is easily made.
Corrected the error and now it seems to work.
The code is no secret:
Code: Select all
return {
on = {
timer = {
'every minute', -- causes the script to be called every minute
},
},
data = {
Gj_old = { initial = 0 }
},
logging =
{
level = domoticz.LOG_DEBUG,
marker = 'Stadsverwarming',
},
execute = function(domoticz, timer)
-- Inlezen van diverse apparaten rondom stadsverwarming (Wireless mBus)
local TempInSensor = domoticz.devices('Stadsverwarming Aanvoer')
local TempOutSensor = domoticz.devices('Stadsverwarming Retour')
local DebietSensor = domoticz.devices('Debiet stadsverwarming')
local Temp_IN = TempInSensor.state
local Temp_Retour = TempOutSensor.state
local Debiet = DebietSensor.state
-- Bereken Delta T van inkomend en uitgaand
local Delta_T = Temp_IN - Temp_Retour
print('Delta T van Stadsverwarming = ' .. Delta_T ..' °C' )
-- Omzetten van debiet in m3/h naar dm3/h
local Debiet_dm3 = Debiet * 1000
print('Debiet van Stadsverwarming = ' .. Debiet_dm3 .. ' dm3/h')
-- Omrekenen van het debiet in dm3 naar een massa in kg/h
local Water_M = 1000 * Debiet --(Debiet / 3600)
print('Watermassa van Stadsverwarming = ' .. Water_M .. ' kg/h')
-- Omrekenen van de watermassa naar J/h volgens formule: Q=m*c*(delta)T
local Actueel_Vermogen_Jh = Water_M * 4186 * Delta_T
print('Actueel vermogen van Stadsverwarming = ' .. Actueel_Vermogen_Jh .. ' J/h')
-- Omrekenen van J/h naar Watts om in virutele sensor te stoppen (vermogen in W)
local Actueel_Vermogen_W = Actueel_Vermogen_Jh / 3600
print('Actueel vermogen van Stadsverwarming = ' .. Actueel_Vermogen_W .. ' W')
-- Omrekenen van Watts naar Kilowatts
local Actueel_Vermogen_KW = Actueel_Vermogen_W / 1000
print('Actueel vermogen van Stadsverwarming = ' .. Actueel_Vermogen_KW .. ' KW')
-- Omrekenen van Watts naar kWh om in virtuele sensor te stoppen (vermogen in kwh)
local Actueel_Vermogen_kWh = Actueel_Vermogen_W / 3600000
print('Actueel vermogen van Stadsverwarming = ' .. Actueel_Vermogen_kWh .. ' kWh')
-- Omrekenen van kwh naar Gj om de meterstand bij te kunnen houden
local Actueel_Vermogen_Gj = Actueel_Vermogen_kWh * 0.0036
print('Actueel vermogen van Stadsverwarming = ' .. Actueel_Vermogen_Gj .. ' Gj')
-- Rekenen om de counter voor de Gj op te kunnen tellen
-- Vastleggen van het nieuwe berekende vermogen in Gj
local Gj_add = Actueel_Vermogen_Gj
-- Nieuwe waarde vastleggen door oude waarde op te halen uit geheugen en het huidig berekende getal op te tellen
local Gj_new = domoticz.data.Gj_old + Gj_add
-- Debug printen van beide waardes
print('' .. domoticz.data.Gj_old .. ' Gj')
print('' .. Gj_new .. ' Gj')
-- Zodra er gerekend is nieuwe waarde in geheugen stoppen
domoticz.data.Gj_old = Gj_new
-- Doorzetten van nieuwe waardes naar devices
domoticz.devices('Verbruik Stadsverwarming in Gj').updateCounter(string.format("%f",Gj_new),0)
domoticz.devices('Verbruik Stadsverw. in Watt').updateElectricity(domoticz.utils.round(Actueel_Vermogen_W,1),Actueel_Vermogen_kWh)
end
}