OWSWITCH: output schalten per Name funktioniert nicht

Begonnen von Tobias, 12 März 2013, 06:50:31

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
ich habe ein OWSWITCH Device deklariert und auch AName vergeben. Wenn ich nun über den Namen schalten will so funktioniert´s nicht :(
define Heizung_Steuerung OWSWITCH DS2413 2F5503000000
attr Heizung_Steuerung AName Zikulationspumpe|state

Wenn ich nun:set Heizung_Steuerung output Zikulationspumpe ON
die Pumpe einschalten möchte, so kommt nur:
OWSWITCH: invalid output address, must be A,B,... or defined channel name
Wenn ich statt "Zikulationspumpe" das Kürzel "A" angebe, funktioniert das schalten.

Mach ich einen Fehler oder ist es ein Bug?

Weiterhin bekomme ich folgende Fehler im Log:
Use of uninitialized value within @owg_fixed in concatenation (.) or string at ./FHEM/21_OWSWITCH.pm line 343.
Use of uninitialized value $cname in split at ./FHEM/21_OWSWITCH.pm line 344.
Use of uninitialized value within @owg_fixed in concatenation (.) or string at ./FHEM/21_OWSWITCH.pm line 353.
Use of uninitialized value $owg_channel[7] in string at ./FHEM/21_OWSWITCH.pm line 362.
Use of uninitialized value $owg_channel[7] in sprintf at ./FHEM/21_OWSWITCH.pm line 364.

Gruss
Tobias
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Prof. Dr. Peter Henning

Muss ich erst mal überprüfen, bin aber in den kommenden vier Tagen unterwegs.

Also bitte bis dahin "A" verwenden ;-)

LG

pah

P.S.: Kann es sein, dass da irgendwo ein Tippfehler ist ? Es müsste nämlich "Zirkulationspumpe" heißen.

Tobias

Danke.

Es ist ein Tippfehler im Thread. Im FHEM-Webif habe ich ein copy&Paste des Namens gemacht, also kein Tippfehler.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

det.

Hallo Peter,
wenn Du dann wieder zuück bist und gerade an Deinen Modulen baust, kannst Du bitte den state von OWID von "not present" in "absent" wechseln? Das lässt sich besser weiterverarbeiten - habe das bei mir in OWID selbst geändert - es geht dann z.B. so:eventMap  present:geschlossen absent:offenfür den Öffnungszustand von Türen.
Danke,
LG
det.

Tobias

IMHO geht das so:
eventMap  /present:geschlossen/not present:offen/
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

det.

@ Tobias - leider falsch gedacht: dann kommt Tuer_Buero not zu und da hatte ich echt an mir gezweifelt und die Änderung zum Test rückgängig gemacht
LG
det.

Prof. Dr. Peter Henning

Ich habe das jetzt überprüft - kein Fehler feststellbar, bei mir schaltet der Befehl

set Heizung_Steuerung output Zirkulationspumpe Off

(oder On) ganz wunderbar das passende Device. Und zwar sowohl für den DS2406, als auch den DS2413.

Also vielleicht doch noch mal auf Tippfehler überprüfen ?

LG

pah

Tobias

das gibts doch net.. warscheinlich seh ich den Wald vor lauter Bäumen nicht..... siehe Bild. Genau dieser Befehl oben in der Leiste bringt den Fehler....
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Prof. Dr. Peter Henning

Was ergibt sich denn, wenn man

{$attr{Heizung_Steuerung}{AName}}

in die FHEM-Kommandozeile eingibt ?

LG

pah


Tobias

copy&paste des Outputs:
Zirkulationspumpe|state

vieleicht ist "state" ein Schlüsselwort? Nur bei OWSWITCH macht der 2te Parameter IMHO "a type description for the measured value" keinen Sinn etwas sinnvolles zu vergeben
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Prof. Dr. Peter Henning

Nein, state ist kein "Schlüsselwort"

Und das kann es auch nicht sein, weil ich die Konfiguration ja exakt so übernommen habe. Wann wurde denn OWSWITCH zuletzt upgedatet ?

Nächster Schritt: Im Modul OWSWITCH.pm gibt es sowohl in der subroutine OWSWITCH_Get als auch in OWSWITCH_Set die Zeilen

    #-- find out which channel we have
    my $fnd=undef;
    for (my $i=0;$i<$cnumber{$attr{$name}{"model"}};$i++){
      if( ($a[2] eq $owg_channel[$i]) || ($a[2] eq $owg_fixed[$i]) ){
        $fnd=$i;
        last;
      }
    }

