Autor Thema: Heizungssteuerung mit VCLIENT (Version 0.2.11f)  (Gelesen 9676 mal)

Offline mumpitzstuff

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1584
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #90 am: 24 Mai 2019, 20:25:02 »
https://www.perlmonks.org/bare/?node_id=451914

https://docstore.mik.ua/orelly/perl4/cook/ch07_21.htm

Es gibt auch noch andere Wege das zu umgehen, falls das wirklich die Ursache für dein Problem ist. Und blockieren tut es nur, wenn absolut gar keine Daten gelesen werden können. Sobald irgendein Zeichen gelesen werden kann, kommt die Funktion umgehend zurück.
« Letzte Änderung: 24 Mai 2019, 20:27:47 von mumpitzstuff »

Offline andies

  • Hero Member
  • *****
  • Beiträge: 2348
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #91 am: 24 Mai 2019, 22:12:28 »
ich habe die Leseroutine jetzt so umgeschrieben, mal sehen, was passiert:
sub VCLIENT_Read($){
    my ($hash) = @_;
    my $buf = '';
    my $select = IO::Select->new($hash->{CD}); # see forum, blocking call with empty sysread

    if ($select->can_read(0.1)) #timeout 0.1 Sekunden
    {
sysread($hash->{CD}, $buf, 1024);
    }

    if (!$buf){
VCLIENT_Close_Connection($hash);
return;
    }
    #remove prompt and trailing empty lines
    $buf =~ s/\r//g;
    $buf =~ s/vctrld>//g;
    $buf =~ s/\n$//;

    if ($buf ne "") {
VCLIENT_ParseBuf_And_WriteReading($hash, $buf);
    }
}
« Letzte Änderung: 24 Mai 2019, 22:33:53 von andies »
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann
Hilfreich Hilfreich x 1 Liste anzeigen

Offline andies

  • Hero Member
  • *****
  • Beiträge: 2348
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #92 am: 25 Mai 2019, 08:17:52 »
Also, das hat jetzt geklappt. Ich hatte nachts wieder eine Fehlermeldung der Form
2019.05.25 00:00:33 1: [YAAHM_updater] <was auch immer>
2019.05.25 02:11:19 1: Viessmann timeout: Was not able to receive a signal from 192.168.2.105:3002. Deleting command queue.
2019.05.25 04:58:03 1: IPCAM <was auch immer>
und diesmal ging die CPU nicht auf 100% hoch. Vielen Dank, mumpitzstuff, Problem eigentlich gelöst. Aber ich kapiere dennoch etwas nicht. Der Code sieht bei mir nämlich so aus:
    if ($select->can_read(0.1)) #timeout 0.1 Sekunden, FHEM blockiert sonst!
    {
sysread($hash->{CD}, $buf, 1024);
    }

    if (!$buf){
Log3 $name, 1,  "$name: connection closed unexpectedly"; #kann hier eigentlich nicht passieren
VCLIENT_Close_Connection($hash);
return;
    }
und wenn $buf leer gewesen wäre (weil nicht von sysread gefüllt und vorher gerade erst definiert), hätte ich doch einen weiteren Eintrag im Logfile haben müssen?!

Mir ist noch etwas aufgefallen. Ich lese mir das ja alles an und habe viel Copy-and-paste gemacht. Bis vor wenige Tagen stand unter dem Code noch folgende Zeile:
sysread($hash->{CD}, $buf, 1024);
...
unless (defined $buf){
Log3 $name, 5,  "$name: no data received"; #continue reading
return;
}
Das habe ich auch gelöscht. Könnte das für die Blockade verantwortlich gewesen sein? Allerdings habe ich diese Zeile nie in meinem Logfile gefunden. (Irgendwie ist das rätselhaft.)
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #93 am: 25 Mai 2019, 08:34:37 »
my $buf = '';
Dein $buf ist ja nicht leer.  Weil '' nunmal auch ein Zeichen ist.
Teste mal mit einem my $buf;.
Was ich aber nicht verstehe ist das ja eigentlich die Read Funktion nur aufgerufen werden sollte wenn Daten am Socket zum lesen anliegen.

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline andies

  • Hero Member
  • *****
  • Beiträge: 2348
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #94 am: 25 Mai 2019, 14:20:43 »
Zu früh gefreut:
load average: 0,87, 0,94, 0,91Also das Problem ist noch da. Allerdings sehe ich diesmal weder ein timeout noch ein telnet-Zugriffsproblem. Kann es sein, dass das am Ende was völlig anderes ist?

Es gab doch mal Meldungen darüber, dass FHEM blockiert und keiner wusste, woran es lag.
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #95 am: 25 Mai 2019, 14:49:33 »
Ich denke eher Du meinst den stetigen Speicheranstieg. Oder?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline andies

  • Hero Member
  • *****
  • Beiträge: 2348
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #96 am: 25 Mai 2019, 15:32:37 »
Ja, genau den. Stimmt, das ist nicht 100% CPU...
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline andies

  • Hero Member
  • *****
  • Beiträge: 2348
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #97 am: 26 Mai 2019, 11:57:59 »
nachdem ich nachts eine Ausfall und dennoch keine 100%-cpu hatte, betrachte ich den fall als gelöst und lade die neue Version dann mal hoch.


Gesendet von iPad mit Tapatalk Pro
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #98 am: 26 Mai 2019, 12:05:06 »
Wie sieht Deine Lösung nun aus? Das was Du oben geschrieben hast oder mit Zusatz?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline andies

  • Hero Member
  • *****
  • Beiträge: 2348
Antw:Heizungssteuerung mit VCLIENT (Version 0.2.11f)
« Antwort #99 am: 26 Mai 2019, 12:39:11 »
Genau wie oben geschrieben. Ich hatte noch X-Zeilem mit debug eingefügt und mir alles mögliche ausgeben lassen, dort aber nichts festgestellt. Senden funktioniert sofort; ich konnte nicht wirklich sehen, wieso sysread einen Fehler erzeugt. Entweder war vorher im Code was falsch oder eine Geisterhand ist im Spiel, jedenfalls geht es jetzt.
FHEM 5.9 auf RaspPi3 (Raspbian:  4.14.34-v7+ ); Perl: v5.20.2
SIGNALduino (433 MHz) und HM-UART (868 MHz)
wenige Brennenstuhl-IT, Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann
Informativ Informativ x 1 Liste anzeigen

 

decade-submarginal