RFD-FHEM / SIGNALDuino

System to capture digital signaldata and transfer them to another system
GNU General Public License v3.0
83 stars 35 forks source link

SIGNALDuino repeatedly crashes after 1-2 weeks #127

Closed fredlcore closed 3 years ago

fredlcore commented 4 years ago

I'm running SIGNALDuino with this firmware: V 3.4.0-dev SIGNALduino cc1101 (chip CC110 unknown) - compiled at Dec 4 2019 22:02:15 I'm using the development version in order to access my EFTH-800 temperature sensors. This works great, but after 1-2 weeks the Nano seems to hang, neither issueing a "set reset" from FHEM nor opening a terminal connection and issueing a hangup brings the Nano back. Once I unplug and reconnect the USB cable, everything is fine - again for a few weeks.

Is this a known problem or anything I can do to assist finding the bug?

sidey79 commented 4 years ago

Currently there ist no known bug which causes this.

In the past, there was a bug in the firmware which caused a reboot. Most times, problems like this are caused by hardware problems like the arduino itself or the usb cable.

Die you have this problem also with Version 3.3.1 ?

fredlcore commented 4 years ago

Hm, it would be difficult to debug because my sensors are not supported in 3.3.1 and I would have to run it for a couple of weeks to be certain that the error does not occur here. The Nano is connected directly to the USB port, so there is no cable involved. As for problems with the Arduino itself, I wonder what kind of faulty hardware that should be if it runs fine for weeks. Based on the project that I've developed on an Arduino Mega (bsb-lan.de) which runs on several hundred devices, something like this looks like a software issue to me (either Firmware or FHEM module).

When I connect to /dev/ttyUSB0 via minicom to the "hung" Nano and issue a hangup, there are regularly coming in binary messages on the serial port. Here is a log of about five minutes:

02 4d 75 3b b0 f2 80 3b 91 ee 80 3b b2 f0 81 3b 93 ea 81 3b a4 8c 93 3b 95 dc 82
 3b b6 da 82 3b 44 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 0
3 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 45 65 
65 65 61 21 21 23 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03
 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 3b 43 3
1 3b 52 31 42 3b 03 0a 3b 53 25 58 3b 0d 0a 02 4d 75 3b b0 e1 80 3b 91 f7 81 3b 
92 fb 80 3b b3 e4 81 3b a4 90 93 3b 95 df 82 3b b6 d9 82 3b 44 01 02 32 32 31 01
 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 0
2 31 01 01 01 02 32 31 02 32 32 45 65 65 65 62 32 32 32 32 31 01 02 32 32 31 01 
02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02
 31 01 01 01 02 32 31 02 32 32 3b 43 32 3b 52 31 32 3b 03 0a 02 4d 75 3b b0 f4 8
0 3b 91 f0 80 3b b2 ee 81 3b 93 e3 81 3b b4 fc 92 3b 95 ec 82 3b b6 d5 82 3b 44 
01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21
 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01 45 65 65 65 61 21 23 0
1 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 
21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01 3b 43 31 3b 52 32 41 3b
 03 0a 02 4d 75 3b b0 ee 80 3b 91 f6 80 3b b2 e1 81 3b 93 f2 81 3b a4 94 93 3b 9
5 e0 82 3b b6 d8 82 3b 44 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 
23 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21
 45 65 65 65 61 21 21 23 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 2
3 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 
3b 43 31 3b 52 31 41 3b 03 0a 02 4d 75 3b b0 f0 80 3b 91 f7 81 3b 92 f1 80 3b b3
 e0 81 3b a4 80 93 3b 95 e1 82 3b b6 d8 82 3b 44 01 02 32 32 31 01 02 32 32 32 3
2 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 
02 32 31 02 32 32 45 65 65 65 62 32 32 32 32 31 01 02 32 32 31 01 02 32 32 32 32
 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 0
2 32 31 02 32 32 3b 43 32 3b 52 31 33 3b 03 0a 02 4d 75 3b b0 f3 80 3b 91 f7 80 
3b b2 df 81 3b 93 ee 81 3b a4 90 93 3b 95 ea 82 3b b6 d4 82 3b 44 01 21 21 23 01
 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 0
3 03 01 23 01 23 01 23 03 03 01 23 01 23 01 45 65 65 65 61 21 23 01 21 21 23 01 
21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03
 03 01 23 01 23 01 23 03 03 01 23 01 23 01 3b 43 31 3b 52 32 42 3b 03 0a 02 4d 7
5 3b b0 fd 80 3b 91 f2 80 3b b2 e8 81 3b 93 e3 81 3b a4 88 93 3b 95 ea 82 3b b6 
d7 82 3b 44 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01
 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 45 65 65 65 6
1 21 21 23 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 
23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 3b 43 31 3b 52
 31 42 3b 03 0a 02 4d 75 3b b0 ee 80 3b 91 e8 81 3b 92 f1 80 3b b3 e5 81 3b a4 a
0 93 3b 95 da 82 3b b6 dd 82 3b 44 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 
02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32
 32 45 65 65 65 62 32 32 32 32 31 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 0
