Hallo Helfende,
ich benötige Hilfe oder Infos wer von euch ein Dino Board von KMtronic erfolgreich in FHEM zum laufen gebracht hat.
Es handelt sich um dies hier.
http://kmtronic.com/arduino.html
Zum laufen gebracht habe ich es mit dieser Configurable Firmata (ver. 2.0.6)
/*
* Firmata is a generic protocol for communicating with microcontrollers
* from software on a host computer. It is intended to work with
* any host computer software package.
*
* To download a host software package, please click on the following link
* to open the download page in your default browser.
*
* http://firmata.org/wiki/Download
*/
/*
Copyright (C) 2006-2008 Hans-Christoph Steiner. All rights reserved.
Copyright (C) 2010-2011 Paul Stoffregen. All rights reserved.
Copyright (C) 2009 Shigeru Kobayashi. All rights reserved.
Copyright (C) 2009-2013 Jeff Hoefs. All rights reserved.
Copyright (C) 2013 Norbert Truchsess. All rights reserved.
Copyright (C) 2014 Nicolas Panel. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
See file LICENSE.txt for further informations on licensing terms.
formatted using the GNU C formatting and indenting
*/
#include <Firmata.h>
/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/
//#include <SPI.h>
//#include <EtherShield.h>
/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/
#include <UIPEthernet.h>
/*
* To execute Network Firmata on Yun uncomment Bridge.h and YunClient.h.
* Do not include Ethernet.h or SPI.h in this case.
* On Yun there's no need to configure local_ip and mac in the sketch
* as this is configured on the linux-side of Yun.
*/
//#include <Bridge.h>
//#include <YunClient.h>
#if defined ethernet_h || defined UIPETHERNET_H || defined _YUN_CLIENT_H_
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#define NETWORK_FIRMATA
//replace with ip of server you want to connect to, comment out if using 'remote_host'
#define remote_ip IPAddress(192,168,9,54)
//replace with hostname of server you want to connect to, comment out if using 'remote_ip'
//#define remote_host "server.local"
//replace with the port that your server is listening on
#define remote_port 3030
//replace with arduinos ip-address. Comment out if Ethernet-startup should use dhcp. Is ignored on Yun
#define local_ip IPAddress(192,168,9,99)
//replace with ethernet shield mac. It's mandatory every device is assigned a unique mac. Is ignored on Yun
const byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x07, 0x02};
#endif
// To configure, save this file to your working directory so you can edit it
// then comment out the include and declaration for any features that you do
// not need below.
// Also note that the current compile size for an Arduino Uno with all of the
// following features enabled is about 22.4k. If you are using an older Arduino
// or other microcontroller with less memory you will not be able to include
// all of the following feature classes.
#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;
#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;
//#include <utility/AnalogInputFirmata.h>
//AnalogInputFirmata analogInput;
//#include <utility/AnalogOutputFirmata.h>
//AnalogOutputFirmata analogOutput;
//#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
//#include <utility/ServoFirmata.h>
//ServoFirmata servo;
//#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
//#include <utility/I2CFirmata.h>
//I2CFirmata i2c;
//#include <utility/OneWireFirmata.h>
//OneWireFirmata oneWire;
//#include <utility/StepperFirmata.h>
//StepperFirmata stepper;
#include <utility/FirmataExt.h>
FirmataExt firmataExt;
//#include <utility/FirmataScheduler.h>
//FirmataScheduler scheduler;
//#include <utility/EncoderFirmata.h>
//EncoderFirmata encoder;
// dependencies. Do not comment out the following lines
#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
#include <utility/AnalogWrite.h>
#endif
#if defined AnalogInputFirmata_h || defined I2CFirmata_h || defined EncoderFirmata_h
#include <utility/FirmataReporting.h>
FirmataReporting reporting;
#endif
// dependencies for Network Firmata. Do not comment out.
#ifdef NETWORK_FIRMATA
#if defined remote_ip && defined remote_host
#error "cannot define both remote_ip and remote_host at the same time!"
#endif
#include <utility/EthernetClientStream.h>
#ifdef _YUN_CLIENT_H_
YunClient client;
#else
EthernetClient client;
#endif
#if defined remote_ip && !defined remote_host
#ifdef local_ip
EthernetClientStream stream(client, local_ip, remote_ip, NULL, remote_port);
#else
EthernetClientStream stream(client, IPAddress(0, 0, 0, 0), remote_ip, NULL, remote_port);
#endif
#endif
#if !defined remote_ip && defined remote_host
#ifdef local_ip
EthernetClientStream stream(client, local_ip, IPAddress(0, 0, 0, 0), remote_host, remote_port);
#else
EthernetClientStream stream(client, IPAddress(0, 0, 0, 0), IPAddress(0, 0, 0, 0), remote_host, remote_port);
#endif
#endif
#endif
/*==============================================================================
* FUNCTIONS
*============================================================================*/
void systemResetCallback()
{
// initialize a defalt state
// pins with analog capability default to analog input
// otherwise, pins default to digital output
for (byte i = 0; i < TOTAL_PINS; i++) {
if (IS_PIN_ANALOG(i)) {
#ifdef AnalogInputFirmata_h
// turns off pullup, configures everything
Firmata.setPinMode(i, ANALOG);
#endif
} else if (IS_PIN_DIGITAL(i)) {
#ifdef DigitalOutputFirmata_h
// sets the output to 0, configures portConfigInputs
Firmata.setPinMode(i, OUTPUT);
#endif
}
}
#ifdef FirmataExt_h
firmataExt.reset();
#endif
}
/*==============================================================================
* SETUP()
*============================================================================*/
void setup()
{
#ifdef NETWORK_FIRMATA
#ifdef _YUN_CLIENT_H_
Bridge.begin();
#else
#ifdef local_ip
Ethernet.begin((uint8_t *)mac, local_ip); //start ethernet
#else
Ethernet.begin((uint8_t *)mac); //start ethernet using dhcp
#endif
#endif
delay(1000);
#endif
Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);
#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
/* analogWriteCallback is declared in AnalogWrite.h */
Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
#endif
#ifdef FirmataExt_h
#ifdef DigitalInputFirmata_h
firmataExt.addFeature(digitalInput);
#endif
#ifdef DigitalOutputFirmata_h
firmataExt.addFeature(digitalOutput);
#endif
#ifdef AnalogInputFirmata_h
firmataExt.addFeature(analogInput);
#endif
#ifdef AnalogOutputFirmata_h
firmataExt.addFeature(analogOutput);
#endif
#ifdef ServoFirmata_h
firmataExt.addFeature(servo);
#endif
#ifdef I2CFirmata_h
firmataExt.addFeature(i2c);
#endif
#ifdef OneWireFirmata_h
firmataExt.addFeature(oneWire);
#endif
#ifdef StepperFirmata_h
firmataExt.addFeature(stepper);
#endif
#ifdef FirmataReporting_h
firmataExt.addFeature(reporting);
#endif
#ifdef FirmataScheduler_h
firmataExt.addFeature(scheduler);
#endif
#ifdef EncoderFirmata_h
firmataExt.addFeature(encoder);
#endif
#endif
/* systemResetCallback is declared here (in ConfigurableFirmata.ino) */
Firmata.attach(SYSTEM_RESET, systemResetCallback);
// Network Firmata communicates with Ethernet-shields over SPI. Therefor all
// SPI-pins must be set to IGNORE. Otherwise Firmata would break SPI-communication.
// add Pin 10 and configure pin 53 as output if using a MEGA with Ethernetshield.
// No need to ignore pin 10 on MEGA with ENC28J60, as here pin 53 should be connected to SS:
#ifdef NETWORK_FIRMATA
// ignore SPI and pin 4 that is SS for SD-Card on Ethernet-shield
for (byte i=0; i < TOTAL_PINS; i++) {
if (IS_PIN_SPI(i)
|| 4==i
|| 10==i // explicitly ignore pin 10 on MEGA as 53 is hardware-SS but Ethernet-shield uses pin 10 for SS
|| 3==i
|| 0==i
|| 1==i
) {
Firmata.setPinMode(i, IGNORE);
}
}
pinMode(PIN_TO_DIGITAL(10), OUTPUT); // is SPI on DINo
pinMode(PIN_TO_DIGITAL(4), OUTPUT);// switch off SD-card bypassing Firmata
digitalWrite(PIN_TO_DIGITAL(4), HIGH); // SS is active low;
pinMode(PIN_TO_DIGITAL(3), OUTPUT);
digitalWrite(PIN_TO_DIGITAL(3), HIGH);
pinMode(PIN_TO_DIGITAL(0), OUTPUT);
digitalWrite(PIN_TO_DIGITAL(0), HIGH);
pinMode(PIN_TO_DIGITAL(1), OUTPUT);
digitalWrite(PIN_TO_DIGITAL(1), HIGH);
// start up Network Firmata:
Firmata.begin(stream);
#else
// start up the default Firmata using Serial interface:
Firmata.begin(57600);
#endif
systemResetCallback(); // reset to default config
}
/*==============================================================================
* LOOP()
*============================================================================*/
void loop()
{
#ifdef DigitalInputFirmata_h
/* DIGITALREAD - as fast as possible, check for changes and output them to the
* stream buffer using Firmata.write() */
digitalInput.report();
#endif
/* STREAMREAD - processing incoming messagse as soon as possible, while still
* checking digital inputs. */
while (Firmata.available()) {
Firmata.processInput();
#ifdef FirmataScheduler_h
if (!Firmata.isParsingMessage()) {
goto runtasks;
}
}
if (!Firmata.isParsingMessage()) {
runtasks: scheduler.runTasks();
#endif
}
/* SEND STREAM WRITE BUFFER - TO DO: make sure that the stream buffer doesn't go over
* 60 bytes. use a timer to sending an event character every 4 ms to
* trigger the buffer to dump. */
#ifdef FirmataReporting_h
if (reporting.elapsed()) {
#ifdef AnalogInputFirmata_h
/* ANALOGREAD - do all analogReads() at the configured sampling interval */
analogInput.report();
#endif
#ifdef I2CFirmata_h
// report i2c data for all device with read continuous mode enabled
i2c.report();
#endif
#ifdef EncoderFirmata_h
// report encoders positions if reporting enabled.
encoder.report();
#endif
}
#endif
#ifdef StepperFirmata_h
stepper.update();
#endif
#if defined NETWORK_FIRMATA && !defined local_ip &&!defined _YUN_CLIENT_H_
if (Ethernet.maintain())
{
stream.maintain(Ethernet.localIP());
}
#endif
}
Um den speicher zu schonen habe ich alle möglichen udp stücke gemäß Forenbeiträgen abgeändert.
und bin jetzt bei 67% Speicher sowie 67% Ram auslastung.
In Fhem konnte ich unter den PIN's
define Relais1 FRM_OUT 8
define Relais2 FRM_OUT 7
define Relais3 FRM_OUT 6
define Relais4 FRM_OUT 5
define INPUT1 FRM_IN 19
define INPUT2 FRM_IN 18
define INPUT3 FRM_IN 17
define INPUT4 FRM_IN 16
auch alles eingeben und nutzen. Relais schalten und Eingänge werden angezeigt.
Das einzige Problem was ich jetzt noch habe ist, dass mir der Dino nach ein paar Stunden abstürzt und ich ihn dann vom Strom trennen muss....
Auch erhalte ich noch diesen Fehler:error Unhandled sysex command
Hier noch der Auszug aus der LOG
2016.03.29 13:58:13 5: FRM:>ff
2016.03.29 13:58:19 4: Connection accepted from DINo_192.168.9.99_1026
2016.03.29 13:58:19 5: FRM:>ff
2016.03.29 13:58:21 3: querying Firmata Firmware Version
2016.03.29 13:58:21 5: FRM:>f079f7
2016.03.29 13:58:21 5: FRM:<f079020643006f006e0066006900670075007200610062006c0065004600690072006d00610074006100670065006800740061007500630068006900730074006b006c00650069006e00650072002e0069006e006f00f7
2016.03.29 13:58:21 3: Firmata Firmware Version: ConfigurableFirmatagehtauchistkleiner.ino V_2_06
2016.03.29 13:58:21 5: FRM:>f069f7
2016.03.29 13:58:21 5: FRM:>f06bf7
2016.03.29 13:58:21 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7f06c7f7f000101017f7f7f000101017f000101017f000101017f000101017f000101017f7f7f7f7f000101017f000101017f000101017f000101017f000101017f000101017f7f7ff7
2016.03.29 13:58:21 3: received String_data: Unhandled sysex command
2016.03.29 13:58:24 5: FRM:>f07a6807f7
2016.03.29 13:58:24 5: FRM:>f41000
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>f41100
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>f41200
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>f41300
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>d201
2016.03.29 13:58:24 5: FRM:>f40701
2016.03.29 13:58:24 5: FRM:>900000
2016.03.29 13:58:24 5: FRM:>f40601
2016.03.29 13:58:24 5: FRM:>900000
2016.03.29 13:58:24 5: FRM:>f40501
2016.03.29 13:58:24 5: FRM:>900000
2016.03.29 13:58:24 5: FRM:>f40801
2016.03.29 13:58:24 5: FRM:>910000
2016.03.29 13:58:24 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7920000920000920000920000920000920000920000920000
2016.03.29 13:58:24 3: received String_data: Unhandled sysex command
jump to the top
Hat jemand Erfahrungswerte mit diesem Board?
Hallo rico5588,
dein Board kenne ich zwar nicht, aber vielleicht können wir was gegen Unhandled sysex command tun.
Du hast "FirmataExt firmataExt;" zum Glück nicht auskommentiert und da kommt auch die Fehlermeldung her. FRM fragt Firmata, was das Boad kann und FirmataExt versucht für jedes "firmataExt.addFeature()" zu antworten. Möglicherweise ist da etwas in der INO-Datei unstimmig. Auch wenn das noch nicht die Lösung ist: Bitte den ganzen Block mit "firmataExt.addFeature(...)" auskommentieren bis auf den ersten für "digitalInput", den du ja ohnehin brauchst und noch mal testen. Wenn es dann keine Fehlermeldung mehr gibt, "digitalOutput" hinzufügen und wieder testen. Du kannst so lange einkommentieren, bis der Fehler wieder auftritt und dann weißt du, wer es ist.
Merkwürdig ist, dass du auch ein "Unhandled sysex command" auf "FRM:>910000" bekommst, aber nicht auf "FRM:>900000". Du hast doch mehr als einen digitalen Ausgang und Firmata sollte auf alle gleich reagieren (siehe auch http://www.firmata.org/wiki/V2.3ProtocolDetails (http://www.firmata.org/wiki/V2.3ProtocolDetails)).
Allerdings vermute ich, dass deine Stabilitätsprobleme nicht mit der Fehlermeldung zusammen hängen. Habe eine ganze Reihe Tests mit W5100 und ENC28J60 Ethernet-Modulen gemacht. Mein Mini Pro mit W5100, digital In, digital Out und PWM out läuft seit Monaten durch. Bei einigen anderen Kombinationen sieht die Stabilität nicht ganz so gut aus, wobei ich die genaue Ursache noch nicht ermitteln konnte. Dafür habe ich inzwischen eine Lösung, die aber nicht für jeden akzeptabel ist: den Watchdog aktivieren. Lass es mich wissen, wenn du das ausprobieren willst.
Grüße,
Jens
Hallo jensb,
ich fange mal auszuschließen. Das kommt wenn ich nur Digital in drin lasse.
2016.03.29 19:00:43 4: Connection accepted from DINo_192.168.9.99_1025
2016.03.29 19:00:43 5: FRM:>ff
2016.03.29 19:00:43 5: FRM:<f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7
2016.03.29 19:00:43 3: received String_data: Unknown pin mode
2016.03.29 19:00:43 3: received String_data: Unknown pin mode
2016.03.29 19:00:43 3: received String_data: Unknown pin mode
2016.03.29 19:00:43 3: received String_data: Unknown pin mode
2016.03.29 19:00:43 3: received String_data: Unknown pin mode
2016.03.29 19:00:43 3: received String_data: Unknown pin mode
2016.03.29 19:00:45 3: querying Firmata Firmware Version
2016.03.29 19:00:45 5: FRM:>f079f7
2016.03.29 19:00:45 5: FRM:<f079020643006f006e0066006900670075007200610062006c0065004600690072006d00610074006100670065006800740061007500630068006900730074006b006c00650069006e00650072002e0069006e006f00f7
2016.03.29 19:00:45 3: Firmata Firmware Version: ConfigurableFirmatagehtauchistkleiner.ino V_2_06
2016.03.29 19:00:45 5: FRM:>f069f7
2016.03.29 19:00:45 5: FRM:>f06bf7
2016.03.29 19:00:45 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7f06c7f7f00017f7f7f00017f00017f00017f00017f00017f7f7f7f7f00017f00017f00017f00017f00017f00017f7f7ff7
2016.03.29 19:00:45 3: received String_data: Unhandled sysex command
2016.03.29 19:00:48 5: FRM:>f07a6807f7
2016.03.29 19:00:48 5: FRM:>f41000
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 5: FRM:>f41100
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 5: FRM:>f41200
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 5: FRM:>f41300
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 5: FRM:>d201
2016.03.29 19:00:48 2: error initializing 'Relais1': unsupported mode '1' for pin '7'
2016.03.29 19:00:48 2: error initializing 'Relais2': unsupported mode '1' for pin '6'
2016.03.29 19:00:48 2: error initializing 'Relais3': unsupported mode '1' for pin '5'
2016.03.29 19:00:48 2: error initializing 'Relais4': unsupported mode '1' for pin '8'
2016.03.29 19:00:51 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7920000920000920000920000920000920000920000920000
2016.03.29 19:00:51 3: received String_data: Unhandled sysex command
und das bei nur digital out
2016.03.29 19:04:46 1: 3030 disconnected, waiting to reappear (DINo_192.168.9.99_1025)
2016.03.29 19:04:52 4: Connection accepted from DINo_192.168.9.99_1026
2016.03.29 19:04:52 5: FRM:>ff
2016.03.29 19:04:54 3: querying Firmata Firmware Version
2016.03.29 19:04:54 5: FRM:>f079f7
2016.03.29 19:04:54 5: FRM:<f079020643006f006e0066006900670075007200610062006c0065004600690072006d00610074006100670065006800740061007500630068006900730074006b006c00650069006e00650072002e0069006e006f00f7
2016.03.29 19:04:54 3: Firmata Firmware Version: ConfigurableFirmatagehtauchistkleiner.ino V_2_06
2016.03.29 19:04:54 5: FRM:>f069f7
2016.03.29 19:04:54 5: FRM:>f06bf7
2016.03.29 19:04:54 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7f06c7f7f01017f7f7f01017f01017f01017f01017f01017f7f7f7f7f01017f01017f01017f01017f01017f01017f7f7ff7
2016.03.29 19:04:54 3: received String_data: Unhandled sysex command
2016.03.29 19:04:57 5: FRM:>f07a6807f7
2016.03.29 19:04:57 2: error initializing 'Input16': unsupported mode '0' for pin '16'
2016.03.29 19:04:57 2: error initializing 'Input17': unsupported mode '0' for pin '17'
2016.03.29 19:04:57 2: error initializing 'Input18': unsupported mode '0' for pin '18'
2016.03.29 19:04:57 2: error initializing 'Input19': unsupported mode '0' for pin '19'
2016.03.29 19:04:57 5: FRM:>f40701
2016.03.29 19:04:57 5: FRM:>900000
2016.03.29 19:04:57 5: FRM:>f40601
2016.03.29 19:04:57 5: FRM:>900000
2016.03.29 19:04:57 5: FRM:>f40501
2016.03.29 19:04:57 5: FRM:>900000
2016.03.29 19:04:57 5: FRM:>f40801
2016.03.29 19:04:57 5: FRM:>910000
2016.03.29 19:04:57 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7
2016.03.29 19:04:57 3: received String_data: Unhandled sysex command
und das wenn ich nichts drin habe
2016.03.29 19:07:26 4: Connection accepted from DINo_192.168.9.99_1025
2016.03.29 19:07:26 5: FRM:>ff
2016.03.29 19:07:27 5: FRM:<f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7
2016.03.29 19:07:27 3: received String_data: Unknown pin mode
2016.03.29 19:07:27 3: received String_data: Unknown pin mode
2016.03.29 19:07:27 3: received String_data: Unknown pin mode
2016.03.29 19:07:27 3: received String_data: Unknown pin mode
2016.03.29 19:07:27 3: received String_data: Unknown pin mode
2016.03.29 19:07:27 3: received String_data: Unknown pin mode
2016.03.29 19:07:28 3: querying Firmata Firmware Version
2016.03.29 19:07:28 5: FRM:>f079f7
2016.03.29 19:07:29 5: FRM:<f079020643006f006e0066006900670075007200610062006c0065004600690072006d00610074006100670065006800740061007500630068006900730074006b006c00650069006e00650072002e0069006e006f00f7
2016.03.29 19:07:29 3: Firmata Firmware Version: ConfigurableFirmatagehtauchistkleiner.ino V_2_06
2016.03.29 19:07:29 5: FRM:>f069f7
2016.03.29 19:07:29 5: FRM:>f06bf7
2016.03.29 19:07:29 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7f06c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7ff7
2016.03.29 19:07:29 3: received String_data: Unhandled sysex command
2016.03.29 19:07:31 5: FRM:>f07a6807f7
2016.03.29 19:07:31 2: error initializing 'Input16': unsupported mode '0' for pin '16'
2016.03.29 19:07:32 2: error initializing 'Input17': unsupported mode '0' for pin '17'
2016.03.29 19:07:32 2: error initializing 'Input18': unsupported mode '0' for pin '18'
2016.03.29 19:07:32 2: error initializing 'Input19': unsupported mode '0' for pin '19'
2016.03.29 19:07:32 2: error initializing 'Relais1': unsupported mode '1' for pin '7'
2016.03.29 19:07:32 2: error initializing 'Relais2': unsupported mode '1' for pin '6'
2016.03.29 19:07:32 2: error initializing 'Relais3': unsupported mode '1' for pin '5'
2016.03.29 19:07:32 2: error initializing 'Relais4': unsupported mode '1' for pin '8'
2016.03.29 19:07:32 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7
2016.03.29 19:07:32 3: received String_data: Unhandled sysex command
Mir ist auch noch aufgefallen das eine Baugruppe derart heiss wird das man sich fast die Finger verbrennt.... Irgendwie vermute ich das mit der PIN config für den ethernetshield was nicht stimmt.
Auch finde ich es komisch das ich pin 16,17,18 und 19 in als Eingang definiere und laut Anleitung sollten es PIN 2,3,4 und 5 sein...
Hallo rico5588,
ein bisschen hilft das weiter. Das 2. "Unhandled sysex command" kommt also von "FRM:>f07a6807f7" und das ist das sampling-interval. Wenn du keine analogen Eingänge hast, brauchst du es nicht in FRM zu konfigurieren.
Das 1. "Unhandled sysex command" stammt wahrscheinlich von "FRM:>f069f7" und das ist die Abfrage für die analogen Pins. Da du Analog im INO deaktiviert hast und FRM immer danach fragt ist das normal.
Richtig heiß (Finger wollen weg) sollte nichts bei dir sein, bestenfalls warm. Falsch kann der Anschluss von deinem Ethernetshield auch nicht sein, sonst würde gar nichts passieren. Allerdings muss Firmata die Finger von den SPI-Pins lassen. Dafür gibt es den Block
for (byte i = 0; i < TOTAL_PINS; i++) {
if (IS_PIN_SPI(i)
|| 4 == i // SD-Card on Ethernet-shiedl uses pin 4 for SS
|| 10 == i // Ethernet-shield uses pin 10 for SS
) {
Firmata.setPinMode(i, PIN_MODE_IGNORE);
}
}
im INO. Dabei wird "IS_PIN_SPI" verwendet, dass von der Standard-Pinbelegung für den jeweiligen Chip ausgeht (z.B. Pins 10 bis 13 bei einem ATmega328). Diese Pins werden dann von FRM auch nicht als verfügbare input_pins bzw. output_pins aufgelistet.
Jens
Hallo Jens,
ich habe jetzt mal noch Pin 11-13 hinzugefügt.
#ifdef NETWORK_FIRMATA
// ignore SPI and pin 4 that is SS for SD-Card on Ethernet-shield
for (byte i = 0; i < TOTAL_PINS; i++) {
if (IS_PIN_SPI(i)
|| 4 == i //wichtig!!!
|| 10 == i // wichtig !!! explicitly ignore pin 10 on MEGA as 53 is hardware-SS but Ethernet-shield uses pin 10 for SS
|| 3 == i
|| 0 == i
|| 1 == i
|| 11 == i
|| 12 == i
|| 13 == i
) {
Firmata.setPinMode(i, IGNORE);
}
}
pinMode(PIN_TO_DIGITAL(10), OUTPUT); // is SPI on DINo
pinMode(PIN_TO_DIGITAL(4), OUTPUT);// switch off SD-card bypassing Firmata
digitalWrite(PIN_TO_DIGITAL(4), HIGH); // SS is active low;
pinMode(PIN_TO_DIGITAL(3), OUTPUT);
//digitalWrite(PIN_TO_DIGITAL(3), HIGH);
pinMode(PIN_TO_DIGITAL(0), OUTPUT);
//digitalWrite(PIN_TO_DIGITAL(0), HIGH);
pinMode(PIN_TO_DIGITAL(1), OUTPUT);
//digitalWrite(PIN_TO_DIGITAL(1), HIGH);
// start up Network Firmata:
und werde mal testen.
du hast auch noch geschrieben das mir die Pins dann nicht aufgelistet werden.... bei mir werden leider garkeine PIN's in FHEM aufgelistet. Habe ich nur durch Probieren herausgefunden wer was macht.
(//)
Hallo rico5588,
dass deine Pins nicht angezeigt werden, deutet darauf hin, dass sich deine FHEM-Firmata-Komonenten nicht mit ConfigurableFirmata 2.6 vertragen. Es sollte nämlich eher so aussehen wie bei dem Screeshot im Anhang. Wenn du nicht auf ConfigurableFirmata 2.5 oder StandardFirmata wechseln willst, kannst du es mit einem experimentellen Update versuchen. Dazu brauchst du:
- https://github.com/ntruchsess/perl-firmata (https://github.com/ntruchsess/perl-firmata), mindestens V0.61, siehe FHEM/lib/Device/Firmata.pm Zeile 22
- https://github.com/ntruchsess/fhem-mirror/blob/firmata/fhem/FHEM/10_FRM.pm (https://github.com/ntruchsess/fhem-mirror/blob/firmata/fhem/FHEM/10_FRM.pm)
Diese Versionen werden momentan noch überarbeitet und sind deshalb noch nicht Teil der offiziellen FHEM-Ausgabe.
Jens
Das würde ich gern versuchen,
die 10_FRM einfach austauschen mit der im Fhem Ordner ?
Was mach ich mit der Firmata.pm ? Gehört da noch mehr dazu oder reicht es wenn ich diese ebenfalls in den FHEM ordner Kopiere?
MFG Rico
Hallo rico5588,
bitte prüfe erst, ob du wirklich ältere Firmata-Komponenten in FHEM verwendest, sonst machst du dir unnötig viel Arbeit. Die Version 10_FRM.pm von vor 29 Tagen https://github.com/ntruchsess/fhem-mirror/blob/dev/fhem/FHEM/10_FRM.pm (https://github.com/ntruchsess/fhem-mirror/blob/dev/fhem/FHEM/10_FRM.pm) (siehe Zeitstempel in Zeile 2) sollte es bereits tun.
Zum Installieren die momentane 10_FRM.pm umbenennen, die neue Version ins gleiche Verzeichnis und dann entweder "reload 10_FRM" oder Neustart.
Für Perl-Firmata auf "Download ZIP" drücken und alles aus dem Zip-Verzeichnis lib/Device in das Unterverzeichnis FHEM/lib/Device auspacken. Auch hier vorher die vorhandenen Dateien und Verzeichnisse sichern. Ggf. die Dateirechte nach dem Auspacken manuell korrigieren. Nach dem Austausch ist ein Neustart erforderlich.
Jens
Hallo Jens,
bei der firmata.pm habe ich als aktuellste Version nur die 0.60 gefunden und diese auch aufgespielt?, hatte aber vorher die 0.59 drauf.
bei der 10_FRM.pm habe ich überhaupt nicht durchgesehen was da jetzt aktuell ist und was nicht.
in meiner Fhem 10_FRM.pm habe ich einen Datumsstempel vom 26.01.2016 stehen
in der aus deinem link steht was vom 15.09.2015 im Quelltext ??? (gehen tut sie jedenfalls.)
-->jedoch alles ohne erfolg.
Pins werden nicht angezeigt und auch der Fehler ist noch da.
2016.03.30 15:15:39 4: Connection accepted from DINo_192.168.9.99_1290
2016.03.30 15:15:39 5: FRM:>ff
2016.03.30 15:15:41 3: querying Firmata Versions
2016.03.30 15:15:41 5: FRM:>f079f7
2016.03.30 15:15:41 5: FRM:>f90000
2016.03.30 15:15:42 5: FRM:<f079020643006f006e0066006900670075007200610062006c0065004600690072006d00610074006100670065006800740061007500630068006900730074006b006c00650069006e00650072002e0069006e006f00f7f90206
2016.03.30 15:15:42 3: Firmata Firmware Version: ConfigurableFirmatagehtauchistkleiner.ino V_2_06 (using Protocol Version: V_2_06)
2016.03.30 15:15:42 5: FRM:>f069f7
2016.03.30 15:15:42 5: FRM:>f06bf7
2016.03.30 15:15:42 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7f06c7f7f7f7f7f000101017f000101017f000101017f000101017f000101017f7f7f7f7f7f000101017f000101017f000101017f000101017f000101017f7f7ff7
2016.03.30 15:15:42 3: received String_data: Unhandled sysex command
2016.03.30 15:15:44 5: FRM:>f07a6807f7
2016.03.30 15:15:44 5: FRM:>f41000
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:44 5: FRM:>f41100
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:44 5: FRM:>f41200
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:44 5: FRM:>f41300
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:44 5: FRM:>d201
2016.03.30 15:15:45 5: FRM:>f40701
2016.03.30 15:15:45 5: FRM:>900000
2016.03.30 15:15:45 5: FRM:>f40601
2016.03.30 15:15:45 5: FRM:>900000
2016.03.30 15:15:45 5: FRM:>f40501
2016.03.30 15:15:45 5: FRM:>900000
2016.03.30 15:15:45 5: FRM:>f40801
2016.03.30 15:15:45 5: FRM:>910000
2016.03.30 15:15:45 3: Wetter: connect to to https://query.yahooapis.com:443 timed out
2016.03.30 15:15:45 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7920000920000920000920000920000920000920000920000
2016.03.30 15:15:45 3: received String_data: Unhandled sysex command
2016.03.30 15:15:53 5: FRM:>904000
2016.03.30 15:15:53 5: FRM:>900000
2016.03.30 15:15:56 5: FRM:>902000
2016.03.30 15:15:56 5: FRM:>900000
an meinem Temperaturproblem arbeite ich noch.
Test 1 - anderes Netzteil hat wenig gebracht. das alte hat 13,5 V -->jetzt 11 V -->gefühlt kann man jetzt 3 sec. ranfasen bevor man sich die Finger verbrennt :D
Test 2 - Original Sketch vom hersteller.
MFG Rico
Hallo Rico,
diese FRM-Version reicht, sie sagt "using Protocol Version ..." und kann damit auch wirklich mit ConfigurableFirmata 2.6 umgehen. In dem Link den ich dir genannt habe ist in Wirklichkeit die Version 0.61 drin, schau mal in der Datei Changes.
Das Problem liegt damit auf Firmata-Seite, dass nicht wie gewünscht auf die Capability-Anfrage "FRM:>f06bf7" reagiert.
Schau mal in die Datei "DigitalOutputFirmata.cpp". Die Funktion "handleCapability" wird durch "f06bf7" über "FirmataExt::handleSysex/CAPABILITY_QUERY" aufgerufen. Nur wenn "IS_PIN_DIGITAL" immer "false" ist bleibt Firmata stumm und antwortet nichts. Das kann z.B. dann passieren, wenn die Arduino-IDE dem Compiler ein Board übergibt, dass von Firmata nicht unterstützt wird.
Was hast du bei dir für ein Board eingestellt? Was steht bei dir in den Arduino-Compilerzeilen alles hinter "-D"?
Grüße,
Jens
Hallo Jens,
bei mir ist ein Arduino Pro or Pro Mini, Atmega328 (5V, 16 MHZ) eingestellt.
Hoffe das war das was du wissen wolltest. (Arduino und das alles kenne ich erst seit 6 Wochen :o, habe also noch nicht so viel wissen)
Das Board habe ich nach Anleitung eingestellt....
https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0ahUKEwiCp_GB3OjLAhUBWRoKHd5eC0kQFgg8MAQ&url=http%3A%2F%2Fwww.kmtronic.com%2Fmanuals%2Fkmtronic_DINo_Netboard_manual.pdf&usg=AFQjCNF4CjgK9RiPelpOJ5ZQ64wh8f7G4Q&sig2=mmgQM0btU9ZVzDeO0crm7Q&cad=rja (https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0ahUKEwiCp_GB3OjLAhUBWRoKHd5eC0kQFgg8MAQ&url=http%3A%2F%2Fwww.kmtronic.com%2Fmanuals%2Fkmtronic_DINo_Netboard_manual.pdf&usg=AFQjCNF4CjgK9RiPelpOJ5ZQ64wh8f7G4Q&sig2=mmgQM0btU9ZVzDeO0crm7Q&cad=rja)
Aber ich denke nach wie vor auch das was mit dem configurableFirmata nicht stimmt...
MFG Rico
Hallo Rico,
der ATmega328 wird von Firmata voll unterstützt. Wenn du in der IDE das Board so eingestellt hast, wie in der Anleitung beschrieben, sollte es eigentlich funktionieren. Habe mir dein gepostetes INO angesehen, da ist alles so wie es sein sollte. Wenn du in der IDE unter "Voreinstellungen - Ausführliche Ausgabe während Kompilierung" aktivierst, bekommst du übrigens die "-D" Compileroptionen zu sehen.
Du hast noch ein paar Optionen:
- Ich verwende momentan die Arduino IDE 1.6.7, mit 1.6.6. gabs Probleme, ggf. updaten.
- Aktiviere testweise AnalogInputFirmata, auch wenn du es nicht brauchst, dann sollte das verbleibende "Unhandled sysex command" verschwinden.
- Mit deiner für Firmata modifizierten FHEM-Installation kannst du auch die aktuelle Version von ConfigurableFirmata (2.8.2) ausprobieren, die sich unter FHEM als V_2_08 melden wird.
- Wenn all das nicht hilft, kann man es mit einer manuell auskommentierten Variante von StandardFirmataEthernet versuchen, die ich vorzugsweise verwende, da sie z.T. sogar etwas kleiner wird als ConfigurableFirmata. Allerdings müsstest du in der aktuellen Version 2.5.2 UIPEthernet selbst wieder einbauen, da es im Beispiel nicht mehr enthalten ist.
Grüße
Jens
Hallo Rico,
habe das ganze mal mit der folgenden Konfiguration nachgestellt:
- Sparkfun Arduino Pro Mini ATmega328 3.3V
- ENC28J60 Ethernet Modul
- Arduino IDE 1.6.7
- UIPEthernet 1.09
- Configurabe Firmata 2.8.2 mit aktiviertem DigitalIn, DigatalOut und AnalogIn
- FHEM mit aktualisiertem 10_FRM (https://github.com/ntruchsess/fhem-mirror/blob/firmata/fhem/FHEM/10_FRM.pm) und Firmata-Treiber (https://github.com/jnsbyr/perl-firmata)
Entscheidend ist aber scheinbar nur, dass AnalogInputFirmata aktiviert wird, selbst wenn man es nicht braucht, so wie ich es vorgeschlagen hatte. Damit müsstest du in FHEM endlich die digitalen und analogen Pins angezeigt bekommen - und mit dieser kleinen Änderung müsste es auch in deiner ursprünglichen Konfiguration mit ConfigurabelFirmata 2.6 laufen.
Grüße,
Jens
Hallo Jens,
das ist ja ne menge Brot zum Testen ;).
Ich glaube einen kleinen Erfolg kann ich schon verbuchen.
Mein neues Testneztteil (Chinaimport) ist mittlerweile auf 10 V (Original sollte es 12V haben) zusammengebrochen, das gute daran mein Board läuft seit gestern durch....freute freute....
Werde mal testen bis wohin meine Relais noch schalten.
Deine Tipps werde ich alle noch abarbeiten. Den einen habe ich versucht.
-->Analoginput eingeschalten
dabei kommt das raus.
2016.03.31 18:49:03 4: Connection accepted from DINo_192.168.9.99_1026
2016.03.31 18:49:03 5: FRM:>ff
2016.03.31 18:49:03 5: FRM:<f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7f07155006e006b006e006f0077006e002000700069006e0020006d006f0064006500f7
2016.03.31 18:49:03 3: received String_data: Unknown pin mode
2016.03.31 18:49:03 3: received String_data: Unknown pin mode
2016.03.31 18:49:03 3: received String_data: Unknown pin mode
2016.03.31 18:49:03 3: received String_data: Unknown pin mode
2016.03.31 18:49:03 3: received String_data: Unknown pin mode
2016.03.31 18:49:03 3: received String_data: Unknown pin mode
2016.03.31 18:49:03 3: received String_data: Unknown pin mode
2016.03.31 18:49:05 3: querying Firmata Versions
2016.03.31 18:49:05 5: FRM:>f079f7
2016.03.31 18:49:05 5: FRM:>f90000
2016.03.31 18:49:05 5: FRM:<f079020643006f006e0066006900670075007200610062006c0065004600690072006d00610074006100670065006800740061007500630068006900730074006b006c00650069006e00650072002e0069006e006f00f7f90206
2016.03.31 18:49:05 3: Firmata Firmware Version: ConfigurableFirmatagehtauchistkleiner.ino V_2_06 (using Protocol Version: V_2_06)
2016.03.31 18:49:05 5: FRM:>f069f7
2016.03.31 18:49:05 5: FRM:>f06bf7
2016.03.31 18:49:05 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7f06c7f7f7f7f7f000101017f000101017f000101017f000101017f000101017f7f7f7f7f7f000101017f000101017f000101017f000101017f000101017f7f7ff7
2016.03.31 18:49:05 3: received String_data: Unhandled sysex command
2016.03.31 18:49:08 5: FRM:>f07a6807f7
2016.03.31 18:49:08 5: FRM:>f41000
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>f41100
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>f41200
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>f41300
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>d201
2016.03.31 18:49:08 5: FRM:>f40701
2016.03.31 18:49:08 5: FRM:>900000
2016.03.31 18:49:08 5: FRM:>f40601
2016.03.31 18:49:08 5: FRM:>900000
2016.03.31 18:49:08 5: FRM:>f40501
2016.03.31 18:49:08 5: FRM:>900000
2016.03.31 18:49:08 5: FRM:>f40801
2016.03.31 18:49:08 5: FRM:>910000
2016.03.31 18:49:08 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7920000920000920000920000920000920000920000920000
2016.03.31 18:49:08 3: received String_data: Unhandled sysex command
zumindest kommt was von PIN'S
Später dazu mehr
Mfg Rico
Hallo Rico,
das sieht immer noch ziemlich atypisch aus. Firmata regiert auf "FF" mit einem Soft-Reset, wo alle Pins in den Firmata-Grundzustand zurückversetzt werden: analoge auf Eingang, alle anderen (also die, die nur digital können) auf Ausgang. Wenn dabei "Unknown pin mode" heraus kommt, stimmt immer noch was nicht mit deinem ConfigurableFirmata. Das muss ohne Fehler ablaufen, wenn du Digital In, Digital Out und Analog In aktivierst. Probier mal mein INO mit ConfigurableFirmata 2.8.2 aus.
Gibt es eigentlich einen Schaltplan zu dem Board? Der ATmega328 und der ENC28J60 verbrauchen je grob 200 mA. Wenn der Spannungsregler ein Linearregler ist, ist die Hize zu erklären: 12 V - 5 V = 7 V Spannungsdifferenz und das bei ca. 400 mA Last gibt 2.8 W Verlustleistung und die müssen irgendwo bleiben.
Grüße,
Jens
Jens das ist der Wahnsinn....
deine Firmata 2.8.2 geht super, bin dir sehr Dankbar. ;) :)
Ich hoffe es hilft auch noch anderen.
Ursache des eigentlichen Problems war die zu große Spannung.
Laut Hersteller (KMtrinoc) sollen es 12V sein. Hier wird er aber scheinbar so heiß das er sich aufhängt.
Bei nur noch 10 V wird er zwar immer noch sehr warm aber stürzt aber nicht mehr ab.
auf zum nächsten Projekt:
Ich habe gelesen das man über den P1 Header auch 1 Wire nutzen kann (theoretisch)
Könntest du mir einen Tipp geben a. mit welchem Sensor und b. was man dazu an der Config anpassen muss?
MFG Rico
Hallo Rico,
freut mich sehr, dass Firmata bei dir jetzt läuft.
Mit P1 Header meinst du wahrscheinlich den RPi. Es geht auch mit ConfigurableFirmata - da hast du die Wahl. Habe schon über 1Wire nachgedacht, aber noch keine Erfahrung. Mach ein neues Thema auf und viel Erfolg!
Grüße,
Jens
P.S.:
Da du jetzt ConfigurableFirmata 2.8.2 verwendest, bist du auf die aktualisierten Firmata-Komponenten von FHEM angewiesen. Wenn du in FHEM "update" aufrufst, werden die manuell eingespielten Versionen mit den jeweils offiziellen Versionen ersetzt. Es kann u.U. noch etwas dauern, bis Norbert die neuen Versionen freigibt. Bis dahin müsstest du nach einem FHEM-Update prüfen, ob die Unterstützung für 2.8.X vorhanden ist und wenn nicht, die Dateien noch einmal installieren (z.B. aus dem Unterverzeichnis restoreDir kopieren). Wenn du das vermeiden willst, solltest du noch einmal einen Anlauf mit Firmata bis 2.6.X machen.
Jens
Hallo zusammen,
auch wenn das Thema schon etwas älter und gelöst ist, passt mein Problem doch genau hier rein.
Kurz zum Hintergrund: eigentlich will ich die ConfigurableFirmata (CF) nur für 1Wire nutzen und habe dafür mit einem Arduino Nano mit einem ENC28J60 Ethernet-Shield gestartet.
Nach den ersten Problemen bin ich dann auf einen UNO mit w5100-Shield (wegen des kleineren Codes) und der ConfigurableFirmata vom 20.4 2015 (wegen der besseren Kompatibilität) gewechselt. FHEM ist aktuell.
In der CF hatte ich nur 1wire und FirmataExt aktiviert, und bekam auch immer den "Unhandled sysex command" Fehler.
Erst wenn man, wie Jens empfohlen hat, AnalogInput mit hinzu nimmt, werden im FRM-Device in FHEM auch die Pins angezeigt.
Danach könnte man vermuten, dass das Problem in der CF liegt (und eventuell ist da auch noch eins, ggf. in der Pin-Definition), aber ich habe mir auch den Ablauf der Kommunikation zwischen FRM und der CF angeschaut und verstehe da einen Punkt nicht.
Genau wie bei Rico seinerzeit ist der Ablauf bei mir wie folgt (Jens hat das damals ja auch gut verständlich beschrieben)
- Es gibt von FRM einen Resetbefehl ff --> Connection accepted
- Dann wird die Version mit f079f7 abgefragt --> die CF antwortet (wenn man die Antwort decodiert, kommt auch der Versionstext raus)
- Dann aber sendet FRM ein "f069f7" --> das ist eine ANALOG_MAPPING_QUERY
- Direkt im Anschluss schickt FRM noch mit "f06bf7" die CAPABILITY_QUERY
- Dann schickt die CF die Fehlermeldung mit dem "Unhandled sysex command"
Hier der Log-Auszug dazu (die Schritte habe ich dort nochmal dazugeschrieben):
2016.10.28 09:47:24.116 5: FRM:>f07a6807f7
2016.10.28 09:47:24.172 5: FRM:<f07155006e00680061006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7
2016.10.28 09:47:24.174 3: received String_data: Unhandled sysex command
2016.10.28 09:52:06.985 5: FRM:>ff <--- Schritt 1
2016.10.28 09:52:11.993 4: Connection accepted from ArduFirmata01_192.168.0.221_49154
2016.10.28 09:52:12.001 5: FRM:>ff
2016.10.28 09:52:14.099 3: querying Firmata Firmware Version
2016.10.28 09:52:14.100 5: FRM:>f079f7 <--- Schritt 2
2016.10.28 09:52:14.103 5: FRM:<f07902
2016.10.28 09:52:14.115 5: FRM:<064f006e006500770069007200650048006f00730074005f003000300033002e0069006e006f00f7
2016.10.28 09:52:14.118 3: Firmata Firmware Version: OnewireHost_003.ino V_2_06
2016.10.28 09:52:14.118 5: FRM:>f069f7 <--- Schritt 3
2016.10.28 09:52:14.120 5: FRM:>f06bf7 <--- Schritt 4
2016.10.28 09:52:14.122 5: FRM:<f07155006e006800 <--- Schritt 5 (geht bis in die nächste Zeile)
2016.10.28 09:52:14.134 5: FRM:<61006e0064006c0065006400200073007900730065007800200063006f006d006d0061006e006400f7
2016.10.28 09:52:14.137 3: received String_data: Unhandled sysex command
2016.10.28 09:52:14.206 5: FRM:<f06c7f7f00017f00017f7f00017f00017f00017f00017f00017f7f7f7f7f00017f00017f00017f00017f00017f00017ff7
2016.10.28 09:52:17.086 5: FRM:>f07a6807f7
2016.10.28 09:52:17.099 5: FRM:<f07155006e00680061006e0064006c0065006400200073
2016.10.28 09:52:17.185 5: FRM:<007900730065007800200063006f006d006d0061006e006400f7
2016.10.28 09:52:17.186 3: received String_data: Unhandled sysex command
2016.10.28 09:52:39.958 1: 3030 disconnected, waiting to reappear (ArduFirmata01)
2016.10.28 12:01:23.679 1: 3030 disconnected, waiting to reappear (ArduFirmata02)
Meine Frage nun:
wieso findet Schritt 3 statt (erwartet hätte ich nach Jens' Beschreibung nur Schritt 4) ?
Und wieso so schnell danach auch Schritt 4, ohne dass eine Antwort von der CF kam ? (zumindest sieht das im Log so aus, kann in der Realität auch anders gelaufen sein)
Warum fragt FRM das analoge Mapping überhaupt ab, obwohl die Capability-Query noch gar nicht gelaufen ist ?
Darauf kann die CF meiner Meinung nach nur mit der genannten Fehlermeldung antworten, wenn im Sketch der CF einfach keine analogen Anschlüsse aktiviert (defined) wurden.
Kann es sein, dass hier noch ein kleiner Fehler in FRM steckt ?
Ich bin zugegebenermaßen nicht wirklich mit den Firmata-Protokoll vertraut (habe nur im Rahmen der Fehlersuche etwas gelesen) und vielleicht muß Schritt 3 auch sein, aber ich verstehe es nicht wirklich. AnalogInputs zu aktivieren ist natürlich ein Workaround, aber nicht so richtig schön.
Vielleicht hat Jens oder jemand der anderen Wissenden dazu eine Idee. Meine PERL-Skills reichen leider für eine Analyse der 10_FRM.pm nicht aus.
Danke und Gruß aus Aachen
Uef
P.S.: gibt es eigentlich irgendwo eine Doku, welche Version des Firmata-Protokolls die jeweils aktuelle FRM-Version unterstützt (im Code ? ich frage wegen, weil das bei einigen Usern (mir inklusive) zu Problemen bzw. Verwirrung geführt hat) ?
Hallo Uef,
deine Feststellung ist richtig, man könnte die ANALOG_MAPPING_QUERY weglassen, wenn man die CAPABILITY_QUERY auswerten würde - doch so ist das derzeit nicht umgesetzt. Alle Fragen an das Firmata-Device werden nach dem Verbindungsaufbau zunächst hintereinander auf die Reise geschickt und die Antworten werden asynchron verarbeitet, wenn sie eintreffen. Ein Umbau dieses Ablaufs ist möglich aber verhältnismäßig aufwendig, da man dann einen Zustandsautomaten für die Initialisierung braucht. Ein weiterer Vorteil wäre aber, dass FHEM beim Firmata-Verbindungsaufbau nicht mehr so lange blockiert ist. Die Änderung nur für diesen Anwendungsfall zu machen steht aber in einem schlechten Verhältnis zum Aufwand.
Vieles passiert auch im Firmata-Protokollhandler, der leider seit 2014 im FHEM-Repository nicht mehr aktualisiert wurde (siehe Unterverzeichnis FHEM/lib/Device/Firmata). Diesen Teil kann man aber über GitHub (https://github.com/ntruchsess/perl-firmata) auf einen neueren Stand bringen. Hier finden sich auch die von dir gesuchten Kompatiblitätsinformationen:
- lib/Device/Firmata.pm: Versionnummer des Protokollhandlers (Zeile 22)
- lib/Device/Firmata/Constants.pm: die größte unterstützte Firmata-Version ist der letzte Eintrag mit V_XXX
Bitte auch beachten, dass es bei Firmata eine Anwendungs-Version und eine Protokoll-Version gibt. Die älteren Versionen von FRM und dem Firmata-Protokollhandler haben auf die Anwendungsversion geprüft, was zu einem Teil der heute auftretenden Problem geführt hat, da sich die Anwendungsversionen von Firmata und Configurable Firmata ganz unterschiedlich entwickelt haben. Erst mit dem Firmata-Protokollhandler 0.61 wird auf die Protokoll-Version geprüft, und die ist weitestgehend unverändert geblieben.
Grüße,
Jens
Hallo Jens,
vielen Dank für Deine ausführliche Antwort, die die Hintergründe gut erläutert.
Wenn Aufwand und Komplexität für die erforderlichen Anpassungen so hoch ist, dann ist die Aktivierung der analogen Pins sicher ein vernünftiger Workaround. Ist ja bzgl. der Ressourcen (Speicher) auch eher nicht so kritisch (zumindest besser als andere Funktionalitäten).
Ggf. sollte man einfach das Wiki an dieser Stelle ergänzen, das würde vermutlich schon mal helfen (kann ich gerne auch übernehmen; muss mir nur mal Zugriff besorgen).
Uwe
Hallo zusammen.
Ob meine Frag wirklich hier her gehört weiß ich nicht genau, bitte verschieben wenn es der falsche platz ist.
Ich kämpfe nun schon seit Tagen an einem Arduino 1-Wire Busmaster herum und bekomme es einfach nicht zum laufen.
Möchte ihn nur per USB an einen RPI mit FHEM hängen.
Es soll ja wohl die Version vom Mai 2015 mit OneWire gehen leider nicht bei mir oder ich bin zu blöde dazu.
Die Pins werden mir zwar angezeigt aber ich bekommen den DS18b20 nicht ans laufen, es werden keine Geräte gefunden.
Und die Log sagt mir leider nichts, hier mal alles was ich so an Log Eintagungen finden konnte.
OWX_Set request Arduino_Temp_1Wire FF ?
2016.11.23 15:56:46 5 : FRM:>f0730104f7
2016.11.23 15:56:46 5 : SW: f0730104f7
2016.11.23 16:00:34 5 : FRM:>f0730104f7
2016.11.23 16:00:34 5 : SW: f0730104f7
FRM code
defmod Arduino_Firmata FRM /dev/ttyUSB0@57600
attr Arduino_Firmata model nano
attr Arduino_Firmata room Arduino_1Wire
setstate Arduino_Firmata 2016-11-23 15:45:26 state opened
Device Code
defmod Arduino_Temp_1Wire OWX 4
attr Arduino_Temp_1Wire IODev Arduino_Firmata
attr Arduino_Temp_1Wire buspower real
attr Arduino_Temp_1Wire room Arduino_1Wire
setstate Arduino_Temp_1Wire 2016-11-23 15:20:34 state defined
Ich weiß nicht mehr welchen Sketch und welche Libraries ich noch auf den Nano schieben soll.
Die Verzweiflung ist nahe bitte um Hilfe.
Gruß
Schau mal in die fhem.cfg
Da sollte wenn du Pin12 für 1-wire nutzt folgendes rein
#
#
define owxFRMPHZ OWX 12
attr owxFRMPHZ IODev PHZ
# definiert Arduino Pin 12 als 1-Wire Eingang
#
Pin Nr. musst du an deine Verkabelung anpassen
Hallo seer,
grundsätzlich wird der Arduino mit der Firmware ja wohl erkannt.
Auf die Schnelle erstmal zwei Ideen:
- mir fällt auf, dass Du für den Arduino-Sketch sehr viele Firmata-Features aktiviert hast. Ich weiß jetzt nicht genau, ob das auch ohne Ethernet zu Speicherengpässen im Arduino führen kann, aber bei mir läuft es in der gleichen Konstellation wie bei Dir, wenn ich nur DigitalInput, DigitalOutput, AnalogInput und natürlich OneWireFirmata und FirmataExt aktiviert habe.
- hast Du an den PullUp-Widerstand am 1Wire-Pin des Arduinos gedacht ?
Grüße aus Aachen
Uef
Hallo.
Der Widerstand war das Problem.
Hatte einen 1M dran und jetzt einen 4.7K
Habe parallel noch einen ESP8266 NodeMCU M LAUFEN MIT 1-Wire und der läuft auch mit einem 1M von daher habe ich einfach beim Arduino auch einen genommen :-( war wohl de falsche Entscheidung.
defmod OWX_28_FF575A051603 OWTHERM DS18B20 FF575A051603
attr OWX_28_FF575A051603 IODev Arduino_Temp_1Wire
attr OWX_28_FF575A051603 model DS18B20
attr OWX_28_FF575A051603 room OWX
attr OWX_28_FF575A051603 tempHigh 75
attr OWX_28_FF575A051603 tempLow 70
setstate OWX_28_FF575A051603 T: 17.75 °C ↓
setstate OWX_28_FF575A051603 2016-11-23 19:14:15 state T: 17.75 °C ↓
setstate OWX_28_FF575A051603 2016-11-23 19:14:15 temperature 17.75
Danke euch.
1M ist allerdings wirklich sehr groß ! Als Pullup geht das eigentlich nicht mehr durch :-)
Ich staune, dass es am ESP8266 damit überhaupt funktioniert. Für parasitäre Versorgung und längere Busse sicher nicht geeignet.
Aber Hauptsache, es läuft.
Uef
Vielen vielen Dank für den ausschlaggebend Hinweis.
Aber wenn wir gerade bei den Widerstände sind.
Ich weiß das ich einen einbauen muss.
Aber warum würden ich auch gerne wissen. Wieso benötige der data PIN noch mal +V
Bin einer der gerne alles versteht um den Fehler nicht noch einmal zu machen.
Gruß
Gesendet von meinem Nexus 5 mit Tapatalk
Der Pullup-Widerstand ist dafür da, die Datenleitung auf +5V (bzw High) zu ziehen; das können nämlich weder der Master noch die Slaves. Die können die Leitung über einen Transistor (o.ä) mit OpenCollector nur auf Low ziehen. High ist also der Ruhezustand.
Aber alle lauschen natürlich auf der Leitung.
Wenn die nun Low ist und der Slave (oder der Master) es nicht selbst war, ist ein anderer Busteilnehmer aktiv - und der Slave muss warten (z.B. mit seiner Antwort an den Master).
Ist die minimale elektrische Ausführung einer Collision-Detection.
Damit das Timing des 1Wire-Buses klappt, darf der Widerstand nicht zu lange brauchen, um die Leitung wieder auf High zu ziehen.
Für ganz lange Busse empfiehlt Maxim statt Widerständen sogar aktive PullUps mit höherer Stromkapazität, da dann sogar die 4.7K zum Engpass für das Timing werden können.
Uef
Top vielen Dank.
Das ist doch mal ne Auskunft.