FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Stumpf am 27 Oktober 2016, 11:02:48

Titel: [gelöst] define benutzt falsches Modul
Beitrag von: Stumpf am 27 Oktober 2016, 11:02:48
Hallo zusammen,

ich habe mir mein eigenes Modul geschrieben das mir aktuelle Daten meiner Raumsensoren aus meiner mySql Datenbank liest und die Daten als Readings bereitstellt.
Das funktioniert auch soweit wunderbar.
Nun wollte ich weitere Werte aus der der Heizungsventile aus der Datenbank holen. Dazu habe ich das Modul der Raumsensoren genommen, kopiert und alle Namen des Moduls mit dem neuen ersetzt. Anpassungen der SQL Abfrage und Anpassung der Readings.

Wenn ich aber nun die defines des neuen Moduls einbinde, scheinen sich die Module zu stören.

So lege ich sie an:

define KZ.Raumsensor Raumsensor 142
attr KZ.Raumsensor room Termostate

define WohnzimmerHeizkreis Heizkreise WohnzimmerHeizkreis
attr WohnzimmerHeizkreis room Termostate


Angelegt werden die defines richtig.
2016.10.27 10:33:49 1: Raumsensor SZ.Raumsensor: Define.55  aufgerufen param[0}]:SZ.Raumsensor und param[2]:134
2016.10.27 10:33:49 1: Raumsensor MX.Raumsensor: Define.55  aufgerufen param[0}]:MX.Raumsensor und param[2]:132
2016.10.27 10:33:49 1: Raumsensor KZ.Raumsensor: Define.55  aufgerufen param[0}]:KZ.Raumsensor und param[2]:142
2016.10.27 10:33:49 1: Heizkreise WohnzimmerHeizkreis: Define.53  aufgerufen param[0}]:WohnzimmerHeizkreis und param[2]:WohnzimmerHeizkreis



Hier die Fehlermeldung des Log's:

2016.10.27 10:34:13 2: Raumsensor WohnzimmerHeizkreis: LeseDaten.269 Es konnten keine Daten von Adresse: WohnzimmerHeizkreis gelesen werden.
2016.10.27 10:34:17 2: Raumsensor WohnzimmerHeizkreis: LeseDaten.269 Es konnten keine Daten von Adresse: WohnzimmerHeizkreis gelesen werden.
2016.10.27 10:34:55 2: Raumsensor WohnzimmerHeizkreis: LeseDaten.269 Es konnten keine Daten von Adresse: WohnzimmerHeizkreis gelesen werden.


Man sieht hier wie das Modul Raumsensor auf das define des Heizkreises zugreift.

Nun die Frage....... was habe ich übersehen bzw. was mache ich falsch?

Im Anhang sind noch die zwei Module die ich benutze.

Danke

Gruß
Stumpf

Titel: Antw:define benutzt falsches Modul
Beitrag von: Stumpf am 28 Oktober 2016, 08:50:34
Keiner eine Ahnung?  :(

Ich habe gestern nochmals die Doku für Development durchgelesen. Auch da gibt es keine Hinweise was falsch läuft.
ich denke das hier irgendwie was mit dem $def falsch läuft und so der falsche hash aufgerufen wird.
Allerdings habe ich nichts gefunden das es mir erklären würde.

Kein erfahrener Entwickler im Anfänger Forum? :-(

Gruß
Stumpf

Titel: Antw:define benutzt falsches Modul
Beitrag von: igami am 28 Oktober 2016, 09:25:01
Zitat von: Stumpf am 28 Oktober 2016, 08:50:34
Keiner eine Ahnung?  :(
Hier gibt es keine Hotline, da muss man sich schon mal einen Moment gedulde.

Ich vermute es liegt an den Zeilen

my $MODUL = "Raumsensor";
my $MODUL = "Heizkreise";

es ist in beiden Modulen die selbe Variable. Wofür brauchst du die überhaupt?

$hash->{TYPE}

liefert den TYPE des device
Titel: Antw:define benutzt falsches Modul
Beitrag von: CoolTux am 28 Oktober 2016, 09:35:13
Achtung. Moduldateien mit einer 99 werden immer automatisch geladen. Solltest du vielleicht ändern falls du das Modul mal nicht brauchst.
Es gibt auch ein Developer Guide im Wiki, vielleicht hilft es Dir.
Titel: Antw:define benutzt falsches Modul
Beitrag von: Markus Bloch am 28 Oktober 2016, 09:38:55
Hallo Stumpf,

der Grund ist recht einfach. Du definierst in beiden Modulen eine sub LeseDaten(). Diese wird beim Laden von Heizkreise mit der Variante aus Heizkreise überschrieben.

Daher solltest du deine Funktion LeseDaten() genauso wie bei den anderen Modulfunktion den Modulnamen als Präfix voranstellen. Also Heizkreise_LeseDaten() und Raumsensor_LeseDaten().

Gruß
Markus
Titel: define benutzt falsches Modul
Beitrag von: justme1968 am 28 Oktober 2016, 09:57:56
mal was ganz anderes: warum machst du zwei module draus wenn die beiden so ähnlich sind?

gruss
  andre
Titel: Antw:define benutzt falsches Modul
Beitrag von: Stumpf am 28 Oktober 2016, 10:58:17
 ::) Ja klar.

Gültigkeitsbereich von Variablen und Funktionen.......... ach verdammt.
Komme aus der c++ Welt und war hier am Klassen denken  :o. 

Die Developer Guide habe ich gelesen, aber das Problem war ja auf Perl ebene.

Es war die Funktion LeseDaten die in zwei Modulen gleich hieß...... Name mit Präfix und schon geht es.

Klar könnte man es in ein Modul packen, aber ob das übersichtlicher ist, ist die Frage.

Dacht die Variablen:

$hash->{TYPE}
$hash->{name}

müssen immer beschrieben werden damit FHEM sie auseinander halten kann...?

Also vielen Dank fürs helfen.

@CoolTux: Auch danke an deine UI Demo. Hab mir da auch die ein oder andere Inspiration holen können.

Top Forum und Community

Danke
Titel: Antw:[gelöst] define benutzt falsches Modul
Beitrag von: Markus Bloch am 28 Oktober 2016, 11:30:13
Die genannten Variablen werden durch FHEM selber erzeugt und sind in der DefineFn bereits existent und korrekt befüllt. Diese sollte man nicht überschreiben da sie intern durch fhem.pl verwaltet werden.

Gruß Markus
Titel: Antw:[gelöst] define benutzt falsches Modul
Beitrag von: Stumpf am 28 Oktober 2016, 11:39:03
Okay, wieder was gelernt.

Danke