Bonjour Pascal,
Merci encore !
Concernant la sauvegarde dans le fichier data.json. La sauvegarde est appelée quand on quitte la page ou qu'on la recharge. Appel aux alentours de la ligne 695
$scope.saveParamPhp();
Le code de la fonction
saveParamPhp() est aux alentours de la ligne 649. Mais je ne suis pas étonné que cela ne fonctionne pas dans votre cas car la fonction appelle un script php pour copier les données. Ce fichier de script est "save_data.php" qui est dans le même répertoire sur le disque. Or votre installation de Node.js ne doit probablement pas exécuter du PHP ? Voir ici
https://www.npmjs.com/package/node-php-server.
Ceci dit, j'ai développé un autre moyen de sauvegarder les datas avec l'appel de la fonction
localStorage.setItem("locomotives",JSON.stringify($scope.locomotives));
aux alentours de la ligne 701 qu'il faudra décommenter.
Dans ce cas, il faudra aussi décommenter la ligne aux alentours de 720
$scope.loadLocalStorage (); pour que les données sauvegardées dans le localstorage soient chargées au lancement de l'application.
A tous les lancements de l'application, c'est le chargement des données contenues dans le localstorage (si il y en a) qui est réalisé. Le chargement du fichier data.json n'est opéré que si le localstorage est vide. En utilisation normale, c'est le plus simple. Le fichier data.json est appelé une première fois, puis les données sont chaque fois sauvegardées dans le localstorage et rappelé à partir de celui-ci à chaque ouverture. Mais ça veut dire que toute modification des datas doit se faire dans ce cas sur les données du localstorage et non dans le fichier data.json (qui est toujours mis à jour si PHP fonctionne mais qui n'est plus appelé tant que localstorage n'est pas vide).
Enfin, une autre solution existe qui serait de remplacer les opérations "File System" réalisées en PHP par les opérations FS de Node ("fs.writeFileSync" etc...).
Bon ça parait peut être un peu compliqué mais en "mode utilisateur", c'est très simple. Tout ceci est bien commenté dans le code à partir de la ligne 694.
Question sur controller.html : l'application pourrai t-elle fonctionner si nous n'avons pas de connection internet exterieur (juste le réseau local)
Réponse de normand (et pourtant je suis breton) :
oui et non.
Non en l'état car elle utilise des bibliothèques extérieures (ligne 9, 10 et 11 du fichier controller.html) :
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Oui si vous téléchargez ces bibliothèques sur votre disque dur en recréant le paths des lignes dont je parle ci-dessus.
Question electronique : peut-on imaginer un bouton qui reconnecte les 3 pins de l'arduino pour basculer les même voies en "voie de programmation" pins : 10,3,A0 / "voie principale pins : 5,11,A1")
Je ne vois pas trop bien comment si j'ai une lecture littérale de ce que vous écrivez. Il y a certainement des bidouilles possibles, plus ou moins judicieuses. Selon moi, pour éviter de se faire ch..r et de voir éventuellement de la fumée sortir du bazar, il faut adopter l'un des montages que je préconise
http://www.locoduino.org/spip.php?article187. Ajouter un LMD18200 et un MAX41 n'est pas ruinant !
Pour finir, je profite de ce post pour lancer un appel concernant la lecture et la programmation qui sont totalement impossibles avec certains décodeurs. Sur la voie de programmation essentiellement, mais il peut aussi arriver la même chose sur la voie principale. Cela fait un petit moment que Dominique et moi avons constatés ce problème mais n'avons aucune piste sérieuse pour comprendre. Le message retourné par DCC++ Base Station (en voie de programmation) est systématiquement terminé par -1 (code d'erreur)
returns: <r CALLBACKNUM|CALLBACKSUB|CV Value)
where VALUE is a number from 0-255 as read from the requested CV, or -1 if verificaiton read fails
Toutes vos suggestions sont les bienvenues pour essayer de trouver une solution à ce problème.
Bien cordialement.
Christophe