From c09e1cc8d652f62e7eb5f173ef9fc7b0d3ed012d Mon Sep 17 00:00:00 2001 From: gcobb321 Date: Tue, 24 Dec 2024 15:36:37 -0500 Subject: [PATCH] iCloud3 v3.1.4.1 --- custom_components/icloud3/ChangeLog.txt | 4 +- custom_components/icloud3/config_flow.py | 19 +++--- .../icloud3/config_flow_forms.py | 4 ++ custom_components/icloud3/const.py | 2 +- .../airpods-blue-background.png | Bin 0 -> 8307 bytes .../airpods-white-background.png | Bin 0 -> 3293 bytes .../icloud3/event_log_card/ipad-landscape.png | Bin 0 -> 2683 bytes .../icloud3/event_log_card/ipad-portrait.png | Bin 0 -> 2899 bytes .../icloud3/event_log_card/iphone.png | Bin 0 -> 5636 bytes custom_components/icloud3/helpers/file_io.py | 2 +- custom_components/icloud3/manifest.json | 2 +- custom_components/icloud3/strings.json | 60 +++++++++++------- .../icloud3/support/config_file.py | 13 ++++ .../icloud3/translations/en.json | 5 +- 14 files changed, 73 insertions(+), 38 deletions(-) create mode 100644 custom_components/icloud3/event_log_card/airpods-blue-background.png create mode 100644 custom_components/icloud3/event_log_card/airpods-white-background.png create mode 100644 custom_components/icloud3/event_log_card/ipad-landscape.png create mode 100644 custom_components/icloud3/event_log_card/ipad-portrait.png create mode 100644 custom_components/icloud3/event_log_card/iphone.png diff --git a/custom_components/icloud3/ChangeLog.txt b/custom_components/icloud3/ChangeLog.txt index 1f8b442..a9b6908 100644 --- a/custom_components/icloud3/ChangeLog.txt +++ b/custom_components/icloud3/ChangeLog.txt @@ -5,7 +5,7 @@ 3.1.4 ....................... -### Change Log - v3.1.4 (12/22/2024) +### Release Notes - v3.1.4 (12/24/2024) 1. APPLE ACCOUNT PASSWORD AUTHENTICATION: - Reverted back to the old password authentication protocol before the Secure Remote Password (SRP) protocol was implemented - The Password SRP protocol will be tried if the old password authentication protocol fails. @@ -14,7 +14,7 @@ 4. TOOLS SCREEN (New Feature) - A `Tools` screen replaces the `Actions` screen on the Configure Menu screen. This is used for configuration file maintenance to reset all Devices Apple Account fields, Delete all Apple Accounts and Devices, Delete all iCloud3 and Apple Account cookie files, etc. 5. STARTUP (Improved) - Error and warning messages have been improved when setting up Apple Accounts and the Mobile App devices. When errors are encountered (devices can not be found, invalid Apple Account information, etc), an attempt will be made to correct the error using known device names and identification codes. Sometimes it works, sometimes it doesn't and the configuration will need to be updated. 6. ERROR & WARNING MESSAGES (Improved) - Changed various messages to improve readability and simplify the text. -7. A lot of internal code changes to improve code maintenance and to remove dead code. +7. MISCELLANEOUS CHANGES - A lot of internal code changes to make messages consistant, alerts all the same format with the samt highlight icons, improve code maintenance and to remove dead code and more. What's Next: ....................... diff --git a/custom_components/icloud3/config_flow.py b/custom_components/icloud3/config_flow.py index dd82f8f..773fbfe 100644 --- a/custom_components/icloud3/config_flow.py +++ b/custom_components/icloud3/config_flow.py @@ -782,7 +782,7 @@ def common_form_handler(self, user_input=None, action_item=None, errors=None): elif self.step_id == "display_text_as": pass elif self.step_id == 'tracking_parameters': - user_input = self._validate_tracking_parameters(user_input) + user_input = self._validate_tracking_paramdeters(user_input) elif self.step_id == 'inzone_intervals': user_input = self._validate_inzone_intervals(user_input) elif self.step_id == "waze_main": @@ -936,6 +936,7 @@ async def async_step_tracking_parameters(self, user_input=None, errors=None): if action_item == 'save': Gb.picture_www_dirs = Gb.conf_profile[CONF_PICTURE_WWW_DIRS].copy() self.picture_by_filename = {} + await self._build_picture_filename_selection_list() return await self.async_step_menu() @@ -2907,10 +2908,13 @@ async def async_step_add_device(self, user_input=None, errors=None): user_input = self._option_text_to_parm(user_input, CONF_MOBILE_APP_DEVICE, self.mobapp_list_text_by_entity_id) user_input = self._option_text_to_parm(user_input, CONF_PICTURE, self.picture_by_filename) - + user_input = self._option_text_to_parm(user_input, CONF_TRACKING_MODE, TRACKING_MODE_OPTIONS) + + self.log_step_info(user_input, action_item) user_input = self._validate_ic3_devicename(user_input) - user_input = self._validate_data_source_selections(user_input) + user_input = self._resolve_selection_list_items(user_input) + user_input = self._validate_data_source_selections(user_input) ui_devicename = user_input[CONF_IC3_DEVICENAME] self.log_step_info(user_input, action_item) @@ -3305,11 +3309,10 @@ def _validate_data_source_selections(self, user_input): self.errors[CONF_FAMSHR_DEVICENAME] = 'unknown_icloud' elif (ui_icloud_dname == 'None' - and ui_mobile_app_name == 'None'): - if user_input.get(CONF_TRACKING_MODE, TRACK_DEVICE) != INACTIVE_DEVICE: - user_input[CONF_TRACKING_MODE] = INACTIVE_DEVICE - self.errors[CONF_FAMSHR_DEVICENAME] = 'no_data_source' - # self.errors[CONF_MOBILE_APP_DEVICE] = 'no_device_selected' + and ui_mobile_app_name == 'None' + and user_input.get(CONF_TRACKING_MODE, TRACK_DEVICE) != INACTIVE_DEVICE): + self.errors[CONF_FAMSHR_DEVICENAME] = 'no_data_source' + self.errors[CONF_TRACKING_MODE] = 'no_data_source_set_inactive' if (ui_mobile_app_name != 'None' and ui_mobile_app_name not in self.mobapp_list_text_by_entity_id diff --git a/custom_components/icloud3/config_flow_forms.py b/custom_components/icloud3/config_flow_forms.py index d83917e..41f8a24 100644 --- a/custom_components/icloud3/config_flow_forms.py +++ b/custom_components/icloud3/config_flow_forms.py @@ -596,6 +596,10 @@ def form_add_device(self): default=default_picture_filename): selector.SelectSelector(selector.SelectSelectorConfig( options=dict_value_to_list(self.picture_by_filename), mode='dropdown')), + vol.Required(CONF_TRACKING_MODE, + default=self._option_parm_to_text(CONF_TRACKING_MODE, TRACKING_MODE_OPTIONS)): + selector.SelectSelector(selector.SelectSelectorConfig( + options=dict_value_to_list(TRACKING_MODE_OPTIONS), mode='dropdown')), vol.Required('action_items', default=self.action_default_text('add_device')): selector.SelectSelector(selector.SelectSelectorConfig( diff --git a/custom_components/icloud3/const.py b/custom_components/icloud3/const.py index b36732e..f3fdc6e 100644 --- a/custom_components/icloud3/const.py +++ b/custom_components/icloud3/const.py @@ -10,7 +10,7 @@ # #<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -VERSION = '3.1.4' +VERSION = '3.1.4.1' VERSION_BETA = '' #----------------------------------------- ICLOUD3 = 'iCloud3' diff --git a/custom_components/icloud3/event_log_card/airpods-blue-background.png b/custom_components/icloud3/event_log_card/airpods-blue-background.png new file mode 100644 index 0000000000000000000000000000000000000000..34a1adaa6f01266ccba5420d5693fa0a3b1f0479 GIT binary patch literal 8307 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 literal 0 HcmV?d00001 diff --git a/custom_components/icloud3/event_log_card/airpods-white-background.png b/custom_components/icloud3/event_log_card/airpods-white-background.png new file mode 100644 index 0000000000000000000000000000000000000000..7e02d70a1d13e487d65ba66225d4d24e2bc0f35e GIT binary patch literal 3293 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 bZ3p=;3Vr;R8UE)600000NkvXXu0mjfnhZld literal 0 HcmV?d00001 diff --git a/custom_components/icloud3/event_log_card/ipad-landscape.png b/custom_components/icloud3/event_log_card/ipad-landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..275c068199a5383e3d7e6f8b77fb365aefef0ea2 GIT binary patch literal 2683 zcmV->3WW8EP)z>>ElET{RCt{2m*-cMS02Z65{aNRv8>7NCZ1$BC!1!;CfRsSV%jDu zsDK3&3w?$T0|-b*dhf$frMID%8DNHCm=Vxuq{xabrfg2!M6-XwXD{$(U*sI;o!LFU z_@3W0_s)Hu&;9;>_dfS|3V7#q;|BQu1hlcXX3M5cY~Hw$&2}5vBD8tK zCbn#_6VXn@4Q#eqmMxoXtg*JS!CH*5vRaR&r6rbDR#;hDt;YYp7JXLMHduqwMDZd@i^9A zhgjo!kS&r^c+^x-*4syLSt)M?OL@lm3!XW+hut1-#KgIikadR7V%#v>|0z%JeV^xD z?Aasr#4R+G{lOA8JAK5Ok9Tq)Dj5CTwH0R{2^cDoqPcdJUFQ=q50|jBAe7{>RFw0@ z?34SjHR2@Z0`BFgAWDV@xw*7N%czQd>G3>s`VeLw4xEaO=0b5g4GpPyD8jLDbHMDx z=e#0u!7;!WKVLsih6VG2=ONZQeZZl_2#gDJD`|fuV1zV~vAM6Yi!kB3%#BS^o@`GJ;EU`~-c1R_PIekIsS}5alQG;_5DuDD?M4$8iLV6BtN=`m z#v;(2za~eJ+9;>JyB_Dlb37j(z?x`Z?Bb++o)SSxX9JS*EM83s!aUudXEQ_iK>R+h ztR%aq9EYkD%rm2TCM|-U<>yK4&R|TNL}^bBe@YI)Ec7&v6En+RUFw+3%=GmT> zgn6hpTSS`Q&WYxef;e6j4q2b`WL=yuR!Ko@ObO%lOc}3b__Hm;m#x`;*k%Xt$D(N7 zR;06|Je@5$=UAT=#k#C$>~f=dtvHsCYzX(_C7CC$hxxEM%oEF4f7YeQ*pzvePcFm~*d2>|OB^3n#PLdg3@_vd z^R6PA<6Uyx`s;bGK96fUYPpb06C z^%MKx;&rx{7h;|i&T}#^K9rosB`lnmB_3GE1z{l`_?Oan8mE=q|8WZayq0r4jeJ^` z$s5AG;GQz3@6I#-<2S_XdN9ul!Ynt0_s@qQ&&%Tbrfx>c>+mWp#zpJ^c>|r?`1T%F zrqp1h)DP`H7TGB;WPRFMo)fjUGx!X<1H1*SCmY1-+maK;J0exZ!(Du}xX8@41-i$y zq8l^Gn9$M9jECvWF@^JcD>sAnmE&x_=EaT-xorN~>Fm@pdo;r@@T zvo-}#yy}*2-sD1W7io1B`&^vw^ zgU*0zNQ=6w8g)lHeWErSFC>sxolCMJnX@G^_-98UO^qkBLQYLvJ8eA!7^c7EUq3%E z4KUJA%GY+pf2mCtGR`yW-;@MOcE;E38@?*>B1-t9m9-^ zJ#nD3i%V_Ae6397UPls_o3rQ_5QE~K-QLthZe}*&VNqhTMGULP(P*c*di6R#|MUPG zQ&Jowm2mIwT_!Yo277vi3oZ24HZf4s!Dzp5XK0juWgDFh3Yr?4sIF zd2?4BeRN~vs0USy3=WAnfJUWeLOY3OM8~jrP=9MPL&|nk?M*9EceJB!YhzHY`yv>7$znHeo1bh2%=hkg> zBjScbBaAHrc6Oj{Z(+1cY!4kB!lil!>O|_B8yTpt71vd$#I?4&2W>|ay4DH|$|?-) zW$3Dt87q-7UKNk7KAnj+(bn6_xR~(8scTG4&#eGH6o6Ky9JfMze7Sq;76$b&nywB; znyVSENMk5JoWa6)`b$Ld7p2l$kb>%hg3w($>asA@CSXv6GFf<%$$S?fSE1t= z3Qvf(|}93(+Xz7%7cL zRTP0LN5W7}s94P@^vm-Zs3<^Flg&h3DwE>Or!R6B3+X8O947&F3`5B&jAb6HDqoi8 zs>;rYzLOZ2`|Fb!Z>!)d<2VoR-#5*{NU4->macKRDTc{XZ*-;pjLX9rFPEV$i)6eq z1#Mj}+S*L?@?a*5PYHKiF%+L*y7V+N@?|J@4CU?^m#^iXE72g@mfM#hFP3`=EyH?> z`};CGAm`yf@0fPn3YYkDZ)uL1=6LiKegeW@!~iZtbg1*5uCBiZY!`RZ=m5RY&zjZp`*( z^WeKB(+;d5KFcYdW2z;AiOK*b6hR^eGu;r4Mki7`SI_W#JtI@KRH-f#-7-zxkPhX9 zkpk@k*`xDJ%ow>ff1Mwe?(*HzbuL|*B2~ReqkfjlnpS4(L(rF;Sp_U!1^ih6E`RYo z5-?~PaA{TmCZekhL?-}sieRSdqR{oH(l?UMz*sty!o|rUC4I^c^h2#^$2w^m9i(Ao zkZEl@i^hI#&ZxOHGr)qb6}7rgj8Sr>w~$NK{uoME>vBTWF z6~Mr7*VWDHLLN22HDBeeo;^TY-pTo|0 zIy>Xyc$fnY2iR|K&wd97>>ccJICuzqA%_D8*?+)^y^gNzU(xXu*$eG+bYZU;^J^@> p3iw;nV+VKw_yq8A1N_ee{s)_tX;5QNVz&SQ002ovPDHLkV1kyt4l4iv literal 0 HcmV?d00001 diff --git a/custom_components/icloud3/event_log_card/ipad-portrait.png b/custom_components/icloud3/event_log_card/ipad-portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..5c25b621cc119a3acaed77f3abe47cece170a3c3 GIT binary patch literal 2899 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 literal 0 HcmV?d00001 diff --git a/custom_components/icloud3/event_log_card/iphone.png b/custom_components/icloud3/event_log_card/iphone.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e8c7808fec9aee4bba7c39fc4281cd0678d972 GIT binary patch literal 5636 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 e%{TD9>c0SO0Lu@~psgSP0000 Apple Acct & Mobile App` screen", + "icloud_acct_parm_error": "Apple Account parameter error. Update it on the `Data Sources > Apple Account & Mobile App` screen", "icloud_acct_no_data_source": "❌ No Data Source has been selected (Apple iCloud Account or Mobile App)", "ic3_icloud_same_name": "iCloud3 dev_trkr.entity_id and name on the device (Settings > General > About) can not be exactly the same (letters & case)", "mobile_app_error": "Error, The Mobile App Integration is not installed. The Mobile App will not be used as a data source; location data and zone enter/exit triggers will not be monitored", "verification_code_requested": "The Apple Account Verification Code was requested, BROWSER REFRESH MAY BE NEEDED", "verification_code_requested2": "The Apple Account Verification Code was requested", - "verification_code_needed": "The Apple Account Verification Code is needed", + "verification_code_needed": "One of the Apple Accounts has requested a Verification Code", "verification_code_accepted": "✅ The Apple Account Verification Code was accepted", "verification_code_invalid": "❌ The Verification Code was not correct. Reenter or request a new code", "verification_code_send_error": "❌ Failed to send the Apple ID Verification Code", @@ -108,12 +109,12 @@ "waze_server_error_us": "The correct server for your location is: United States, Canada", "waze_server_error_il": "The correct server for your location is: Israel", "waze_server_error_row": "The correct server for your location is: Rest of the World", - "required_field": "❌ This parameter must be specified", - "required_field_device": "A device providing location data must be selected from the Family Share, Find-my-Friends, or Mobile App devices lists", - "no_device_selected": "❌ A device providing location data must be selected", + "required_field": "This parameter must be specified", + "no_data_source": "A device providing location data must be selected from the Apple Acct or Mobile App devices list", + "no_data_source_set_inactive": "Set the Tracking Mode to ‘Inactive’ when the Data Sources are unknown and set to None", "no_add_entities_device_tracker_fct": "The HA component for adding devices is not available. HA MUST BE RESTARTED", - "unknown_value": "One of the selection parameters needs to be reviewed", + "invalid_selection": "An invalid or header item was selected, reset to original value", "unknown_devicename": "The configured device was not found in any of the Apple Accts or the Mobile App device list", "unknown_icloud": "The configured device was not found in any of the Apple Accounts", "unknown_mobapp": "The configured device was not found in the Mobile App devices list", @@ -151,7 +152,7 @@ } }, "menu_0": { - "title": "Configure Devices and Sensors Menu", + "title": "Configure Devices & Sensors", "data": { "xmenu_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯", "menu_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯", @@ -159,7 +160,7 @@ } }, "menu_1": { - "title": "Configure Parameters Menu", + "title": "Configure Parameters", "data": { "menu_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯", "action_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯" @@ -172,11 +173,11 @@ "action_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯" } }, - "restart_ha_ic3": { - "title": "Restart Home Assistant or iCloud3", - "description": "Restart Home Assistant or reload and reinitialize the iCloud3 Integration\n\nTHE ICLOUD3 DASHBOARD SCREEN MUST BE REFRESHED AFTER RESTARTING", + "restart_ha": { + "title": "Restart Home Assistant", + "description": "Restart Home Assistant\n\nTHE ICLOUD3 DASHBOARD SCREEN MUST BE REFRESHED AFTER RESTARTING", "data": { - "action_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯" + "action_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ACTION COMMANDS" } }, "restart_ha_ic3_load_error": { @@ -189,7 +190,7 @@ "confirm_action": { "title": "Confirm Selected Action", "data": { - "confirm_action_form_hdr": "REQUESTED ACTION", + "action_desc": "REQUESTED ACTION", "action_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ACTION COMMANDS" } }, @@ -258,13 +259,16 @@ "data": { "ic3_devicename": "ICLOUD3 DEVICE_TRACKER ENTITY ID - The HA device_tracker entity for this device. (Example: gary_iphone)", "fname": "FRIENDLY NAME - Displayed in HA entities and on the Event Log (Example: Gary-iPhone)", + "famshr_devicename": "APPLE ACCOUNT iCLOUD DEVICE - Apple iCloud device providing location data", + "mobile_app_device": "MOBILE APP DEVICE_TRACKER ENTITY - Mobile App device providing location data & zone triggers", + "picture": "PICTURE - Image of the person normally using this device (44x44 pixels is a good size)", "device_type": "DEVICE TYPE - iPhone, iPad, Watch, etc.", "tracking_mode": "TRACKING MODE - Location request method (Tracked, Monitored, Inactive)", "mobapp": "MOBILE APP INSTALLED - HA Mobile App is installed on this device", "action_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ ACTION COMMANDS" }, "data_description": { - "ic3_devicename": "This is the device_tracker entity you are assigning to the iCloud3 device you want to track. The Apple Account and Mobile App devices to be associated with this device_tracker entity are selected on the next page. (Example: gary_iphone)" + "ic3_devicename": "This is the device_tracker entity you are assigning to the iCloud3 device you want to track." } }, "update_device": { @@ -273,11 +277,11 @@ "data": { "ic3_devicename": "ICLOUD3 DEVICE_TRACKER ENTITY ID - The HA device_tracker entity assigned to this device", "fname": "FRIENDLY NAME - Displayed in HA device_tracker and sensor names and on the Event Log", - "device_type": "DEVICE TYPE - iPhone, iPad, Watch, etc.E", - "tracking_mode": "TRACKING MODE - How location requests should be done (Full tracking, Monitor, Inactive)", "famshr_devicename": "APPLE ACCOUNT iCLOUD DEVICE - Apple iCloud device providing location data", "mobile_app_device": "MOBILE APP DEVICE_TRACKER ENTITY - Mobile App device providing location data & zone triggers", "picture": "PICTURE - Image of the person normally using this device (44x44 pixels is a good size)", + "device_type": "DEVICE TYPE - iPhone, iPad, Watch, etc", + "tracking_mode": "TRACKING MODE - How location requests should be done (Full tracking, Monitor, Inactive)", "inzone_interval": "INZONE INTERVAL", "rarely_updated_parms": "RARELY UPDATED PARAMETERS - Select and Submit to update these items", "log_zones": "ZONE LOG ACTIVITY - Enter/exit zone info (date, time, distance) is saved to a spreadsheet .csv file", @@ -330,11 +334,23 @@ "time_zone_2_offset": "SECONDARY DEVICES & LOCATION TIME - Devices and the current location time when away and in another time zone" } }, + "tools": { + "title": "Config Tools & Actions", + "description": "This screen provides Configuration File Maintenance Tools", + "data": { + "log_level_devices": "RAWDATA LOG DEVICE FILTER - Write iCloud RawData to the log file for only these devices", + "log_level": "LOG LEVEL - The type of messages that are written to the iCloud3 Log file (icloud3.log}", + "tools": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ APPLE ACCOUNT TOOLS", + "action_items": "⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ TOOLS" + }, + "data_description": { + } + }, "format_settings": { "title": "Format Settings", "description": "Tracking activity, results and information messages are displayed in the Event log, sensors and device_tracker entities for tracked and monitored devices.\n\nThis screen us used to specify how these results should be displayed.", "data": { - "log_level": "LOG LEVEL - The type of messages that are written to the iCloud3 Log file (icloud3-0.log}", + "log_level": "LOG LEVEL - The type of messages that are written to the iCloud3 Log file (icloud3.log}", "log_level_devices": "RAWDATA LOG DEVICE FILTER - Write iCloud RawData to the log file for only these devices", "display_zone_format": "EVENT LOG ZONE DISPLAY NAME - How the Zone name is displayed in sensors and the Event Log", "device_tracker_state_source": "DEVICE TRACKER STATE VALUE - How the device's device_tracker entity state value is determined", diff --git a/custom_components/icloud3/support/config_file.py b/custom_components/icloud3/support/config_file.py index a1c2074..31033b4 100644 --- a/custom_components/icloud3/support/config_file.py +++ b/custom_components/icloud3/support/config_file.py @@ -37,6 +37,7 @@ RANGE_DEVICE_CONF, RANGE_GENERAL_CONF, MIN, MAX, STEP, RANGE_UM, CF_PROFILE, CF_DATA, CF_TRACKING, CF_GENERAL, CF_SENSORS, CONF_DEVICES, CONF_APPLE_ACCOUNTS, DEFAULT_APPLE_ACCOUNTS_CONF, + IC3LOG_FILENAME, ) from ..support import start_ic3 @@ -501,8 +502,20 @@ def _config_file_check_new_ic3_version(): Gb.conf_profile[CONF_VERSION_INSTALL_DATE] = datetime_now() new_icloud3_version_flag = True + if new_icloud3_version_flag and VERSION.startswith('3.1.4'): + _delete_old_log_files() + return new_icloud3_version_flag +#-------------------------------------------------------------------- +def _delete_old_log_files(): + log_file_0 = Gb.hass.config.path(IC3LOG_FILENAME).replace('.', '-0.') + log_file_1 = Gb.hass.config.path(IC3LOG_FILENAME).replace('.', '-1.') + log_file_2 = Gb.hass.config.path(IC3LOG_FILENAME).replace('.', '-2.') + file_io.delete_file(log_file_0) + file_io.delete_file(log_file_1) + file_io.delete_file(log_file_2) + #-------------------------------------------------------------------- def _config_file_check_range_values(): ''' diff --git a/custom_components/icloud3/translations/en.json b/custom_components/icloud3/translations/en.json index 84297bb..1998949 100644 --- a/custom_components/icloud3/translations/en.json +++ b/custom_components/icloud3/translations/en.json @@ -110,10 +110,9 @@ "waze_server_error_il": "The correct server for your location is: Israel", "waze_server_error_row": "The correct server for your location is: Rest of the World", "required_field": "This parameter must be specified", - "required_field_device": "A device providing location data must be selected from the Family Share, Find-my-Friends, or Mobile App devices lists", - "no_data_source": "All location data sources are `None`. Device `Tracking Mode` changed to `Inactive`", + "no_data_source": "A device providing location data must be selected from the Apple Acct or Mobile App devices list", + "no_data_source_set_inactive": "Set the Tracking Mode to ‘Inactive’ when the Data Sources are unknown and set to None", "no_add_entities_device_tracker_fct": "The HA component for adding devices is not available. HA MUST BE RESTARTED", - "unknown_value": "One of the selection parameters needs to be reviewed", "invalid_selection": "An invalid or header item was selected, reset to original value", "unknown_devicename": "The configured device was not found in any of the Apple Accts or the Mobile App device list",