2 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 
32 3b 43 32 3b 52 31 32 3b 03 0a 02 4d 75 3b b0 ed 80 3b 81 81 81 3b b2 e6 81 3b
 93 e8 81 3b b4 fc 92 3b 95 ea 82 3b b6 cf 82 3b 44 01 21 21 23 01 21 23 01 23 0
1 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 
23 01 23 03 03 01 23 01 23 01 45 65 65 65 61 21 23 01 21 21 23 01 21 23 01 23 01
 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 2
3 01 23 03 03 01 23 01 23 01 3b 43 31 3b 52 32 41 3b 03 0a 02 4d 75 3b b0 e8 80 
3b 91 f5 80 3b b2 e4 81 3b 93 ef 81 3b a4 9c 93 3b 95 e3 82 3b b6 d8 82 3b 44 01
 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 2
1 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 45 65 65 65 61 21 21 23 01 
21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21
 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 3b 43 31 3b 52 31 43 3b 03 0
a 02 4d 75 3b b0 fb 80 3b 91 e2 81 3b 92 ee 80 3b b3 f1 81 3b a4 80 93 3b 95 e0 
82 3b b6 d9 82 3b 44 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32
 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 45 65 65 6
5 62 32 32 32 32 31 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 
32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 3b 43 32 3b
 52 31 33 3b 03 0a 02 4d 75 3b b0 e5 80 3b 91 ff 80 3b b2 e0 81 3b 93 f4 81 3b b
4 fc 92 3b 95 ec 82 3b b6 d3 82 3b 44 01 21 21 23 01 21 23 01 23 01 21 21 21 21 
23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03
 01 23 01 23 01 45 65 65 65 61 21 23 01 21 21 23 01 21 23 01 23 01 21 21 21 21 2
3 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 
01 23 01 23 01 3b 43 31 3b 52 32 41 3b 03 0a 02 4d 75 3b b0 f0 80 3b 91 f3 80 3b
 b2 e4 81 3b 93 f1 81 3b a4 8c 93 3b 95 eb 82 3b b6 d2 82 3b 44 01 21 21 23 01 2
1 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 
21 21 21 21 23 03 03 01 21 21 21 21 21 45 65 65 65 61 21 21 23 01 21 21 23 01 21
 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 2
1 21 21 21 23 03 03 01 21 21 21 21 21 3b 43 31 3b 52 31 42 3b 03 0a 02 4d 75 3b 
b0 ec 80 3b 91 f2 81 3b 92 fb 80 3b b3 e3 81 3b a4 90 93 3b 95 db 82 3b b6 db 82
 3b 44 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 31 02 32 3
2 32 32 31 01 02 32 31 02 31 01 02 32 32 31 02 31 02 32 45 65 65 65 62 32 32 32 
32 31 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 31 02 32 32
 32 32 31 01 02 32 31 02 31 01 02 32 32 31 02 31 02 32 3b 43 32 3b 52 31 31 3b 0
3 0a 02 4d 75 3b b0 e5 80 3b 91 fc 80 3b b2 e1 81 3b 93 f6 81 3b a4 94 93 3b 95 
ea 82 3b b6 cb 82 3b 44 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03
 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 0
1 45 65 65 65 61 21 23 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 
01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01
 3b 43 31 3b 52 32 41 3b 03 0a 

In ASCII, this looks like this:

;S%X;                                                
;S%X;                                                
;S%X; 

Rebooting the NAS (which includes FHEM) does not help. Only when I unplug and reinsert the Nano, FHEM immediately detects the status as "open". At the same time, I get this output

;S%X;
V 3.4.0-dev SIGNALduino cc1101 (chip CC110 unknown) - compiled at Dec  4 2019 25

So in ASCII, the fist line is similar to the output of the "hung" Nano. So it seems to me that resetting the Nano only gets it to a certain point where it hangs and only physically removing power can solve this issue.

elektron-bbs commented 4 years ago

Zuerst würde ich vorschlagen, eine aktuelle Firmware zu flashen. Wenn dann immer noch "chip CC110 unknown" in der Versionsangabe erscheint, deutet das entweder auf fehlerhafte Kommunikation auf dem SPI hin, oder der CC110x wird tatsächlich nicht unterstützt. Normalerweise sollte dort z.B. "chip CC1101" oder auch "chip CC1100" stehen.

fredlcore commented 4 years ago

Ich habe jetzt die aktuellste dev-Version aus dem Repository genommen (SIGNALDuino_nanocc11013.4.0-dev+20200216.hex), nun kommt folgende Meldung:

V 3.4.0-dev SIGNALduino cc1101 (chip CC110 unknown) - compiled at Feb 15 2020 23:23:10

Wie gesagt, jetzt, nach dem stromlos machen, läuft es wieder ohne Probleme und die Male davor auch 1-2 Wochen reibungslos...

elektron-bbs commented 4 years ago

Aber der CC110x wird immer noch nicht richtig erkannt. Wie hast du ihn angeschlossen bzw. was für ein Chip ist verbaut?

fredlcore commented 4 years ago

