FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: HarryT am 13 Mai 2014, 23:30:03

Titel: define abfragen
Beitrag von: HarryT am 13 Mai 2014, 23:30:03
Hi

Ich wurde gern abfragen ob mein AT schon definiert ist. Ich mache anscheinend etwas falsch.
=====
   fhem("define At_i1 at +00:01:00 {subSchakelaar02('xx')}");
   if (defined("At_i1")) {
     Log 1, "At_i1 defined";
   } else {
     Log 1, "At_i1 not defined";
  } 
=====
Jemand eine Idee wie das funktionieren konnte?

{HT}
Titel: Antw:define abfragen
Beitrag von: Rince am 14 Mai 2014, 05:45:25
Zunächst wäre es gut, wenn du nicht so lustige ===== nimmst, sondern die Code Tags.
Macht Code schöner lesbar :)

Dann könntest du noch schreiben, was alles nicht funktioniert. Steht nix im Logfile, meckert fhem beim anlegen, steht immer das Gleiche im Logfile...

Und noch ein bisserl was erzählen. Idealerweise wann dein at denn definiert werden soll, was es so tun sollte, warum was ins Logfile geschrieben werden muss...
So Programm-Dinge außen rum halt. Die machen das Posting interessanter.
Und sind vermutlich die Voraussetzung, dass dir jemand sinnvoll helfen kann.


Wenn ich dein Codebeispiel richtig interpretiere, passiert folgendes:
Du definierst dein at, dann fragst ab ob es definiert ist und schreibst das Ergebnis ins Logfile.

Was soll da drinn stehen außer das es definiert ist?

D.h., du brauchst kein if. Es wäre eh immer wahr.

Dann fragst du auch nix ab. Sondern du schreibst was ins Logfile. Das taugt nur als Kontrolle, für dich später, ob das at mal definiert wurde. So aktuell kannst du mit dieser Info nichts weiter anfangen.

Daher die Frage, was du erreichen willst:
Willst du später lesen können, dann könntest du einfach gleich deinem at die Anweisung geben, ins Logfile zu schreiben.
Oder du bastelst diese Anweisung in dein Schakalaka Sub rein.

Dann kannst du später nachlesen.

Wenn du das aktuell brauchst, also wenn du wissen musst, dass in 1 Minute der Schakalaka zuschlägt, dann wäre es vielleicht eine Idee, einen Dummy zu benutzen, dessen Wert du zuweist beim Anlegen vom at.

Auf diesen kann dann nämlich fhem reagieren, bzw. ein Notify oder was auch immer.


Nicht böse sein, aber mit der wenigen Info die du schreibst, ist Hilfe echt problematisch. Das es verkorkst ist, ist enleuchtend. Daher die Fragen oben:
Was willst du wirklich machen?
Titel: Antw:define abfragen
Beitrag von: betateilchen am 14 Mai 2014, 09:30:20
Zitat von: Rince am 14 Mai 2014, 05:45:25
Nicht böse sein, aber mit der wenigen Info die du schreibst, ist Hilfe echt problematisch.

Du brauchst aber doch auch keinen halben Roman zu schreiben, in dem nix an brauchbarer Information drinsteht, nur weil Du die Fragestellung nicht verstanden hast? Es ist doch völlig egal, was der Fragesteller mit der Erkenntnis machen will, ob irgendwas per define angelegt ist oder nicht, die Frage ist für mich jedenfalls eindeutig und unmissverständlich  formuliert:

Zitat von: HarryT am 13 Mai 2014, 23:30:03
Ich wurde gern abfragen ob mein AT schon definiert ist.
...
Jemand eine Idee wie das funktionieren konnte?

Und die korrekte Antwort auf die gestellte Frage ist genau so einfach:


my $d = "At_i1";
my $def = $defs{$d}{DEF};
if(defined($def)) {
  Log 1, "At_i1 defined";
} else {
  Log 1, "At_i1 notdefined";
}

Titel: Antw:define abfragen
Beitrag von: Elektrolurch am 14 Mai 2014, 09:45:19
Hallo,
zur Erklärung (statt hier unsinnige Romane zu schreiben, aus denen nur hervorgeht, wie toll jemand ist):
Alle Objekte in fhem werden in einem hash %defs angelegt, d.h. wenn Du nachschauen möchtest, ob ein Objekt überhaupt existiert, dann kannst du das mit
if(exists($defs{'objekt'})) ...
machen
if(defined(...
liefert Dir die Info, ob ein Wert in einer Variablen überhaupt gesetzt ist, exists sagt Dir ob in einem hash ein Eintrag (im Falle von fhem ein Objekt) vorhanden ist.
So, jetzt hoffe ich, da Dir etwas geholfen haben zu können.
Ich habe am Anfang mit perl und fhem leider auch manchmal so "Romane" als Antwort bekommen, nach dem Motto: Friß oder stirb.

Gruß

Elektrolurch