Smartphone check

Hjälp varandra att vara kreativa för att göra hemmet mer bekvämt.
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Istället för att använda sig utav GPS position i smartphonen(som drar mycket batteri!) och HC2 så kan man via en virtuell enhet kolla om smartphonen kommit hem och kopplat upp sig mot nätverket.
Skärmavbild 2013-03-12 kl. 06.11.24.png
Skärmavbild 2013-03-12 kl. 06.11.24.png (15.65 KiB) Viewed 27716 times
Porten gäller för iPhones, vad som gäller för Android är inget jag kan testa då jag inte har någon ;)

Code: Select all

tcpSocket = Net.FTcpSocket("Smartphone_IP", 62078) 
bytes, errorCode = tcpSocket:write("test") 

if errorCode == 0 
then 
  fibaro:log("IPHONE OK")
  fibaro:setGlobal("Jonny", 1)
else 
  fibaro:log("IPHONE failed") 
  fibaro:setGlobal("Jonny", 0)
end
Skriver värdet till en variabel som sen kan användas för att tända lampor om solen gått ner och någon är hemma.
Schemaläggning som kör den virtuella knappen.
Skärmavbild 2013-03-12 kl. 06.15.50.png
Skärmavbild 2013-03-12 kl. 06.15.50.png (55.06 KiB) Viewed 27715 times
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Hur funkar detta när iPhone går till "sleep mode", alltså är telefonen kontaktbar även då? Vill minnas att den kopplar ner från det trådlösa när den inte används eller är ajg ute och cyklar?
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Jodå, visst går telefonen i sleep mode (för att spara batteri) och väcks upp med ca 15mins mellanrum, eller när man gör något sjävl. Har byggt vidare på detta så inte lamporna släcks så fort statusen ändras till 0.

Har en scen som sätter ett par andra variabler beroende på telefonen har status 1 i sin variabel.

Hemma

Code: Select all

--[[
%% autostart
%% properties
%% globals
Jonny
Mona
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getGlobalValue("Jonny")) == tonumber("1") )
or
 ( tonumber(fibaro:getGlobalValue("Mona")) == tonumber("1") )
or
startSource["type"] == "other"
)
then
	fibaro:setGlobal("Hemma", "1");
  	fibaro:setGlobal("Timer", "60")

end
Alltså Hemma variabeln sätts till 1 och sen ytterligare en variable, Timer sätts till 60. Vad gör då Timern?
Den räknas ner ifrån 60 och när den kommer till 0 så släcker jag vissa lampor beroende på om även variabel Hemma är 0 (hoppas du hänger med)

Timer

Code: Select all

--[[
%% autostart
%% properties
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
while true do

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "05", "30")) and tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "23", "00"))) and (math.floor(os.time()/60)-math.floor(1363062600/60))%1 == 0 )
)
then
	fibaro:setGlobal("Timer", tonumber(fibaro:getGlobalValue("Timer")) - 1);
end
end
Släck lampor

Code: Select all

--[[
%% autostart
%% properties
%% globals
GoodNight
Hemma
Night
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(fibaro:getGlobalValue("GoodNight")) == tonumber("1") )
or
 ( tonumber(fibaro:getGlobalValue("Hemma")) == tonumber("0")  or  tonumber(fibaro:getGlobalValue("Night")) == tonumber("0") )
or
startSource["type"] == "other"
)
then
	fibaro:call(8, "turnOff");
	fibaro:call(4, "turnOff");
	fibaro:call(5, "turnOff");
	fibaro:call(6, "turnOff");
	fibaro:call(7, "turnOff");
	fibaro:call(25, "turnOff");
end

Så fort telefonen kommer online på nätverket så sätts variabel Timer till 60 igen och nedräkningen börjar om, på så vis förlänger man Hemma läget med xx antal minuter. Skulle man lämna hemmet så släcks lamporna när Timer kommer till 0 (som längst är dom tänd 60 minuter)
Går även utmärkt att ha rörelsesensor med i dessa scener.
Last edited by jompa68 on 18 Mar 2013, 20:40, edited 1 time in total.
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Intressant!

