Page 78 of 184

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 9:19
by SwordFish
Is it save to use the moon script again? ;)

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 9:25
by mAiden88
htilburgs wrote:Like to share?
Ofc. Will post it later to Day.

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 9:34
by wizjos
bierlaagh wrote: partly conformed
Only

Code: Select all

n='00'
should be

Code: Select all

n='50'
Although my moon.50.png is New Moon and moon.00.png is a full moon
You're completely right! Will fix it. Thanks! Still some minor issues. I'm checking it...

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 9:44
by SwordFish
wizjos wrote:
bierlaagh wrote: partly conformed
Only

Code: Select all

n='00'
should be

Code: Select all

n='50'
Although my moon.50.png is New Moon and moon.00.png is a full moon
You're completely right! Will fix it. Thanks! Still some minor issues. I'm checking it...
Great
Than i wait till its fix before i turn the script on again

Edit;
couldn't wait some i copied the last version of the script a few page back, turned the script on a get this error;

Code: Select all

2017-04-27 09:57:40.874 Error: EventSystem: in Moon: [string "-- Variables to customize -------------------..."]:122: attempt to call field 'round' (a nil value)

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 10:08
by wizjos
OK I think I've got the moonphase lua script working again. I made the mistake to assume lua has a function 'round' when porting it from js to lua.
But now I think I've 'floored' the problem :lol:
New Moonphase LUA script:

Code: Select all

-- Variables to customize ------------------------------------------------
local moonpicture = "MoonPicture"           -- name of the uservar to write the name of the moonphase picture to
local checkvar = "MoonphaseCheck"           -- name of the uservar to check if update is allowed
local checktime = 3600                      -- check allowed every x seconds 3600 = 60 min. Check the wundergroud API limitation before changing this
local city = "<your town>"                        -- Your city for Wunderground API
local countryCode = "<YOUR COUNTRY CODE>"                    -- Your country code for Wunderground API
local idxmoonpercentage ='125'              -- Your virtual moon percentage illuminated Device ID
local idxmoonage ='131'                     -- Your virtual moon age Device ID
local idxmoonphase ='132'                   -- Your virtual moon phase Device ID
local idxmoonrise='124'                     -- Your virtual moon rise variable ID
local idxmoonset='127'                      -- Your virtual moon set variable ID
local wuAPIkey = "<your key>"         -- Your Weather Underground API Key
local DOMO_IP = "<your domo ip>"            -- Domoticz ip address
local DOMO_PORT = "<your domo port>"                    -- Domoticz port
local tempfilename = '/var/tmp/phase.tmp'   -- can be anywhere writeable
local debug=false                            -- false, true for domoticz log
-------------------------------------------------------------------------

function file_exists(path)
    -- function to check if a file exists
    local file = io.open(path, "rb")
    if file then file:close() end
    return file ~= nil
end

function timedifference(s)
    -- function to determine the difference in seconds between the current time and a given one
    year = string.sub(s, 1, 4)
    month = string.sub(s, 6, 7)
    day = string.sub(s, 9, 10)
    hour = string.sub(s, 12, 13)
    minutes = string.sub(s, 15, 16)
    seconds = string.sub(s, 18, 19)
    t1 = os.time()
    t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
    difference = os.difftime (t1, t2)
    return difference
end

function may_update(device, timeelapsed)
    -- function to check whether an update is allowed
    return uservariables_lastupdate[device] == nil or timedifference(uservariables_lastupdate[device]) >= timeelapsed
end

