ICloud HC2 Bridge

Utvecklar du en smartphone-app? Datorprogramvara? Få hjälp av andra och bidra med dina egna erfaranheter.
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Hehe.. får se om jag hinner med det. Jag är också i behov av fler användare så fix kommer inom snar framtid.

Fix på det jag nämnde innan publicerad på git.
drive
drive
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Har lagt upp VD:en här
https://github.com/raess1/iCloud-HC2-Br ... r/HC2%20VD

Har även fixat lite med avrundning och olika enheter.
fix
fix
Ikväll ska det fixas med timestamp så det blir mer läs vänligt (Tar gärna emot tips på hur jag konverterar om epoch timestamp till något läsbart i HC2. :geek:

Sen tror jag även att Home Since måste få lite mer kärlek.
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Detta borde funka.

fromUnixTimestamp = (function(s) return os.date("%c", ts) end),


Sent from my iPhone using Tapatalk
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Update:
When: lyckades jag fixa till läsbar datum och tid.
home since, tar jag bort så länge.

Försöker få till ikonerna till batteri status

Code: Select all

--icons 
iconFull = 1005; 
iconGood = 1006; 
iconLow = 1008; 
iconEmpty = 1007;

--update icon if battery level low under 5%
if (
 ( tonumber(fibaro:getGlobalValue("battery_level")) <= tonumber("0.05")  or  tonumber(fibaro:getGlobalValue("battery_level")) > tonumber("0.01") )
)
then
fibaro:call(vd, "setProperty", "currentIcon", iconEmpty)
end
--update icon if battery level over  5% to 30%
if (
 ( tonumber(fibaro:getGlobalValue("battery_level")) <= tonumber("0.30")  or  tonumber(fibaro:getGlobalValue("battery_level")) > tonumber("0.05") )
)
then
fibaro:call(vd, "setProperty", "currentIcon", iconLow)
end
--update icon if battery level over  30% to 75%
if (
 ( tonumber(fibaro:getGlobalValue("battery_level")) <= tonumber("0.75")  or  tonumber(fibaro:getGlobalValue("battery_level")) > tonumber("0.30") )
)
then
fibaro:call(vd, "setProperty", "currentIcon", iconGood)
end
--update icon if battery level over 75%
if (
 ( tonumber(fibaro:getGlobalValue("battery_level")) <= tonumber("1")  or  tonumber(fibaro:getGlobalValue("battery_level")) > tonumber("0.75") )
)
then
fibaro:call(vd, "setProperty", "currentIcon", iconFull)
end
Men får det inte att funka bra. Någon som har tips?
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Update: nu har jag fixat ikoner för battery level
icons
icons
Ändring på VD:en finns på git.

Har även hunnit provat den andra lösningen jag postade lite mer ingående. :)
och resultatet.... den funkar bra :) . Dörren öppnas när jag närmar mig & låser sig när jag åker.
http://www.zwaveforum.se/viewtopic.php?f=22&t=6301
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Grymt ju! Skall testa!
- Enklast e väl att lägga ett prefix per varibel/telefon/script så länge.
- Vad händer om telefonen är urladdad och död?




Sent from my iPhone using Tapatalk
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Det går inte att importera din VD, mailfunction...


Sent from my iPhone using Tapatalk
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Hmm
konstigt
Jag klistrar in den här då ;)

Code: Select all

local vd = 174 --Denna virtuella ID's nummer 

local battery_status = fibaro:getGlobalValue("battery_status")
local address_location = fibaro:getGlobalValue("address_location")
local battery_level = fibaro:getGlobalValue("battery_level")
local home = fibaro:getGlobalValue("home")
local getdata_time = fibaro:getGlobalValue("getdata_time")
local position_type = fibaro:getGlobalValue("position_type")
local phone_accuracy = fibaro:getGlobalValue("phone_accuracy")
local distance_home = fibaro:getGlobalValue("distance_home")
local time_home = fibaro:getGlobalValue("time_home")
local meters_home = fibaro:getGlobalValue("meters_home")


