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
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.
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.
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
me dis bien que le service est actif mais rien ne se pase lors de la coupure de l'alimentation.
systemctl status
Bref, je cherche.....
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...
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
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é.
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....
Pour ma culture, à quoi sert openplotter svp ?
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
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 :
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.......
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
initialisation de la communication OK à l'ouverture, mais pas à la fermeture ?·le 18 avr. 09:55
on peut voir ce script Python (utiliser pastebin.com[...] , de préférence) ?·le 18 avr. 11:13
!/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:59Hello, pour ma culture personnelle, le X708 permet quelle autonomie au Raspberry ? Ca doit être assez long, non ? Ca laisse le temps d'agir
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.....
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
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
Nom PC : ScherzoDVDVMachine : aarch64Raspberry Pi 4 Model B Rev 1.5·le 18 avr. 14:55
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.
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.....
je n'ai pas de raspberry sous la main, j'ai juste fait un peu de syntaxe