Dies bitte mal verändern in

    #-- find out which channel we have
    my $fnd=undef;
    for (my $i=0;$i<$cnumber{$attr{$name}{"model"}};$i++){
      Log 1,"OWSWITCH: Testing $a[2] against $owg_channel[$i] and $owg_fixed[$i]";
      if( ($a[2] eq $owg_channel[$i]) || ($a[2] eq $owg_fixed[$i]) ){
        $fnd=$i;
        last;
      }
    }




LG

pah

Tobias

Bitte....
$Id: 21_OWSWITCH.pm 2703 2013-02-12 08:32:06Z pahenning $
2013.03.16 07:09:21.497 1: OWSWITCH: Testing Zirkulationspumpe against A and A
2013.03.16 07:09:21.498 1: OWSWITCH: Testing Zirkulationspumpe against B and B
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Prof. Dr. Peter Henning

Erstaunlich - das bedeutet, dass der Variablenwert von $owg_channel in diesem falle nicht auf "Zirkulationspumpe" gesetzt wurde.

Nächster Schritt:

In der subroutine OWSWITCH_InitializeDevice findet man die Zeilen:

   #-- name
   my $cname = defined($attr{$name}{$owg_fixed[$i]."Name"}) ? $attr{$name}{$owg_fixed[$i]."Name"} : $owg_fixed[$i]."|onoff";
   my @cnama = split(/\|/,$cname);

sowie etwas später

    #-- put into readings
    $owg_channel[$i] = $cnama[0];  
    $hash->{READINGS}{"$owg_channel[$i]"}{TYPE}     = $cnama[1];  

Bitte mal ergänzen wie folgt

   #-- name
   my $cname = defined($attr{$name}{$owg_fixed[$i]."Name"}) ? $attr{$name}{$owg_fixed[$i]."Name"} : $owg_fixed[$i]."|onoff";
   my @cnama = split(/\|/,$cname);
  Log 1,"Channel spec for $owg_fixed[$i] = >>>$cname<<< leading to ".int(@cnama)." items";

sowie etwas später

    #-- put into readings
    $owg_channel[$i] = $cnama[0];  
    Log 1,"Channel name for $owg_fixed[$i] = $owg_channel[$i]";
    $hash->{READINGS}{"$owg_channel[$i]"}{TYPE}     = $cnama[1];  


LG

pah

Tobias

gemacht, beim "shutdown restart" kommt u.a. folgendes:
2013.03.16 18:18:44.251 1: Channel spec for A = >>>Zirkulationspumpe|Status<<< leading to 2 items
2013.03.16 18:18:44.252 1: Channel name for A = Zirkulationspumpe
2013.03.16 18:18:44.253 1: Channel spec for B = >>>Umwälzpumpe|state<<< leading to 2 items
2013.03.16 18:18:44.254 1: Channel name for B = Umwälzpumpe


Dann:
set Heizung_Steuerung output Zirkulationspumpe Off

2013.03.16 18:19:45.882 1: OWSWITCH: Testing Zirkulationspumpe against A and A
2013.03.16 18:19:45.883 1: OWSWITCH: Testing Zirkulationspumpe against B and B
2013.03.16 18:19:56.170 1: OWSWITCH: Testing A against A and A
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Prof. Dr. Peter Henning

Langsam grenzen wir das ein.
Der Kanalname wird offenbar irgendwann mit dem defaultwert überschrieben. Und das kannnur noch geschehen in der subroutine OWSWITCH_FormatValues. Dort stehen auch die Zeilen

    $cname = defined($attr{$name}{$owg_fixed[$i]."Name"})  ? $attr{$name}{$owg_fixed[$i]."Name"} : $owg_fixed[$i]."|onoff";
    @cnama = split(/\|/,$cname);
    $owg_channel[$i]=$cnama[0];

Bitte hier auch mal ändern

    $cname = defined($attr{$name}{$owg_fixed[$i]."Name"})  ? $attr{$name}{$owg_fixed[$i]."Name"} : $owg_fixed[$i]."|onoff";
    @cnama = split(/\|/,$cname);
    $owg_channel[$i]=$cnama[0];
    Log 1,"FormatValues channel spec for $owg_fixed[$i] = >>>$cname<<< leading to ".int(@cnama)." items and new name ".$owg_channel[$i];

LG
pah