Voici donc comme je me suis pris pour migrer de V3 à V4....
Vu qu'il y a des conseils et problèmes connus pour cette migration, je vais donc vous lister dans mon cas ce que j'ai vérifié et préparé avant de migrer.
A) préparation de la mise à jour :
1) J'ai vérifier ma version de raspbian installé (il est conseillé de rester en Raspbian 9 (stretch) pour l'instant parce que Buster peut poser problème):
pi@JeedomMaster:/var/www/html/plugins $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)" NAME="Raspbian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs" pi@JeedomMaster:/var/www/html/plugins $
2) J'ai du vérifier aussi les plugins qui ne seront plus bon après la migration... Apparement, c'est ceux qui continue d'utiliser l' object:: dans le code php. Maintenant la V4, demande d'utiliser JeeObject:: à la place, on verra ensuite si on peut modifier sur les anciens plugins si le dev ne maintient plus ce code.
Pour l'instant, on va devoir faire l'inventaire avec la commande suivante :
cd /var/www/html/plugins; grep -R "object::" *
pi@JeedomMaster:~ $ cd /var/www/html/plugins; grep -R "object::" * alexaapi/desktop/php/alexaapi_ex.php:foreach (object::all() as $object) clientSIP/desktop/php/panel.php: $object = object::byId($_SESSION['user']->getOptions('defaultDashboardObject')); clientSIP/desktop/php/panel.php: $object = object::byId(init('object_id')); clientSIP/desktop/php/panel.php: $object = object::rootObject(); clientSIP/desktop/php/panel.php:$child_object = object::buildTree($object); clientSIP/desktop/php/panel.php: $allObject = object::buildTree(null, true); datatransfert/desktop/php/datatransfert.php:foreach (object::all() as $object) { enedis_linky/desktop/php/enedis_linky.php:foreach (object::all() as $object) { forecastio/desktop/php/forecastio.php: foreach (object::all() as $object) { FreeboxCalls/desktop/php/FreeboxCalls.php: foreach (object::all() as $object) { FreeboxOS/desktop/php/FreeboxOS.php: foreach (object::all() as $object) { gmailinfo/desktop/php/gmailinfo.php: foreach (object::all() as $object) { gmailinfo/desktop/php/pushbullet.php: foreach (object::all() as $object) { JPI/desktop/php/JPI.php: foreach (object::all() as $object) { ledticker/desktop/php/ledticker.php:foreach (object::all() as $object) { lightsManagement/desktop/php/lightsManagement.php: foreach (object::all() as $object) { MiFlora/desktop/php/MiFlora.php: foreach (object::all() as $object) { Monitoring/desktop/php/Monitoring.php~: foreach (object::all() as $object) { motion/core/ajax/motion.ajax.php: $object = object::byId($_SESSION['user']->getOptions('defaultDashboardObject')); motion/core/ajax/motion.ajax.php: $object = object::byId(init('object_id')); motion/core/ajax/motion.ajax.php: $object = object::rootObject(); motion/core/ajax/motion.ajax.php: foreach (object::all() as $object) { motion/core/ajax/motion.ajax.php: foreach (object::buildTree($object) as $child) { orvibo/desktop/php/orvibo.php: foreach (object::all() as $object) { ping/desktop/php/ping.php: foreach (object::all() as $object) { previsionpluie/desktop/php/previsionpluie.php: foreach (object::all() as $object) { pushbullet/desktop/php/pushbullet.php: foreach (object::all() as $object) { rcswitch/desktop/php/rcswitch.php: foreach (object::all() as $object) { rcswitch/desktop/php/rcswitch.php.obsolete:foreach (object::all() as $object) { RTSP/desktop/php/RTSP.php:foreach (object::all() as $object) { script/data/Export_XML.php:if($jsonrpc->sendRequest('object::full', array())){ snmp_client/desktop/php/snmp_client.php:foreach (object::all() as $object) { Store/desktop/php/Store.php:foreach (object::all() as $object) { trafictransilien/desktop/php/trafictransilien.php:foreach (object::all() as $object) { wifilight/desktop/php/wifilight.php: foreach (object::all() as $object) { wifilight/desktop/php/wifilight.php~: foreach (object::all() as $object) { wifilight/desktop/php/wifilight_V0.06.php: foreach (object::all() as $object) { wifilight/desktop/php/wifilight - Copie.php: foreach (object::all() as $object) { wifilight/desktop/php/wifilight.old.php: foreach (object::all() as $object) { pi@JeedomMaster:/var/www/html/plugins $
Voici donc le résultat pour moi, j'ai des vieux plugins en fait et qui ne sont pas forcement maintenu :-(
Dans un premier temps, j'ai décider d'identifier dans cette liste ceux que je n'utilise même pas, que j'ai gardé mais qui sont inactif, j'ai :
- clientSIP
- freeboxCalls (plus de Freebox ;-)
- freeboxOS (plus de Freebox ;-)
- gmailInfo
- JPI
- Ledticker
- MiFlora
- Motion
- Previsionpluie (en fait, je ne sais pas quel est vraiment le plugin derrière ?!)
- Pushbullet (j'ai arrêté à cause du support d'iOS abandonné par le passé, maintenant j'envoi des SMS !)
- rcswitch
- RTSP (finalement, je ne l'utilise plus pour les cameras !)
- store
Et maintenant, il me reste donc ceux que j'utilise et qui pourront me poser problèmes :
- alexaapi (et celui là je l'utilise vraiment, surtout pour faire parler Alexa !)
- datatransfert (pour mes backups de jeedom dans dropbox)
- lightsManagement (pour ma simulation de présence !)
- Monitoring (pour suivre les Pis !)
- Orvibo (pour les prise et mon AllOne qui contrôle l'infra-rouge, pilotage télé/switch hdmi !)
- Ping (pour suivre la présence de device sur le réseau !)
- script (sera géré par l'équipe de Jeedom je pense à moins que cela soit un de mets scripts, à voir)
- snmp_client (pour le test de présence de mon routeur DD-WRT)
- trafic transilien (pour le train de ma femme ;-)
- wifilight (je vais devoir peut être migrer en v2 un jour ?!)
3) les widgets "custom" ne seront plus compatible, j'ai regardé, j'ai pas trouvé de widget fait par mes soins, j'ai fait des essais par le passé, mais rien de "folichon", donc je n'ai jamais vraiment utilisé des widgets spécifiques... on verra lors de la migration, si j'ai loupé un truc... mais c'est à savoir.
4) lancer un backup de la conf V3 :
5) Télécharger le backup sur un autre appareil pour plus de sécurité :
6) Pour plus de sécurité, vous pouvez aussi cloner votre SD ou votre SSD :
Pour cela j'ai suivi ce tuto: https://www.thedigitalpictureframe.com/guide-back-up-sd-card-raspberry-pi-while-running/
Et donc j'ai lancé cette commande à partir de mon linux.... attention cela peut être long, mon mSSD fait 111,8 Go et mon réseau n'est pas térrible je crois (j'ai cloné à 4/5 MBytes/s), donc mon cas c'est une Raspbian stretch (Debian 9) avec mon disque en /dev/sda :
ssh pi@192.168.0.X "sudo dd if=/dev/sda bs=1M status=progress | gzip -" | dd of=~/Desktop/$(date +%Y%m%d\_%H%M%S)\_pi_clone.gz
Et il faudra taper son mode de passe d'accès au pi pour pouvoir lancer le backup.
Et pour finir, on aura un fichier .gz ainsi :
Cela a mis plusieurs heures en fait :-( donc à vous de voir.
Si vous avez un doute vous pouvez utiliser cette commande pour vérifier si vous êtes sur le bon disque :
sudo cfdisk /dev/sda
6 bis) On peut aussi cloner avec un outil externe en installant le disque mSSD dans un "adapteur mSata <> Sata" pour le connecter à un PC comme ci-après :
B) la mise à jour en tant que tel :
1) Pour les widgets, il est conseillé de les désactiver le plugin pour éviter les problèmes pendant la migration :
2) Pour les designs, c'est plus radical... il est préférable de les supprimer :-( pour ma part, je m'en servait peu ou pas... j'avais juste fait un pour test :
3) Mettez tous vos plugins à jour :
4) On peut maintenant lancer la mise à jour à partir du "centre de mise à jour" et cliquer sur "mettre à niveau V4"
Dans mon cas.... j'ai pris peur... et j'ai pensé qu'il était préférable de changer d'OS avant :-(... mais finalement non...
Puis on check... et tout semble bon à part un plug-in beta qui me saoule :-( faurda que je le vire à l'occas !!!)
C) la vérification que cela marche !!!
2) Mais avant on va supprimer le plugin "widget" qui est conseillé de virer ! (moi j'ai désactivé dans un premier temps avant de le vier, prudence... ;-)
14) OUPS.... dans mon cas, la restauration est resté figé... j'ai du me reloguer avec mon login/mot de passe comme dans la V3
17) J'avais donc encore 4 plugins NOK, j'ai pu en corriger 2... mais j'ai fini par en garder 2 avec problèmes... des que je n'utilise pas souvent donc j'ai décidé de remettre cela à plus tard... dans mon cas, j'ai beaucoup de plugin donc c'est normal d'avoir certains qui ne passent pas bien cette migration, certains avaient aussi des problèmes avant donc je n'ai pas considérer cela comme un problème, et cela sera à résoudre plus tard.