diff --git a/fhem/CHANGED b/fhem/CHANGED
index cc5eb9936..10a16c42d 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,12 +1,13 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
+ - bugfix: 10_FRM: accept Firmata firmware without AnalogInputFirmata
- bugfix: 10_MYSENSORS_DEVICE: corrected S_LIGHT_LEVEL
- bugfix: 93_DbRep: fix "month out of range" that causes fhem crash
- feature: 20_FRM_PWM: new attribute "restoreOnStartup"
- feature: 20_FRM_OUT: new attributes "activeLow" and "valueMode"
- feature: 10_FRM: SerialFirmata support
- - update: 10_FRM: OWX IODev assignment
- - update: 10_FRM: Firmata 2.7+ support
+ - update: 10_FRM: OWX IODev assignment
+ - update: 10_FRM: Firmata 2.7+ support
- bugfix: 98_weekprofile: fix "error restore topic"
- change: 14_CUL_TCM97001: Fix Logoutput, Fix device output with
multiple sensors
diff --git a/fhem/FHEM/10_FRM.pm b/fhem/FHEM/10_FRM.pm
index a03503e91..dee2c9c97 100755
--- a/fhem/FHEM/10_FRM.pm
+++ b/fhem/FHEM/10_FRM.pm
@@ -562,7 +562,7 @@ sub FRM_SetupDevice($) {
} elsif ($hash->{SETUP_STAGE} == 2) { # device capabilities
RemoveInternalTimer($hash);
InternalTimer(gettimeofday() + 1, 'FRM_SetupDevice', $hash, 0);
- my $capabilitiesReceived = $device->{metadata}{analog_mappings} && $device->{metadata}{capabilities};
+ my $capabilitiesReceived = $device->{metadata}{capabilities} && ($device->{metadata}{analog_mappings} || ($elapsed >= 5));
if ($capabilitiesReceived) {
# device capabilities have been received, convert to readings
my $inputpins = $device->{metadata}{input_pins};
@@ -634,7 +634,6 @@ sub FRM_SetupDevice($) {
# ready, init client modules
$hash->{SETUP_STAGE} = 3;
FRM_SetupDevice($hash);
-
} elsif ($elapsed >= 5) {
# capabilities receive timeout, abort
$hash->{SETUP_STAGE} = 5;
@@ -1464,6 +1463,9 @@ sub FRM_Serial_Close {
o OWX support
- modified FRM_Client_AssignIOPort: use already assigned IODev
+ 04.01.2018 JB
+ o fix capability query for Firmata firmware without AnalogInputFirmata
+
=cut
=pod
@@ -1556,8 +1558,8 @@ sub FRM_Serial_Close {
- If the device is called none, then no device will be opened, so you
- can experiment without hardware attached.
+ If the device is called none, then no device will be opened, so you
+ can experiment without hardware attached.
@@ -1579,12 +1581,12 @@ sub FRM_Serial_Close {
Attributes
- - resetDeviceOnConnect
+ - resetDeviceOnConnect
Reset the Firmata device immediately after connect to force default Firmata startup state (default: enabled):
all pins with analog capability are configured as input, all other (digital) pins are configured as output
and the input pin reporting, the i2c configuration and the serial port configuration are cancelled.
-
- - i2c-config <write-read-delay>
+
+ - i2c-config <write-read-delay>
Configure the Arduino for ic2 communication. This will enable i2c on the
i2c_pins received by the capability-query issued during initialization of FRM.
As of Firmata 2.3 you can set a delay-time (in microseconds, max. 32767, default: 0) that will be
@@ -1594,41 +1596,38 @@ sub FRM_Serial_Close {
time required by the connected i2c devices (e.g. 30000 for the BMP180 with triple oversampling,
see i2c device manufacturer documentation for details).
See: Firmata Protocol details about I2C
-
- - sampling-interval <interval>
+
+ - sampling-interval <interval>
Configure the interval Firmata reports analog data to FRM (in milliseconds, max. 32767, default: 19 ms).
See: Firmata Protocol details about Sampling Interval
-
- - software-serial-config <port>:<rx pin>:<tx pin>
+
+ - software-serial-config <port>:<rx pin>:<tx pin>
For using a software serial port (port number 8, 9, 10 or 11) two io pins must be specified.
The RX pin must have interrupt capability and the TX pin must have digital output capability.
See: Arduino SoftwareSerial Library
-
+
Notes
- - ConfigurableFirmata
- AnalogInputFirmata must always be enabled, even if not used. Otherwise the device setup will fail with the error Unhandled sysex command when connecting because the pin capability query cannot be completed.
-
- - Serial Ports
- Some serial devices can be connected to a serial port of a Firmata device acting as a serial over LAN adapter
- if their FHEM modules are using basic DevIo (e.g. HEATRONIC in read only mode) by changing their serial device descriptor to
-
- FHEM:DEVIO:<FRM device name>:<serial port>@<baud rate>
- The <serial port> of a pin is its <serial resolution> integer divided by two (e.g. resolution=0/1 -> serial port 0).
-
- To use a serial port both the RX and TX pin of this port must be available via Firmata, even if one of the pins will not be used.
- Depending on the Firmata version the first hardware serial port (port 0) cannot be used even with network connected
- devices because port 0 is always reserved for the Arduino host communication.
- On some Arduinos you can use software serial ports (ports 8 to 11). FRM supports a maximum of one software serial port that can
- be activated using the software-serial-config attribute.
-
- In current Firmata versions the serial options (data bits, parity, stop bits) cannot be configured but may be compiled into the
- Firmata Firmware (see SerialFirmata.cpp ((HardwareSerial*)serialPort)->begin(baud, options)).
-
+ - Serial Ports
+ Some serial devices can be connected to a serial port of a Firmata device acting as a serial over LAN adapter
+ if their FHEM modules are using basic DevIo (e.g. HEATRONIC in read only mode) by changing their serial device descriptor to
+
+ FHEM:DEVIO:<FRM device name>:<serial port>@<baud rate>
+ The <serial port> of a pin is its <serial resolution> integer divided by two (e.g. resolution=0/1 -> serial port 0).
+
+ To use a serial port both the RX and TX pin of this port must be available via Firmata, even if one of the pins will not be used.
+ Depending on the Firmata version the first hardware serial port (port 0) cannot be used even with network connected
+ devices because port 0 is always reserved for the Arduino host communication.
+ On some Arduinos you can use software serial ports (ports 8 to 11). FRM supports a maximum of one software serial port that can
+ be activated using the software-serial-config attribute.
+
+ In current Firmata versions the serial options (data bits, parity, stop bits) cannot be configured but may be compiled into the
+ Firmata Firmware (see SerialFirmata.cpp ((HardwareSerial*)serialPort)->begin(baud, options)).
+