fibaro:call(vd, 'setProperty', 'ui.Location.value',address_location)
--fibaro:debug("Your are here: "..address_location)
fibaro:call(vd, 'setProperty', 'ui.status.value',battery_status)
--fibaro:debug("Is your phone charging: "..battery_status)
fibaro:call(vd, 'setProperty', 'ui.level.value',battery_level * 100 .."%")
--fibaro:debug("Percentage of battery: "..battery_level * 100)
--fibaro:call(vd, 'setProperty', 'ui.home.value',home)
--fibaro:debug("Are the phone home "..home)
fibaro:call(vd, 'setProperty', 'ui.timestamp.value',getdata_time)
--fibaro:debug("Time is now: "..timeStamp)
fibaro:call(vd, 'setProperty', 'ui.positiontype.value',position_type)
--fibaro:debug("You get your data with: "..position_type)
fibaro:call(vd, 'setProperty', 'ui.horizontalAccuracy.value', phone_accuracy .. " M")
--fibaro:debug("How accurate is GPS data: "..phone_accuracy)
--fibaro:call(vd, 'setProperty', 'ui.Distancehome.value', distance_home .. " KM")
--fibaro:debug("Distance to home: "..distance_home)
--fibaro:call(vd, 'setProperty', 'ui.timehome.value', time_home / 60 .. " MIN")
--fibaro:debug("Driving time home: "..timehome)

--if ( tonumber(fibaro:getGlobalValue("home")) == 0 ) then
--    fibaro:call(vd, "setProperty", "ui.home.value", "No")
--	fibaro:call(vd, "setProperty", "ui.lastseen.value", "Away Since "..os.date("%H:%M:%S");
--else
--    fibaro:call(vd, "setProperty", "ui.home.value", "Yes")
-- 	fibaro:call(vd, "setProperty", "ui.lastseen.value","Home Since "..os.date("%H:%M:%S");
--end
--If distance home smaller <= 1KM switch to meters_home
if ( tonumber(fibaro:getGlobalValue("distance_home")) >= 1 ) then
  	fibaro:call(vd, 'setProperty', 'ui.Distancehome.value', distance_home .. " KM")
else
    fibaro:call(vd, "setProperty", "ui.Distancehome.value",meters_home .. " M")
end
--If distance home smaller <= 1M recalculate to centimeters
--if ( tonumber(fibaro:getGlobalValue("meters_home")) == 0 ) 
--then
--fibaro:call(vd, "setProperty", "ui.Distancehome.value",distance_home * 10000 .." CM")
--end

--If time_home smaller <= 1Min use standard time S.
if ( tonumber(fibaro:getGlobalValue("time_home")) < 60 ) then
fibaro:call(vd, 'setProperty', 'ui.timehome.value',time_home .. " S")
else
fibaro:call(vd, 'setProperty', 'ui.timehome.value',time_home / 60 .. " min")
--or if ( tonumber(fibaro:getGlobalValue("time_home")) > 3600 ) then
--fibaro:call(vd, 'setProperty', 'ui.timehome.value',time_home / 3600 .. " h")
end

-- Convert battery level
battery_level2 = tonumber(battery_level * 100)
fibaro:debug("battery level: "..battery_level2)

if battery_level2 > tonumber(battery_level2) then
battery_level2 = tonumber(battery_level2)
end

function getIcon(battery_level2)
if(battery_level2 > 90) then return 1015
elseif(battery_level2 >= 75) then return 1014
elseif(battery_level2 >= 40) then return 1013
elseif(battery_level2 >= 30) then return 1012
elseif(battery_level2 >= 10) then return 1011
elseif(battery_level2 >= 0) then return 1010
end
end

-- If phone is charging then change icon to charging
if 
  (fibaro:getGlobalValue("battery_status")) == ("Charging") then
fibaro:call(vd, "setProperty", "currentIcon", 1016)
else
  fibaro:call(vd, "setProperty", "currentIcon", getIcon(battery_level2));
end
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

@KristianO jag la upp en export av VD:en på git:
https://github.com/raess1/iCloud-HC2-Br ... .vfib.json

Update:
1. Ändrat ikoner (flera) så man får tydligare batteriprocent.
empty
empty
battery-empty-icon.png (2.89 KiB) Viewed 21411 times
10
10
battery-1-icon.png (4.61 KiB) Viewed 21411 times
30
30
battery-2-icon.png (4.8 KiB) Viewed 21411 times
50
50
battery-half-icon.png (4.85 KiB) Viewed 21411 times
75
75
battery-3-icon.png (4.72 KiB) Viewed 21411 times
100
100
battery-full-icon.png (4.66 KiB) Viewed 21411 times
charging
charging
battery-charge-icon.png (5.62 KiB) Viewed 21411 times
2. Sitter telefonen i laddaren och laddas animeras en laddningseffekt såhär:
https://youtu.be/0l2ZWB1gVGo :D

3. Sitter telefonen i laddaren och är fullladdad visas ikon:
charged
charged
battery-charged-icon.png (5.43 KiB) Viewed 21411 times
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Skall testa igen. Men om telefonen är död? Tänker, sista poll ger 3% och gps. När nästa sen sker 1min senare så är den död. Är då positionen i retur den samma? Eller kan man då tolka svaret som "osäkert" och inte "trigga" något på det?




Sent from my iPhone using Tapatalk
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Lägg även med
"invokeScenes" som True.


Sent from my iPhone using Tapatalk
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Får "No data found"... tips?


Sent from my iPhone using Tapatalk
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Har du följt instruktionerna på git? :-)
Vilka variabler har du lagt till?

dessa behövs ändras
$url = 'http://user:password@IP/api/globalVariables';
CURLOPT_URL => "http://IP/api/globalVariables/".$globalVariables,
"authorization: Basic token=",
$phone_id = 'UDID';
$fmi = new FindMyiPhone("icloud user","icloud password");
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Nu funkar det... fick dock bygga om lite och vet inte riktigt varför?!?
Passade även på att lägga in 2 användare i ett och samma script.
Nästa steg blir att skapa variabler via api. Då jag allokerar dem dynamiskt per användare.
Hör av dig om du vill kika.


Sent from my iPhone using Tapatalk
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Nice.. :D Vad tycker du då?

Du kanske kan använda delar av mitt nya script som jag använder på min skrivare.
https://github.com/raess1/HP-OfficeJet- ... HC2-Bridge
Där kör jag ner alla variabler i samma string med json och sen kör jag:
data = json.decode(printer_usage) i HC2 och på det sättet behövs bara en variabel i hc2 8-)

