Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Modbus RTU

De l'installation à l'utilisation venez discuter de JEEDOM au quotidien
looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 21 sept. 2019, 10:25

désolé pour le délai de réponse:
ceci me permet de VOIR la consigne prise en compte par la chaudière; (retour d'info)
Capture1.JPG
Capture1.JPG (29.86 Kio) Consulté 1310 fois
et ceci me permet de le régler:
Capture2.JPG
Capture2.JPG (29.23 Kio) Consulté 1310 fois

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 21 sept. 2019, 10:29

Et sur le dashborad j'ai fait comme ceci, mais ce n'est surement pas la manière la plus efficace.. je choisi la valeur en bas puis je dois cliquer sur l'icone wifi pour envoyer la valeur.. c'est pour ca que j'ai écris " Valider!" .. sinon j'oublie :D

Ensuite je visualise avec le atg du milieu que la chaudière a bien pris en compte la consigne.
voilà!

dash.JPG
dash.JPG (23.92 Kio) Consulté 1307 fois

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 22 sept. 2019, 09:00

Je suis navré, mais ces réglages fonctionnaient parfaitement l'hiver dernier... la mise à jour qu'il y a eu entre temps l'a cassé.. je sui svert! j'éspère pouvoir retrouver l'ancienne version car je n'arrive pas à le faire refonctionner :/

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 22 sept. 2019, 12:29

Looping Merci pour ton retour,
cela nous permet au moins de comprendre, comment tu fais; Et aussi, si cela ne marche c'est pas ma faute.

Aprés debug et recherche :


Voila ce que le pugin en voie à la Chaudiére :
sudo /usr/bin/python /var/www/html/plugins/modbusrtu/resources/modbusrtud/modbus_rtu.py --slave 10 --device /dev/ttyUSB1 --baud 9600 --byte 8 --parity none --stop 1 --register '{"listdevice":"14,1"}' --action write --value

Et il y a 2 problémes :
1) il n'y a pas de value. Pauvre chaudiére qui n'a jamais de fin de phrase.
2) '{"listdevice":"14,1"}' doit être un "Integer". Autrement dit le module attend 14,1

Il me reste plus à trouver le scriptqui forme la commande et à le modifier...

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 22 sept. 2019, 20:19

D'après ce que j'ai compris 14,1 c'est le Registre 14 et 1 ça veut dire avec une seule décimale.
Pour ma part le 14 c'est bien la consigne , le lire = OK mais désormais écrire ne fonctionne plus depuis la dernière mise à jour. Ça a toujours fonctionné par le passé, j'avoue être assez agacé que ça ne fonctionne plus ... :/ j'avais vraiment galéré à tout faire fonctionner

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 22 sept. 2019, 21:57

looping a écrit :
22 sept. 2019, 20:19
D'après ce que j'ai compris 14,1 c'est le Registre 14 et 1 ça veut dire avec une seule décimale.
Pour ma part le 14 c'est bien la consigne , le lire = OK mais désormais écrire ne fonctionne plus depuis la dernière mise à jour. Ça a toujours fonctionné par le passé, j'avoue être assez agacé que ça ne fonctionne plus ... :/ j'avais vraiment galéré à tout faire fonctionner
J'ai bien éplucher le code le probléme est que la "value" ne remonte pas dans la ligne de commande qui a d'ailleur des erreurs.
Je ne suis pas codeur, alors j'arrive au bout de ma connaissance.
Je recherche à savoir comment faire remonter la valeur donnée à l'action à la ligne de commande.
Si quelqu'un a déjà regarder le code de l'interface web ?

Je pense que je vais me tourner "script" (plugin script).

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 22 sept. 2019, 22:49

Pour ma part voilà le message debug que j'obtiens quand j'envoie une commende de consigne;

Code : Tout sélectionner

