FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Larusso am 31 Dezember 2017, 13:57:27

Titel: [gelösst]Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 31 Dezember 2017, 13:57:27
Hallo zusammen,

ich habe mir für meine Domkamera im Garten einen Dummy mit webcmd 1 bis 10 angelegt um darüber die Positionen anzufahren. Iergendwie bekomme ich die Befehlskette nicht aufgebaut. Ich habe in der definition des notify folgendes versucht:

if Kamera_Position:1 set Cam1 pos 1,
elseif if Kamera_Position:2 set Cam1 pos 2,
elseif if Kamera_Position:3 set Cam1 pos 3,


ich hab da iergend einen bock drin und bin ein blutiger Anfänger in Sachen pearl.

Wenn ich die Befehle so absetze geht es ohne Probleme

set Cam1 pos 1 und die Kamera fährt auf die Position 1

Könnte mir bitte jemand mit der if elseif Problematik helfen.
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: igami am 31 Dezember 2017, 14:02:21
Warum nicht einfach das webCmd von der Kamera verwenden?
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 31 Dezember 2017, 14:05:52
Mit dem Tabletui kann ich noch gar nichts anfangen. Kann ich das webcmd denn in den Floorplan einbinden und wenn wie?
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: igami am 31 Dezember 2017, 14:08:17
Das sind doch jetzt vollkommen neue Fragen.
Was hast du konkret vor? Du willst im Frontend (TabletUI und/oder Floorplan) einen Schalter für die einzelnen Positionen haben?
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 31 Dezember 2017, 14:15:11
Ich wollte mit dem dummy und dem entsprechenden notify schalter (die cmd comandos) im Floorplan als quasi Button anlegen damit ich die Positionen der Kamera anfahren kann, im Moment habe ich auf meinem Floorplan die Kamera als webinterface laufen und will diese dann steuern. Das webcmd der Kamera habe ich jetzt mit den Befehlen gefüttert und kann nun auch die Positionen anfahren, allerdings gefällt mir der Name der einzelnen Befehle nicht dort steht nun im Floorplan halt pos 1, pos 2 usw.

Wenn ich unten im Bild nun 10 Positionen unter dem Icon der Kamera habe wird das sehr unübersichtlich. das Icon der Kamera ist im Floorplan an der Stelle des Hauses wo sich die Kamera befindet.
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: CoolTux am 31 Dezember 2017, 14:25:39
Poste doch mal ein komplettes list des Notify
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 31 Dezember 2017, 14:27:49
Da steht im Moment noch nicht viel drin, da die ersten Positionen schon nicht angefahren werden, der Code steht oben. Hier aber nochmal der Auszug aus der fhem config:

define Kamera_Position dummy
attr Kamera_Position webCmd 1:2:3:4:5:6:7:8:9:10
define Kamera_Position_notify notify if Kamera_Position:1 set Cam1 pos 1,\
elseif if Kamera_Position:2 set Cam1 pos 2,\
elseif if Kamera_Position:3 set Cam1 pos 3,
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: CoolTux am 31 Dezember 2017, 14:33:29
Das ist kein list vom Device
So kann das auch nicht gehen. Schaue dir bitte die Beispiele in der Commandref und im Wiki an.
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: KernSani am 31 Dezember 2017, 14:35:16
Hi Larusso,


ich glaube du solltest dich erstmal mit den Grundlagen von notify vertraut machen (Einsteiger-PDF, Wiki).

Als Einstieg:

define Kamera_Position_notify notify Kamera_Position:.* {if ...}


Grüße,

Oli
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 31 Dezember 2017, 15:05:12
Ich hab da so meine Probleme mit den Klammern das bekomme ich einfach nicht sauber glöst, mein Ansatz wäre dieser aber dort gibt es immer noch Fehler:

