# Pywebdriver



# Pywebdriver - installation Ubuntu

### 1. Sur ordinateur Ubuntu 20.04, 22.04 et 24.04 neuf

<p class="callout info">Ekimia s'occupe parfois l’installation : voir s’ils n’ont pas mis Pywebdriver en favori dans le navigateur internet.  
Si oui, voir s’ils l’ont bien installé.</p>

Si KO, utiliser successivement les 3 commandes suivantes (le mot de passe du PC sera nécessaire) :

Pour trouver facilement ces commandes, rendez-vous sur ce pad : [https://pad.cloud117.fr/p/pywebdriver](https://pad.cloud117.fr/p/pywebdriver)

```shell
sudo apt install python-is-python3
wget https://raw.githubusercontent.com/akretion/pywebdriver/master/debian/install.sh
sudo chmod +x install.sh
sudo ./install.sh
# S'il propose 2 versions, ne pas prendre celle par défaut, mais l'autre
# À "Handle HTTPS(Y/n)" répondre Y (pour oui)
```

<p class="callout warning">Si le Firefox a un mot de passe principal, il y aura une étape en plus. Le terminal demandera *Enter Password or Pin for "NSS Certificate DB"* et il faut écrire le mot de passe principal</p>

<p class="callout success">Un redémarrage peut être nécessaire avant l'étape 2 ↓  
</p>

###   


### 1bis. Sur ordinateur Ubuntu venant d'une version antérieure

- Enlever le dépôt ancien que l'on utilisait pour télécharger pywebdriver 
    - Chercher "Logiciels et mises à jour" dans le menu des applications
    - Dans "Autres logiciels", enlever les lignes contenant pywebdriver
    - Actualiser
- **S'assurer qu'on a bien python3.\* et désinstaller python2.\* <span style="color: #ff0000;">(sinon il y aura des erreurs de droits d'accès et rien ne se lancera)</span>**

```shell
python
# Voir si il y a marqué Python 2.*.* (* étant la version utilisé)
# Si oui, il faut passer en python3 qui doit être sur l'ordi
# Commencer à taper puis →tabulation
pyth →tab
# Il doit y avoir python3

# Sinon mettre à jour : https://www.pythoncentral.io/how-to-update-python/

# Désinstaller python2
sudo apt remove python2.*
# Et installer ce qu'il faut
sudo apt install python-is-python3

#Tester et lancant python
python
# Doit apparaitre une version de python en 3.quelquechose
CTRL+D #pour en sortir
```

- Suivre les commandes suivantes

```shell
# Désinstaller l'ancienne version de pywebdriver
sudo apt remove pywebdriver
sudo apt purge pywebdriver
sudo rm -r /etc/pywebdriver/

# Installer la nouvelle version
wget https://raw.githubusercontent.com/akretion/pywebdriver/master/debian/install.sh
sudo chmod +x install.sh
sudo ./install.sh
# À "Handle HTTPS(Y/n)" répondre Y (pour oui)

# Il va poser une question sur le fichier de configuration ↓
```

<table border="1" id="bkmrk-r%C3%A9pondre-y" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-05/scaled-1680-/5gcimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-05/5gcimage.png)</td><td>répondre **Y**</td></tr></tbody></table>

### 1ter. Erreurs à l'installation  


##### Les tests sur l'écran de tests ne fonctionnent pas  


- **Avez-vous redémarrer l'ordinateur** ? Sinon faîtes le avant de retester
- Vu à partir du 5 mai sur des Ubuntu 22.04 en python 3.10, le test d'impression bugue → tester sur un Odoo car ça fonctionne quand même peut-être ! [Issue en cours](https://github.com/akretion/pywebdriver/issues/133)

##### Vous avez l'erreur "you may have broken packages"  


[![image.png](https://librairie.grap.coop/uploads/images/gallery/2023-07/scaled-1680-/Khmimage.png)](https://librairie.grap.coop/uploads/images/gallery/2023-07/Khmimage.png)

```shell
sudo apt-get check
```

##### Si c'est une erreur de certif et que vous voulez passer en http et pas en https

Pour cela :

- dans le config.ini, mettre host=localhost et commenter ou supprimer les deux lignes de certificats
- relancer pywebdriver
- normalement en [http://localhost:8069](http://localhost:8069) ça marche

##### Vous voulez recommencer l'installation ?

```shell
sudo apt remove pywebdriver # ça supprime le paquet
sudo apt purge pywebdriver # ça supprime le fichier de configuration
sudo rm -r /etc/pywebdriver/ # supprimer le dossier de données

# et là recommencer l'installation
sudo ./install.sh
```

###   


### 2. Finalisation et vérification de l'installation

#### Interface de test

Se connecter à l'adresse [https://localhost:8069/](https://localhost:8069/)

Pour passer l'alerte de sécurité de Firefox, clic sur « Avancé » puis « Accepter le risque et poursuivre »  
​Cliquer sur "Statut de la Posbox" : on voit ici les appareils bien connectés au point de vente et ceux sans signal.

On peut tester la liaison pour l'imprimante, l'afficheur client et la liaison TPE.

#### Sur Odoo

Vérifier que l'adresse [https://localhost:8069/](https://localhost:8069/) est bien renseignée dans Odoo &gt;&gt; Point de vente &gt;&gt; Configuration &gt;&gt; Point de vente &gt;&gt; Matériel Proxy.

Une fois Pywebdriver installé, et lors de la connexion à Odoo, on voit en haut à droite du point de vente les appareils non reliés :

![](https://librairie.grap.coop/uploads/images/gallery/2020-07/scaled-1680-/image-1594390045805.png)

<p class="callout info">Certaines actis ont des paramétrages spécifiques, par exemple plusieurs points de vente rattachés à une seule imprimante ticket de caisse (cf. CHE) =&gt; dans ce cas la caisse principale est rattachée à Pywebdriver via [https://localhost:8069/](https://localhost:8069/) , mais les caisses secondaires ont une autre adresse IP de renseignée dans Configuration &gt;&gt; Point de vente</p>

### 3. Cas d'un ordi qui communique avec une IP locale

Exemple chez BAJ, voici le fonctionnement au 1er octobre 2024

[![image.png](https://librairie.grap.coop/uploads/images/gallery/2024-10/scaled-1680-/image.png)](https://librairie.grap.coop/uploads/images/gallery/2024-10/image.png)

<p class="callout warning">Pour que cela fonctionne, il faut changer le **config.ini**</p>

```bash
# Accéder au fichier de config
cd /etc/pywebdriver/
# Le modifier avec les droits admin
sudo nano config.ini
# Commenter le host
# Avant : host=127.0.0.1
# Après : ;host=127.0.0.1
# Enregistrer en faisant CTRL + X (puis O pour enregistrer et Entrée)
```

### Différents soucis  


#### Nouvel appareil (imprimante, TPE, afficheur client·e)

Voir tuto dédié : [https://librairie.grap.coop/books/r%C3%A9serv%C3%A9-au-service-info/page/rajouter-un-nouveau-appareil-imprimante-tpe-afficheur-client](https://librairie.grap.coop/books/r%C3%A9serv%C3%A9-au-service-info/page/rajouter-un-nouveau-appareil-imprimante-tpe-afficheur-client)

##### Erreur de droits d'accès ?

<p class="callout success">Redémarre après une belle installation clean !</p>

Vérifier qu'il y a bien la règle de droits d'accès :

```shell
cd /lib/udev/rules.d
cat 99-pywebdriver.rules
SUBSYSTEM=="usb", GROUP="usbusers", MODE="0660"
```

Vérifier que le compte utilisateur est bien dans les bons groupes

```shell
groups <lecompteutilisateur>
<lecompteutilisateur> adm cdrom sudo dip plugdev lpadmin sambashare
```

# Pywebdriver - gestion afficheur client

### Branchement par USB

- Normalement message d’erreur “ATE1 E0” qui dit que la communication passe pas avec l’ordi -&gt; Puis “x-” “x-”
- Dans le terminal : `sudo gedit /etc/pywebdriver/config.ini`
- Dans le texte, Au niveau de \[display\_driver\], changer le device\_name =&gt; device\_name=/dev/ttyACM0
- quand il y a aussi un lecteur de code barre (paragraphe du dessous), changer ACM0 en ACM1
- `sudo service pywebdriver restart`
- Dans Pywebdriver, tester en cliquant sur "Afficher le statut"

<p class="callout success">Si ça ne marche pas, inverser ACM1 et ACM0 sur l'un et l'autre des items.</p>

### Configuration Point de vente

- Cocher Afficheur client
- Configurer message d’accueil et de fin

# Nouveau appareil (imprimante, TPE, afficheur client·e) ou erreur matos

##### Repérer le matériel connecté à la caisse

<p class="callout success">Repérer le matériel connecté à la caisse : `sudo dmesg | grep tty`</p>

##### Ajouter une imprimante

Ou sinon

```shell
# Lister les trucs en usb
lsusb

# Brancher et débrancher pour chopper les infos différentes
# On cherche le product ID et le vendor ID

Exemple sur 
Bus 003 Device 008: ID 0cf3:0036 Atheros Communications, Inc.

product ID : 0cf3
et vendor ID : 0036

# et on le rajoute dans le fichier qui va bien
sudo gedit /opt/venvs/pywebdriver/lib/python3.8/site-packages/pywebdriver/plugins/escpos_driver.py


```

[![image.png](https://librairie.grap.coop/uploads/images/gallery/2022-09/scaled-1680-/RHzimage.png)](https://librairie.grap.coop/uploads/images/gallery/2022-09/RHzimage.png)

Puis ajouter une ligne et redémarrer le service

```shell
sudo service pywebdriver restart
# pas besoin normalement mais sait-on jamais : sudo service pywebdriver reload
```

Et enfin recharger la page Pywebdriver

<p class="callout info">Puis rajouter ça sur notre ordi et proposer une petite PR, on demande à Pierrick de merger</p>

##### Rajouter un afficheur ou un TPE

Si on veut rajouter des devices pour un TPE ou un afficheur client·e, on rajoute des noms sur ces lignes là :

Pour l'afficheur : [https://github.com/akretion/pyposdisplay/blob/master/pyposdisplay/pyposdisplay.py#L175](https://github.com/akretion/pyposdisplay/blob/master/pyposdisplay/pyposdisplay.py#L175)  
Pour le TPE : [https://github.com/akretion/pypostelium/blob/master/pypostelium/pypostelium.py#L52](https://github.com/akretion/pypostelium/blob/master/pypostelium/pypostelium.py#L52)

Pour trouver le nom de l'appareil, lancer un terminal puis

```
/opt/venvs/pywebdriver/python -m serial.tools.list_ports -v

ou
python3.8 -m serial.tools.list_ports -v

ou
python3.8
>>> import serial.tools.list_ports
>>> serial.tools.list_ports.comports()
```

Si besoin, débrancher, rebrancher pour voir la diff et trouver le truc qui apparaît.

<p class="callout info">Puis rajouter ça sur notre ordi et proposer une petite PR, on demande à Pierrick de merger</p>

Puis faudra faire un rebuild de pywebdriver pour rebuilder un .deb

# Pywebdriver - installation sur Raspberry Pi

#### Trouver l'adresse IP sans y avoir accès directement

<p class="callout success">**Contexte** : on a envoyé le raspberry Pi à une acti qui l'a connecté à son réseau (par câble ethernet) et qui l'a branché éléctriquement (led vertes).  
**Le but du jeu** : trouver l'adresse IP du raspberry qui fait tourner Pywebdriver</p>

**Plusieurs possibilités :**

**A. \[Windows/Linux\]** Se connecter à l'interface administration de la box pour trouver les appareils connectés au réseau

1. 1. **Orange** : Livebox : [https://livebox](https://livebox)
    2. **Bouygues** : Bbox : [https://mabbox.bytel.fr](https://mabbox.bytel.fr) ou 192.168.1.254.
    3. **Free** : Freebox : [mafreebox.freebox.fr](http://mafreebox.freebox.fr/) ou 192.168.0.254

**B. \[Linux\]** Depuis un poste Linux, on peut "scanner" le réseau pour trouver l'adresse IP

```
# Installer le logiciel nécessaire pour scanner le réseau
sudo apt install nmap
# Scanner le réseau
sudo nmap -sP 192.168.1.0/24
```

Le résultat sera comme ceci :

```
Nmap scan report for pi (192.168.1.90)
Host is up (0.0029s latency).
MAC Address: B8:27:EB:05:72:2C (Raspberry Pi Foundation)
```

<p class="callout warning">Bien prendre l'adresse IP qui est au dessus de la ligne Raspberry</p>

*source : [https://raspberrytips.fr/comment-trouver-ip-raspberry-pi/](https://raspberrytips.fr/comment-trouver-ip-raspberry-pi/)*

#### Paramétrage Odoo

- Se connecter à l'adresse IP trouver : ouvrir son navigateur et aller sur [https://&lt;adresseIP&gt;](https://<adresseIP>)
- Passer les exceptions de sécurité
- Configurer le point de vente sur Odoo avec l'adresse IP [https://&lt;adresseIP&gt;](https://<adresseIP>)

### Installation raspberry Pi chez ECU

<p class="callout info">Cas spécial du RaspberryPi chez ECU</p>

Il s'agit de lancer pywebdriver en tâche de fond.  
Normalement le programme se lance au démarrage du système.  
Pour vérifier cela, lancer le navigateur internet et [http://localhost:8069](http://localhost:8069) puis Statut de la PosBox

<p class="callout warning">Par défaut, le lancement à distance avec vision de l'écran nécessite l'accord de la personne. Or sur un Raspberry, pas d'écran, pas de souris par défaut donc il ne peut pas dire oui !  
Donc soit changer les droits de prise à distance (en allant dans le compte admin), soit demander à la personne de connecter un écran (avec miniprise HDMI) et une souris</p>

#### Paramétrage initial pour lancer au démarrage

- Modifier le fichier rc.local :

```shell
sudo nano /etc/rc.local

# Rajouter ces lignes avant exit 0

cd /home/pi/Documents/pywebdriver
. /home/pi/Documents/pywebdriver/env/bin/activate
/home/pi/Documents/pywebdriver/pywebdriverd &
```

- Puis redémarrer : `reboot`

#### Si lancement au démarrage marche pas

Prendre la main à distance par terminal

```shell
cd /home/pi/Documents/pywebdriver
. /home/pi/Documents/pywebdriver/env/bin/activate
nohup /home/pi/Documents/pywebdriver/pywebdriverd &
```

#### Accéder à pywebdriver

- Chopper l'IP à distance ou directement sur raspberry avec `ifconfig`
- Puis go checkez sur un navigateur si on accède bien à l'interface pywebdriver : http://192.168.1.71:8069
- en remplaçant 192.168.1.71 par l'adresse IP trouvé avec `ifconfig`