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
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.
Danke.
Es ist ein Tippfehler im Thread. Im FHEM-Webif habe ich ein copy&Paste des Namens gemacht, also kein Tippfehler.
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:offen
für den Öffnungszustand von Türen.
Danke,
IMHO geht das so:
eventMap /present:geschlossen/not present:offen/
@ 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
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
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....
Was ergibt sich denn, wenn man
{$attr{Heizung_Steuerung}{AName}}
in die FHEM-Kommandozeile eingibt ?
LG
pah
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
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
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
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
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
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
gemacht...
2013.03.18 13:26:57.185 1: OWSWITCH: Testing Zirkulationspumpe against A and A
2013.03.18 13:26:57.185 1: OWSWITCH: Testing Zirkulationspumpe against B and B
2013.03.18 13:26:57.241 1: FormatValues channel spec for A = >>>A<<< leading to 1 items and new name A
2013.03.18 13:26:57.242 1: FormatValues channel spec for B = >>>B<<< leading to 1 items and new name B
Nach einem Neustart sieht es etwas anders aus:
2013.03.18 14:02:02.094 1: FormatValues channel spec for A = >>>Zirkulationspumpe|status<<< leading to 2 items and new name Zirkulationspumpe
2013.03.18 14:02:02.095 1: FormatValues channel spec for B = >>>Umwälzpumpe|status<<< leading to 2 items and new name Umwälzpumpe
Trotzdem kommt nach Absetzen des "output" Kommandos wieder folgendes:2013.03.18 14:04:36.557 1: OWSWITCH: Testing Zirkulationspumpe against A and A
2013.03.18 14:04:36.557 1: OWSWITCH: Testing Zirkulationspumpe against B and B
Das ist wirklich vertrackt - denn das bedeutet, dass irgendetwas die Attributwerte zerstört. FormatValues findet diese gar nicht mehr, und setzt darum den Defaultwert "A" ein ...
Aber warum ? Irgendeine Fehlermeldung betreffend die Attribute ?
LG
pah
Kann es sein, dass an anderer Stelle in den Konfigurationsdateien die Attributwerte ein zweites mal gesetzt werden ?
LG
pah
Es gibt keine Fehlermeldung.
Konnte man letzte Nach relativ gut sehen. Nachdem FHEM neu gestartet war (gegen 0Uhr) fand um 6 und um 6:02 der Schaltvorgang statt:
[...]
2013.03.18 00:00:30.421 1: Channel spec for A = >>>Zirkulationspumpe|Status<<< leading to 2 items
2013.03.18 00:00:30.422 1: Channel name for A = Zirkulationspumpe
2013.03.18 00:00:30.422 1: Channel spec for B = >>>Umwälzpumpe|state<<< leading to 2 items
2013.03.18 00:00:30.423 1: Channel name for B = Umwälzpumpe
2013.03.18 00:00:30.423 1: Channel spec for A = >>>A|onoff<<< leading to 2 items
2013.03.18 00:00:30.424 1: Channel name for A = A
2013.03.18 00:00:30.424 1: Channel spec for B = >>>B|onoff<<< leading to 2 items
2013.03.18 00:00:30.425 1: Channel name for B = B
2013.03.18 00:00:39.598 1: Channel spec for A = >>>A|onoff<<< leading to 2 items
2013.03.18 00:00:39.599 1: Channel name for A = A
2013.03.18 00:00:39.599 1: Channel spec for B = >>>B|onoff<<< leading to 2 items
2013.03.18 00:00:39.600 1: Channel name for B = B
2013.03.18 00:00:39.600 1: Channel spec for C = >>>C|onoff<<< leading to 2 items
2013.03.18 00:00:39.601 1: Channel name for C = C
2013.03.18 00:00:39.601 1: Channel spec for D = >>>D|onoff<<< leading to 2 items
2013.03.18 00:00:39.602 1: Channel name for D = D
2013.03.18 00:00:39.602 1: Channel spec for E = >>>E|onoff<<< leading to 2 items
2013.03.18 00:00:39.603 1: Channel name for E = E
2013.03.18 00:00:39.603 1: Channel spec for F = >>>F|onoff<<< leading to 2 items
2013.03.18 00:00:39.604 1: Channel name for F = F
2013.03.18 00:00:39.604 1: Channel spec for G = >>>G|onoff<<< leading to 2 items
2013.03.18 00:00:39.604 1: Channel name for G = G
2013.03.18 00:00:39.605 1: Channel spec for H = >>>H|onoff<<< leading to 2 items
2013.03.18 00:00:39.605 1: Channel name for H = H
2013.03.18 00:00:39.606 1: Channel spec for A = >>>A|onoff<<< leading to 2 items
2013.03.18 00:00:39.606 1: Channel name for A = A
2013.03.18 00:00:39.607 1: Channel spec for B = >>>B|onoff<<< leading to 2 items
2013.03.18 00:00:39.607 1: Channel name for B = B
2013.03.18 00:00:39.608 1: Channel spec for C = >>>C|onoff<<< leading to 2 items
2013.03.18 00:00:39.608 1: Channel name for C = C
2013.03.18 00:00:39.609 1: Channel spec for D = >>>D|onoff<<< leading to 2 items
2013.03.18 00:00:39.609 1: Channel name for D = D
2013.03.18 00:00:39.610 1: Channel spec for E = >>>E|onoff<<< leading to 2 items
2013.03.18 00:00:39.610 1: Channel name for E = E
2013.03.18 00:00:39.611 1: Channel spec for F = >>>F|onoff<<< leading to 2 items
2013.03.18 00:00:39.611 1: Channel name for F = F
2013.03.18 00:00:39.612 1: Channel spec for G = >>>G|onoff<<< leading to 2 items
2013.03.18 00:00:39.612 1: Channel name for G = G
2013.03.18 00:00:39.613 1: Channel spec for H = >>>H|onoff<<< leading to 2 items
2013.03.18 00:00:39.613 1: Channel name for H = H
2013.03.18 06:00:00.279 1: OWSWITCH: Testing A against A and A
2013.03.18 06:02:00.314 1: OWSWITCH: Testing A against A and A
so ists definiert:define Heizung_Steuerung OWSWITCH DS2413 2F5503000000
attr Heizung_Steuerung AName Zirkulationspumpe|status
attr Heizung_Steuerung BName Umwälzpumpe|status
attr Heizung_Steuerung IODev 1wireBus
attr Heizung_Steuerung model DS2413
attr Heizung_Steuerung room Heizung
Hm.
Ich bin ratlos, weil es eigentlich keine Möglichkeit gibt, dass ein Attributwert $attr{"Zirkulationspumpe"}{"AName"} aus Versehen" gelöscht wird.
Vielleicht mal Folgendes (macht wieder viel Müll, aber eine andere Möglichkeit sehe ich derzeit nicht ...):
An den Anfang der FormatValues-subroutine schreiben:
Log 1,"Attributwert Zirkulationspumpe AName ist ".$attr{"Zirkulationspumpe"}{"AName"};
LG
pah
Hi pah,
ich such mich gerade dusselig, aber in OWSWITCH_InitializeDevice sehe ich nix wo $attr{"Zirkulationspumpe"}{"AName"} festgelegt wurde. Kannst du mal (keine Zeilennummer) den betreffenden Code posten?
Habe nochmal weiter geschaut. Im OWSWITCH_Set greifst du direkt auf $owg_channel[$i] zu, aber in der Funktion sehe ich nicht wo du diese befüllst..?
Kann das ein Problem sein wenn man mehrere identische Devices hat das diese sich gegenseitig überschreiben?
ich hätte in der Funktion eher soetwas erwartet:
$cname = defined($attr{$name}{$owg_fixed[$i]."Name"}) ? $attr{$name}{$owg_fixed[$i]."Name"} : $owg_fixed[$i];
@cnama = split(/\|/,$cname);
$owg_channel[$i]=$cnama[0];
Ah sieh an, dann haben wir es.
Erstens: In meinem vorigen Post hätte es natürlich heißen sollen
"Heizung_Steuerung" (der Devicename) statt "Zirkulationspumpe" (der Kanalname).
Zweitens: Das ist natürlich vollkommen korrekt - die "globale" Variable $owg_channel wird beim Vorhandensein eines zweiten Device überschrieben. In einer der Vorversionen des Moduls hatte ich FormatValues ausgeführt, bevor der Kanal tatsächlich gesetzt wurde - inzwischen wird das aber danach ausgeführt. Un dmir ist es nicht aufgefalleb, weil ich das immer schön brav nur mit einem 1-Wire Switch getestet habe.
Gratuliere, das ist ein echter Bug.
Den ich umgehend behebe, die neue Version checke ich in den nächsten Minuten ein.
LG
pah
OK, ich hänge die neue Version mal an. Ich bin derzeit unterwegs und habe keinen OWSWITCH dabei, also bitte mal Testen, sollte jetzt funktionieren wie gewünscht.
LG
pah
Jawoll! Jetzt funktioniert es :) Du kannst es einchecken.
Gruss