My migration from Vera, or what I did on my holidays
-
Whatever you say, boss. this was after a Luup reload.
2020-06-20 20:40:04.474 :: openLuup LOG ROTATION :: (runtime 0.0 days) 2020-06-20 20:40:04.474 openLuup.init:: init phase completed 2020-06-20 20:40:04.474 openLuup.io.server:: starting HTTP:3480 server on port: 3480 tcp{server}: 0x2683d34 2020-06-20 20:40:04.474 openLuup.io.server:: starting SMTP server on port: 2525 tcp{server}: 0x2685da4 2020-06-20 20:40:04.474 openLuup.io.server:: starting POP3 server on port: 11011 tcp{server}: 0x2688224 2020-06-20 20:40:04.475 openLuup.historian:: starting data historian 2020-06-20 20:40:04.475 openLuup.historian:: using memory cache size (per-variable): 1024 2020-06-20 20:40:04.475 openLuup.scheduler:: starting 2020-06-20 20:40:04.475 openLuup.scheduler:: [2] openLuup device startup 2020-06-20 20:40:04.475 luup_log:2: v20.5.22 2020-06-20 20:40:04.475 luup_log:2: sync in 115.5 s 2020-06-20 20:40:04.475 luup.variable_watch:: callback=housemode_watcher, watching=2.openLuup.HouseMode 2020-06-20 20:40:04.475 luup.register_handler:: global_function_name=openLuup_email, request=openLuup@openLuup.local 2020-06-20 20:40:04.475 luup.register_handler:: global_function_name=openLuup_images, request=images@openLuup.local 2020-06-20 20:40:04.475 luup.register_handler:: global_function_name=openLuup_events, request=events@openLuup.local 2020-06-20 20:40:04.475 luup.register_handler:: global_function_name=openLuup_mailbox, request=mail@openLuup.local 2020-06-20 20:40:04.475 luup.chdev.append:: [AltAppStore] Alternate App Store 2020-06-20 20:40:04.475 luup.chdev.sync:: [2] openLuup, syncing children 2020-06-20 20:40:04.476 luup_log:2: 3Mb, 0.1%cpu, 0.0days 2020-06-20 20:40:04.476 openLuup.scheduler:: [2] openLuup device startup completed: status=true, msg=sync in 115.5 s, name=L_openLuup 2020-06-20 20:40:04.476 openLuup.scheduler:: [3] Alternate UI device startup 2020-06-20 20:40:04.476 luup_log:3: ALTUI: initstatus(3) starting version: v2.49b 2020-06-20 20:40:04.476 openLuup.scheduler:: [3] Alternate UI device startup completed: status=, msg=, name= 2020-06-20 20:40:04.476 openLuup.scheduler:: [7] VeraBridge device startup 2020-06-20 20:40:04.476 luup_log:7: VeraBridge 2020-06-20 20:40:04.476 luup_log:7: 2020.04.30 2020-06-20 20:40:04.476 luup_log:7: 192.168.70.6 2020-06-20 20:40:04.476 luup_log:7: device clone numbering starts at 10000 2020-06-20 20:40:04.476 luup_log:7: VeraBridge maps remote Zwave controller 2020-06-20 20:40:04.476 luup_log:7: v20.4.30 2020-06-20 20:40:04.644 luup_log:7: Vera info received! 2020-06-20 20:40:04.644 luup_log:7: MiOS-50103066 2020-06-20 20:40:04.644 luup_log:7: new room number: 1 2020-06-20 20:40:04.644 luup_log:7: PK_AccessPoint = 50103066 2020-06-20 20:40:04.644 luup_log:7: BuildVersion = *1.7.4833* 2020-06-20 20:40:04.644 luup_log:7: number of remote devices = 117 2020-06-20 20:40:04.644 luup.create_device:: [1] D_ZWaveNetwork.xml / X / (urn:schemas-micasaverde-com:device:ZWaveNetwork:1) 2020-06-20 20:40:04.645 luup.create_device:: [10002] D_ZigbeeNetwork.xml / / () 2020-06-20 20:40:04.645 openLuup.chdev:: ERROR: unable to read XML file D_ZigbeeNetwork.xml 2020-06-20 20:40:04.645 luup.create_device:: [10003] D_BluetoothNetwork.xml / / () 2020-06-20 20:40:04.645 openLuup.chdev:: ERROR: unable to read XML file D_BluetoothNetwork.xml 2020-06-20 20:40:04.645 luup.create_device:: [10004] D_SceneController1.xml / / () 2020-06-20 20:40:04.645 openLuup.chdev:: ERROR: unable to read XML file D_SceneController1.xml 2020-06-20 20:40:04.646 luup.create_device:: [10006] D_SceneController1.xml / / () 2020-06-20 20:40:04.646 openLuup.chdev:: ERROR: unable to read XML file D_SceneController1.xml 2020-06-20 20:40:04.646 luup.create_device:: [10007] D_SceneController1.xml / / () 2020-06-20 20:40:04.646 openLuup.chdev:: ERROR: unable to read XML file D_SceneController1.xml 2020-06-20 20:40:04.648 luup.create_device:: [10008] D_MotionSensor1.xml / X / D_MotionSensorWithTamper1.json (urn:schemas-micasaverde-com:device:MotionSensor:1) 2020-06-20 20:40:04.648 luup.create_device:: [10009] D_TemperatureSensor1.xml / / () 2020-06-20 20:40:04.648 openLuup.chdev:: ERROR: unable to read XML file D_TemperatureSensor1.xml 2020-06-20 20:40:04.649 luup.create_device:: [10010] D_LightSensor1.xml / / () 2020-06-20 20:40:04.649 openLuup.chdev:: ERROR: unable to read XML file D_LightSensor1.xml 2020-06-20 20:40:04.650 luup.create_device:: [10011] D_BinaryLight1.xml / X / D_BinaryLight1.json (urn:schemas-upnp-org:device:BinaryLight:1) 2020-06-20 20:40:04.650 luup.create_device:: [10015] D_DimmableLight1.xml / / () 2020-06-20 20:40:04.650 openLuup.chdev:: ERROR: unable to read XML file D_DimmableLight1.xml 2020-06-20 20:40:04.652 luup.create_device:: [10018] D_BinaryLight1.xml / X / D_BinaryLight1.json (urn:schemas-upnp-org:device:BinaryLight:1) 2020-06-20 20:40:04.654 luup.create_device:: [10019] D_BinaryLight1.xml / X / D_BinaryLight1.json (urn:schemas-upnp-org:device:BinaryLight:1) 2020-06-20 20:40:04.655 luup.create_device:: [10020] D_BinaryLight1.xml / X / D_BinaryLight1.json (urn:schemas-upnp-org:device:BinaryLight:1) 2020-06-20 20:40:04.657 luup.create_device:: [10023] D_ALTUI.xml / X / D_ALTUI_UI7.json (urn:schemas-upnp-org:device:altui:1) 2020-06-20 20:40:04.657 luup.create_device:: [10026] D_DayTime.xml / / () 2020-06-20 20:40:04.657 openLuup.chdev:: ERROR: unable to read XML file D_DayTime.xml 2020-06-20 20:40:04.657 luup.create_device:: [10027] D_HouseModes.xml / / () 2020-06-20 20:40:04.657 openLuup.chdev:: ERROR: unable to read XML file D_HouseModes.xml 2020-06-20 20:40:04.657 luup.create_device:: [10031] D_DigitalSecurityCamera2.xml / / () 2020-06-20 20:40:04.657 openLuup.chdev:: ERROR: unable to read XML file D_DigitalSecurityCamera2.xml 2020-06-20 20:40:04.658 luup.create_device:: [10033] D_DigitalSecurityCamera2.xml / / () 2020-06-20 20:40:04.658 openLuup.chdev:: ERROR: unable to read XML file D_DigitalSecurityCamera2.xml 2020-06-20 20:40:04.659 luup.create_device:: [10037] D_BinaryLight1.xml / X / D_BinaryLight1.json (urn:schemas-upnp-org:device:BinaryLight:1) 2020-06-20 20:40:04.661 luup.create_device:: [10041] D_BinaryLight1.xml / X / D_BinaryLight1.json (urn:schemas-upnp-org:device:BinaryLight:1) 2020-06-20 20:40:04.662 luup.create_device:: [10057] D_BinaryLight1.xml / X / D_BinaryLight1.json (urn:schemas-upnp-org:device:BinaryLight:1) 2020-06-20 20:40:04.663 luup.create_device:: [10061] D_DimmableLight1.xml / / () 2020-06-20 20:40:04.663 openLuup.chdev:: ERROR: unable to read XML file D_DimmableLight1.xml 2020-06-20 20:40:04.663 luup.create_device:: [10062] D_DimmableLight1.xml / / () 2020-06-20 20:40:04.663 openLuup.chdev:: ERROR: unable to read XML file D_DimmableLight1.xml 2020-06-20 20:40:04.663 luup.create_device:: [10079] D_Heater1.xml / / () 2020-06-20 20:40:04.663 openLuup.chdev:: ERROR: unable to read XML file D_Heater1.xml 2020-06-20 20:40:04.664 luup.create_device:: [10080] D_Heater1.xml / / () 2020-06-20 20:40:04.664 openLuup.chdev:: ERROR: unable to read XML file D_Heater1.xml 2020-06-20 20:40:04.664 openLuup.context_switch:: ERROR: [dev #7] ./openLuup/devices.lua:538: table index is nil 2020-06-20 20:40:04.664 openLuup.scheduler:: job aborted : ./openLuup/devices.lua:538: table index is nil 2020-06-20 20:40:04.664 openLuup.scheduler:: [4] Alternate App Store device startup 2020-06-20 20:40:04.664 luup_log:4: AltAppStore : starting... 2020-06-20 20:40:04.664 luup.variable_set:: 4.urn:upnp-org:serviceId:altui1.DisplayLine1 was: AltAppStore now: AltAppStore #hooks:0 2020-06-20 20:40:04.664 luup.variable_set:: 4.urn:upnp-org:serviceId:altui1.DisplayLine2 was: now: #hooks:0 2020-06-20 20:40:04.664 luup_log:4: AltAppStore : v20.3.30 2020-06-20 20:40:04.664 luup.set_failure:: status = 0 2020-06-20 20:40:04.664 luup.variable_set:: 4.urn:micasaverde-com:serviceId:HaDevice1.CommFailure was: 0 now: 0 #hooks:0 2020-06-20 20:40:04.664 luup.variable_set:: 4.urn:micasaverde-com:serviceId:HaDevice1.CommFailureTime was: 0 now: 0 #hooks:0 2020-06-20 20:40:04.664 openLuup.scheduler:: [4] Alternate App Store device startup completed: status=true, msg=OK, name=AltAppStore 2020-06-20 20:40:05.372 openLuup.io.server:: HTTP:3480 connection from 192.168.70.251 tcp{client}: 0x27493a4 2020-06-20 20:40:05.373 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=578672005&Timeout=60&MinimumDelay=1500&_=1592671339440 HTTP/1.1 tcp{client}: 0x27493a4 2020-06-20 20:40:05.602 openLuup.server:: request completed (128491 bytes, 9 chunks, 228 ms) tcp{client}: 0x27493a4 2020-06-20 20:40:05.602 luup_log:3: ALTUI: startupDeferred, called on behalf of device:3 2020-06-20 20:40:05.606 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.Version was: v2.49b now: v2.49b #hooks:0 2020-06-20 20:40:05.649 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.DataStorageProviders was: {"emoncms":{"url":"","callback":"sendValueToStorage_emoncms","parameters":[{"default":1,"type":"number","key":"node... now: {"emoncms":{"url":"","callback":"sendValueToStorage_emoncms","parameters":[{"key":"nodeid","type":"number","default... #hooks:0 2020-06-20 20:40:05.650 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.DataStorageProviders was: {"emoncms":{"url":"","callback":"sendValueToStorage_emoncms","parameters":[{"key":"nodeid","type":"number","default... now: {"emoncms":{"url":"","callback":"sendValueToStorage_emoncms","parameters":[{"default":1,"type":"number","key":"node... #hooks:0 2020-06-20 20:40:05.651 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.DataStorageProviders was: {"emoncms":{"url":"","callback":"sendValueToStorage_emoncms","parameters":[{"default":1,"type":"number","key":"node... now: {"emoncms":{"url":"","callback":"sendValueToStorage_emoncms","parameters":[{"default":1,"type":"number","key":"node... #hooks:0 2020-06-20 20:40:05.651 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.VariablesToSend was: now: #hooks:0 2020-06-20 20:40:05.651 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.RemoteVariablesToWatch was: now: #hooks:0 2020-06-20 20:40:05.651 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.VariablesToWatch was: now: #hooks:0 2020-06-20 20:40:05.651 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.Timers was: [] now: [] #hooks:0 2020-06-20 20:40:05.651 luup_log:3: ALTUI: Wkflow - enableWorkflows(3,0,0) 2020-06-20 20:40:05.651 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.Timers was: [] now: #hooks:0 2020-06-20 20:40:05.652 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.WorkflowsActiveState was: [] now: #hooks:0 2020-06-20 20:40:05.652 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.WorkflowsVariableBag was: now: #hooks:0 2020-06-20 20:40:05.652 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.WorkflowsActiveState was: now: [] #hooks:0 2020-06-20 20:40:05.652 luup.register_handler:: global_function_name=myALTUI_Handler, request=ALTUI_Handler 2020-06-20 20:40:05.654 luup.call_action:: 0.urn:micasaverde-com:serviceId:HomeAutomationGateway1.RunLua 2020-06-20 20:40:05.654 luup.register_handler:: global_function_name=ALTUI_LuaRunHandler, request=ALTUI_LuaRunHandler 2020-06-20 20:40:05.655 luup.call_action:: 0.urn:micasaverde-com:serviceId:HomeAutomationGateway1.RunLua 2020-06-20 20:40:05.656 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.Timers was: now: [] #hooks:0 2020-06-20 20:40:05.656 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.PendingReset was: 0 now: 0 #hooks:0 2020-06-20 20:40:05.662 luup.set_failure:: status = 0 2020-06-20 20:40:05.662 luup.variable_set:: 3.urn:micasaverde-com:serviceId:HaDevice1.CommFailure was: 0 now: 0 #hooks:0 2020-06-20 20:40:05.662 luup.variable_set:: 3.urn:micasaverde-com:serviceId:HaDevice1.CommFailureTime was: 0 now: 0 #hooks:0 2020-06-20 20:40:05.662 luup_log:3: ALTUI: startup completed 2020-06-20 20:40:05.669 openLuup.server:: GET /data_request?id=user_data&output_format=json&DataVersion=578663463&_=1592671339441 HTTP/1.1 tcp{client}: 0x27493a4 2020-06-20 20:40:05.857 openLuup.server:: request completed (179603 bytes, 12 chunks, 187 ms) tcp{client}: 0x27493a4 2020-06-20 20:40:07.905 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=682008955&Timeout=60&MinimumDelay=1500&_=1592671339442 HTTP/1.1 tcp{client}: 0x27493a4 2020-06-20 20:40:08.014 openLuup.server:: request completed (20870 bytes, 2 chunks, 108 ms) tcp{client}: 0x27493a4 2020-06-20 20:40:08.166 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=682008971&Timeout=60&MinimumDelay=1500&_=1592671339443 HTTP/1.1 tcp{client}: 0x27493a4 2020-06-20 20:41:08.520 openLuup.server:: request completed (363 bytes, 1 chunks, 60353 ms) tcp{client}: 0x27493a4
Hit update. Showing 2.4.30 No change in the devices (I don't have an update button on the console page, but I did it from AltUI)
C
-
Can you update openLuup from the development branch, and try again?
-
Happy to, but, ummm, how?
Cheers
C
-
Type development into the box on the openLuup line on the Plugins page (either in AltUI or openLuup console) and click the Update (recycle icon) button. Then wait for a reload (~15 seconds)
-
Thanks.
So Home>Plugins has 20.4.30 still
No change in the devices
Need logs?
Cheers
C
-
Well, you’re doing something not right, because I’ve just followed that recipe and now I’m running v20.6.20.
-
Hmmm, not sure what to do then chap.
Open AltUI
More > PluginsType 'development' into the update box (is that case sensitive? I've tried both)
Hit the update button and wait. Refresh browser and it's still 2.4.30
Force a luup reload, and nothing changes
Is there an manual install?
Cheers
C
-
OK so Luser error. I was trying to update Verabridge,
Now I have all my devices. Verabridge has the details for the Vera and looks like all my devices are in.
Everything looks like it should be OK, so more playing tonight. Thanks!
C
-
So what are my next steps, gents?
I assume a UZB stick will need to be purchased and I can look at migrating some of the devices that are easy / non critical over.
Or perhaps a better direction would be to go for the HA Bridge plug in and then get Alexa skill working?
Thoughts?
C
-
Dived in to get HA-bridge up and running. Not too hard, but getting the config was a bit trickier. Using the base instructions here:
I installed in my home directory on Debian so
mdkir /home/catman/ha-bridge cd /home/catman/ha-bridge wget https://github.com/bwssytems/ha-bridge/releases/download/v5.3.0/ha-bridge-5.3.0.jar
Creating the service file gave me a choice, I could either change the file or make symlink the folder referenced, which was what I actually went for
sudo mkdir /home/pi chmod 555 /home/pi cd /home/pi sudo ln -s /home/catman/ha-bridge/ ha-bridge
The systemctl was all fine but it failed on start with the pretty obvious fact that java was missing!
sudo apt-get install default-jdk
Then it fired up fine, but going to my IP address gave me the Debian apache2 landing page. So that needed fixing. I decided to change the port number to 8080 using:
-Dserver.port=<port number>So my service command is now:
ExecStart=/usr/bin/java -jar -Dserver.port=8080 -Dconfig.file=/home/pi/ha-bridge/data/habridge.config /home/pi/ha-bridge/ha-bridge-5.3.0.jar
Quick demon reload and ha-bridge reload and there it is on port 8080;
Excellent!
C
-
Even better. Using HTTP to my vera IP I have successful voice control!
C
-
This post is deleted!
-
They are at the right place. It's gotta be something else. Unless the device json file indicates a completely different path... Or altui can't read the json files?
-
@rafale77 said in My migration from Vera, or what I did on my holidays:
They are at the right place. It's gotta be something else. Unless the device json file indicates a completely different path... Or altui can't read the json files?
I don't know what it was. It all started working when I checked in another browser on another machine.
FWIW some of the ones originally in 'icons' had had 0b file size. I supect there was an abortive copy at some point and then subsequent 'get Vera files' took a safe option. I manually scped them all over, but still didn't work when I posted that message.
I guess some odd caching (even though I was very rigorous with my cmd-R
So another challenge has reared its head.
Tried to start migrating some of my Reactor sensors over per my other thread.
Turns out that Vera Bridge seems to poll Vera every 80 seconds or so. That causes reactor to see an update sl_Central_Scene change and thus triggers. This took some time to work out!
This puts something of a crimp in my plans. My understanding is this:
I can plug my (soon to arrive) UZB into my Vera and move all my devices on to it. Then plug it into the NUC and there they all all. That was the big bang I was rather hoping to avoid.What I suspect I can't do is plug the UZB into the NUC. Un pair the controllers from Vera, pair them to the NUC, confirm a stack of functionality and then plug the UZB into Vera.
Or am I being too pessimistic?
Dunno if this post needs to be moved?
Cheers
C
-
@CatmanV2 said in My migration from Vera, or what I did on my holidays:
I don't know what it was. It all started working when I checked in another browser on another machine.
FWIW some of the ones originally in 'icons' had had 0b file size. I supect there was an abortive copy at some point and then subsequent 'get Vera files' took a safe option. I manually scped them all over, but still didn't work when I posted that message.
I guess some odd caching (even though I was very rigorous with my cmd-R
Not uncommon then. Glad you got over this. The icons do get aggressively cached by browsers and sometimes require some brute force "empty the browser cache"
So another challenge has reared its head.
Tried to start migrating some of my Reactor sensors over per my other thread.
Turns out that Vera Bridge seems to poll Vera every 80 seconds or so. That causes reactor to see an update sl_Central_Scene change and thus triggers. This took some time to work out!
Hmm I don't remember it doing this. A number of people are running reactor through openLuup verabridge I believe and I have never heard of it. I don't use reactor myself though.
This puts something of a crimp in my plans. My understanding is this:
I can plug my (soon to arrive) UZB into my Vera and move all my devices on to it. Then plug it into the NUC and there they all all. That was the big bang I was rather hoping to avoid.This is my recommended migration method indeed.
What I suspect I can't do is plug the UZB into the NUC. Un pair the controllers from Vera, pair them to the NUC, confirm a stack of functionality and then plug the UZB into Vera.
Not fully understanding this sentence. Unpair what controllers from vera?
-
Apologies. The devices in question are Remotec ZRC-90 keypads and Zwave.me keyfobs.
I have used these for many years to trigger activities in Reactor (although frankly with Alexa and the new less cloud based, they get very little use)
Each of these has an sl_scene attribute and an sl_scene update attribute. Because sl_scene might not change from one execution to another, you need to use both.
The issue I hit is that every 80 seconds or so the Reactor sensor would trigger. Looking in Openluup's logs:
2020-06-22 14:17:48.358 luup.variable_set:: 10238.urn:micasaverde-com:serviceId:SceneController1.sl_SceneActivated was: 4 now: 4 #hooks:0 2020-06-22 14:19:29.972 luup.variable_set:: 10238.urn:micasaverde-com:serviceId:SceneController1.sl_SceneActivated was: 4 now: 4 #hooks:0 2020-06-22 14:21:11.559 luup.variable_set:: 10238.urn:micasaverde-com:serviceId:SceneController1.sl_SceneActivated was: 4 now: 4 #hooks:0 2020-06-22 14:22:53.595 luup.variable_set:: 10238.urn:micasaverde-com:serviceId:SceneController1.sl_SceneActivated was: 4 now: 4 #hooks:0 2020-06-22 14:24:35.115 luup.variable_set:: 10238.urn:micasaverde-com:serviceId:SceneController1.sl_SceneActivated was: 4 now: 4 #hooks:0 2020-06-22 14:26:16.532 luup.variable_set:: 10238.urn:micasaverde-com:serviceId:SceneController1.sl_SceneActivated was: 4 now: 4 #hooks:0
Which was causing the sensor to trip (actually as it should) even though there was no actual button press.
What I would like to do is un-pair these devices from Vera and pair them to my UZB stick while plugged into the NUC. Get those Reactor sensors migrated over properly, then take the UZB stick back to Vera and move the rest of my devices.
Does that help?
(NB given the progress I've just made it might all be a moot point anyway as my most complex and WAF testing piece of automation seems to have moved over without issue) Not sure how to test it though
Cheers
C
-
I see. Yes of course you can do that. The migration from the vera is really meant to prevent any exclusion/inclusion which I know can be tedious depending on your device but if you want to exclude these devices from the vera first. Run the migration and reinclude them on z-way, it is up to you.
-
So long day working round some gotchas.
What have we learned:
Scene controllers behave a little oddly under Verabridge it appearsRestoring Reactor sensors (one at a time)
First back up your Reactor from the Backup and Restore tab. Download it and then scp to you Openluup install directors
Install Reactor on your Openluup host
Create a new sensor
Move it to the right room
Restore the desired sensor onto the sensor you just created.
Go to to tools tab to fix it (assuming you have the correct version)
For testing I disable the Vera instance and enable the Openluup instance.Once you're happy, you can delete the Vera instance.
Vera TTS was simplest of those so far. Install from Alt market place.
Copy your hosts, username and password into the Attributes. Then scp your .alexa.cookie from /storage/alexa on the Vera into /VeraAlexa on your Openluup deviceI actually found it easier to copy the contents and create a new file than working out how to SCP hidden files, but Filezilla will do it simply
iPhone locator.
These don't come across well it seems. It's probably easier to create them from scratch.C
30/105