dela gärna din kod sen om du gör några förbättringar ;)


Lua koden ser ut såhär:

Code: Select all

--[[
%% autostart
%% properties
%% globals
--]]
local vd = 182 --Denna virtuella ID's nummer 
local printer = fibaro:getGlobalValue("printer")
--fibaro:debug("What is variabel " ..printer)
local printer_usage = fibaro:getGlobalValue("printer_usage")
--fibaro:debug("What is variabel " ..printer_usage)

data = json.decode(printer_usage)
-- after encoding jsonString variable contains '{ "value2": null, "value1": 512 }' string
-- Cyan Cartridge status
--fibaro:call(vd, 'setProperty', 'ui.cyanprocent.value',data.cyanprocent .."%")
fibaro:debug("Cyan Cartridge : " ..data.cyanprocent)

--fibaro:debug("Cyan pages remaining : " ..data.cyanpagesremaining)
-----if data.cyanprocent < 98 ) then
-- 	fibaro:call(vd, 'setProperty', 'ui.cyanprocent.value', "Cyan ink snart slut")
--else
--    fibaro:call(vd, "setProperty", "ui.cyanprocent.value",data.cyanprocent .."%")
--end

-- Magenta Cartridge status
fibaro:call(vd, 'setProperty', 'ui.magentaprocent.value',data.magentaprocent .."%")
--fibaro:debug("Magenta Cartridge : " ..data.magentaprocent)
--fibaro:debug("Magenta pages remaining : " ..data.magentapagesremaining)

-- Yellow Cartridge status
fibaro:call(vd, 'setProperty', 'ui.yellowprocent.value',data.yellowprocent .."%")
--fibaro:debug("Yellow Cartridge : " ..data.yellowprocent)
--fibaro:debug("Yellow pages remaining : " ..data.yellowpagesremaining)

-- Black Cartridge status
fibaro:call(vd, 'setProperty', 'ui.blackprocent.value',data.blackprocent .."%")
--fibaro:debug("Black Cartridge : " ..data.blackprocent)
fibaro:debug("Black pages remaining : " ..data.blackpagesremaining)

--Print jobs
fibaro:call(vd, 'setProperty', 'ui.totjobs.value',data.totjobs)
--fibaro:debug("tot print : " ..data.totjobs)
fibaro:call(vd, 'setProperty', 'ui.monochromeimpressions.value',data.monochromeimpressions)
--fibaro:debug("tot print black : " ..data.monochromeimpressions)
fibaro:call(vd, 'setProperty', 'ui.colorimpressions.value',data.colorimpressions)
--fibaro:debug("tot print color : " ..data.colorimpressions)
fibaro:call(vd, 'setProperty', 'ui.simplexsheets.value',data.simplexsheets)
--fibaro:debug("one sides prints : " ..data.simplexsheets)


