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.
Warum nicht einfach das webCmd von der Kamera verwenden?
Mit dem Tabletui kann ich noch gar nichts anfangen. Kann ich das webcmd denn in den Floorplan einbinden und wenn wie?
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?
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.
Poste doch mal ein komplettes list des Notify
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,
Das ist kein list vom Device
So kann das auch nicht gehen. Schaue dir bitte die Beispiele in der Commandref und im Wiki an.
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
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.
Noch mal. Bitte mach ein
list NOTIFYNAME
und poste die Ausgabe hier
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
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
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?
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.
Da muss bitte jemand anders helfen. Danke
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
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/
Danke Igami für die Hilfe, ich habe die Position Buttons jetzt mit dem eventMapping umgesetzt. Sieht schlank aus und funktioniert.