Tänkte använda din timer till badrumslampan men får inte till det, får följande felmeddelande:

Code: Select all

[ERROR] 19:20:35: line 18: 'end' expected (to close 'while' at line 9) near ''
Vad gör jag för fel??
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Hur ser hela din kod ut?
Behöver se den för att se felet ;)
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Glöm det Svante, hittade felet.

lägg till ett till "end" i slutet så blir det bra. Mitt fel :roll:
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Fixat till Timer koden nu. Fattades ett End på slutet.
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Kopierade hela koden men får fortfarande error, trots att ett extra "end" finns med på slutet!

[ERROR] 20:10:50: line 19: 'end' expected (to close 'if' at line 8) near ''

Om man vill sänka tiden till 5 min, behöver man bara byta ut 60 mot 5 i så fall?
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Ser din timer kod ut så här?

Code: Select all

--[[
%% autostart
%% properties
%% globals
--]]


local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
while true do

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "05", "30")) and tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "23", "00"))) and (math.floor(os.time()/60)-math.floor(1363062600/60))%1 == 0 )
)
then
	fibaro:setGlobal("Timer", tonumber(fibaro:getGlobalValue("Timer")) - 1);
end

fibaro:sleep(60*1000);
end
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
	fibaro:setGlobal("Timer", tonumber(fibaro:getGlobalValue("Timer")) - 1);
end

end
Vill du ha ett lägre värde så byter du ut60 mot nåt annat.
Har du en variabel som heter Timer också?
Last edited by jompa68 on 19 Mar 2013, 07:23, edited 1 time in total.
svante
Medlem
Posts: 76
Joined: 14 Dec 2011, 10:08
12

Jepp ser likadan ut:

Code: Select all

--[[
%% autostart
%% properties
%% globals
--]]

fibaro:debug(timervalue)
local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
while true do

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "05", "30")) and tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "23", "00"))) and (math.floor(os.time()/60)-math.floor(1363062600/60))%1 == 0 )
)
then
   fibaro:setGlobal("Timer", tonumber(fibaro:getGlobalValue("Timer")) - 1);
end

fibaro:sleep(60*1000);
end
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
   fibaro:setGlobal("Timer", tonumber(fibaro:getGlobalValue("Timer")) - 1);
end

end
nu får jag istället detta:

Code: Select all

[ERROR] 06:01:56: Error in debug (arg 2), expected 'string const &' got 'nil'
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Om du vill så kan jag kika på din kod, vi kan göra det via teamviewer i kväll.
Om du önskar hjälp så skicka ett PM till mig med koden ifrån Teamviewer samt passordet så kopplar jag upp mig mot din pc och sen kör vi tillsammans.
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

ta bort denna rad i början - fibaro:debug(timervalue)
Hade en debug på som jag tog bort för att visa värdet före och efter timer hade gått.
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

Hej Jompa68,

Kan du göra en mer exakt guide hur man gör med smart phone check (jag har redan gjort Så den hittar min iphone och min flickvän´s iphone)

Och hur gör man ett dag och natt chema,?

//Jesse
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Har en uppdaterad version av iPhone check.

Skapa 3st variabler (LastSeenMona, LastSeenJonny, Hemma) -- Ändra namn till vad du önskar ha

Skapa en virtuell enhet (lägg till ytterligare knappar i enheten för så många iPhones du vill kolla om dom är hemma)
Lägg till följande kod för enhet 1

Code: Select all

tcpSocket = Net.FTcpSocket("192.168.0.183", 62078) -- den tilldelade ip addressen som iPhone har och port 62078
bytes, errorCode = tcpSocket:write("test") 
if errorCode == 0 then 
  fibaro:setGlobal("LastSeenJonny",os.time()) 
  fibaro:log("LastSeenJonny: OK") 
else 
  fibaro:log("LastSeenJonny: Failed") 
end 
Scen som kollar om enheterna är hemma och sätter variabel "Hemma", "LastSeenJonny" och "LastSeenMona" till det aktuella värdet.

Code: Select all

--[[ 
%% autostart 
%% properties 
%% globals 
LastSeenJonny 
LastSeenMona 
Hemma
--]] 

--kill any extra instances of the same scene 
if (fibaro:countScenes() > 1) then fibaro:abort() end; 

--Loop 
while true do 

--Settings
local ExecuteTimer = 60; -- Execute Every N-th second 
local GlobalVariablesDevice = 27; -- ID of virtual device
local AbsenceTime = 30; -- 30 minutes 


--Setup local variables 
local CurrentDate = os.date("*t"); 

--Announce start 
fibaro:debug(" -|- Start: "..os.date("%Y-%m-%d %H:%M:%S",os.time())) 

-- LastSeenXXXXXXXX 
fibaro:call(GlobalVariablesDevice, "pressButton", "1"); -- Check if Jonny is at Home 
fibaro:call(GlobalVariablesDevice, "pressButton", "2"); -- Check if Mona is at Home 
local LastSeenJonny = 0+fibaro:getGlobal("LastSeenJonny"); 
local LastSeenMona = 0+fibaro:getGlobal("LastSeenMona"); 
fibaro:debug(" -|- LastSeenJonny: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenJonny)); 
fibaro:debug(" -|- LastSeenMona: "..os.date("%Y-%m-%d %H:%M:%S",LastSeenMona)); 

-- Home, anyone ? 
AbsenceTime = os.time() - (AbsenceTime * 60); 
fibaro:debug(" -|- AbsenceTime: "..os.date("%Y-%m-%d %H:%M:%S",AbsenceTime)); 
if tonumber(LastSeenJonny) < AbsenceTime and tonumber(LastSeenMona) < AbsenceTime then 
    fibaro:debug(" -|- Home: Nobody is Home!");
      if tonumber(fibaro:getGlobalValue("Hemma")) == 1 then 
      	fibaro:setGlobal("Hemma", 0);
      end
 
else 
    fibaro:debug(" -|- Home: Someone is at home!");
     if tonumber(fibaro:getGlobalValue("Hemma")) == 0 then  
        fibaro:setGlobal("Hemma", 1);
    end 
end 
 
  --Announce end 
fibaro:debug(" -|- End: "..os.date("%Y-%m-%d %H:%M:%S",os.time())) 

--Sleep XX seconds 
fibaro:sleep(ExecuteTimer*1000); 
  
end 
Capture.PNG
Capture.PNG (19.76 KiB) Viewed 27165 times
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

jens wrote:Hej Jompa68,

Kan du göra en mer exakt guide hur man gör med smart phone check (jag har redan gjort Så den hittar min iphone och min flickvän´s iphone)

Och hur gör man ett dag och natt chema,?

//Jesse
Hur menar du med dag och natt schema?
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

Hej igen,
När man lägger sig så trycker man på en knapp så blir det natt läge och typ larm sätts på vissa lampor släcks,mm och ett godmorgon som kar några andra kombinationer...

Har fibaro dimrar och 2x1,5 brytare i huset, kameror och några ir sensorer 5st

//Jesse
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Här kommer ett exempel

Godnatt scen

Code: Select all

--[[
%% properties
%% globals
--]]
fibaro:setGlobal("GoodNight", "1");
Scen som släcker och larmar på sensorer
Skärmavbild 2013-08-12 kl. 18.55.08.png
Skärmavbild 2013-08-12 kl. 18.55.08.png (46.71 KiB) Viewed 27155 times
Det som händer är att så fort du kör scenen som sätter GoodNight till 1 så kommer exempel scenen att köras eftersom den känner att variabeln GoodNight fått sitt värde ändrat.

Gör motsvarande för GodMorgon.
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

Skapa 3st variabler (LastSeenMona, LastSeenJonny, Hemma) -- Ändra namn till vad du önskar ha

Ska det vara 1 eller 0 på dom?? :idea:
jompa68
Proffsmedlem
Posts: 735
Joined: 12 Aug 2012, 08:53
11
Location: Hofors

Dom blir 1 eller 0 beroende på om någon enhet är uppkopplad på ditt lokala nätverk.
jens
Medlem
Posts: 329
Joined: 22 Apr 2013, 17:09
10

Ok hur kopplar du en knapp typ S2 på fibaro?
Post Reply