INMIDDELS OPGELOST
Werkt DMB's wijziging bij anderen 100%?
Ik krijg een vreemde response na het sturen van 'F' commando.
Heb dit alleen nog gestest met mijn nieuwe MisterHouse Domotica driver in Perl, maar met de oude firmware werkt die wel goed, en ik doe niks bijzonders rond dat F commando.
Zonder die wijziging is de driver ook al retesnel btw.
Heerlijk een knop indrukken en gelijk actie in je software.
Zie onder...
Ik krijg dus dit:
Domotica::send_char command sent: FF
...Domotica::read_char command read: 5
Domotica::start_command status: IO Module found with changes.
Domotica::send_char command sent: 41
...Domotica::send_char command sent: 31
...Domotica::send_char command sent: 72
...Domotica::send_char command sent: 68
...Domotica::send_char command sent: 01
...Domotica::send_char command sent: 68
...Domotica::send_char command sent: 00
...Domotica::send_char command sent: 7A
...Domotica::send_char command sent: FF
...Domotica::read_char command read: 5
Domotica::start_command status: IO Module found with changes.
Domotica::send_char command sent: 46
....Domotica::send_and_check cmd=46 incorrect response byte: 4658
Domotica::analyse_error_code: An unknown error has occurred. errorcode=1
De module blijft zeggen dat er changes zijn, en ik krijg direct met antwoord F een X mee, altijd.
EDIT:
De changes die bleven, zijn gefixt, was een bug in mijn code.
Temp sensor werd niet juist gelezen na resetten module.
Maar ik heb het idee dat die 3mS iets te kort is voor mijn code.
Hmmm moet dat nog eens nazien...
EDIT2:
Ok gefixt.
Bleek dat mijn routine meer dan 1 byte las in bepaalde gevallen, dit geforceerd, daarna kon ik zelfs mijn serial-port parameters verder tweaker en het nog veel sneller maken dan het al was.
My tweaks:
Code: Select all
# Tweak read times, speeds up alot!
$serial_port->read_const_time(5); # Time for read (milliseconds)
$serial_port->read_char_time(0); # Don't wait for each character
Changed $serial_port->input to
$serial_port->read(1)
# Read response from serialport
# Try as much as 'tries' times, return when data found.
#
sub read_char
{
my ($serial_port) = @_;
my $tries = 16;
# Check for input
while ($tries--) {
print "." if lc($main::config_parms{debug}) =~ /domotica/;
if (my $data = $serial_port->read(1)) {
return $data;
}
# To prevent error messages.
else {
$serial_port->reset_error;
}
}
}
Zijn er eigenlijk MisterHouse users hier?
Ik geloof dat ik na mijn avontuur met gambas en C++ toch maar even bij Perl blijf.
Is erg snel en betrouwbaar gebleken, en de combinatie met mijn MisterHouse afgeleide script (linux only, alle niet gebruikte meuk eruit) bied veel mogelijkheden voor uitbreiding.
Dus DMB, prima werk, door jou bugfix kwam er bij mij weer 1 boven
Ron.