Eteindre OpenCPN OpenPlotter

Bonjour,
Je travaille avec openplotter, OpenCPN le tout installer sur un raspi4 avec 8Gb de Ram. De plus, il y a aussi une carte x708 comme UPS avec une batterie Lipo de 2000mAh.
Le but est le suivant,
Comme il y a plusieurs skipper sur le bateau (c'est une ASBL), L'arrêt propre de Openplotter n'est pas toujoursz facile à expliquer. Donc on éteint l'appareil via un interrupteur general...
Mais OpenCPN et raspberry n'aime pas cela, après quelque opérations, OpenCPN ne trouve plus sa configuration et il faut tous réinstaller (o-Charts, les dossier, les connextions,.....)

Avec la carte x708, j'avais trouvé une solution qui me détectait l'absence d'alimentation, arrêtait Opencpn proprement, puis après quelque secondes éteignait le raspi.
Lors du retour de l'alimentation, tous se rallumait sans défaut.

Cependant depuis des mise à jours récente, cela ne marche plus.... après quelque seconde suite à la coupure de l'alimentation, le raspi s'éteint sans fermer d'abord l'openCPN,

La questions, Y a-t-il un autre moyen d'étendre proprement OpenCPN puis le paspberry lors la coupure de courant d'alimentation ?
J'ai essayé avec le setting/raspberry setting, mais alors le raspberry s'allume, puis s'éteint immédiatement.

Quelqu'un a t-il une solution pour ce problème??
ma machine:
Nom OS : GNU/Linux
Noyau : #1 SMP PREEMPT Debian 1:6.12.20-1+rpt1~bpo12+1 (2025-03-19)
Relase : 6.12.20+rpt-rpi-v8
Debian : 12.10 bookworm
Raspi4, 8Gb

Merci

Michel

L'équipage
16 avr. 2025
16 avr. 202516 avr. 2025

Bonjour,
Je commencerais à chercher pourquoi openCPN ne s'arrête plus.
Quelle est ta procédure d'extinction ? Tu utilises des scripts ? Si oui, fais ou modifiés par toi ? Y a t'il des erreurs dans les logs ?
En isolant la partie du script qui arrête openCPN, en en faisant un script, et en le "jouant" en ligne de commande (sous terminal), qu'est ce que çà donne ?
A partir de quand çà a commencé à merdouiller, tu ne dis pas depuis quelle MAJ ? Une MAJ OpenCPN ? Une MAJ de l'OS ? Une MAJ de X708 et de ses scripts associés ?
Etc... (D'autres idées ? )
Bref, il y a de quoi développer.


16 avr. 2025

Justement, je crois comprendre que scherzo2013 a du mal à faire respecter la procédure d'extinction, et qu'ils quittent en coupant l'alimentation…
Chez moi, il suffit de quitter OpenCpn au moyen de la croix en haut à droite de la fenêtre, puis d'éteindre OpenPlotter par le menu Framboise/déconnexion/arrêter/, puis de couper l'alimentation.
Je ne vois pas ce qu'il y a de compliqué, tout au moins pour quelqu'un capable d'utiliser un logiciel de navigation.


kivoila:J'ai compris qu'ils voulaient automatiser le shutdown en cas de rupture d'alimentation (à cause de divers intervenants pas toujours au fait de la procédure...).Il y a aussi une autre solution : rajouter un bouton de shutdown avec dans la procédure d'extinction du script, un délai et une cde pour l'arrêt d'openCPN, mais çà, c'est très différent de ce que qui était utilisé avant, c'est donc une autre histoire·le 17 avr. 07:14
17 avr. 2025

Bonjour à tous,

En effet le problème est que les gens qui seraient amenés à utiliser le systeme ne suivront pas une procédure complexe.(une ou deux séquence ce de plusieurs touche, c'est de trop......)
Donc j'avais mis au point un script qui recevais l'info de la coupure de l'alimentation, grace à un UPS, l'OpenCPN se fermait via pkill opencpn, puis après quelques seconde le raspi s'étaignait.
Cela marchait pas mal sous rasbian bulleyes.
Mais avec Pneplotter, c'est rasbian bookworm qui est fournis.
Et la, cela ne marche plus.
Pour l'instant je tente de faire tourner un script python comme daemon, mais même cela je n'y arrive pas.
Le script depuis thonny fonctionne impeccablement.
J'ai essayé avec /etc/rc.local, avec le lien symbolique du script dans /usr/sbin
Puis avec des recherche sur Internet, mis un service dans /etc/systemd/system/ mais rien a faire, si je lance le daemon depuis un terminal, il fonctionne, mais pas en démarrage automatique. Alors que
systemctl status
me dis bien que le service est actif mais rien ne se pase lors de la coupure de l'alimentation.

Bref, je cherche.....


17 avr. 202517 avr. 2025

Avec la commande sudo systemctl stop opencpn.service, est-ce que opencpn s'arrête ?
Si oui, as-tu un message ... exiting cleanly" avec cat ~/.opencpn/opencpn.log

Dommage, je n'ai pas mon raspberry sous la main...


17 avr. 2025

Bonjour Kivoila,

J'ai essayé ta commande, mais le service opencpn n'est pas connu
```
i@Schero:~ $ sudo systemctl stop opencpn.service
Failed to stop opencpn.service: Unit opencpn.service not loaded.
pi@Schero:~ $


Mon script s'apelle plsd.py et le service crée est:

pi@Schero:~ $ systemctl status plsd
● plsd.service - Gestion de l arret alimentation
Loaded: loaded (/etc/systemd/system/plsd.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-04-17 09:39:23 CEST; 9min ago
Main PID: 1106 (python)
Tasks: 4 (limit: 8728)
CPU: 9min 7.880s
CGroup: /system.slice/plsd.service
└─1106 /usr/bin/python /home/pi/bash/plsd.py ">" /home/pi/log/plsd.log "2>>

avr 17 09:39:23 Schero systemd[1]: Started plsd.service - Gestion de l arret alimentati>

pi@Schero:~ $

Je ne trouve opencpn dans le systemctl que dans:

pi@Schero:~ $ systemctl status | grep opencpn
│ ├─3165 opencpn
│ └─3402 grep --color=auto opencpn
pi@Schero:~ $

```
mais voila.....

michel


17 avr. 2025

Bonjour, j'ai eu un problème dans ce genre en passant d'openplotter3 à openplotter4 pour un ami. j'avais fait un post sur openmarin décrivant le souvis, la cause et une solution (peut être pas la meilleur mais c'est celle qui fonctionne sur un RPI4 avec openplotter4.
Je pense que ton UPS envoi un signal sur une entrée GPIO. il faudra adapté les bornes GPIO avec celles que tu as utilisé.


17 avr. 2025

Bonjour Virtudes

En effet mon UPS utilise le GPIO 6 pour signaler la disparition de l'alimentation.
Avec Bulleyes, cela ne posait pas de problème. C'est mon script qui gérait Opencpn et le raspi.
Avec bookworm, il semblerait que l'os gère l'extinction du raspi sans s'occuper de ce qui y tourne.
Je voudrait cree comme sous bulleye un script en daemon pour éteindre l'OpenCPN avant l’arrêt du Raspberry.
Mais il semble que quelque chose se passe donc je n'ai aucune doc dans openplotter concernant la gestion de l'alim avec les GPIO.

Je cherche toujour, car en plus avec mon script, le log n'est pas toujours bien écris sur le disque....


virtudes:Bonjour, un essais a faire serait de remplacer la bibliothèque utilisée comme indiqué au début du post que j'ai mis en lien précédent. ·le 18 avr. 05:02
17 avr. 2025

Pour ma culture, à quoi sert openplotter svp ?


kivoila:En deux mots, Openplotter est un package destiné à la navigation pour le Raspberry, . Il comprend à la fois l'OS (Linux), OpenCPN et quelques utilitaires qui aident à la configuration et ensuite à l'utilisation. Il s'installe donc à partir d'une image prédéfinie.
A noter que si tu as un Raspberry, tu n'es pas obligé de prendre OpenPlotter, tu peux tout installer à la mano, mais il faut alors bien connaitre Linux·le 18 avr. 08:38
17 avr. 2025

Hello !

Peut-être une piste de réflexion, trouvée dans le Wiki Geekworm.

Sur le lien original, ils précisent bien que les scripts sont valides sous Bullseye, mais ils disent aussi que ce n'est plus maintenu, et qu'il faut utiliser l'autre lien, qui lui, dit bien que la Bookworm est supportée, et qu'il suffit de désinstaller / réinstaller le script. Je pense que l'adressage du GPIO reste identique, à vérifier aussi.

Ca mange pas de pain d'essayer. Voici le lien :

wiki.geekworm.com[...]-script


18 avr. 2025

Bonjour

En effet, mon historique est celui là..
OpenCPN sous Bulleyes sut un raspi.
Serveur signalK sur un autre raspi avec Bulleyes.
Le system marchait pas mal avec les UPS x708.
A savoir, lors de la coupure de l'alimentation 12V, un script (daemon) eteignait l'OpenCPN (pkill opencpn)n, puis via les GPIO eteignait l'es raspi.
Il restait des soucis de Wifi, de communication ,mais cela allait.
J'ai voulu mettre le tout sur un seul Raspi.....
Donc j'ai pris Openplotter, mais il installe directement Bookworm.
Plus semble-t-il une gestion de l'alimentation... (pas exploré plus loin.)
J'ai tester juste Bulleyes, la gestion de l'UPS dela coupure semble Impec.
Avec Bookworm, le daemon python demarre mais ne semble pas être executé lors de la detection de la coupure de l'alimentaion.
Le script ecris dans un fichier log. Au demarrage, OK, mais à la coupure de l'alimentation, le script fait de drole de chose dans le fichier log;
voici le fichier ecris par le script avec bookworm

Depart bash/plsd.py
20250417 14:28:03 Arret OpenCPN

Depart bash/plsd.py

����������������������������������

Depart bash/plsd.py

D'ou viennent ces caractères bizarre qui devraient être les ligne d'information de coupure d'alimentation???
De même il semblerait que le script ne soit pas executé correctement dès la détection
de la coupure d'alimentation.

Les script sont demarrée via /etc/rc.local.

Bon encore du travail.......


Lady_C:les caractères bizarres sont probablement dû à une vitesse de communication incorrecte entre l'UPS et le Raspberry ou le codage de caractères (l'un émet en 7 bits et l'autre attend du 8 bits).·le 18 avr. 09:09
18 avr. 2025

Bojour Lady_C

mais alors pourquoi lors du démarrage du script avec /etc/rc.local, la vitesse est bonne?,
C'est toujours le script qui genere les log et le script c'est du python sur le raspberry


Lady_C:sans lire les scripts, aucune idée de le savoir.
initialisation de la communication OK à l'ouverture, mais pas à la fermeture ?·le 18 avr. 09:55
scherzo2013:Désolé, je comprend pas ce que tu veux dire...Un script fonctionne ou pas. Seul l'interfacage vers les autres module peut bloquer.·le 18 avr. 11:04
Lady_C:c'est le même script qui gère la communication et le signal UPS de shutdown ?
on peut voir ce script Python (utiliser pastebin.com[...] , de préférence) ?·le 18 avr. 11:13
scherzo2013:Un peu brut mais voila

!/usr/bin/env python3

Nouvelle version du 07/10/2024

ATTENTION ne supporte pas les caracteres accentue

import RPi.GPIO as GPIOimport subprocessimport timeimport datetimeimport osGPIO.setmode(GPIO.BCM) # use GPIO numberingGPIO.setwarnings(False)INT = 6 # GPIO button interrupt to shutdown procedure # use a weak pull_up to create a highGPIO.setup(INT, GPIO.IN)GPIO.setup(19,GPIO.OUT)GPIO.setup(13,GPIO.OUT)def EcrisLog(montxt): if("#"in montxt): temps=montxt else: temps=str(datetime.datetime.today()) temps += montxt fichier= open("/home/pi/ArretRaspi/arretraspi.log","a") fichier.write(temps ) fichier.close def main(): while True: EcrisLog("####### Reboot ###########\n") EcrisLog("\tDemarrre prg Arretraspi.py\n") GPIO.waitforedge(INT, GPIO.RISING) if( GPIO.input(INT) == 1 ) : EcrisLog("\tArret OpenCPN\n") os.system("pkill opencpn") time.sleep(5) EcrisLog("\tMise a L'etat haut\n") GPIO.output(19,GPIO.HIGH) GPIO.output(13,GPIO.HIGH) time.sleep(10) EcrisLog("\tMise a l'etat bas\n") GPIO.output(19,GPIO.LOW) GPIO.output(13,GPIO.LOW)if name == 'main': main()·le 18 avr. 12:59
Lady_C:brut et illisible faute de sauts de ligne :-)·le 18 avr. 13:15
scherzo2013:Oui, je le rajoutee dans une nouvelle page...·le 18 avr. 14:42
18 avr. 2025

Hello, pour ma culture personnelle, le X708 permet quelle autonomie au Raspberry ? Ca doit être assez long, non ? Ca laisse le temps d'agir


18 avr. 2025

Le x708 n'est justement là que pour ne pas obliger les gens à agir.
L'x708 a une autonomie dépendant de la batterie mise dessus.
La principale fonction est de fournir du courant pour que opencpn puisse s’éteindre correctement puis le Raspberry.
Incidemment j'écris aussi dans un ficher log pour suivre les opérations.
Par principe informatique, ce que les utilisateurs de doivent pas faire, sous peine de destruction, sera effectué par les utilisateurs. Quelque soit le niveau de connaissance (ou prétendu tel) des utilisateurs.

Par ailleur,Je pense m'approcher d'une solution.....


kivoila:Je n'ai pas compris le principe : pourquoi arrêter le tout alors que justement, l'UPS a pris le relais ?·le 18 avr. 13:11
Lady_C:parce que l'UPS n'a pas une batterie à durée de vie infinie.
en informatique, selon la batterie de l'UPS, on attend quelques minutes que le courant revienne, et s'il ne revient pas, on arrête les serveurs, ou on lance le groupe électrogène, s'il en existe un.
sur ce bateau, l'UPS prend le relais parce que les utilisateurs ont coupé le moteur, ouvert (ou fermé) les coupe-circuits, mais n'ont pas éteint le raspberry.·le 18 avr. 13:52
18 avr. 202518 avr. 2025

Peux-tu nous fournir le noyau utilisé (dans un terminal : uname -r)
fournir aussi la librairie installée pour gérer les GPIO:

sudo apt list --installed | grep python3-rpi.gpio

et

sudo apt list --installed | grep python3-rpi-lgpio


scherzo2013:J'ai modifier la biblio des gpio pour RPI.GPIO pour bookworm.Pour l'OS:Codename: bookwormNom OS : GNU/LinuxNoyau : #1 SMP PREEMPT Debian 1:6.12.20-1+rpt1~bpo12+1 (2025-03-19)Relase : 6.12.20+rpt-rpi-v8Debian : 12.10
Nom PC : ScherzoDVDVMachine : aarch64Raspberry Pi 4 Model B Rev 1.5·le 18 avr. 14:55
18 avr. 2025

Bonjour,

J'ai du mal à comprendre l'intérêt d’éteindre OpenCPN avant de lancer l'arrêt de l'OS. Ce qui corrompt les filesystems, c'est l'arrêt violent du matériel. Mais si on lance un arrêt propre de l'OS (systemctl poweroff), les process d'OpenCPN seront également arrêtés proprement, et il ne devrait pas y avoir de soucis.


virtudes:Opencpn a la facheuse tendence à écrire dans le répertoire .opencpn qui contient entre autre les fichiers de configuration. dans certains cas, un arrêt du système sans avoir fermé opencpn avant peut corrompre ce dossier (ou un fichier à l'intérieur). Cela se manifeste par : au démarrage suivant, on a opencpn tout neuf comme si on n'avais rien configuré. Dans mon esprit (pas sûr de moi du coup...) systemctl poweroff va lancer un arrêt système mais il ne va pas fermer proprement opencpn.·le 18 avr. 13:54
Lady_C:c'est là où on voit la supériorité de Windows, qui prévient les applications qu'il va s'éteindre, et si elles sont correctement programmées, elles sauvegarderont leurs données :-) inutile de répondre !·le 18 avr. 13:58
ronang:Linux fait exactement pareil cf. www.gnu.org[...]ls.html ·le 18 avr. 14:16
18 avr. 2025

Pour info, mon script pour eteindre l'opencpn:
```

!/usr/bin/env python3

Nouvelle version du 07/10/2024

ATTENTION ne supporte pas les caracteres accentue

import RPi.GPIO as GPIO
import subprocess
import time
import datetime
import os

GPIO.setmode(GPIO.BCM) # use GPIO numbering
GPIO.setwarnings(False)

INT = 6 # GPIO button interrupt to shutdown procedure
# use a weak pull_up to create a high
GPIO.setup(INT, GPIO.IN)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)

def EcrisLog(montxt):
if("#"in montxt):
temps=montxt
else:
temps=str(datetime.datetime.today())
temps += montxt
fichier= open("/home/pi/ArretRaspi/arretraspi.log","a")
fichier.write(temps )
fichier.close

def main():
while True:
EcrisLog("####### Reboot ###########\n")
EcrisLog("\tDemarrre prg Arretraspi.py\n")
GPIO.waitforedge(INT, GPIO.RISING)
if( GPIO.input(INT) == 1 ) :
EcrisLog("\tArret OpenCPN\n")
os.system("pkill opencpn")
time.sleep(5)
EcrisLog("\tMise a L'etat haut\n")
GPIO.output(19,GPIO.HIGH)
GPIO.output(13,GPIO.HIGH)
time.sleep(10)
EcrisLog("\tMise a l'etat bas\n")
GPIO.output(19,GPIO.LOW)
GPIO.output(13,GPIO.LOW)

if name == 'main':
main()
```

Voila j'espère que c'est plus lisible.....


scherzo2013:mais je vois que les ident et les format de texte (#) ne passe pas.....·le 18 avr. 14:47
Lady_C:oui il faudrait utiliser les balises pour le code </>
pas grave·le 18 avr. 19:19
6j6j

je n'ai pas de raspberry sous la main, j'ai juste fait un peu de syntaxe

pastebin.com[...]iDjpLb2


scherzo2013:Desolé, mais chez moi (Ubuntu, les balises code ne fonctionnent pas....<exemple/>·le 22 avr. 08:59
Lady_C:j'avais remarqué :-)
d'où l'utilisation de pastebin.com·le 22 avr. 09:42
Farol do Arnel, Sao Miguel, Acores

Phare du monde

  • 4.5 (56)

Farol do Arnel, Sao Miguel, Acores

2022