--data = json.decode(printer)
--fibaro:debug("What is value1: " ..data.revision)
--fibaro:debug("Power: " ..data.power)
--fibaro:debug("What is the signal strength: " ..data.signalstrength)
--fibaro:debug("wifi:dBm  " ..data.wifidbm)
--fibaro:debug("is USB connected:  " ..data.usbconnect)

--end
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Har byggt om den lite nu så alla variabler skickas med json decode.
Senaste koden: finns på https://github.com/raess1/iCloud-HC2-Br ... /index.php

exemple på användande ;)

Code: Select all

--[[
%% autostart
%% properties
%% globals
--]]
local vd = 183 --Denna virtuella ID's nummer 

local iphoneapi = fibaro:getGlobalValue("iphoneapi")
--fibaro:debug("What data are we receiving " ..iphoneapi)
data = json.decode(iphoneapi)

fibaro:debug("Device : " ..data.device_name)
fibaro:debug("Latitude : " ..data.latitude)
fibaro:debug("Longitude : " ..data.longitude)
fibaro:debug("BatteryLevel : " ..data.batteryLevel)
fibaro:debug("BatteryStatus : " ..data.batteryStatus)
fibaro:debug("HorizontalAccuracy : " ..data.horizontalAccuracy)
fibaro:debug("PositionType : " ..data.positionType)
fibaro:debug("Are the Device home : " ..data.home)
fibaro:debug("Address : " ..data.address)
fibaro:debug("Distance home in KM : " ..data.distance_home_k)
fibaro:debug("Distance home in meters : " ..data.distance_home_m)
fibaro:debug("Time home in minutes : " ..data.time)
fibaro:debug("What is your home address : " ..data.address_home)
fibaro:debug("Address to : " ..data.address_to)
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Nice! Men går det även att trycka in alla variabler samtidigt mot hc2?
Nu ropar ju scriptet på funktionen vid varje förändring.

Bäst blir kanske en kombination av båda.
Spara "datat" som json för visning i VD.
Men att sen sätta "hemmastatus" via en egen variabel. Då man kanske vill "trigga" något på denna.

För att köra flera telefoner skapade jag en array med Telefon, användare och lösen.
Kör sedan en foreach loop på dessa och loggar in på iCloud.

Efter det använder jag din kod.

Allokerar sedan variabler dynamiskt genom att ta första bokstaven i telefonens namn.
Tex "K_<Global Variable>"

Image

Kristian

Sent from my iPhone using Tapatalk
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Okej. Jag ska försöka skriva om den lite igen då :)
Varje gång scriptet körs skickas en json string med alla variabler. typ så här:

Code: Select all

{
  "name": "iphoneapi",
  "value": "{\"latitude\":75.2995709219,\"longitude\":16.2713414643,\"device_name\":\"iPhone 7\",\"batteryLevel\":0.75,\"batteryStatus\":\"NotCharging\",\"timeStamp\":1483089160783,\"horizontalAccuracy\":8,\"positionType\":\"GPS\",\"home\":1,\"vibrate\":true,\"address\":\"Berggatan 9, 544 31 Hjo, Sweden\",\"distance_home_k\":0.00536841464861,\"distance_home_m\":0,\"time\":0,\"address_home\":\"Berggatan 9, 544 31 Hjo, Sweden\",\"address_to\":\"Berggatan 9, 544 31 Hjo, Sweden\"}",
  "readOnly": false,
  "isEnum": false,
  "created": 1483051359,
  "modified": 1483090500
}
så alla variabler ändras ju efter den tid man har ställt in scriptet ska köras.

Sedan kan man ju köra detta i lua för att se vad variabeln "iphoneapi" innehåller:

Code: Select all

local iphoneapi = fibaro:getGlobalValue("iphoneapi")
fibaro:debug("What data are we receiving " ..iphoneapi)
data = json.decode(iphoneapi)
KristianO
Medlem
Posts: 461
Joined: 10 Mar 2014, 09:50
10

Jo precis! Lite så kör jag i mitt script, fast fortfarande variabel för variabel. Att lägga hela json i en variabel e snyggare och skönt att slippa så många variabler
Nackdelen är att du inte kan trigga på dem, Dvs du kan inte starta en scen i hc2 på dem. Dessa måste ha en egen variabel.

Image


Sent from my iPhone using Tapatalk
bobkelso_527
Medlem
Posts: 48
Joined: 23 Dec 2016, 14:24
7

Okej jag förstår :(
kan du dela din kod på git?
Post Reply