if(Kamera_Position:1)
{set Cam1 pos 1};;
elsif(Kamera_Position:2)
{set Cam1 pos 2};;
elsif(Kamera_Position:3)
{set Cam1 pos 3};;
elseif(Kamera_Position:4)
{set Cam1 pos 4};;
elsif(Kamera_Position:5)
{set Cam1 pos 5};;
elsif(Kamera_Position:6)
{set Cam1 pos 6};;
elsif(Kamera_Position:7)
{set Cam1 pos 7};;
elsif(Kamera_Position:8)
{set Cam1 pos 8};;
else(Kamera_Position:9)
{set Cam1 pos 9};;


dann könnte ich das für mich wie in dem Bild unten so lösen und wäre mit der Optik sehr zufrieden.
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: CoolTux am 31 Dezember 2017, 15:17:55
Noch mal. Bitte mach ein
list NOTIFYNAME

und poste die Ausgabe hier
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: KernSani am 31 Dezember 2017, 15:19:47
Wie oben schon gesagt - da scheint es an Grundlagen zu fehlen... nicht nur bei der Klammerung

if(Kamera_Position:1)

ist (sorry für die Ausdrucksweise) kurz gesagt Unfug, was du wahrscheinlich willst, ist sowas:

if ReadingsVal("Kamera_Position","state","") eq "1" ... oder einfacher
if [Kamera_Position:state] eq "1"

Um das zu beurteilen, wäre aber mal ein

list Kamera_Position

und ein

list Kamera_Position_notify

sinnvoll, nicht nur aus dem Zusammenhang gerissene Codeschnipsel...

Grüße,

Oli
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 31 Dezember 2017, 16:11:06
jetzt hab ichs verstanden,

Internals:
   CFGFN     
   DEF        if Kamera_Position:1 set Cam1 pos 1,
