Probleme bei und Verknüpfung in Perl um GPIO `s zu Schalten

Begonnen von Joschi123, 12 August 2014, 15:42:33

Vorheriges Thema - Nächstes Thema

Joschi123

Guten Tag zusammen,
Ich habe derzeit eine Rollosteuerung über FHEM und möchte dass, wenn ich draussen Sitze, das Terrassenrollo nicht runterfährt.
Dazu habe ich mir einen Dummy angelegt (Terrasse). Nun sollen die Rollos nur runterfahren wenn der Dummy "Rollomitte:off und der Dummy "Terrasse:off" geschaltet haben.
Da die ganze Steuerung über die GPIO`s des Raspberry funktioniert, habe ich folgendes versucht

define Rolloversuch notify (Terrasse|wz_Rollomitte) {
my $r1 = $value{"Terrasse"};;
my $r2 = $value{"wz_Rollomitte"};;
if ($r1 eq "on" && $r2 eq "on")
system("fhem-gpio.sh 9 1 &")}
}
}

leider ohne Erfolg :(

ohne die Und Verknüpfung funktionierts

define Rolloversuch notify (Terrasse:on) {\
system("fhem-gpio.sh 9 1 &")}\

Da ich ein kompletter anfänger auf dem Gebiet bin, wäre ich über Hilfe oder anregungen Dankbar :D

fhainz

#1
Hallo!

Es ist übersichtlicher wenn du deine .cfg nicht direkt bearbeitest. Wenn du in das detail des notify gehst siehst du einen button DEF. Darauf klicken und deine Script in die textarea schreiben, dann kannst du dir die doppelten ; und den \ am ende eines mehrzeiligen defines sparen.
Der ungetesteter Code würde dann so aussehen:

DEF:

(Terrasse|wz_Rollomitte) {
  my $r1 = Value("Terrasse");
  my $r2 = Value("wz_Rollomitte");
  if ($r1 eq "on" && $r2 eq "on"){
    system("fhem-gpio.sh 9 1 &");
  }
}


Deine Fehler waren:
- $value{"Terrasse"}; -> Richtig Value("Terrasse");
- nach der if( ) fehlt eine {
- eine } zu viel
- falls du mehrzeiligen Code in die .cfg schreibst willst, muss am ende jeder Zeile ein \ sein, deswegen DEF

Zu GPIO schalten gibt es mittlerweile auch ein Modul. Siehe hier.

Generell würde ich dir die Einsteifer pdf und die Command Ref ans Herz legen.

Grüße

Joschi123

Danke erstmal für die schnelle Antwort

das Modul RPI_GPIO habe ich auch gesehen und ausprobiert, allerdings schaltet der den GPIO Pin auf Input, Warum? keine Ahnung ???.

Den Code habe ich natürlich auch ausprobiert. leider ohne Erfolg :(

Den Hinweis mit der Def werde ich versuchen umzusetzen. Allerdings hätte ich da eine Frage. Reicht es aus wenn ich auf "modify" oder muss ich noch zusätzlich speichern.


fhainz

#3
Also bei mir funktioniert das notify (mit dummys)

Value() fragte den Internal STATE ab. Wenn dein STATE (zB durch stateFormat) nicht gleich dem Reading state ist solltest du ReadingsVal("<name>","<reading>","<defaultWert">) verwenden.
Ob dein notify ausgelöst wurde kannst du am STATE des notifys ablesen.

Edit:
Ja, du musst nachdem modify noch speichern. Sonst ist deine einstellung nach einem reboot weg.