commandArray = {}
    time = os.date("*t")
    url='http://api.wunderground.com/api/'..wuAPIkey..'/astronomy/q/'..countryCode..'/'..city..'.json'
    if (may_update(checkvar,checktime)==true) or (file_exists(tempfilename)==false) then
       -- read API Wunderground
        if debug then print("Moonphase - Collecting data from: "..url) end
        os.execute('curl -s '..url..' > '..tempfilename)
        -- NOTE: if the command above doens't work in your situation try
        -- read = os.execute('curl -s -o '..tempfilename..' "'..url..'"')
        -- instead! Thanks to EdKo66
        file = io.open(tempfilename, "r")
        s= file:read("*a")
        s = (string.gsub(s, "%c+", ""))
        file:close()

        -- moonrise
        moonriseHour, moonriseMinute = string.match(s, [["moonrise": {"hour":"(%d+)","minute":"(%d+)"]])
        if debug then print("Moonrise:\t"..moonriseHour..":"..moonriseMinute) end
        -- moonset
        moonsetHour, moonsetMinute = string.match(s, [["moonset": {"hour":"(%d+)","minute":"(%d+)"]])
        if debug then print("Moonset:\t"..moonsetHour..":"..moonsetMinute) end

        -- percentage of moon illuminated
        percentIlluminated = string.match(s, [["percentIlluminated":"(%d+)"]])
        if debug then print("Percent:\t"..percentIlluminated.."%") end

        -- age of moon since last new moon
        age = string.match(s, [["ageOfMoon":"(%d+)"]])
        if debug then print("Age:\t\t"..age) end

        -- Phase of the moon
        -- set the moonPhaseIcon to your appropriate icon number (8 x)
        moonPhase = string.match(s, [["phaseofMoon":"(.-)"]])
        if moonPhase=="New Moon" then
            moonPhase = "Nieuwe maan"
            is_waxing = true
        end
        if moonPhase=="Waxing Crescent" then
            moonPhase = "Wassende halve maan"
            is_waxing = true
        end
        if moonPhase=="First Quarter" then
            moonPhase = "Eerste kwartier"
            is_waxing = true
        end
        if moonPhase=="Waxing Gibbous" then
            moonPhase = "Wassende maan"
            is_waxing = true
        end
        if moonPhase=="Full" then
            moonPhase = "Volle maan"
            is_waxing = false
        end
        if moonPhase=="Waning Gibbous" then
            moonPhase = "Afnemende maan"
            is_waxing = false
        end
        if moonPhase=="Last Quarter" then
            moonPhase = "Laatste kwartier"
            is_waxing = false
        end
        if moonPhase=="Waning Crescent" then
            moonPhase = "Afnemende halve maan"
            is_waxing = false
        end

        -- calculate moonphase picture
        if percentIlluminated == '0' then
            n='50'
        else
            if waardecheck==false then
                picnumber=math.floor(math.abs(percentIlluminated-100)/2)
                n=tostring(picnumber)
                if n.length==1 then
                    n='0'+n
                end
            else
                picnumber=math.floor(50+(percentIlluminated/2))
                if picnumber == 100 then
                  picnumber=99
              end
            end
            n=tostring(picnumber)
        end
        picture='moon.'..n..'.png'
        if debug then print('Picture number: '..n..' '..'Picture name: '..picture) end
   
        commandArray['Variable:'..checkvar]=moonPhase
        commandArray['Variable:'..moonpicture]=picture
        commandArray[1] = {['UpdateDevice'] = idxmoonphase.."|0|"..moonPhase}
        commandArray[2] = {['UpdateDevice'] = idxmoonrise.."|0|"..moonriseHour..":"..moonriseMinute}
        commandArray[3] = {['UpdateDevice'] = idxmoonset.."|0|"..moonsetHour..":"..moonsetMinute}
        commandArray[4] = {['UpdateDevice'] = idxmoonage.."|0|"..age}
        commandArray[5] = {['UpdateDevice'] = idxmoonpercentage.."|0|"..percentIlluminated}
    else
        if debug then print("MoonPhase - Update not allowed: Difference is "..timedifference(uservariables_lastupdate[checkvar]).." seconds") end
    end

return commandArray

Please confirm...

Regards
Wizjos

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 10:12
by SwordFish
wizjos wrote:OK I think I've got the moonphase lua script working again. I made the mistake to assume lua has a function 'round' when porting it from js to lua.
But now I think I've 'floored' the problem :lol:
New Moonphase LUA script:

Code: Select all

-- Variables to customize ------------------------------------------------
local moonpicture = "MoonPicture"           -- name of the uservar to write the name of the moonphase picture to
local checkvar = "MoonphaseCheck"           -- name of the uservar to check if update is allowed
local checktime = 3600                      -- check allowed every x seconds 3600 = 60 min. Check the wundergroud API limitation before changing this
local city = "<your town>"                        -- Your city for Wunderground API
local countryCode = "<YOUR COUNTRY CODE>"                    -- Your country code for Wunderground API
local idxmoonpercentage ='125'              -- Your virtual moon percentage illuminated Device ID
local idxmoonage ='131'                     -- Your virtual moon age Device ID
local idxmoonphase ='132'                   -- Your virtual moon phase Device ID
local idxmoonrise='124'                     -- Your virtual moon rise variable ID
local idxmoonset='127'                      -- Your virtual moon set variable ID
local wuAPIkey = "<your key>"         -- Your Weather Underground API Key
local DOMO_IP = "<your domo ip>"            -- Domoticz ip address
local DOMO_PORT = "<your domo port>"                    -- Domoticz port
local tempfilename = '/var/tmp/phase.tmp'   -- can be anywhere writeable
local debug=false                            -- false, true for domoticz log
-------------------------------------------------------------------------

function file_exists(path)
    -- function to check if a file exists
    local file = io.open(path, "rb")
    if file then file:close() end
    return file ~= nil
end

function timedifference(s)
    -- function to determine the difference in seconds between the current time and a given one
    year = string.sub(s, 1, 4)
    month = string.sub(s, 6, 7)
    day = string.sub(s, 9, 10)
    hour = string.sub(s, 12, 13)
    minutes = string.sub(s, 15, 16)
    seconds = string.sub(s, 18, 19)
    t1 = os.time()
    t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
    difference = os.difftime (t1, t2)
    return difference
end

function may_update(device, timeelapsed)
    -- function to check whether an update is allowed
    return uservariables_lastupdate[device] == nil or timedifference(uservariables_lastupdate[device]) >= timeelapsed
end

commandArray = {}
    time = os.date("*t")
    url='http://api.wunderground.com/api/'..wuAPIkey..'/astronomy/q/'..countryCode..'/'..city..'.json'
    if (may_update(checkvar,checktime)==true) or (file_exists(tempfilename)==false) then
       -- read API Wunderground
        if debug then print("Moonphase - Collecting data from: "..url) end
        os.execute('curl -s '..url..' > '..tempfilename)
        -- NOTE: if the command above doens't work in your situation try
        -- read = os.execute('curl -s -o '..tempfilename..' "'..url..'"')
        -- instead! Thanks to EdKo66
        file = io.open(tempfilename, "r")
        s= file:read("*a")
        s = (string.gsub(s, "%c+", ""))
        file:close()

        -- moonrise
        moonriseHour, moonriseMinute = string.match(s, [["moonrise": {"hour":"(%d+)","minute":"(%d+)"]])
        if debug then print("Moonrise:\t"..moonriseHour..":"..moonriseMinute) end
        -- moonset
        moonsetHour, moonsetMinute = string.match(s, [["moonset": {"hour":"(%d+)","minute":"(%d+)"]])
        if debug then print("Moonset:\t"..moonsetHour..":"..moonsetMinute) end

        -- percentage of moon illuminated
        percentIlluminated = string.match(s, [["percentIlluminated":"(%d+)"]])
        if debug then print("Percent:\t"..percentIlluminated.."%") end

        -- age of moon since last new moon
        age = string.match(s, [["ageOfMoon":"(%d+)"]])
        if debug then print("Age:\t\t"..age) end

        -- Phase of the moon
        -- set the moonPhaseIcon to your appropriate icon number (8 x)
        moonPhase = string.match(s, [["phaseofMoon":"(.-)"]])
        if moonPhase=="New Moon" then
            moonPhase = "Nieuwe maan"
            is_waxing = true
        end
        if moonPhase=="Waxing Crescent" then
            moonPhase = "Wassende halve maan"
            is_waxing = true
        end
        if moonPhase=="First Quarter" then
            moonPhase = "Eerste kwartier"
            is_waxing = true
        end
        if moonPhase=="Waxing Gibbous" then
            moonPhase = "Wassende maan"
            is_waxing = true
        end
        if moonPhase=="Full" then
            moonPhase = "Volle maan"
            is_waxing = false
        end
        if moonPhase=="Waning Gibbous" then
            moonPhase = "Afnemende maan"
            is_waxing = false
        end
        if moonPhase=="Last Quarter" then
            moonPhase = "Laatste kwartier"
            is_waxing = false
        end
        if moonPhase=="Waning Crescent" then
            moonPhase = "Afnemende halve maan"
            is_waxing = false
        end

        -- calculate moonphase picture
        if percentIlluminated == '0' then
            n='50'
        else
            if waardecheck==false then
                picnumber=math.floor(math.abs(percentIlluminated-100)/2)
                n=tostring(picnumber)
                if n.length==1 then
                    n='0'+n
                end
            else
                picnumber=math.floor(50+(percentIlluminated/2))
                if picnumber == 100 then
                  picnumber=99
              end
            end
            n=tostring(picnumber)
        end
        picture='moon.'..n..'.png'
        if debug then print('Picture number: '..n..' '..'Picture name: '..picture) end
   
        commandArray['Variable:'..checkvar]=moonPhase
        commandArray['Variable:'..moonpicture]=picture
        commandArray[1] = {['UpdateDevice'] = idxmoonphase.."|0|"..moonPhase}
        commandArray[2] = {['UpdateDevice'] = idxmoonrise.."|0|"..moonriseHour..":"..moonriseMinute}
        commandArray[3] = {['UpdateDevice'] = idxmoonset.."|0|"..moonsetHour..":"..moonsetMinute}
        commandArray[4] = {['UpdateDevice'] = idxmoonage.."|0|"..age}
        commandArray[5] = {['UpdateDevice'] = idxmoonpercentage.."|0|"..percentIlluminated}
    else
        if debug then print("MoonPhase - Update not allowed: Difference is "..timedifference(uservariables_lastupdate[checkvar]).." seconds") end
    end

return commandArray

Please confirm...

Regards
Wizjos
No errors so far :)

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 10:13
by wizjos
SwordFish wrote: couldn't wait some i copied the last version of the script a few page back, turned the script on a get this error;

Code: Select all

2017-04-27 09:57:40.874 Error: EventSystem: in Moon: [string "-- Variables to customize -------------------..."]:122: attempt to call field 'round' (a nil value)
Should be gone now... LUA doesn't know of a function 'round'. Used 'floor' instead.

Wizjos

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 10:14
by wizjos
SwordFish wrote:No errors so far :)
8-) Thanks for testing! Revised original post as well

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 10:27
by EdwinK
htilburgs wrote:
When u use the following command, you can still install in the map 'dashboard' if you like:

Code: Select all

git clone https://github.com/robgeerts/dashticz_v2.git dashboard
And what if you want to put it in the root of the server?

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 10:47
by mvveelen
mvveelen wrote:I was wondering: Is it possible to get the "var _SHOW_LASTUPDATE" per device?

For instance: I couldn't care less when the last time it was when I switch off a light, but it would be nice to see when a door sensor has been opened/closed.
And another question: I'd like to display the CV pressure (general, pressure), but all I see is: "Nefit - CV druk : AAN", where it should read 1.6 BAR. Is it possible to change that too ?

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 10:52
by EdwinK
SwordFish wrote:
wizjos wrote:OK I think I've got the moonphase lua script working again. I made the mistake to assume lua has a function 'round' when porting it from js to lua.
But now I think I've 'floored' the problem :lol:


Please confirm...

Regards
Wizjos
No errors so far :)
No images of the moon anymore :( Still looks for http://192.168.0.10/dashboard/img/moon/moon.0.png

edit: now it works.

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 11:09
by DvD
No error messages anymore but the moon is showing a full moon ...

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 11:35
by EdwinK
DvD wrote:No error messages anymore but the moon is showing a full moon ...
This is 'my' moon atm
Moon50
Moon50
Screen Shot 2017-04-27 at 11.34.37.png (43.35 KiB) Viewed 1813 times

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 11:39
by DvD
Here the variable is also moon50 but its showing a full moon....strange

UPDATE: never mind ! working

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 12:22
by htilburgs
EdKo66 wrote:
htilburgs wrote:
When u use the following command, you can still install in the map 'dashboard' if you like:

Code: Select all

git clone https://github.com/robgeerts/dashticz_v2.git dashboard
And what if you want to put it in the root of the server?
When you perform the git clone command from the root of the server, then it wil create a directory in the root.

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 12:25
by EdwinK
I know, but I don't want/need a directory in the root. I just wanted to have all the files in the root, so calling my server with only the ip-address instead of adding a directory behind it.

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 12:52
by mkscity
mkscity wrote:is it somehow possible to show more infos for moon phase?
Actually i have the following visible:
Image

And this code in custom.js:

Code: Select all

function getExtendedBlockTypes(blocktypes){
	blocktypes.Name['Download'] = { icon: 'fa fa-download', title: '<Name>', value: '<Data>' }
	blocktypes.Name['Mondphase'] = { icon: 'fa fa-moon-o', title: '<Name>', value: '<Data>' }
	blocktypes.Name['Mondaufgang'] = { icon: 'fa fa-moon-o', title: '<Data>', value: '<Name>' }
	return blocktypes;
}
But whatever i try to add for showing correct values for "Mondaufgang" and "Monduntergang" i see only switches.
Same Problem is actually that order is not changed, it shows always first <Data> then <Name>
Switch is set to true in config.js.

Code: Select all

//Mondphase
blocks[192] = {} 
blocks[192]['width'] = 6;
blocks[192]['switch'] = true;
i tried now the following changes in custom.js
HansieNL wrote:
mkscity wrote:is it somehow possible to show more infos for moon phase?
I had same problem with Dutch texts. Can you try these settings? Don't forget to change the idx to yours.

blocks[idx] = {} //Mondaufgang
blocks[idx]['switch'] = true;
blocks[idx]['icon'] = 'fa-moon-o';
blocks[idx] = {} //Monduntergang
blocks[idx]['switch'] = true;
blocks[idx]['icon'] = 'fa-moon-o';

blocktypes.Name['Mondaufgang'] = { icon: 'fa-moon-o', title: '<Name>', value: '<Data>' }
blocktypes.Name['Monduntergang'] = { icon: 'fa-moon-o', title: '<Name>', value: '<Data>' }

Code: Select all

function getExtendedBlockTypes(blocktypes){
	blocktypes.Name['Download'] = { icon: 'fa fa-download', title: '<Name>', value: '<Data>' }
	blocktypes.Name['Mondphase'] = { icon: 'fa fa-moon-o', title: '<Name>', value: '<Data>' }
	blocktypes.Name['Mondaufgang'] = { icon: 'fa-moon-o', title: '<Name>', value: '<Data>' }
	blocktypes.Name['Monduntergang'] = { icon: 'fa-moon-o', title: '<Name>', value: '<Data>' }
	return blocktypes;
}
But so far still the same, Mondaufgang and Monduntergang still showing as a switch.
Problem with order is also still existing, it shows first Data then title.

Is there anything what i can try to get the correct view?

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 15:02
by madrian
If you have time, please add more info to the Wiki about:

buttons.calendar = {icon: 'fa-calendar', title: 'Kalender', url: 'PASTE_URL_HERE'}

It is for Google Calendar? Other ical calendars are not supported?

@Rob: on Github, CONFIG.js/DEFAULT_CONFIG.js files are missing.

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 15:36
by Blueone
I have the following block:
columns[2] = {}
columns[2]['blocks'] = ['blocktitle_Verbruik','281_1','281_2','282']
columns[2]['width'] = 6;


Device 281 is the powerusage and 282 the gas usage.
When I click the gas block the graph is showing in a popup. When I click the power blocks the graph isn't showing, probably because of the _1 and _2, is it possible to show the graph also at these kind of blocks?

Re: Dashticz v2.0, custom positioning and multiple screens

Posted: Thursday 27 April 2017 16:38
by Ierlandfan
If you want to use Google Calendar it's quit easy

Goto you Google Calendar press the arrow at the left next to your calendar.
It takes you to the "Calendar details"

You can change the height, color and other details like default week, agenda, or month under the part
"Change colour, size etc. (Click on it)

After changing (or not)
Copy the code found in the block "at the top of the page
Looks like this:

Code: Select all

<iframe src="https://calendar.google.com/calendar/embed?mode=AGENDA&height=600&wkst=1&bgcolor=%23ffffff&src=your_email_address&color=%23125A12&ctz=Europe%2FAmsterdam" style="border-width:0" width="250" height="600" frameborder="0" scrolling="no"></iframe>
Delete the

Code: Select all

 <iframe src=
and

Code: Select all

style="border-width:0" width="250" height="600" frameborder="0" scrolling="no"></iframe>
part.

Create a Iframe var in CONFIG.js

Code: Select all

frames.calendar = {height:250,frameurl:"https://calendar.google.com/calendar/embed?mode=AGENDA&height=600&wkst=1&bgcolor=%23ffffff&src=your_email_address&color=%23125A12&ctz=Europe%2FAmsterdam"
add frames.calendar to some column.

Edit: For some reason when dashboard reloads the page the calendar isn't filled anymore. Need to look into that.
Enjoy