Ich habe direkt dieses Komplettpaket in der Bucht besorgt: https://www.ebay.de/itm/372667586853 Demnach sollte es ein Nano V3.0 mit FT232RL FTDI und C1101 433 MHz Funkmodul sein.

Ralf9 commented 4 years ago

Was ergibt ein "get sduino ccreg 31"?

Evtl hast Du eine fehlerhafte Hardware, z.B. ein nicht orginaler FTDI oder den Test Pin Fehler https://forum.fhem.de/index.php/topic,101785.msg952934.html#msg952934

fredlcore commented 4 years ago

unknown Register 31, please choose a valid cc1101 register

Ralf9 commented 4 years ago

bitte versuch mal ein "set sduino raw C31" Damit Du die Rückgabe im log siehst, musst Du vorher das verbose auf 4 setzen.

Du kannst auch in einem seriellen Terminal den Befehl C31 eingeben

fredlcore commented 4 years ago

Evtl hast Du eine fehlerhafte Hardware, z.B. ein nicht orginaler FTDI oder den Test Pin Fehler

Der Rechner (bzw. die NAS) erkennt den Nano ja durchgehend. Ich komme, wie oben zu sehen, ja auch nach dem "Absturz" weiterhin auf die serielle Konsole und bekomme dort auch (für mich nicht nachvollziehbare, aber zumindest repetitive) Daten ausgegeben. Ein problematischer FTDI wird es von daher wohl nicht sein, und der Test Pin Fehler scheint, wenn ich die verlinkten Artikel jetzt richtig überflogen habe, geht es da ja um USB-Fehlermeldungen in den Logs oder ein nicht erkanntes Gerät. Im Gegenteil löst ja ein erneutes Anstecken sofort das Problem.

fredlcore commented 4 years ago

bitte versuch mal ein "set sduino raw C31"

2020.06.12 01:03:02 3: SignalDuino: Attr, setting Verbose to: 4
2020.06.12 01:03:03 4: SignalDuino: Read, msg READredu: MU;P0=-222;P1=262;P2=-485;P3=500;P4=-4864;P5=745;P6=-714;D=012121230121230123012121212123012123030123012301230121212121230303012123012121212121230123014565656561212301212123012123012301212121212301212303012301230123012121212123030301212301212121212123012301;CP=1;R=43;
2020.06.12 01:03:03 4: SignalDuino: Parse_MU, Fingerprint for MU Protocol id 27 -> EFTH-800 matches, trying to demodulate
2020.06.12 01:03:03 4: SignalDuino: Parse_MU, Decoded matched MU Protocol id 27 dmsg W27#22504D507205 length 48 dispatch(1/4) RSSI = -52.5
2020.06.12 01:03:03 4: SignalDuino: SD_WS_Parse protocol 27, rawData 22504D507205
2020.06.12 01:03:03 4: SignalDuino: SD_WS_27 Parse msg 22504D507205, CRC 05
2020.06.12 01:03:03 4: SignalDuino: SD_WS_Parse decoded protocol-id 27 (EFTH-800), sensor-id 250
2020.06.12 01:03:17 3: EthRelais: Read callback: Error: 192.168.1.50: No route to host
2020.06.12 01:03:17 4: SignalDuino: Read, msg READredu: MU;P0=-12562;P1=504;P2=745;P3=-717;P4=249;P5=-468;P6=-239;P7=-4868;D=0102323232345454545451616454545161645454545451645451645164545161616454545451645454545164545451616451645451647232323234545454545161645454516164545454545164545164516454516161645454545164545454516454545161645164545164;CP=4;R=19;
2020.06.12 01:03:17 4: SignalDuino: Parse_MU, Fingerprint for MU Protocol id 27 -> EFTH-800 matches, trying to demodulate
2020.06.12 01:03:17 4: SignalDuino: Parse_MU, Decoded matched MU Protocol id 27 dmsg W27#06304A708469 length 48 dispatch(1/4) RSSI = -64.5
2020.06.12 01:03:17 4: SignalDuino: SD_WS_Parse protocol 27, rawData 06304A708469
2020.06.12 01:03:17 4: SignalDuino: SD_WS_27 Parse msg 06304A708469, CRC 69
2020.06.12 01:03:17 4: SignalDuino: SD_WS_Parse decoded protocol-id 27 (EFTH-800), sensor-id 630
2020.06.12 01:03:17 4: SignalDuino: Parse_MU, Decoded matched MU Protocol id 27 dmsg W27#06304A708469 length 48 dispatch(2/4) RSSI = -64.5
2020.06.12 01:03:17 4: SignalDuino: Dispatch, W27#06304A708469, Dropped due to short time or equal msg
2020.06.12 01:03:21 4: SignalDuino: Read, msg READredu: MU;P0=-255;P1=254;P2=-480;P3=481;P4=-4864;P5=731;P6=-742;D=0121212301212303030301212123012123030121212121230121212121230301212121230301212303012121214565656561212123012121230121230303030121212301212303012121212123012121212123030121212123030121230301212121;CP=1;R=30;
2020.06.12 01:03:21 4: SignalDuino: Parse_MU, Fingerprint for MU Protocol id 27 -> EFTH-800 matches, trying to demodulate
2020.06.12 01:03:21 4: SignalDuino: Parse_MU, Decoded matched MU Protocol id 27 dmsg W27#113C4C106198 length 48 dispatch(1/4) RSSI = -59
2020.06.12 01:03:21 4: SignalDuino: SD_WS_Parse protocol 27, rawData 113C4C106198
2020.06.12 01:03:21 4: SignalDuino: SD_WS_27 Parse msg 113C4C106198, CRC 98
2020.06.12 01:03:21 4: SignalDuino: SD_WS_Parse decoded protocol-id 27 (EFTH-800), sensor-id 13C
2020.06.12 01:03:24 4: SignalDuino: Set_raw, raw 31
2020.06.12 01:03:24 4: SignalDuino: HandleWriteQueue, called
2020.06.12 01:03:24 4: SignalDuino: SendFromQueue, called
2020.06.12 01:03:24 4: SignalDuino: Read, msg: Unsupported short command
2020.06.12 01:03:25 4: SignalDuino: HandleWriteQueue, called
2020.06.12 01:03:25 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.12 01:03:25 4: SignalDuino: KeepAlive, ok, retry = 0
Ralf9 commented 4 years ago

set_raw, raw 31 Das passt so nicht es muss heissen set raw C31

fredlcore commented 4 years ago

Sorry, hatte das "C" übersehen, hier der Output:

2020.06.12 08:45:25 4: SignalDuino: Set_raw, raw C31
2020.06.12 08:45:25 4: SignalDuino: HandleWriteQueue, called
2020.06.12 08:45:25 4: SignalDuino: SendFromQueue, called
2020.06.12 08:45:25 4: SignalDuino: Read, msg: C31 = 17
2020.06.12 08:45:25 4: SignalDuino: HandleWriteQueue, called
2020.06.12 08:45:25 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.12 08:45:26 4: SignalDuino: KeepAlive, ok, retry = 0
Ralf9 commented 4 years ago

Die cc1xxx Version 17 ist mir unbekannt, kann aber trotzem funktionieren. Ich habe ein Modul mit der Version 18, das ohne Einschränkung funktioniert obwohl es kein cc1101 ist.

Kannst Du mal versuchen den cc1xxx chip auf dem 433 Mhz Modul zu fotografieren oder abzulesen, falls er nicht vom Schrumpfschlauch verdeckt ist. Die Beschriftung auf dem 433 Mhz Modul ist auch interessant.

Ralf9 commented 4 years ago

Ich hab mal geschaut, der ccver nach müsste es der CC110L sein https://www.ti.com/lit/ds/symlink/cc110l.pdf?ts=1591945883795&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FCC110L

Ralf9 commented 4 years ago

Dies fehlt dem CC110L gegenüber dem cc1101: •Forward error correction (FEC) and interleaving •Wake-on-Radio (WOR) and RCOSC (no RX timeout possible) •Data Whitening •Preamble quality threshold (PQT) indication (used to gate sync word detection) •Link quality (LQI) indication (received signal strength (RSSI) is supported in Value Line parts) •Temp sensor •PA ramping and shaping •MSK and ASK modulation (OOK modulation is supported in Value Line parts) •No pin control for strobe commands (SPI strobe commands need to be used) •ATEST removed

elektron-bbs commented 4 years ago

Da müssen wir noch 0x17 für den CC110L einbauen. Im PDF SWRS109A war es noch 0x07. @Ralf9 Bei deiner Version 0x18 müsste es sich um einen CC113L handeln.

Ralf9 commented 4 years ago

Ja es ist der CC113L, es gibt eine Version 0x08 und 0x18

fredlcore commented 4 years ago

Kannst Du mal versuchen den cc1xxx chip auf dem 433 Mhz Modul zu fotografieren oder abzulesen, falls er nicht vom Schrumpfschlauch verdeckt ist. Die Beschriftung auf dem 433 Mhz Modul ist auch interessant.

Klar: IMG_4170 IMG_4171

Ich würde da draus lesen, dass es ein CC1101 ist - zumindest dem Aufdruck des Chips nach, weil auch bei der letzten Eins der "Einserhaken" oben nach links zeigt, wie bei den ersten beiden Einsen...

Ralf9 commented 4 years ago

ja der Beschriftung nach ist es ein CC1101. Auf die Versionnr kann man sich nicht immer verlassen. Ich habe laut Beschriftung und Versionsnr ein CC113L der laut Datenblatt keinen Sender hat, aber das Senden funktioniert trotzdem.

Du kannst mal ca 10 mal set raw C31 ausführen es muss immer das gleiche rauskommen.

fredlcore commented 4 years ago

Done:


