Modbus RTU
Re: Modbus RTU
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) et ceci me permet de le régler:
ceci me permet de VOIR la consigne prise en compte par la chaudière; (retour d'info) et ceci me permet de le régler:
Re: Modbus RTU
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
Ensuite je visualise avec le atg du milieu que la chaudière a bien pris en compte la consigne.
voilà!
Ensuite je visualise avec le atg du milieu que la chaudière a bien pris en compte la consigne.
voilà!
Re: Modbus RTU
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 :/
Re: Modbus RTU
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...
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...
Re: Modbus RTU
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
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
Re: Modbus RTU
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.looping a écrit : ↑22 sept. 2019, 20:19D'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
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).
Re: Modbus RTU
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
Re: Modbus RTU
Ce qui me semble étonnant c'est le ' avant 14 et " apres.... ca sent la coquille, non?
Re: Modbus RTU
Le vrai problème que j'ai, est de faire remonter la "value" depuis "l'action" vers la commande.
Re: Modbus RTU
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.....
Bref, wait and see.....
Re: Modbus RTU
d
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.
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.
Re: Modbus RTU
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 ?
/var/www/html/plugins/modbusrtu/core/class/modbusrtu.class.php
Afin de comparer, avec le mien, s'il te plait ?
Re: Modbus RTU
Salut Aldarande,
Grace à ta suggestion j'ai réussi à refaire fonctionner ma consigne!!!
voiçi le code que tu m'as demandé:
Grace à ta suggestion j'ai réussi à refaire fonctionner ma consigne!!!
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);
}
}
}
?>
Re: Modbus RTU
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.
Mais je ne vois pas pourquoi la "value" ne remonte pas dans mon cas.
Re: Modbus RTU
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?
Re: Modbus RTU
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.
[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.
Re: Modbus RTU
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
un coup ' un coup " .. ca me parait pas logique
Re: Modbus RTU
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 ?
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 ?
Re: Modbus RTU
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.
Je pense que le dev et la team a abandonné ce plugin et c'est bien dommage.
Re: Modbus RTU
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.
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.
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités