[gelöst] Anfänger braucht Hilfe bei Perlcode

Begonnen von cobra112, 14 Juni 2014, 20:13:26

Vorheriges Thema - Nächstes Thema

cobra112

Hi

Danke bin am Testen, bis jetzt geht nix.

Gibt es eine Anleitung mit beispielen und Erklärungen zum Perlcode? Hab nix gefunden.

Zitat2014.06.15 14:49:45 4: Telefontestneu exec {
  my $extNr=(ReadingsVal("callmonitor","external_number","99"))
  my $intNr=(ReadingsVal("callmonitor","internal_number","99"))
  if ($extNr == "09xxxxxx")
  if ($intNr == "5xxxxxx")\;;;;{
      fhem "set DectTV off"
      fhem "set pushmsg msg" 'Fhem' 'Test123456' 0 "";;;;
  }
}
2014.06.15 14:49:45 3: Telefontestneu return value: syntax error at (eval 18468) line 3, near ")
  my "
Global symbol "$intNr" requires explicit package name at (eval 18468) line 3.
Global symbol "$extNr" requires explicit package name at (eval 18468) line 4.
Global symbol "$intNr" requires explicit package name at (eval 18468) line 5.
syntax error at (eval 18468) line 7, near ""set DectTV off"
      fhem "

MFG
Cobra

Heiko R.

Hallo,

Puschel und ich haben Dir gesagt, wo die Fehler liegen. Wenn Du das nicht liest und die Fehler nicht beseitigst, bleiben sie auch. Die Fehlermeldungen sagen Dir klar, wo die Fehler liegen. Und wenn Du Dir jetzt noch mal meinen letzten Post durchliest, solltest Du wissen, was die Fehler sind. Du musst die Beiträge auch lesen, sonst wird das nichts.

Grüße
Cubietruck (Wheezy + FHEM) als FHEM-Server,  1x HMLAN, 6x HM-CC-RT-DN, 1x HM-TC-IT-WM-W-EU
RaspberryPi (Wheezy + FHEM) im Heizungsraum, HT3-USB-Adapter (Homebrew), Junkers Cerapur 14-4C 21, ST 120-5, FW 120

cobra112

Hi

Ich habe es gelesen, aber nicht verstanden.
Hab null Plan von Perl. bin seit 3 Std am Lesen und testen.

MFG
Cobra

Heiko R.

Hallo,

als ich mit fhem angefangen bin, wusste ich auch nur, dass es Perl gibt. Aber im Netz gibt es viele gute Tutorials. Tante G. kennt die auch.

Fangen wir mal damit an, dass jede Befehlszeile mit einem Semikolon beendet wird. Innerhalb von fhem müssen es zwei sein. Für eine neue Zeile folgt dann ein Backslash.

Grüße
Cubietruck (Wheezy + FHEM) als FHEM-Server,  1x HMLAN, 6x HM-CC-RT-DN, 1x HM-TC-IT-WM-W-EU
RaspberryPi (Wheezy + FHEM) im Heizungsraum, HT3-USB-Adapter (Homebrew), Junkers Cerapur 14-4C 21, ST 120-5, FW 120

cobra112

Hi

Ich verzweifel gleich.

Mein Code:

{ \
  my $extNr == (ReadingsVal("callmonitor","external_number","99"));;\
  my $intNr == (ReadingsVal("callmonitor","internal_number","99"));;\
  if ($extNr == "0xxxxxx");;\
  if ($intNr == "5xxxxx") ;;\
      { fhem("set DectTV off ;; set Lichtgang on") }}


Der Log:

2014.06.15 18:34:59 4: Telefontestneu exec {
  my $extNr == (ReadingsVal("callmonitor","external_number","99"));;
  my $intNr == (ReadingsVal("callmonitor","internal_number","99"));;
  if ($extNr == "0xxxxxx");;
  if ($intNr == "5xxxxxx") ;;
      { fhem("set DectTV off ;; set Lichtgang on") }}
2014.06.15 18:34:59 3: Telefontestneu return value: syntax error at (eval 22071) line 4, at EOF
syntax error at (eval 22071) line 5, at EOF


Fehlt da noch eine Klammer oder Semikolon?

MFG
Cobra

maxritti

Also ich würde das ganze, was Du ausführen möchtest, wenn Dein notify wirksam wird schon mal in eine eigene Utils.pm auslagern.
Dann entfallen schon mal die mehrfachen ; und auch die Backslahes.

Schau dazu mal hier:

http://www.fhemwiki.de/wiki/99_myUtils_anlegen

Das Notify sollten dann etwas kürzer in etwa so aussehen:

define Telefontestneu notify callmonitor:event:.ring { MeineFunktionInDerMyUtils()}
attr Telefontestneu room FBDECT
attr Telefontestneu verbose 5


Und diese MeineFunktionInDerMyUtils schaut in etwa so aus:

sub MeineFunktionInDerMyUtils(){
  my $extNr == (ReadingsVal("callmonitor","external_number","99"));
  my $intNr == (ReadingsVal("callmonitor","internal_number","99"));
  if (($extNr eq "0xxxxxx") && ($intNr eq "5xxxxxx")) {
    fhem("set DectTV off; set Lichtgang on")
  }
}