[2019-09-23 08:30:48][DEBUG] : Send command
[2019-09-23 08:30:48][DEBUG] : {u'sshuser': u'', u'parity': u'none', u'baudrate': u'9600', u'name': u'Chaudi\xe8re', u'bimaster': 0, u'bytesize': u'8', u'register': u'14,1', u'value': u'17', u'serialport': u'/dev/ttyUSB0', u'sshport': u'', u'sship': u'', u'sshdevice': u'', u'sshpass': u'', u'stopbits': u'1', u'maitreesclave': u'local', u'sshpath': u'', u'unit': u'10'}
[2019-09-23 08:30:48][DEBUG] : Handling local request write for Chaudière
[2019-09-23 08:30:48][DEBUG] : Command to execute sudo /usr/bin/python /var/www/html/plugins/modbusrtu/resources/modbusrtud/modbus_rtu.py --slave 10 --device /dev/ttyUSB0 --baud 9600 --byte 8 --parity none --stop 1 --register '{"listdevice":"14,1"}' --action write  --value 17
[2019-09-23 08:31:00][DEBUG] : invalid literal for int() with base 10: '{"listdevice":"14'
KO

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 23 sept. 2019, 08:34

Ce qui me semble étonnant c'est le ' avant 14 et " apres.... ca sent la coquille, non?

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 23 sept. 2019, 21:26

Le vrai problème que j'ai, est de faire remonter la "value" depuis "l'action" vers la commande.

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 24 sept. 2019, 10:22

J'ai ouvert un ticket..... comme le plugin à changé de nom j'ai ouvert mon ticket sur un autre..... puisque a chaque fois j'obtiens le message (vous ne semblez pas avoir acheté ce plugin...... )

Bref, wait and see.....

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 25 sept. 2019, 21:25

d
looping a écrit :
23 sept. 2019, 08:34
Ce qui me semble étonnant c'est le ' avant 14 et " apres.... ca sent la coquille, non?
Oui, j'ai déjà corrigé cette coquille mais chez moi mon probléme est est que je n'ai pas de value qui remonte.

Pour régler ton probléme, voici ce que je conseille :
faire un copie du fichier se trouvant :
/var/www/html/plugins/modbusrtu/resources/modbusrtud
modifie le fichier suivant (penser à faire une sauvegarde):
modbusrtud.py

