[MAX] Thermostat wird nicht richtig erkannt

Begonnen von Joachim, 22 November 2012, 22:10:07

Vorheriges Thema - Nächstes Thema

Joachim

                                                   

Moin Matthias,

Ich haenge mich hier mal an das Problem von Chris an
--> Habe 2x das gleiche Heizkörper Thermostat. Aber das eine Zeigt viel
mehr Daten an. Maximal Temperatur usw..
     das andere hingegen Zeigt nur 50% der Möglichkeiten an ..
     wie kann das ? Gerät neu Hinzufügen lassen?

Ich habe das gleiche Problem. Im Anhang findest Du Bilder und 2 Logs.
Dafuer habe ich FHEM mit update force auf den neuesten Stand gebracht, in
Deinen Logausgaben herumgefuscht, um das ganze uebersichtlicher zu
gestalten, fhem.log und fhem.save geleert, Maxinhalte bis auf define
Max_Cube MAXLAN 172.16.19.100 30 aus der fhem.cfg geloescht. und das ganze
auf einem Linux-Rechner mit Debian Lenny gestartet.
Vielleicht hilft es bei der Fehlersuche.

gruss Joachim

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

                                                   

Moin Matthias,

werde ich gleich mal ausprobieren, und dann Bericht erstatten.

Ich habe, um mir und Dir die Fehlersuche zu erleichtern, alle Log 5 und Log
$ll5 auf Log 3 gesetzt, damit nicht die ganzen unnoetigen Informationen der
anderen Module auftauchen, den Code selbst habe ich natuerlich nicht
geaendert.
Mein Vorschlag waere, die Variante von pah aus OWX.pm zu verwenden:
Zeile 91/92 #-- Debugging 0,1,2,3
                   my $owx_debug=0;