2020.06.13 00:28:16 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:16 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:16 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:16 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:17 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:17 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:19 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:19 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:19 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:19 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:19 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:19 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:21 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:21 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:21 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:21 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:22 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:22 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:23 4: SignalDuino: Read, msg READredu: MU;P0=-229;P1=249;P2=-486;P3=499;P4=-4880;P5=737;P6=-731;D=0121212301212303030301212123012123030121212123030121212121230301212121230123012121230121214565656561212123012121230121230303030121212301212303012121212303012121212123030121212123012301212123012121;CP=1;R=30;
2020.06.13 00:28:23 4: SignalDuino: Parse_MU, Fingerprint for MU Protocol id 27 -> EFTH-800 matches, trying to demodulate
2020.06.13 00:28:23 4: SignalDuino: Parse_MU, Decoded matched MU Protocol id 27 dmsg W27#113C4C306144 length 48 dispatch(1/4) RSSI = -59
2020.06.13 00:28:23 4: SignalDuino: SD_WS_Parse protocol 27, rawData 113C4C306144
2020.06.13 00:28:23 4: SignalDuino: SD_WS_27 Parse msg 113C4C306144, CRC 44
2020.06.13 00:28:23 4: SignalDuino: SD_WS_Parse decoded protocol-id 27 (EFTH-800), sensor-id 13C
2020.06.13 00:28:25 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:25 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:25 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:25 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:25 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:25 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:27 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:27 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:27 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:27 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:27 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:27 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:29 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:29 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:29 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:29 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:30 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:30 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:32 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:32 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:32 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:32 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:32 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:32 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:34 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:34 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:34 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:34 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:34 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:34 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:34 4: SignalDuino: Read, msg READredu: MU;P0=507;P1=-230;P2=258;P3=-485;P4=-4884;P5=744;P6=-718;D=0123232301232301230123232323230123230101230101012301232323232301010123230101232323012301010124565656562323012323230123230123012323232323012323010123010101230123232323230101012323010123232301230101012;CP=2;R=40;
2020.06.13 00:28:34 4: SignalDuino: Parse_MU, Fingerprint for MU Protocol id 27 -> EFTH-800 matches, trying to demodulate
2020.06.13 00:28:34 4: SignalDuino: Parse_MU, Decoded matched MU Protocol id 27 dmsg W27#22504DD07317 length 48 dispatch(1/4) RSSI = -54
2020.06.13 00:28:34 4: SignalDuino: SD_WS_Parse protocol 27, rawData 22504DD07317
2020.06.13 00:28:34 4: SignalDuino: SD_WS_27 Parse msg 22504DD07317, CRC 17
2020.06.13 00:28:34 4: SignalDuino: SD_WS_Parse decoded protocol-id 27 (EFTH-800), sensor-id 250
2020.06.13 00:28:36 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:36 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:36 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:36 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:36 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:36 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:37 4: SignalDuino: Set_raw, raw C31
2020.06.13 00:28:37 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:37 4: SignalDuino: SendFromQueue, called
2020.06.13 00:28:37 4: SignalDuino: Read, msg: C31 = 17
2020.06.13 00:28:38 4: SignalDuino: HandleWriteQueue, called
2020.06.13 00:28:38 4: SignalDuino: HandleWriteQueue, nothing to send, stopping timer
2020.06.13 00:28:41 4: SignalDuino: KeepAlive, ok, retry = 0
´``
fredlcore commented 4 years ago

Aber ist denn die Tatsache, dass sich der Chip anders als erwartet meldet eine Erklärung für die Abstürze? Ich meine, entweder kann er das, was man von ihm verlangt, oder nicht, und das tut er ja ein paar Wochen auch...

sidey79 commented 4 years ago

Das mit dem unknown oder nicht, ist nur eine Anzeige. Es hat mit der eigentlichen Funktion nichts zu tun.

Es ging ja eher darum, herauszufinden ob Du einen anderen chip hast.

fredlcore commented 4 years ago

Ok. Kann es denn ansonsten damit zu tun haben, dass die von mir verwendeten EFTH-800 Sensoren relativ neu implementiert wurden? Ich weiß nicht, auf welcher Ebene die Verarbeitung stattfindet, ob nun in der Nano-Firmware oder im FHEM-Modul, aber könnten malformed/unbekannte Pakete o.ä. ein Problem sein, das Abstürze a la buffer overflow auslöst? Ich kenne so ein ähnliches Verhalten aus meinem Projekt, wo das Ethernet Shield nach ein paar Wochen abschmiert, aber Pings noch beantwortet werden. Der Arduino selber auf der seriellen Konsole aber weiterhin regulär ansprechbar ist. Der Grund da war dann, dass in zu kurzer Zeit zu viele Anfragen kamen und das Shield keine freien Sockets mehr hatte und dann auch nur noch das Stromlosmachen geholfen hat. Lässt sich sicher nicht 1:1 auf die Situation hier übertragen, aber irgendwie müsste sich das Problem ja einkreisen lassen...

Ralf9 commented 4 years ago

Dies sind komprimierte Mu Nachrichten, immer eine Nachricht mit 2 Wiederholungen. Es sieht so aus, als würde dies so empfangen. mit set sduino raw CDR kannst Du die Komprimierung ausschalten. Wenn der Fehler wieder auftritt, bitte versuche ob Du mit set sduino raw XQ den Empfang abschalten kannst