Rechercher ce paramétrage :
def local_rtu_handler(device,mode):
scriptdir=os.path.join(os.path.dirname(os.path.abspath(__file__)),'modbus_rtu.py')
generalparams = ' --slave ' + device['unit'] + ' --device ' + device['serialport'] +\
' --baud ' + device['baudrate']+ ' --byte ' + device['bytesize']+\
' --parity ' + device['parity'] + ' --stop ' + device['stopbits'] + ' --register \'' + '{"listdevice":' + json.dumps(device['register']) + '}\''
if mode == 'write':
cmd = 'sudo /usr/bin/python ' + scriptdir + generalparams + ' --action write ' + ' --value ' + device['value']
else :
cmd = 'sudo /usr/bin/python ' + scriptdir + generalparams + ' --action read'
logging.debug('Command to execute ' + cmd)
proc = subprocess.Popen([cmd], stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
return out


le remplacer par cette expression :
def local_rtu_handler(device,mode):
scriptdir=os.path.join(os.path.dirname(os.path.abspath(__file__)),'modbus_rtu.py')
generalparams = ' --slave ' + device['unit'] + ' --device ' + device['serialport'] +\
' --baud ' + device['baudrate']+ ' --byte ' + device['bytesize']+\
' --parity ' + device['parity'] + ' --stop ' + device['stopbits']
if mode == 'write':
cmd = 'sudo /usr/bin/python ' + scriptdir + generalparams + ' --register ' + device['register'] + ' --action write ' + ' --value ' + device['value']
else :
cmd = 'sudo /usr/bin/python ' + scriptdir + generalparams + ' --register \'' + '{"listdevice":' + json.dumps(device['register']) +\
'}\'' + ' --action read'
logging.debug('Command to execute ' + cmd)
proc = subprocess.Popen([cmd], stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
return out


Cela devrait modifier l'expression quand tu veux écrire.

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 25 sept. 2019, 21:28

J'aimerai aussi voir ton fichier :
/var/www/html/plugins/modbusrtu/core/class/modbusrtu.class.php

Afin de comparer, avec le mien, s'il te plait ?

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 26 sept. 2019, 08:36

Salut Aldarande,
Grace à ta suggestion j'ai réussi à refaire fonctionner ma consigne!!! :D


voiçi le code que tu m'as demandé:

Code : Tout sélectionner

<?php

/* This file is part of Jeedom.
*
* Jeedom is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Jeedom is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
*/

/* * ***************************Includes********************************* */
require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';

class modbusrtu extends eqLogic {
    /*     * *************************Attributs****************************** */


    /*     * ***********************Methode static*************************** */
	
	public static function deamon_info() {
		$return = array();
		$return['log'] = 'modbusrtu';
		$return['state'] = 'nok';
		$pid_file = jeedom::getTmpFolder('modbusrtu') . '/deamon.pid';
		if (file_exists($pid_file)) {
			if (@posix_getsid(trim(file_get_contents($pid_file)))) {
				$return['state'] = 'ok';
			} else {
				shell_exec(system::getCmdSudo() . 'rm -rf ' . $pid_file . ' 2>&1 > /dev/null');
			}
		}
		$return['launchable'] = 'ok';
		return $return;
	}

	public static function dependancy_info() {
		$return = array();
		$return['progress_file'] = jeedom::getTmpFolder('modbusrtu') . '/dependance';
		$return['state'] = 'ok';
		if (exec(system::getCmdSudo() . system::get('cmd_check') . '-E "python\-serial|python\-request|python\-pyudev" | wc -l') < 3) {
			$return['state'] = 'nok';
		}
		if (exec(system::getCmdSudo() . 'pip list | grep -E "MinimalModbus|paramiko" | wc -l') < 2) {
			$return['state'] = 'nok';
		}
		return $return;
	}
	
	public static function dependancy_install() {
		log::remove(__CLASS__ . '_update');
		return array('script' => dirname(__FILE__) . '/../../resources/install_#stype#.sh ' . jeedom::getTmpFolder('modbusrtu') . '/dependance', 'log' => log::getPathToLog(__CLASS__ . '_update'));
	}

	public static function deamon_start() {
		self::deamon_stop();
		$deamon_info = self::deamon_info();
		if ($deamon_info['launchable'] != 'ok') {
			throw new Exception(__('Veuillez vérifier la configuration', __FILE__));
		}
		$modbusrtu_path = realpath(dirname(__FILE__) . '/../../resources/modbusrtud');
		$cmd = '/usr/bin/python ' . $modbusrtu_path . '/modbusrtud.py';
		$cmd .= ' --loglevel ' . log::convertLogLevel(log::getLogLevel('modbusrtu'));
		$cmd .= ' --socketport ' . config::byKey('socketport', 'modbusrtu');
		$cmd .= ' --sockethost 127.0.0.1';
		$cmd .= ' --callback ' . network::getNetworkAccess('internal', 'proto:127.0.0.1:port:comp') . '/plugins/modbusrtu/core/php/jeeModbusrtu.php';
		$cmd .= ' --apikey ' . jeedom::getApiKey('modbusrtu');
		$cmd .= ' --pid ' . jeedom::getTmpFolder('modbusrtu') . '/deamon.pid';
		log::add('modbusrtu', 'info', 'Lancement démon modbusrtu : ' . $cmd);
		$result = exec($cmd . ' >> ' . log::getPathToLog('modbusrtu') . ' 2>&1 &');
		$i = 0;
		while ($i < 30) {
			$deamon_info = self::deamon_info();
			if ($deamon_info['state'] == 'ok') {
				break;
			}
			sleep(1);
			$i++;
		}
		if ($i >= 30) {
			log::add('modbusrtu', 'error', 'Impossible de lancer le démon modbusrtu', 'unableStartDeamon');
			return false;
		}
		message::removeAll('modbusrtu', 'unableStartDeamon');
		foreach (jeedom::getUsbMapping() as $key=>$port) {
			if (strpos(strtolower($key) , 'modbus') !== false) {
				log::add('modbusrtu','debug','Modbus dongle found setting it automatically on first Eqlogic');
				$eqLogics = eqLogic::byType('modbusrtu');
				$eqLogics[0]->setConfiguration('portSerial',$port);
				$eqLogics[0]->save();
			}
		}
		self::sendIdToDeamon();
		return true;
	}
	
	public static function deamon_stop() {
		$pid_file = jeedom::getTmpFolder('modbusrtu') . '/deamon.pid';
		if (file_exists($pid_file)) {
			$pid = intval(trim(file_get_contents($pid_file)));
			system::kill($pid);
		}
		system::kill('modbusrtud.py');
		system::fuserk(config::byKey('socketport', 'modbusrtu'));
		foreach (self::byType('modbusrtu') as $eqLogic) {
			$port = $eqLogic->getConfiguration('portSerial', 'none');
			if ($port != 'none'){
				system::fuserk(jeedom::getUsbMapping($port));
			}
		}
	}
	
	public static function devicesParameters($_device = '') {
		$return = array();
		foreach (ls(dirname(__FILE__) . '/../config/devices', '*') as $dir) {
			$path = dirname(__FILE__) . '/../config/devices/' . $dir;
			if (!is_dir($path)) {
				continue;
			}
			$files = ls($path, '*.json', false, array('files', 'quiet'));
			foreach ($files as $file) {
				try {
					$content = file_get_contents($path . '/' . $file);
					if (is_json($content)) {
						$return += json_decode($content, true);
					}
				} catch (Exception $e) {

				}
			}
		}
		if (isset($_device) && $_device != '') {
			if (isset($return[$_device])) {
				return $return[$_device];
			}
			return array();
		}
		return $return;
	}
	
	public function applyModuleConfiguration() {
		$this->setConfiguration('applyDevice', $this->getConfiguration('type'));
		$this->save();
		if ($this->getConfiguration('type') == '') {
			return true;
		}
		$device = self::devicesParameters($this->getConfiguration('type'));
		if (!is_array($device)) {
			return true;
		}

		if (isset($device['configuration'])) {
			foreach ($device['configuration'] as $key => $value) {
				$this->setConfiguration($key, $value);
			}
		}
		if (isset($device['category'])) {
			foreach ($device['category'] as $key => $value) {
				$this->setCategory($key, $value);
			}
		}
		$cmd_order = 0;
		$link_cmds = array();
		$link_actions = array();
		$ids = array();
		$arrayToRemove = [];
		if (isset($device['commands'])) {
			foreach ($this->getCmd() as $eqLogic_cmd) {
				$exists = 0;
				foreach ($device['commands'] as $command) {
					if ($command['logicalId'] == $eqLogic_cmd->getLogicalId()) {
						$exists++;
					}
				}
				if ($exists < 1) {
					$arrayToRemove[] = $eqLogic_cmd;
				}
			}
			foreach ($arrayToRemove as $cmdToRemove) {
				try {
					$cmdToRemove->remove();
				} catch (Exception $e) {
				}
			}
			foreach ($device['commands'] as $command) {
				$cmd = null;
				foreach ($this->getCmd() as $liste_cmd) {
					if ((isset($command['logicalId']) && $liste_cmd->getLogicalId() == $command['logicalId'])
						|| (isset($command['name']) && $liste_cmd->getName() == $command['name'])) {
						$cmd = $liste_cmd;
						break;
					}
				}
				try {
					if ($cmd == null || !is_object($cmd)) {
						$cmd = new modbusrtuCmd();
						$cmd->setOrder($cmd_order);
						$cmd->setEqLogic_id($this->getId());
					} else {
						$command['name'] = $cmd->getName();
						if (isset($command['display'])) {
							unset($command['display']);
						}
					}
					utils::a2o($cmd, $command);
					$cmd->setConfiguration('logicalId', $cmd->getLogicalId());
					$cmd->save();
					if (isset($command['value'])) {
						$link_cmds[$cmd->getId()] = $command['value'];
					}
					if (isset($command['configuration']) && isset($command['configuration']['updateCmdId'])) {
						$link_actions[$cmd->getId()] = $command['configuration']['updateCmdId'];
					}
					$cmd_order++;
				} catch (Exception $exc) {

				}
			}
		}

		if (count($link_cmds) > 0) {
			foreach ($this->getCmd() as $eqLogic_cmd) {
				foreach ($link_cmds as $cmd_id => $link_cmd) {
					if ($link_cmd == $eqLogic_cmd->getName()) {
						$cmd = cmd::byId($cmd_id);
						if (is_object($cmd)) {
							$cmd->setValue($eqLogic_cmd->getId());
							$cmd->save();
						}
					}
				}
			}
		}
		if (count($link_actions) > 0) {
			foreach ($this->getCmd() as $eqLogic_cmd) {
				foreach ($link_actions as $cmd_id => $link_action) {
					if ($link_action == $eqLogic_cmd->getName()) {
						$cmd = cmd::byId($cmd_id);
						if (is_object($cmd)) {
							$cmd->setConfiguration('updateCmdId', $eqLogic_cmd->getId());
							$cmd->save();
						}
					}
				}
			}
		}
		$this->save();
	}
	
	public static function sendIdToDeamon() {
		foreach (self::byType('modbusrtu') as $eqLogic) {
			$eqLogic->allowDevice();
			usleep(500);
		}
	}


    /*     * *********************Methode d'instance************************* */
    
	public function postSave() {
		if ($this->getConfiguration('applyDevice') != $this->getConfiguration('type')) {
			$this->applyModuleConfiguration();
			$this->allowDevice();
		} else {
			$this->allowDevice();
		}		
	}
	
	public function preRemove() {
		$this->disallowDevice();
	}
	
	public function allowDevice() {
		$value = array('apikey' => jeedom::getApiKey('modbusrtu'), 'cmd' => 'add');
		if ($this->getConfiguration('type_modbus') == 'rtu') {
			$registerList =array();
			foreach ($this->getCmd('info') as $cmd) {
				$registerList[]= array('location' => $cmd->getConfiguration('location'),
										'datatype' => $cmd->getConfiguration('datatype'),
										'functioncode' => $cmd->getConfiguration('functioncode'),
										'nbregister' => $cmd->getConfiguration('nbregister'),
								);
			}
			$value['device'] = array(
				'id' => $this->getId(),
				'type' => 'rtu',
				'name' => $this->getName(),
				'maitreesclave' => $this->getConfiguration('maitreesclave'),
				'unit' => $this->getConfiguration('unit'),
				'serialport' => $this->getConfiguration('portSerial'),
				'sship' => $this->getConfiguration('sship'),
				'sshport' => $this->getConfiguration('sshport'),
				'sshuser' => $this->getConfiguration('sshuser'),
				'sshpass' => $this->getConfiguration('sshpass'),
				'sshpath' => $this->getConfiguration('sshpath'),
				'sshdevice' => $this->getConfiguration('sshdevice'),
				'baudrate' => $this->getConfiguration('baudrate'),
				'parity' => $this->getConfiguration('parity'),
				'bytesize' => $this->getConfiguration('bytesize'),
				'stopbits' => $this->getConfiguration('stopbits'),
				'register' => $registerList,
				'bimaster' => $this->getConfiguration('bimaster',0),
			);
			$value = json_encode($value);
			if (config::byKey('socketport', 'modbusrtu') != '') {
				$socket = socket_create(AF_INET, SOCK_STREAM, 0);
				socket_connect($socket, '127.0.0.1', config::byKey('socketport', 'modbusrtu'));
				socket_write($socket, $value, strlen($value));
				socket_close($socket);
			}
		}
	}

	public function disallowDevice() {
		if ($this->getId() == '') {
			return;
		}
		$value = json_encode(array('apikey' => jeedom::getApiKey('modbusrtu'), 'cmd' => 'remove', 'device' => array('id' => $this->getLogicalId())));
		if (config::byKey('socketport', 'modbusrtu') != '') {
			$socket = socket_create(AF_INET, SOCK_STREAM, 0);
			socket_connect($socket, '127.0.0.1', config::byKey('socketport', 'modbusrtu'));
			socket_write($socket, $value, strlen($value));
			socket_close($socket);
		}
	}

}

class modbusrtuCmd extends cmd {
    /*     * *************************Attributs****************************** */


    /*     * ***********************Methode static*************************** */


    /*     * *********************Methode d'instance************************* */


    public function execute($_options = null) {
    	log::add('modbusrtu', 'debug', 'Debut de l action');
		if ($this->type != 'action') {
			return;
		}
		$data = array();
		$eqLogic = $this->getEqLogic();
		$slave = $eqLogic->getConfiguration('unit');
		$maitreesclave = $eqLogic->getConfiguration('maitreesclave');
		$baudrate = $eqLogic->getConfiguration('baudrate');
		$parity = $eqLogic->getConfiguration('parity');
		$bytesize = $eqLogic->getConfiguration('bytesize');
		$stopbits = $eqLogic->getConfiguration('stopbits');
		$sship = $eqLogic->getConfiguration('sship');
		$sshport = $eqLogic->getConfiguration('sshport');
		$sshuser = $eqLogic->getConfiguration('sshuser');
		$sshpass = $eqLogic->getConfiguration('sshpass');
		$sshpath = $eqLogic->getConfiguration('sshpath');
		$sshdevice = $eqLogic->getConfiguration('sshdevice');
		$serialport = $eqLogic->getConfiguration('portSerial');
		$location = $this->getConfiguration('location');
		$bimaster = $this->getConfiguration('bimaster',0);
		$value = $this->getConfiguration('request');
		switch ($this->getSubType()) {
			case 'slider':
				$value = trim(str_replace('#slider#', $_options['slider'], $value));
				break;
			case 'color':
				$value = trim(str_replace('#color#', $_options['color'], $value));
				break;
			case 'select':
				$value = trim(str_replace('#select#', $_options['select'], $value));
				break;
			default:
				$value=$this->getConfiguration('request');
				if (!is_numeric($value)) {
					$value=cmd::cmdToValue($value);
				}
                break;
		}
		$value = json_encode(array('apikey' => jeedom::getApiKey('modbusrtu'), 
								'cmd' => 'send',
								'device' => json_encode(array(
									'unit' => $slave,
									'maitreesclave' => $maitreesclave,
									'name' => $eqLogic->getName(),
									'baudrate' => $baudrate,
									'parity' => $parity,
									'bytesize' => $bytesize,
									'stopbits' => $stopbits,
									'sship' => $sship,
									'sshport' => $sshport,
									'sshuser' => $sshuser,
									'sshpass' => $sshpass,
									'sshpath' => $sshpath,
									'sshdevice' => $sshdevice,
									'serialport' => $serialport,
									'register' => $location,
									'value' => $value,
									'bimaster' => $bimaster,
									))
								)
		);
		if (config::byKey('socketport', 'modbusrtu') != '') {
			$socket = socket_create(AF_INET, SOCK_STREAM, 0);
			socket_connect($socket, '127.0.0.1', config::byKey('socketport', 'modbusrtu'));
			socket_write($socket, $value, strlen($value));
			socket_close($socket);
		}
	}
	
}
?>

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 28 sept. 2019, 09:36

Merci pour ton retour nous avons donc bien le même code.
Mais je ne vois pas pourquoi la "value" ne remonte pas dans mon cas.

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 28 sept. 2019, 09:50

Aldarande a écrit :
28 sept. 2019, 09:36
Merci pour ton retour nous avons donc bien le même code.
Mais je ne vois pas pourquoi la "value" ne remonte pas dans mon cas.
Je pense plus à un problème de widget sur le dashboard. au début j'étais obligé de passer par le slider.

Sur ton dashboard, tu as bien les deux? le retour ET la consigne? le premier en Holding register, et le second en Input register?

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 28 sept. 2019, 12:12

Oui, j'utilise le curseur. je l'envoie bine en Input register.


[2019-09-28 10:00:41][DEBUG] : Send command
[2019-09-28 10:00:41][DEBUG] : {u'sshuser': u'', u'parity': u'none', u'baudrate': u'9600', u'name': u'De Dietrich', u'bimaster': 0, u'bytesize': u'8', u'register': u'14,1', u'value': u'', u'serialport': u'/dev/ttyUSB1', u'sshport': u'', u'sship': u'', u'sshdevice': u'', u'sshpass': u'', u'stopbits': u'1', u'maitreesclave': u'local', u'sshpath': u'', u'unit': u'10'}
[2019-09-28 10:00:41][DEBUG] : Handling local request write for De Dietrich
[2019-09-28 10:00:41][DEBUG] : Command to execute sudo /usr/bin/python /var/www/html/plugins/modbusrtu/resources/modbusrtud/modbus_rtu.py --slave 10 --device /dev/ttyUSB1 --baud 9600 --byte 8 --parity none --stop 1 --register 14,1 --action write --value


Quand je le modifie, cela lance bien la commande "write" mais comme on peu le voir, le socket ne reçoit pas de valeur.

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 28 sept. 2019, 12:38

On dirait que tu as le même problème que moi avant que je ne modifie mon fichiers avec tes conseils. le même truc bizarre: u'value': u''
un coup ' un coup " .. ca me parait pas logique

Aldarande
Timide
Messages : 17
Inscription : 01 mai 2018, 10:32

Re: Modbus RTU

Message par Aldarande » 28 sept. 2019, 15:57

Eureka :
J 'ai trouvé le dernier bug dans :
/var/www/html/plugins/modbusrtu/core/class/modbusrtu.class.php

Dans mon cas du SLIDER >>


Ligne 370 : case 'slider':
>J'avais :
$value = trim(str_replace('#slider#', $_options['slider'], $value));[\i]
>J'ai remplacé par :
$value = $_options['slider'];[\i]

Maintenant je peux changer la consigne avec le curseur de base.

Maintenant, ma nouvelle question est comment puis je appliquer mes corrections dans le code MODBUSRTU ? Où comment je le signale au dev pour qu'il en prenne compte ?

looping
Timide
Messages : 149
Inscription : 30 avr. 2017, 11:31
Localisation : Lot (46)

Re: Modbus RTU

Message par looping » 28 sept. 2019, 16:35

Je ne l'aurai jamais trouvé celle là !!!!
Je pense que le dev et la team a abandonné ce plugin et c'est bien dommage.

No Lan
Timide
Messages : 5
Inscription : 09 juin 2019, 09:07

Re: Modbus RTU

Message par No Lan » 28 sept. 2019, 18:07

Bonjour Aldarande , looping,

Simplement merci pour vos recherches et votre partage. Après 4 mois de galère avec ce plugin , il marche enfin et grâce à vous.
J'ai réalisé toutes les modifications suggérés par Aldarande et miracle cela fonctionne.
Bravo et merci.

Répondre

Revenir vers « Utilisation »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités