-
Notifications
You must be signed in to change notification settings - Fork 0
/
vigipool_installer.sh
591 lines (532 loc) · 22.1 KB
/
vigipool_installer.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
#!/usr/bin/with-contenv bashio
# Init Functions
echo ""
echo "----- Home Assistant Vigipool Installer -----"
echo ""
# Language manager
while true; do
echo ""
echo "--- Select your language / Sélectionner votre langage ---"
echo ""
echo "1 - EN - English"
echo "2 - FR - Français"
echo "Enter your answer 1 or 2 : "
read menu_choice
if [ "$menu_choice" != "${menu_choice#[1eEnN]}" ] ;then
echo "You have selected '1 - EN - English'"
text_lang="en"
text_step_1="Step 1 - Installing the necessary packages"
text_install="Installation successful"
text_step_2="Step 2 - Search for the VigiPool product in your network"
text_do="Do you want us to launch an automatic scan of the IPs on your network or do you want to enter the IP manually?"
text_automatic="Automatic"
text_manual="Manual"
text_please="Please write your answer (1 or 2) then press the "enter" key"
text_you="You have selected"
text_we="We start scanning IP addresses"
text_ip="IP addresses found"
text_found="An IP address with an MQTT server was found, what do you want to do?"
text_what="What do you want to do ?"
text_what_1="Use the IP address displayed above"
text_what_2="Continue scanning to find another IP address"
text_what_3="Enter the IP manually"
text_what_4="View IP address MQTT data"
text_please_3="Please write your answer (1 or 2) then press the "enter" key"
text_please_manu="Please enter the IP address in the format of the following example"
text_choice_error="The choice was not understood, please try again"
text_step_3="Step 3 - Managing configuration.yaml file"
text_want="Do you want to configure the configuration.yaml file automatically or manually ?"
text_want_auto="Select automatic mode if you have never modified your configuration.yaml file or if the MQTT plugin configuration is in the file"
text_want_manu="Select manual mode if your MQTT configuration is not the configuration.yaml file"
text_backup="In the event of a problem, a backup of your configuration has been made under the following name"
text_check_mqtt="Checking if the configuration has already been done or not"
text_manu_mqtt="Please add the following line to your configuration"
text_example="example"
text_step_4="Step 4 – creating and managing the vigipool.yaml file"
text_creation="Creation of the VigiPool folder"
text_cleaning="Cleaning and downloading models"
text_retrieving="Retrieving MQTT data"
text_mqtt="MQTT data analysis"
text_displaying="Displaying results"
text_integration="integration of information into the configuration"
text_step_5="Step 5 - checking the changes and restarting"
text_modif="The modification of your configuration went well"
text_end="The rebuild is completed, you can go to your dashboard, VigiPool products are integrated"
text_prob_1="There was a problem during the installation, here is the error"
text_prob_2="if you want to undo changes, you can use the backup named"
text_nothing="The configuration is already there, no changes will be made"
text_error_no_device="No Vigipool compatible device was found, the installation is canceled, please check if the devices are connected to your Wi-Fi and if the Home Assistant MQTT is correctly configured."
text_reboot="A reboot is required to see the changes in the dashboard, do you want to do it now or do you want to do it yourself later?"
text_reboot_now="Restart now"
text_reboot_later="Manually restart later"
text_already_ready="The configuration.yaml file is already ready"
text_device_found="Device detected"
text_device_missing="Device missing"
break
elif [ "$menu_choice" != "${menu_choice#[2mM]}" ] ;then
echo "Vous avez sélectionné '2 - FR - Français'"
text_lang="fr"
text_step_1="Étape 1 - Installation des packages nécessaires"
text_install="Installation réussie"
text_step_2="Étape 2 - Recherche du produit VigiPool dans votre réseau"
text_do="Souhaitez-vous que nous lançons un scan automatique des IP sur votre réseau ou souhaitez-vous saisir l\’IP manuellement ?"
text_automatic="Automatique"
text_manual="Manuel"
text_please="Veuillez écrire votre réponse (1 ou 2) puis appuyer sur la touche "entrée""
text_you="Vous avez sélectionné"
text_we="Nous commençons à scanner les adresses IP"
text_ip="adresses IP trouvés"
text_found="Une adresse IP avec un serveur MQTT a été trouvé"
text_what="Que voulez-vous faire ?"
text_what_1="Utiliser l'adresse IP qui s'affiche au-dessus"
text_what_2="Continuer de scanner pour trouver une autre adresse IP"
text_what_3="Entrer l'IP a la main"
text_what_4="Voir les données MQTT de l'adresse IP"
text_please_3="Please write your answer (1 2 or 3) then press the "enter" key"
text_please_manu="Veuillez entrer l'adresse IP dans le format de l'exemple suivant"
text_choice_error="Le choix n\'a pas été compris, veuillez réessayer"
text_step_3="Étape 3 - Gestion du fichier configuration.yaml"
text_want="Voulez-vous configurer le fichier configuration.yaml automatiquement ou manuellement ?"
text_want_auto="Sélectionner le mode automatique si vous n'avez jamais modifié votre fichier configuration.yaml ou si la configuration du plugin MQTT est dans le fichier"
text_want_manu="Sélectionner le mode manuel si la configuration de votre MQTT n'est pas le fichier configuration.yaml"
text_backup="En cas de problème, une sauvegarde de votre configuration a été faite sous le nom suivant"
text_check_mqtt="Vérification si la configuration a déjà été faite ou pas"
text_manu_mqtt="Veuillez ajouter la ligne suivante dans votre configuration"
text_example="exemple"
text_step_4="Étape 4 - Création et gestion du fichier vigipool.yaml"
text_creation="Création du dossier VigiPool"
text_cleaning="Nettoyage et téléchargements des modèles"
text_retrieving="Récupération des données MQTT"
text_mqtt="Analyse des données MQTT"
text_displaying="Affichage des résultats"
text_integration="intégration des informations dans la configuration"
text_step_5="Étape 5 - vérification des modifications et redémarrage"
text_modif="La modification de votre configuration s'est bien déroulée"
text_end="La reconstruction est terminée, vous pouvez accéder à votre tableau de bord, les produits VigiPool sont intégrés"
text_prob_1="Il y a eu un problème lors de l'installation, voici l'erreur"
text_prob_2="Si vous souhaitez annuler les modifications, vous pouvez utiliser la sauvegarde nommée"
text_nothing="La configuration est déjà là, aucune modification ne sera faite"
text_error_no_device="Aucun périphérique compatible Vigipool a été trouvé, l'installation est annulée, veuillez vérifier si les périphériques sont bien connectés à votre Wi-Fi et si le MQTT de Home Assistant est bien configuré."
text_reboot="Un redémarrage est nécessaire pour voir les changements dans le tableau de bord, voulez-vous le faire maintenant ou voulez-vous le faire vous-même plus tard ?"
text_reboot_now="Redémarrer maintenant"
text_reboot_later="Redémarrer manuellement plus tard"
text_already_ready="Le fichier configuration.yaml est déjà prêt"
text_device_found="Périphérique détecté"
text_device_missing="Périphérique absent"
break
else
echo The choice was not understood, please try again \/ Le choix n\'a pas été compris, veuillez réessayer
fi
done
# Configuration Variables
link_to_scripts="https://raw.githubusercontent.com/developer-ccei-pool/home-assistant-vigipool-installer/main/"
ip_address_mqtt_debug="192.168.2.2"
debug=false
templates=anteam anteaox anteavs daisyox daisyph lynx phileox tild vigipool vigiwatt x312 ziphox
if [[ $debug == true ]]; then
echo "Debug mode has been activated"
fi
if [[ $debug == false ]]; then
echo "--- $text_step_1 ---"
echo "";
apk add --no-cache mosquitto mosquitto-clients nmap
echo "$text_install"
echo ""
fi
# Downloading and launching and removing the installer
# wget -q https://raw.githubusercontent.com/developer-ccei-pool/home-assistant-vigipool-installer/main/vigipool_installer.sh && chmod +x vigipool_installer.sh && bash vigipool_installer.sh
if [[ $debug == false ]]; then
rm vigipool_installer.sh
fi
# IP address management
## recovery of the machine's IP address and processing of information
ip_address_inet=$(ip address | grep -Eo " (\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/[0-9].")
if [[ $debug == true ]]; then
echo ""
echo ""
echo "ip_address_inet = $ip_address_inet"
echo ""
echo ""
fi
ip_address_inet=(${ip_address_inet//;/ })
if [[ $debug == true ]]; then
echo ""
echo ""
echo "ip_address_inet = "
for i in "${ip_address_inet[@]}"; do
echo "$i"
done
echo ""
echo ""
fi
## Remove local IP
ip_address_inet=( "${ip_address_inet[@]/$127*/}" )
## recovery of machine IP address ranges and processing of information
ip_address_to_test=()
for i in "${ip_address_inet[@]}"; do
if [[ "$i" == "127.0.0.1/8" ]]; then
nothing="to do"
else
ip_address_to_test+=$(nmap -sL -n $i | grep 'Nmap scan report for' | cut -f 5 -d ' ')
ip_address_to_test+=";"
fi
done
ip_address_to_test=(${ip_address_to_test//;/ })
if [[ $debug == true ]]; then
echo ""
echo ""
echo "ip_address_to_test = "
for i in "${ip_address_to_test[@]}"; do
echo -n "- $i"
done
echo ""
echo ""
fi
## testing IP addresses to find the MQTT server
ip_address=""
# ip_address_to_test=($ip_address_mqtt_debug $link_to_scripts)
echo "--- $text_step_2 ---"
echo "";
while [[ "$ip_address" == "" ]]; do
echo "$text_do";
echo "1 - $text_automatic";
echo "2 - $text_manual";
echo "$text_please : "
read menu_choice
if [ "$menu_choice" != "${menu_choice#[1aA]}" ] ;then
# 1 - Automatic
echo "$text_you '$text_automatic'"
number_ip_address_to_test=${#ip_address_to_test[@]}
echo "$text_we ($number_ip_address_to_test $text_ip)"
echo ''
for i in ${!ip_address_to_test[@]}; do
echo -e '\e[1A\e[K Scan : '$i'/'$number_ip_address_to_test '('${ip_address_to_test[i]}')'
nmap_mqtt_data=$(nmap --min-rtt-timeout 0.3 --max-rtt-timeout 0.3 --initial-rtt-timeout 0.3 -Pn --host-timeout 0.3 --script-timeout 0.3 -q -p 1883 ${ip_address_to_test[i]})
cat_grep=$(echo $nmap_mqtt_data | grep -q "1883/tcp open mqtt" ; echo $?)
if [[ $debug == true ]]; then
result=$ip_address_mqtt_debug
fi
if [[ "$cat_grep" == "0" ]]; then
echo "";
echo "";
# Ask the user what they want to do with this IP address
echo "$text_found : "${ip_address_to_test[i]}
while true; do
echo "$text_what";
echo "1 - $text_what_1";
echo "2 - $text_what_2";
echo "3 - $text_what_3";
echo "4 - $text_what_4";
echo "$text_please_3 : "
read menu_choice
if [ "$menu_choice" != "${menu_choice#[1]}" ] ;then
# 1 - Use this IP address
echo "$text_you '$text_what_1'"
ip_address=${ip_address_to_test[i]}
break
elif [ "$menu_choice" != "${menu_choice#[2]}" ] ;then
# 2 - Continue scanning
echo "$text_you '$text_what_2'"
break
elif [ "$menu_choice" != "${menu_choice#[3]}" ] ;then
# 3 - Enter the IP address manually
echo "$text_you '$text_what_3'"
echo "$text_please_manu : $ip_address_mqtt_debug"
read ip_address
break
elif [ "$menu_choice" != "${menu_choice#[4]}" ] ;then
# 4 - View IP address MQTT data
echo "$text_you '$text_what_4'"
mosquitto_sub_raw=$(timeout 1 mosquitto_sub -h ${ip_address_to_test[i]} --pretty --verbose --topic "#")
echo "mosquitto_sub_raw = $mosquitto_sub_raw"
else
echo "$text_choice_error"
fi
done
echo "";
echo "";
else
echo -n ". ($cat_grep)"
fi
if [ "$ip_address" != "" ]; then
break;
fi
done
if [[ $debug == true ]]; then
ip_address=$ip_address_mqtt_debug
fi
elif [ "$menu_choice" != "${menu_choice#[2mM]}" ] ;then
# 2 - Manual
echo "$text_you '$text_manual'"
echo "$text_please_manu : $ip_address_mqtt_debug"
read ip_address
echo "";
echo "";
elif [ "$menu_choice" != "${menu_choice#[3dD]}" ] ;then
# 3 - Debug
echo "$text_you 'Debug'"
echo "The IP address will be $ip_address_mqtt_debug"
ip_address=$ip_address_mqtt_debug
echo "";
echo "";
else
echo The choice was not understood, please try again
fi
echo "";
echo "";
echo "";
done
# Managing configuration.yaml file
echo "--- $text_step_3 ---"
echo "";
# changing directory to homeassitant folder
cd /root/homeassistant
while true; do
echo "$text_want"
echo "$text_want_auto"
echo "$text_want_manu"
echo "1 - $text_automatic";
echo "2 - $text_manual";
echo "$text_please : "
read menu_choice
if [ "$menu_choice" != "${menu_choice#[1aA]}" ] ;then
# 1 - Automatic
echo "$text_you '$text_automatic'"
timestamp=$(date +%s)
echo "$text_backup : configuration_$timestamp.backup"
cp -n configuration.yaml configuration_$timestamp.backup
echo "$text_check_mqtt"
File="configuration.yaml"
if grep -q mqtt "$File"; then
if grep -q vigipool.yaml "$File"; then
echo "$text_already_ready"
else
sed -i '/mqtt:/a \ \ !include vigipool_templates/vigipool.yaml' configuration.yaml
break
fi
else
echo "" >> $File
echo "# Vigipool" >> $File
echo "mqtt:" >> $File
echo " !include vigipool_templates/vigipool.yaml" >> $File
fi
break
elif [ "$menu_choice" != "${menu_choice#[2mM]}" ] ;then
# 2 - Manual
echo "$text_manu_mqtt"
echo "$text_example :"
echo "# Vigipool"
echo "mqtt:"
echo " !include vigipool_templates/vigipool.yaml"
break
else
echo The choice was not understood, please try again
fi
done
echo "";
echo "";
echo "--- $text_step_4 ---"
echo "";
# Managing vigipool.yaml file
echo "$text_creation"
mkdir -p vigipool_templates
cd vigipool_templates
echo "$text_cleaning"
clean_and_download_template() {
# echo "$text_cleaning ($1)"
if test -f "$1.yaml"; then
rm $1.yaml
fi
wget -q $link_to_scripts/vigipool_templates/$1.yaml
}
clean_and_download_template "anteam" $anteam
clean_and_download_template "anteaox" $anteaox
clean_and_download_template "anteavs" $anteavs
clean_and_download_template "daisyox" $daisyox
clean_and_download_template "daisyph" $daisyph
clean_and_download_template "lynx" $lynx
clean_and_download_template "phileox" $phileox
clean_and_download_template "tild" $tild
clean_and_download_template "vigipool" $vigipool
clean_and_download_template "vigiwatt" $vigiwatt
clean_and_download_template "x312" $x312
clean_and_download_template "ziphox" $ziphox
# Retrieving MQTT data
echo "$text_retrieving"
mosquitto_sub_raw=$(timeout 1 mosquitto_sub -h $ip_address --pretty --verbose --topic "#")
if [[ $debug == true ]]; then
echo "";
echo "";
echo "mosquitto_sub_raw = $mosquitto_sub_raw"
echo "";
echo "";
fi
# Retrieving device names
echo "$text_mqtt"
function retrieving_device_names() {
# echo "retrieving_device_names $1";
echo $mosquitto_sub_raw | grep -Eo "$1\_............" > temp.txt
device_name=$(head -n 1 temp.txt)
# echo "device_name = $device_name";
# if [[ $debug == true ]]; then
# echo "";
# echo "";
# echo "$1 = $$1"
# echo "";
# echo "";
# fi
echo $device_name
}
anteam=$(retrieving_device_names 'anteam')
anteaox=$(retrieving_device_names 'anteaox')
anteavs=$(retrieving_device_names 'anteavs')
daisyox=$(retrieving_device_names 'daisyox')
daisyph=$(retrieving_device_names 'daisyph')
lynx=$(retrieving_device_names 'lynx')
phileox=$(retrieving_device_names 'phileox')
tild=$(retrieving_device_names 'tild')
vigipool=$(retrieving_device_names 'vigipool')
vigiwatt=$(retrieving_device_names 'vigiwatt')
x312=$(retrieving_device_names 'x312')
ziphox=$(retrieving_device_names 'ziphox')
# String
if [[ -z "$anteam$anteaox$anteavs$daisyox$daisyph$lynx$phileox$tild$vigipool$vigiwatt$x312$ziphox" ]]; then
echo $text_error_no_device
exit 1
elif [[ -n "$anteam$anteaox$anteavs$daisyox$daisyph$lynx$phileox$tild$vigipool$vigiwatt$x312$ziphox" ]]; then
echo "Ok"
else
echo "This never happens"
fi
# echo "$text_displaying"
# show_results() {
# echo $1 = $2
# }
# show_results "anteam" $anteam
# show_results "anteaox" $anteaox
# show_results "anteavs" $anteavs
# show_results "daisyox" $daisyox
# show_results "daisyph" $daisyph
# show_results "lynx" $lynx
# show_results "phileox" $phileox
# show_results "tild" $tild
# show_results "vigipool" $vigipool
# show_results "vigiwatt" $vigiwatt
# show_results "x312" $x312
# show_results "ziphox" $ziphox
echo "$text_integration"
replace_template_name() {
if test -f "$1.yaml"; then
sed -i "s/${1}_XXXXXXXXXXXX/$2/" $1.yaml
fi
}
replace_template_name "anteam" $anteam
replace_template_name "anteaox" $anteaox
replace_template_name "anteavs" $anteavs
replace_template_name "daisyox" $daisyox
replace_template_name "daisyph" $daisyph
replace_template_name "lynx" $lynx
replace_template_name "phileox" $phileox
replace_template_name "tild" $tild
replace_template_name "vigipool" $vigipool
replace_template_name "vigiwatt" $vigiwatt
replace_template_name "x312" $x312
replace_template_name "ziphox" $ziphox
found_and_integrate() {
if [[ -z "$2" ]]; then
echo "$text_device_missing : $1"
elif [[ -n "$2" ]]; then
if test -f "$1.yaml"; then
echo "$text_device_found : $1"
cat $1.yaml >> vigipool.yaml
fi
fi
}
echo "" > vigipool.yaml
echo cleaning vigipool.yaml
found_and_integrate "anteam" $anteam
found_and_integrate "anteaox" $anteaox
found_and_integrate "anteavs" $anteavs
found_and_integrate "daisyox" $daisyox
found_and_integrate "daisyph" $daisyph
found_and_integrate "lynx" $lynx
found_and_integrate "phileox" $phileox
found_and_integrate "tild" $tild
found_and_integrate "vigipool" $vigipool
found_and_integrate "vigiwatt" $vigiwatt
found_and_integrate "x312" $x312
found_and_integrate "ziphox" $ziphox
replace_name() {
sed -i "s/name: $1/name: $2/" vigipool.yaml
}
if [[ $text_lang == "fr" ]]; then
echo "-> fr"
replace_name "Injecting Product" "Produit Injecté"
replace_name "Total volume injected" "Volume total injecté"
replace_name "Serial Number" "Numéro de série"
replace_name "pH Setpoint" "Consigne pH"
replace_name "Max volume injected in 24 hours" "Volume max injecté en 24 heures"
replace_name "Container volume" "Volume du conteneur"
replace_name "Firmware Version" "Version du firmware"
replace_name "pH Value" "Valeur du pH"
replace_name "Hardware Version" "Version du matériel"
replace_name "Light" "Éclairage"
replace_name "Filtration" "Filtration"
replace_name "Auxiliary" "Auxiliary"
replace_name "AnteaM" "AnteaM"
replace_name "Light Mode" "Mode d'éclairage"
replace_name "Filtration Mode" "Mode de filtration"
replace_name "Auxiliary 1 Mode" "Mode de l'auxiliaire 1"
replace_name "Auxiliary 2 Mode" "Mode de l'auxiliaire 2"
replace_name "ORP Value" "Valeur de l'ORP"
replace_name "ORP Setpoint" "Consigne ORP"
replace_name "pH mode" "Mode du pH"
replace_name "pH Setpoint" "Consigne pH"
replace_name "pH Setpoint" "pH Setpoint"
replace_name "Speed" "Vitesse"
replace_name "Timer" "Minuterie"
replace_name "Time Selecter" "Sélecteur de temps"
replace_name "Time Remaining" "Temps restant"
replace_name "pH Mode" "Mode du pH"
replace_name "pH Value" "Valeur du pH"
fi
echo "";
echo "";
echo "--- $text_step_5 ---"
echo "";
ha_core_check=$(ha core check)
ha_core_save=$ha_core_check
echo $ha_core_check | grep -Eo "Error" > temp.txt
ha_core_check=$(head -n 1 temp.txt)
echo $ha_core_check
if [[ -z "$ha_core_check" ]]; then
echo "$text_modif"
while true; do
echo "$text_reboot"
echo "1 - $text_reboot_now";
echo "2 - $text_reboot_later";
echo "$text_please : "
read menu_choice
if [ "$menu_choice" != "${menu_choice#[1aA]}" ] ;then
# 1 - Automatic
echo "$text_you '$text_reboot_now'"
ha core rebuild
echo "$text_end"
break
elif [ "$menu_choice" != "${menu_choice#[2mM]}" ] ;then
# 2 - Manual
echo "$text_you '$text_reboot_later'"
break
else
echo The choice was not understood, please try again
fi
done
elif [[ -n "$ha_core_check" ]]; then
echo "";
echo "$text_prob_1 : "
echo "";
echo $ha_core_save
echo "";
echo "$text_prob_2 : configuration_$timestamp.backup"
echo "";
fi