Wegen dem Perl if kannst Du mal hier schauen:

http://www.tizag.com/perlT/perlif.php

cobra112

Hi

Vielen Dank für die Hilfe.

Ich bekomme jetzt schon mal keine Fehlermeldung.
Es passiert aber auch nix. Im Log steht nur der code mehr nicht.

Hab jetzt aber verstanden wo die ; \ usw hinkommen hat mir bei anderen Sachen sehr geholfen.

MFG
Cobra

Puschel74

#22
Hallo,

um Backslash und zusätzliche Semikolon braucht man sich nicht zu kümmern wenn man die Finger von der fhem.cfg lässt.
Aber hier red ich wohl an eine Wand.

Wenn im FHEM-Logfile der Code steht dann steht meist noch was davor (oder danach).
Der Hinweis
ZitatIm Log steht nur der code mehr nicht.
bringt dich (und uns) hier nicht weiter.
Der Code selbst erscheint bei mir NIE im Logfile - das hat FHEM so an sich.
Wenn der Code richtig ist dann erscheinen im Logfile nur die "Schalt"Befehle oder, wenn es Fehler im Code gibt dann die Fehlermeldungen.

ZitatHab jetzt aber verstanden wo die ; \ usw hinkommen hat mir bei anderen Sachen sehr geholfen.
DAS wage ich zu bezweifeln.

Wie schon geschrieben und im Forum schon x-mal gepostet.
Finger weg von der fhem.cfg und es gibt schonmal 2/3 weniger Fehler die sich zwischen Bildschirm und Tastatur einordnen lassen.

Da du aber die angepinnten Beiträge IMMER noch nicht gelesen hast (oder den Inhalt geflissentlich ignorierst) bin ich nun raus.

Grüße

Edith: Wie geschrieben - ich habe kein Problem damit Anfänger unter die Arme zu greifen und zu helfen.
Ich hab nur keine Lust alles und jeden aufs neue abzufragen oder irgendwas zu vermuten.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

cobra112

Hi

Ich habe es gelesen und bin dabei es umzusetzen.

Das steht im Log:

2014.06.16 00:07:25 5: Triggering Telefontestneu
2014.06.16 00:07:25 4: Telefontestneu exec {
   my $intNr == (ReadingsVal("callmonitor","external_number","99"));;
  if (($intNr eq "0xxxxxxxxx")) {
    fhem("set DectTV off ;; set pushmsg msg 'Test' 'Hallo' ")
  }
}


Muss jetzt erstmal Arbeiten. Werde Morgen Weitermachen, Genug Std. damit verbracht.

MFG
cobra

dlinus

Zitat von: Puschel74 am 15 Juni 2014, 22:27:02
Hallo,

Da du aber die angepinnten Beiträge IMMER noch nicht gelesen hast (oder den Inhalt geflissentlich ignorierst) bin ich nun raus.

Grüße

Edith: Wie geschrieben - ich habe kein Problem damit Anfänger unter die Arme zu greifen und zu helfen.
Ich hab nur keine Lust alles und jeden aufs neue abzufragen oder irgendwas zu vermuten.

dlinus

Zitat von: Puschel74 am 15 Juni 2014, 22:27:02
Da du aber die angepinnten Beiträge IMMER noch nicht gelesen hast (oder den Inhalt geflissentlich ignorierst) bin ich nun raus.

Grüße

Edith: Wie geschrieben - ich habe kein Problem damit Anfänger unter die Arme zu greifen und zu helfen.
Ich hab nur keine Lust alles und jeden aufs neue abzufragen oder irgendwas zu vermuten.

@Puschel74
Sag mal, was hast du eigentlich für ein Problem !?
Egal, wer hier was einträgt, wird von dir "zurechtgewiesen"
Wenn dich das nervt, wenn "Anfänger" hier dieses Forum benutzen, sich in diese komplexe Thematik einarbeiten und hier Fragen stellen, dann ignorier das doch bitte halt und lasse deine ewigen Kommentare und verweise auf irgend welche Link, Danke

marvin78

Es nervt ihn, verständlicherweise, wenn Anfänger überhaupt keine Eigeninitiaitve zeigen, offensichtlich die Antworten nicht lesen und die angepinnten Tipps und Hilfen nicht lesen und anwenden. Puschel74 ist ein vergleichsweise hilfreicher und, gerade zu Anfängern, gutmütiger Moderator. Aber man kann nicht helfen, wenn es so läuft, wie in diesem Thread. Ich an seiner Stelle, hätte hier schon lange aufgehört.

cobra112

Hi

Es läuft. Nach langen Suchen geht es.

Wer auch das selbe vorhat hier der code:

Danke für die Hilfe.

.ring { \
  my $extNr = (ReadingsVal("callmonitor","external_number","99"));;\
  my $intNr = (ReadingsVal("callmonitor","internal_number","99"));;\
  if (($extNr eq "xxxxxxx") && ($intNr eq "xxxxxxxx")) { \
    fhem("set pushmsg msg 'Hof' 'Tor geht auf' ")\
  }\
}


MFG
Cobra