02 M u ; b0 f0 80 ; 91 f7 81 ; 92 f1 80 ; b3 e0 81 ; a4 80 93 ; 95 e1 82 ; b6 d8 82 ; D 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 45 65 65 65 62 32 32 32 32 31 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 ; 43 32 ; 52 31 33 ; 03 0a 
02 M u ; b0 f3 80 ; 91 f7 80 ; b2 df 81 ; 93 ee 81 ; a4 90 93 ; 95 ea 82 ; b6 d4 82 ; D 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01 45 65 65 65 61 21 23 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01 ; 43 31 ; 52 32 42 ; 03 0a 
02 M u ; b0 fd 80 ; 91 f2 80 ; b2 e8 81 ; 93 e3 81 ; a4 88 93 ; 95 ea 82 ; b6 d7 82 ; D 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 45 65 65 65 61 21 21 23 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 ; 43 31 ; 52 31 42 ; 03 0a 

02 M u ; b0 ee 80 ; 91 e8 81 ; 92 f1 80 ; b3 e5 81 ; a4 a0 93 ; 95 da 82 ; b6 dd 82 ; D 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 45 65 65 65 62 32 32 32 32 31 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 ; 43 32 ; 52 31 32 ; 03 0a 
02 M u ; b0 ed 80 ; 81 81 81 ; b2 e6 81 ; 93 e8 81 ; b4 fc 92 ; 95 ea 82 ; b6 cf 82 ; D 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01 45 65 65 65 61 21 23 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01 ; 43 31 ; 52 32 41 ; 03 0a 
02 M u ; b0 e8 80 ; 91 f5 80 ; b2 e4 81 ; 93 ef 81 ; a4 9c 93 ; 95 e3 82 ; b6 d8 82 ; D 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 45 65 65 65 61 21 21 23 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 ; 43 31 ; 52 31 43 ; 03 0a 

02 M u ; b0 fb 80 ; 91 e2 81 ; 92 ee 80 ; b3 f1 81 ; a4 80 93 ; 95 e0 82 ; b6 d9 82 ; D 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 45 65 65 65 62 32 32 32 32 31 01 02 32 32 31 01 02 32 32 32 32 31 02 32 31 02 31 01 02 32 32 32 32 32 32 32 32 31 01 02 32 31 02 31 01 01 01 02 32 31 02 32 32 ; 43 32 ;52 31 33 ; 30
02 M u ; b0 e5 80 ; 91 ff 80 ; b2 e0 81 ; 93 f4 81 ; b4 fc 92 ; 95 ec 82 ; b6 d3 82 ; D 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 01 23 01 23 01 45 65 65 65 61 21 23 01 21 21 23 01 21 23 01 23 01 21 21 21 21 23 01 21 23 03 01 23 01 21 21 21 21 21 21 21 21 23 03 03 01 23 01 23 01 23 03 03 0 23 01 23 01 ; 43 31 ; 52 32 41 ; 03 0a 
02 M u ; b0 f0 80 ; 91 f3 80 ; b2 e4 81 ; 93 f1 81 ; a4 8c 93 ; 95 eb 82 ; b6 d2 82 ; D 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 45 65 65 65 61 21 21 23 01 21 21 23 01 21 23 03 03 03 01 21 21 23 01 21 23 01 23 03 03 03 01 23 01 21 21 21 21 23 03 01 21 21 21 21 23 03 03 01 21 21 21 21 21 ; 43 31 ; 52 31 42 ; 03 0a 
fredlcore commented 4 years ago

Nur zum Verständnis: Die Komprimierung soll ich jetzt schon abschalten und falls der Fehler wieder auftritt nach dem Ab- und wieder Anstecken (vorher kann ich dann ja keine Befehle mehr absetzen) den Empfang abschalten? Das würde dann ja bedeuten, dass ich dann den Adapter 3-4 Wochen ohne Datenempfang laufen lassen muss, um zu wissen, dass der Fehler daran liegt. Und wenn es daran nicht liegen sollte, dann ebenso wieder bei der nächsten Hypothese - da wären wir ja Monate mit der Fehlersuche beschäftigt...

Ralf9 commented 4 years ago

Die Bin Daten sind nach Ascii gewandelt komprmierte Mu Nachrichten, der Empfang funktioniert demnach ganz normal weiter und es können "nur" keine Befehle mehr an den nano gesendet werden. Wenn der reset über USB nicht mehr funktioniert, kann sich auch der FTDI teilweise aufgehangen haben. Hast Du schon getestet ob der USBreset im normalbetrieb funktioniert? Dies erkennst Du u.a. an der zurückgesetzten uptime. Bei öffnen des serial Monitors von der Arduino IDE wird auch ein USBreset ausgeführt.

Als das Senden der Befehle nicht mehr funktioniert hat, hast Du da darauf geachtet ob noch bei jedem Befehl die LED geblinkt hat?

fredlcore commented 4 years ago

Werde ich prüfen, wie frage ich die Uptime des Nano ab?

Ralf9 commented 4 years ago

wie frage ich die Uptime des Nano ab

Mit dem raw Befehl t

