Hauptmenü

define abfragen

Begonnen von HarryT, 13 Mai 2014, 23:30:03

Vorheriges Thema - Nächstes Thema

HarryT

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}
FHEM 6.3 auf Raspberry Pi3  (1,2 Ghz)
RFXTRX433XL, ZWave, KFL200 and ConBeeIII
Raspberry Pi1 (0,7 Ghz) and Raspberry Pi4 for testing
German reading skills are good.

Rince

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?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

betateilchen

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";
}

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Elektrolurch

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
configDB und Windows befreite Zone!