elseif if Kamera_Position:2 set Cam1 pos 2,
elseif if Kamera_Position:3 set Cam1 pos 3,
   NAME       Kamera_Position_notify
   NR         7964
   NTFY_ORDER 50-03
   REGEXP     {if(Kamera_Position:1)
   STATE      active
   TYPE       notify
   READINGS:
     2017-12-31 13:54:41   state           active
Attributes:



Internals:
   CFGFN     
   NAME       Kamera_Position
   NR         7866
   STATE      1
   TYPE       dummy
   READINGS:
     2017-12-31 14:55:37   state           1
Attributes:
   devStateIcon .*:edit_settings
   fp_Erdgeschoss 171,975,5,Kamera_Position,
   webCmd     1:2:3:4:5:6:7:8:9:10



Internals:
   AUTHORITY  192.168.178.50:80
   DEF        192.168.178.50:80
   NAME       Cam1
   NR         46
   SEQ        0
   STATE      Defined
   TYPE       IPCAM
   READINGS:
     2017-12-25 12:27:20   last            Cam1_snapshot.jpg
     2017-12-07 16:52:25   snapshot01      Cam1_snapshot_01.jpg
     2017-12-07 16:52:30   snapshot02      Cam1_snapshot_02.jpg
     2017-12-07 16:52:35   snapshot03      Cam1_snapshot_03.jpg
     2017-12-07 16:52:40   snapshot04      Cam1_snapshot_04.jpg
     2017-12-07 16:52:45   snapshot05      Cam1_snapshot_05.jpg
     2017-12-25 12:27:00   snapshot1       Cam1_snapshot_1.jpg
     2017-12-25 12:27:05   snapshot2       Cam1_snapshot_2.jpg
     2017-12-25 12:27:10   snapshot3       Cam1_snapshot_3.jpg
     2017-12-25 12:27:15   snapshot4       Cam1_snapshot_4.jpg
     2017-12-25 12:27:20   snapshot5       Cam1_snapshot_5.jpg
     2017-12-25 12:27:20   snapshots       5
Attributes:
   basicauth  admin:larusso1
   cmdPanLeft command=4
   cmdPanRight command=6
   cmdPos01   command=31
   cmdPos02   command=33
   cmdPos03   command=34
   cmdPos04   command=35
   cmdPos05   command=36
   cmdPos06   command=37
   cmdPos07   command=38
   cmdPos08   command=39
   cmdPosHome command=25
   cmdStep    onstep
   cmdTiltDown command=2
   cmdTiltUp  command=0
   delay      5
   devStateIcon .*:it_camera
   event-on-update-reading snapshots
   fp_Erdgeschoss 18,203,7,Cam1,
   path       snapshot.cgi?
   pathPanTilt decoder_control.cgi?
   room       Kamera
   snapshots  5
   storage    /media/pi/STICK
   webCmd     pos 1:pos 2:pos 3:pos 4:pos 5:pos 6:pos 7:pos 8


Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: CoolTux am 31 Dezember 2017, 17:12:30

DEF        if Kamera_Position:1 set Cam1 pos 1,

Leider ist diese Notify Definition totaler Mumpitz. Bitte lese dir Commandref zu Notify. So wird das nie was. Wo soll da die trigger RegEx sein?
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 31 Dezember 2017, 17:23:43
Aber genau die def führt das aus was ich brauche. In meinem Dummy habe ich die webcmd 1 bis 10 stehen. Wenn ich nun am dummy die 1 drücke soll er über das notify  Cam pos 1 auslösen, damit das IPCAM modul die Kamera an die gespeicherte Position fährt. Gebe ich die Befehle also:

if Kamera_Position:1 set Cam1 pos 1 und drücke dann am Dummy auf 1 fährt die Kamera über das notify die gewünschte Position an. Mehr soll das notify nicht tun, das was ich nicht hin bekomme in der def ist alle 10 webcmd so in eine def einzubinden das alle funktionieren.

attr Kamera_Position webCmd 1:2:3:4:5:6:7:8:9:10 deshalb ja die ziffern 1 bis 10 um jeder ziffer eine andere gespeicherte Position anzufahren. Wenn ich das ganze mit nur zwei webcmd mache kann ich das ganze ohne elsif lösen aber ich habe nun mal mehr als zwei Positionen.
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: CoolTux am 31 Dezember 2017, 17:42:24
Da muss bitte jemand anders helfen. Danke
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: MadMax-FHEM am 31 Dezember 2017, 18:02:31
Ich bin ja heute schon mal über einen "Popcorn-Thread" gestolpert...
...aber der hier toppt alles! ;)

Erinnert mich an Coyote und Roadrunner...
...der läuft auch tausend mal gegen die Wand, stürzt Klippen hinab und wundert sich auch jedes mal... ;)

Gruß und guten Rutsch, Joachim
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: igami am 01 Januar 2018, 11:14:20
Frohes Neues!

defmod Kamera_Position_notify notify Kamera_Position:\d+ set Cam1 pos $EVENT

und nun der Reihe nach:
defmod: Befehl zum ändern eines Device
Kamera_Position_notify: NAME des Device
notify: TYPE des Device
Kamera_Position:\d+: Suchmuster für das notify \d+ steht für eine Kette aus mindestens einer Zahl. Es wird also auf Events vom Kamera_Position gelauscht die da lauten können 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...
set Cam1 pos $EVENT: der auszuführende Befehl in $EVENT steht dabei nur 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...

Edit: Es sollte aber auch ohne dummy und dafür mit eventMap funktionieren und dann in Cam1 einfach webCmd auf 1:2:3 ... setzen

attr Cam1 eventMap /pos 1:1/pos 2:2/pos 3:3/
Titel: Antw:Befehlskette mit if und else um Dummy mit 10 cmds zu steuern
Beitrag von: Larusso am 03 Januar 2018, 10:42:34
Danke Igami für die Hilfe, ich habe die Position Buttons jetzt mit dem eventMapping umgesetzt. Sieht schlank aus und funktioniert.