Es kann auch sein, daß das senden eine Befehls schon früher nicht mehr funktioniert. Wenn Du mit dem sduino keine Steckdosen schaltest, kann es eine Weile dauern bis es auffällt

Wenn 1 Minute nichts empfangen wird sendet die Keepalive Routine ein Ping, wird mehrere Minuten nichts empfangen, wird zuerst ein Reset versucht und ein "set close" ausgeführt

fredlcore commented 4 years ago

Hm, mit

get SignalDuino raw t

bekomme ich ein leeres Feld in FHEM zurück...

Ralf9 commented 4 years ago

Im fhem Modul gehts mit get uptime in einem seriellen Terminal wie z.B. dem Seriell Monitor der Arduino IDE ist der Befehl t

fredlcore commented 4 years ago

Danke, seltsamerweise bringt mir get SignalDuino uptime nichts zurück, aber wenn ich in minicom ein Hangup auslöse, und dann "t" eingebe, sehe ich, dass die Uptime zurückgesetzt wird. Soll ich dann zusätzlich noch den Reset-Button ausprobieren oder ist damit die Funktionsweise gesichert?

Ralf9 commented 4 years ago

es gibt im get Menü ein Auswahlfeld "uptime"

Wenn sich der nano wieder aufgehangen hat, kannst Du auch mal den Reset-Button testen

fredlcore commented 4 years ago

Ja, da kommt auch nichts, das ist ja im Endeffekt genau das gleiche, ob ich nun das Auswahlmenü bei "get" nehme oder oben in der Kommandozeile get SignalDuino uptime eingebe.

Ralf9 commented 4 years ago

bitte teste auch mal set sduino raw t das Ergebins müsste dann im log stehen

fredlcore commented 4 years ago

Sorry für die längere Pause, ich wollte jetzt mal abwarten, wann er wieder crasht, das war jetzt am 4. Juli, so dass er dieses Mal fast vier Wochen (seit 13. Juni) durchlief. Ein Wiederherstellen der Verbindung über set reset hat ebenso wenig gebracht, wie das reine Öffnen einer Terminalverbindung:

2020-07-05_12:13:38 no SIGNALduino found
2020-07-05_12:13:38 closed
2020-07-11_08:13:24 reset
2020-07-11_08:13:36 no SIGNALduino found
2020-07-11_08:13:36 closed
2020-07-11_08:15:53 reset
2020-07-11_08:16:05 no SIGNALduino found
2020-07-11_08:16:05 closed
2020-07-11_08:16:37 reset
2020-07-11_08:16:39 opened

Allerdings hat es diesmal funktioniert, ihn wieder anzusprechen, wenn ich im Terminal explizit einen Hangup ausgelöst habe (das sind die letzten beiden Zeilen oben).

Die Frage ist für mich jetzt, inwiefern sich ein Hangup über minicom von einem set reset unterscheidet und ob man das irgendwie abbilden könnte. Dann könnte ich in FHEM den state überwachen, und wenn der auf "closed" geht, entsprechend einen Reset auslösen. Gibt es dazu eine Möglichkeit?

sidey79 commented 4 years ago

Danke für die Information. Offensichtlich gibt es hier Unterschiede die zu untersuchen wären.

Wie wir die Ursache für den Crash finden würde mich aber dennoch sehr interessieren.

fredlcore commented 4 years ago

Im normalen Log ist leider nichts auffälliges zu finden. Wenn ich etwas tun kann, um etwas zur Klärung beizutragen, dann gerne. Gibt es denn sonst eine Möglichkeit herauszufinden, worin der Unterschied zwischen Minicom hangup und "set reset" besteht, um das nachbilden zu können?

sidey79 commented 4 years ago

Auf die Schnelle habe ich keine Spezifikation von hangup gefunden.

Beim Radino haben wir einen Fall, dass wir eine spezielle Reset Sequenz einhalten müssen um ihn in den Flash Modus zu versetzen. Das hatten wir in Perl leider auch nicht nachstellen können und über ein shellcommando realisiert. Das wäre hier vielleicht auch eine Option, dass wir über die Shell einen Reset versuchen, wenn alles fehl schlägt.

Was den eigentlich Fehler angeht, könnte ein langzeitlog mit Verbose 5 unter Umständen helfen . Eventuell lassen sich aus der letzten Seriellen Übertragung noch Rückschlüsse ziehen. Ich hatte auch schon in der Vergangenheit spezielle Debug Firmwares gebaut. Am Ende wird das alles dauern, weil ich ja aktuell noch nicht einmal einen Hauch einer Ahnung habe von welchem Programmteil der Fehler stammt.

fredlcore commented 4 years ago

Ok, dann versuche ich es mal mit verbose 5 und hoffe, meine Logfiles quellen nicht über ;)... Melde mich dann nach dem nächsten Crash wieder.

HomeAutoUser commented 4 years ago

@sidey79 Ich komme hier an den Punkt erneut, ob man eine Funktion umsetzt, das sämtliche Ausgaben vom uC bei verbose 5 in ein anderes log gehen würden. Das würde dem User einiges erleichtern und auch hinterher. Wie denkst du darüber?