Zeile 1324/1325  if( $owx_debug > 2){
                            my $res = "OWX: Receiving ";
dann koennte man die entsprechenden RAW-Readings und weitere Debugging
informationen speziell fuer solche Faelle zur verfuegung stellen.

gruss Joachim

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

                                                   

So Matthias,

habe mal versucht zu testen.
Folgende Fehlermeldungen:
in der Weboberflaeche
 Unknown argument reconnect, choose one of pairmode raw clock factoryReset

auf der Konsole
KanotixBox:/home/joachim# /usr/bin/fhem.pl /etc/fhem.cfg
KanotixBox:/home/joachim# Illegal hexadecimal digit 'V' ignored at
/usr/share/fhem/FHEM/00_MAXLAN.pm line 561.
Use of uninitialized value $freememoryslot in concatenation (.) or string
at /usr/share/fhem/FHEM/00_MAXLAN.pm line 564.

Log in der Anlage

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

                                                   

das Log

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

UliM

                                                 

Hi,
wenn ein Programm heute ins SVN eingecheckt wird, musst Du mit update bis
morgen warten.
Morgens um 7 läuft ein Aktualisierungslauf, der alle Neuerungen aus SVN für
update bereitstellt.
Schnellere Alternative: Direkt aus SVN herunterladen.
Gruß, Uli

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Joachim

                                                   

Und wieder was gelernt.

Danke

Am Freitag, 23. November 2012 22:32:54 UTC+1 schrieb UliM:
>
> Hi,
> wenn ein Programm heute ins SVN eingecheckt wird, musst Du mit update bis
> morgen warten.
> Morgens um 7 läuft ein Aktualisierungslauf, der alle Neuerungen aus SVN
> für update bereitstellt.
> Schnellere Alternative: Direkt aus SVN herunterladen.
> Gruß, Uli
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

                                                   

Hallo Matthias,
Jetzt scheint es zu funktionieren.
Morgen frueh genaueres

gruss Joachim

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

ChrisW

                                                     

Hallo,
heute Update eingespielt aber die Werte bei dem einen fehlen immer noch ;/
Muss ich das gerät nochmal löschen ?

Am Donnerstag, 22. November 2012 22:10:07 UTC+1 schrieb joachim herold:
>
> Moin Matthias,
>
> Ich haenge mich hier mal an das Problem von Chris an
> --> Habe 2x das gleiche Heizkörper Thermostat. Aber das eine Zeigt viel
> mehr Daten an. Maximal Temperatur usw..
>      das andere hingegen Zeigt nur 50% der Möglichkeiten an ..
>      wie kann das ? Gerät neu Hinzufügen lassen?
>
> Ich habe das gleiche Problem. Im Anhang findest Du Bilder und 2 Logs.
> Dafuer habe ich FHEM mit update force auf den neuesten Stand gebracht, in
> Deinen Logausgaben herumgefuscht, um das ganze uebersichtlicher zu
> gestalten, fhem.log und fhem.save geleert, Maxinhalte bis auf define
> Max_Cube MAXLAN 172.16.19.100 30 aus der fhem.cfg geloescht. und das
> ganze auf einem Linux-Rechner mit Debian Lenny gestartet.
> Vielleicht hilft es bei der Fehlersuche.
>
> gruss Joachim
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Raspberry PI3 mit allem möglichen.

Matthias Gehre

                                                       

Das Update ist noch kein automatischer Workaround. Bitte probier aus, ob
die Werte auftauchen, nachdem du im MAXLAN Modul reconnect ausführst. Falls
es beim ersten Mal nicht klappt, bitte ein paar Mal ausführen.


Am 24. November 2012 11:46 schrieb Chris :

> Hallo,
> heute Update eingespielt aber die Werte bei dem einen fehlen immer noch ;/
> Muss ich das gerät nochmal löschen ?
>
> Am Donnerstag, 22. November 2012 22:10:07 UTC+1 schrieb joachim herold:
>
>> Moin Matthias,
>>
>> Ich haenge mich hier mal an das Problem von Chris an
>> --> Habe 2x das gleiche Heizkörper Thermostat. Aber das eine Zeigt viel
>> mehr Daten an. Maximal Temperatur usw..
>>      das andere hingegen Zeigt nur 50% der Möglichkeiten an ..
>>      wie kann das ? Gerät neu Hinzufügen lassen?
>>
>> Ich habe das gleiche Problem. Im Anhang findest Du Bilder und 2 Logs.
>> Dafuer habe ich FHEM mit update force auf den neuesten Stand gebracht, in
>> Deinen Logausgaben herumgefuscht, um das ganze uebersichtlicher zu
>> gestalten, fhem.log und fhem.save geleert, Maxinhalte bis auf define
>> Max_Cube MAXLAN 172.16.19.100 30 aus der fhem.cfg geloescht. und das
>> ganze auf einem Linux-Rechner mit Debian Lenny gestartet.
>> Vielleicht hilft es bei der Fehlersuche.
>>
>> gruss Joachim
>>
>  --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Joachim

                                                   

Moin Matthias,

Ich habe zwar keine Ahnung von Perl, aber ich glaube, ich habe die Loesung
gefunden.
Ich wuerde Dir ja gerne ein Diff anhaengen, weiss aber nicht wie das geht,
von daher jetzt einfach den geaenderten Rart fuer 00_MAXLAN.pm

sub MAXLAN_Read austauschen gegen

#####################################
# called from the global loop, when the select for hash->{FD} reports data
sub
MAXLAN_Read($)
{
  my ($hash) = @_;

  my $data = $hash->{PARTIAL};

  #Read until we have a complete line
  until($data =~ m/\n/) {
    my $buf = DevIo_SimpleRead($hash);
    if(!defined($buf)){
      Log 1, "MAXLAN_ReadAnswer: error during read";
      return undef; #error occured
    }
    $data .= $buf;
  }

  my $rmsg;
  ($rmsg,$data) = split("\n", $data, 2);
  $rmsg =~ s/\r//; #remove \r
  #save partial data for next read
  $hash->{PARTIAL} = $data;
  MAXLAN_Parse($hash, $rmsg) if($rmsg);
 
}
#######################################################

Bei mir rennt es damit.

oder, wie ich jetzt gerade sehe, einfach nur

#save partial data for next read
  $hash->{PARTIAL} = $data;

in Deiner Version nachtragen.

gruss Joachim


--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

                                                   

Nachtrag:
Die Zeile $hash->{PARTIAL} = $data; muss nicht nachgetragen werden, sondern
verschoben werden.
So sollte es aussehen:
 ($rmsg,$data) = split("\n", $data, 2);
    $hash->{PARTIAL} = $data; # hier entfernen
    $rmsg =~ s/\r//;
    $hash->{PARTIAL} = $data; # hier einfuegen
    MAXLAN_Parse($hash, $rmsg) if($rmsg);


Am Samstag, 24. November 2012 19:46:22 UTC+1 schrieb joachim herold:
>
> Moin Matthias,
>
> Ich habe zwar keine Ahnung von Perl, aber ich glaube, ich habe die Loesung
> gefunden.
> Ich wuerde Dir ja gerne ein Diff anhaengen, weiss aber nicht wie das geht,
> von daher jetzt einfach den geaenderten Rart fuer 00_MAXLAN.pm
>
> sub MAXLAN_Read austauschen gegen
>
> #####################################
> # called from the global loop, when the select for hash->{FD} reports data
> sub
> MAXLAN_Read($)
> {
>   my ($hash) = @_;
>
>   my $data = $hash->{PARTIAL};
>
>   #Read until we have a complete line
>   until($data =~ m/\n/) {
>     my $buf = DevIo_SimpleRead($hash);
>     if(!defined($buf)){
>       Log 1, "MAXLAN_ReadAnswer: error during read";
>       return undef; #error occured
>     }
>     $data .= $buf;
>   }
>
>   my $rmsg;
>   ($rmsg,$data) = split("\n", $data, 2);
>   $rmsg =~ s/\r//; #remove \r
>   #save partial data for next read
>   $hash->{PARTIAL} = $data;
>   MAXLAN_Parse($hash, $rmsg) if($rmsg);
>  
> }
> #######################################################
>
> Bei mir rennt es damit.
>
> oder, wie ich jetzt gerade sehe, einfach nur
>
> #save partial data for next read
>   $hash->{PARTIAL} = $data;
>
> in Deiner Version nachtragen.
>
> gruss Joachim
>
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Matthias Gehre

                                                       

Hallo,

ich sehe nicht warum das etwas am Verhalten verändern sollte.

Außerdem habe ich mit Wireshark beobachtet, dass der Cube nicht alle Daten
sendet,
m.E. ist es also nicht möglich durch Veränderungen am _Read die Daten her
zuzaubern.

Allerdings tritt das Verhalten beim Cube nur sporadisch auf (race
condition?) und mit Glück (oder nach ein paar Reconnects)
gehts wieder.

Mein Perl ist allerdings nicht besonders gut, vielleicht kannst du mir
deine Änderung erklären.

Viele Grüße,
Matthias


2012/11/24 joachim herold

> Nachtrag:
> Die Zeile $hash->{PARTIAL} = $data; muss nicht nachgetragen werden,
> sondern verschoben werden.
> So sollte es aussehen:
>
>  ($rmsg,$data) = split("\n", $data, 2);
>     $hash->{PARTIAL} = $data; # hier entfernen
>     $rmsg =~ s/\r//;
>     $hash->{PARTIAL} = $data; # hier einfuegen
>     MAXLAN_Parse($hash, $rmsg) if($rmsg);
>
>
> Am Samstag, 24. November 2012 19:46:22 UTC+1 schrieb joachim herold:
>
>> Moin Matthias,
>>
>> Ich habe zwar keine Ahnung von Perl, aber ich glaube, ich habe die
>> Loesung gefunden.
>> Ich wuerde Dir ja gerne ein Diff anhaengen, weiss aber nicht wie das
>> geht, von daher jetzt einfach den geaenderten Rart fuer 00_MAXLAN.pm
>>
>> sub MAXLAN_Read austauschen gegen
>>
>> ##############################**#######
>> # called from the global loop, when the select for hash->{FD} reports data
>> sub
>> MAXLAN_Read($)
>> {
>>   my ($hash) = @_;
>>
>>   my $data = $hash->{PARTIAL};
>>
>>   #Read until we have a complete line
>>   until($data =~ m/\n/) {
>>     my $buf = DevIo_SimpleRead($hash);
>>     if(!defined($buf)){
>>       Log 1, "MAXLAN_ReadAnswer: error during read";
>>       return undef; #error occured
>>     }
>>     $data .= $buf;
>>   }
>>
>>   my $rmsg;
>>   ($rmsg,$data) = split("\n", $data, 2);
>>   $rmsg =~ s/\r//; #remove \r
>>   #save partial data for next read
>>   $hash->{PARTIAL} = $data;
>>   MAXLAN_Parse($hash, $rmsg) if($rmsg);
>>
>> }
>> ##############################**#########################
>>
>> Bei mir rennt es damit.
>>
>> oder, wie ich jetzt gerade sehe, einfach nur
>>
>> #save partial data for next read
>>   $hash->{PARTIAL} = $data;
>>
>> in Deiner Version nachtragen.
>>
>> gruss Joachim
>>
>>
>>  --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Matthias Gehre

                                                       

Als Workaround für den Bug im Cube (m.E.) wird jetzt automatisch (bis zu
10mal) ein reconnect durchgeführt, wenn der Cube falsche Configuration
sendet.
Bei mir ist dann schon nach dem ersten reconnect alles okey. Ist im SVN.


Am 25. November 2012 10:24 schrieb Matthias Gehre
:

> Hallo,
>
> ich sehe nicht warum das etwas am Verhalten verändern sollte.
>
> Außerdem habe ich mit Wireshark beobachtet, dass der Cube nicht alle Daten
> sendet,
> m.E. ist es also nicht möglich durch Veränderungen am _Read die Daten her
> zuzaubern.
>
> Allerdings tritt das Verhalten beim Cube nur sporadisch auf (race
> condition?) und mit Glück (oder nach ein paar Reconnects)
> gehts wieder.
>
> Mein Perl ist allerdings nicht besonders gut, vielleicht kannst du mir
> deine Änderung erklären.
>
> Viele Grüße,
> Matthias
>
>
>
> 2012/11/24 joachim herold
>
>> Nachtrag:
>> Die Zeile $hash->{PARTIAL} = $data; muss nicht nachgetragen werden,
>> sondern verschoben werden.
>> So sollte es aussehen:
>>
>>  ($rmsg,$data) = split("\n", $data, 2);
>>     $hash->{PARTIAL} = $data; # hier entfernen
>>     $rmsg =~ s/\r//;
>>     $hash->{PARTIAL} = $data; # hier einfuegen
>>     MAXLAN_Parse($hash, $rmsg) if($rmsg);
>>
>>
>> Am Samstag, 24. November 2012 19:46:22 UTC+1 schrieb joachim herold:
>>
>>> Moin Matthias,
>>>
>>> Ich habe zwar keine Ahnung von Perl, aber ich glaube, ich habe die
>>> Loesung gefunden.
>>> Ich wuerde Dir ja gerne ein Diff anhaengen, weiss aber nicht wie das
>>> geht, von daher jetzt einfach den geaenderten Rart fuer 00_MAXLAN.pm
>>>
>>> sub MAXLAN_Read austauschen gegen
>>>
>>> ##############################**#######
>>> # called from the global loop, when the select for hash->{FD} reports
>>> data
>>> sub
>>> MAXLAN_Read($)
>>> {
>>>   my ($hash) = @_;
>>>
>>>   my $data = $hash->{PARTIAL};
>>>
>>>   #Read until we have a complete line
>>>   until($data =~ m/\n/) {
>>>     my $buf = DevIo_SimpleRead($hash);
>>>     if(!defined($buf)){
>>>       Log 1, "MAXLAN_ReadAnswer: error during read";
>>>       return undef; #error occured
>>>     }
>>>     $data .= $buf;
>>>   }
>>>
>>>   my $rmsg;
>>>   ($rmsg,$data) = split("\n", $data, 2);
>>>   $rmsg =~ s/\r//; #remove \r
>>>   #save partial data for next read
>>>   $hash->{PARTIAL} = $data;
>>>   MAXLAN_Parse($hash, $rmsg) if($rmsg);
>>>
>>> }
>>> ##############################**#########################
>>>
>>> Bei mir rennt es damit.
>>>
>>> oder, wie ich jetzt gerade sehe, einfach nur
>>>
>>> #save partial data for next read
>>>   $hash->{PARTIAL} = $data;
>>>
>>> in Deiner Version nachtragen.
>>>
>>> gruss Joachim
>>>
>>>
>>>  --
>> To unsubscribe from this group, send email to
>> fhem-users+unsubscribe@googlegroups.com
>>
>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Joachim

                                                   

Moin Matthias,
Ich habe auch nicht viel ahnung von Perl (eigentlich gar keine).
Ich habe mir gestern Deine 00_MAXLAN.pm angesehen, und bin darueber
gestolpert, dass Du, aus welchen Gruenden auch immer, verschiedene
Varianten zum auslesen der Daten aus dem Cube verwendest.
1.) sub MAXLAN_ReadAnswer mit einer until-Schleife, schoen kommentiert, und
2.) sub MAXLAN_Read mit einer while-Schleife.
Ich habe mir dann, zum sehen von Unterschieden, ein paar neue Logeintraege
dort hineingebastelt, und dabei festgestellt, dass Du in sub MAXLAN_Read
einfach nur folgende Zeilen vertauscht hast:
sub
MAXLAN_Read($)
{
  my ($hash) = @_;

  my $buf = DevIo_SimpleRead($hash);
  return "" if(!defined($buf));
  my $name = $hash->{NAME};

  my $data = $hash->{PARTIAL};
  $data .= $buf;

  while($data =~ m/\n/) {
    my $rmsg;
    ($rmsg,$data) = split("\n", $data, 2);
    $hash->{PARTIAL} = $data;
    $rmsg =~ s/\r//;
    MAXLAN_Parse($hash, $rmsg) if($rmsg);
  }
}

damit schreibst Du erst den $data in den $hash, und teilst dann den Part
fuer $rmsg ab.
solange die Daten schnell genug kommen, klappt das, da die Schleife nur
einmal durchlaufen wird. wenn die Schleife aber mehr ale einmal durchlaufen
wird steht Unsinn im naechten durchlauf. Bau Dir mal ein Log an folgender
Stelle ein:
  $data .= $buf;
  Log 3, "hier wird der buf an data gehaengt $data";
  while($data =~ m/\n/) {

ich hoffe das war verstaendlich.

gruss Joachim

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Matthias Gehre

                                                       

Die Zeile
$rmsg =~ s/\r//;
löscht nur das Zeichen "\r" aus rmsg.
Das Abteilen geschieht in
($rmsg,$data) = split("\n", $data, 2);
und somit in jedem Fall vor
$hash->{PARTIAL} = $data;

Ob man das Zeichen "\r" nun vor oder nach "$hash->{PARTIAL} = $data"
löscht, macht doch keinen Unterschied oder?

Falls ich immer noch auf dem Schlauch stehe: Kannst du vielleicht ein
Beispiel mit Belegung der einzelnen Variablen posten,
an dem man den Fehlerfall nachvollziehen kann?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com