sidey79 commented 4 years ago

Das ist bereits über filelog möglich

HomeAutoUser commented 4 years ago

Bitte nicht falsch verstehen. Die uC Ausgaben umleiten in ein Filelog welches nicht in das Standard FHEM Logfile schreibt. Sozusagen parallel 2 Logs laufen lassen.

Wenn das schon geht, wie das?

sidey79 commented 4 years ago

Das Attribut nennt sich:

eventlogging With this attribute you can control if every logmessage is also provided as event. This allows to generate event for every log messages. Set this to 0 and logmessages are only saved to the global fhem logfile if the loglevel is higher or equal to the verbose attribute. Set this to 1 and every logmessages is also dispatched as event. This allows you to log the events in a seperate logfile.

Es wird halt Zusätzlich noch weiter geloggt.

fredlcore commented 4 years ago

So, das hat diesmal leider (bzw. zum Glück für das Logfile) nicht so lange gehalten, hier das FHEM-Logfile gefiltert nach den SignalDuino-Einträgen im Anhang. Am 11.7. um 18:21 war der letzte Eintrag und kurz vorher der Crash.

Ein "set reset" hat wieder nicht geholfen (siehe letzte Einträge im Log vom 12.7. spät abends), das ging erst nach einem Hangup in Minicom wieder durch und seitdem ist der Nano (erst mal) wieder erreichbar. Wenn es noch was gibt, was ich beitragen kann, bitte melden.

SignalDuino.txt

sidey79 commented 4 years ago

Ich werde mir diesen Teil mal ansehen.

2020.07.11 18:17:32 5: SignalDuino: Read, RAW rmsg: Mu; ˜‚;‘؆;’·ƒ;£¡…;¤œ—;d111211B122222 ;C2;RE0; 2020.07.11 18:17:32 4: SignalDuino: Read, msg READredu: MU;P0=-536;P1=1752;P2=951;P3=-1313;P4=-5916;D=0101023101010231010231023231023142310232323232320;CP=2;R=224; `

fredlcore commented 4 years ago

Danke!

sidey79 commented 4 years ago

Leider habe ich da erst einmal keinen Fehler feststellen können. :(

An dem Reset Thema habe ich leider auch nicht viel gefunden wie die sequenz aussieht

fredlcore commented 4 years ago

Hier ist zumindest der Hangup Code aus der functions.c aus dem Minicom Sourcecode:

/* Hangup. */
void m_hangup(void)
{
  int sec = 1;

  if (isdigit(P_MDROPDTR[0]))
    sscanf(P_MDROPDTR, "%2d", &sec);

  if (P_MDROPDTR[0] == 'Y' || (isdigit(P_MDROPDTR[0]) && sec > 0)) {
    m_dtrtoggle(portfd, sec);  /* jl 22.06.97 */
  } else {
    m_puts(P_MHANGUP);
    sleep(1);
  }
  /* If we don't have DCD support fake DCD dropped */
  bogus_dcd = 0;
}
fredlcore commented 4 years ago

Hier noch der detaillierte Code, ggf. reicht das temporäre setzen der Übertragungsgeschwindigkeit auf 0 und dann wieder auf 57600 aus...

   79 /*
   80  * Drop DTR line and raise it again.
   81  */
   82 void m_dtrtoggle(int fd, int sec)
   83 {
   84 #ifdef USE_SOCKET
   85   if (portfd_is_socket)
   86     return;
   87 #endif
   88   {
   89 #ifdef TIOCSDTR
   90     /* Use the ioctls meant for this type of thing. */
   91     ioctl(fd, TIOCCDTR, 0);
   92     if (sec>0) {
   93       sleep(sec);
   94       ioctl(fd, TIOCSDTR, 0);
   95     }
   96 
   97 #else /* TIOCSDTR */
   98 #  if defined (POSIX_TERMIOS)
   99 
  100     /* Posix - set baudrate to 0 and back */
  101     struct termios tty, old;
  102 
  103     tcgetattr(fd, &tty);
  104     tcgetattr(fd, &old);
  105     cfsetospeed(&tty, B0);
  106     cfsetispeed(&tty, B0);
  107     tcsetattr(fd, TCSANOW, &tty);
  108     if (sec > 0) {
  109       sleep(sec);
  110       tcsetattr(fd, TCSANOW, &old);
  111     }
  112 
  113 #  else /* POSIX */
  114 #    ifdef _V7
  115 
  116     /* Just drop speed to 0 and back to normal again */
  117     struct sgttyb sg, ng;
  118 
  119     ioctl(fd, TIOCGETP, &sg);
  120     ioctl(fd, TIOCGETP, &ng);
  121 
  122     ng.sg_ispeed = ng.sg_ospeed = 0;
  123     ioctl(fd, TIOCSETP, &ng);
  124     if (sec > 0) {
  125       sleep(sec);
  126       ioctl(fd, TIOCSETP, &sg);
  127     }
  128 
  129 #    endif /* _V7 */
  130 #  endif /* POSIX */
  131 #endif /* TIOCSDTR */
  132   }
  133 }