Hilfe bei Codeanpassung im Zusammenhang mit dem Aufbau einer Funkklingel

Begonnen von BuBu79, 03 Februar 2017, 22:30:54

Vorheriges Thema - Nächstes Thema

BuBu79

Hallo,

da uns nun bereits innerhalb von drei Monaten die zweite "Funkklingel" den Dienst verweigert hat, möchte ich nun mittels Fhem das Problem angehen.

Auslöser (Klingeltaster) ist ein umgearbeiteter Funk-Tür-Fensterkontakt HM-Sec-SC-2. Diesen habe ich bereits in Fhem angelernt und einen Notify draufgesetzt.
Da momentan noch kein Homematic MP3-Funk-Gong da ist, lasse ich gerade einen LED Strip blinken.

Notify
Klingeltaster:open {
blink ( 'WZ_RGBSchrank', 'FF0000', 10);
}


Eintrag in der 99_myUtils.pm
#### LED Stripe Blinken Anfang ####
sub blink(@)
{
  my ($ledName, $color, $t) = @_;
  # preserve actual 
  my $oldColor = ReadingsVal($ledName, 'RGB', '000000');
  # set initial blink - color
  fhem "set $ledName RGB $color";
# blink $t times ...
for (my $i=0; $i<$t; $i++) {
   fhem "set $ledName RGB $color 1 q; set $ledName RGB 000000 0 q; set $ledName RGB 000000 1 q; set $ledName RGB $color 0 q";
}
# restore old color
fhem "set $ledName RGB $oldColor 0 q";
return undef;
}
#### LED Stripe Blinken Ende ####


Meine Überlegung ist nun, auch unsere Hofbeleuchtung 3 Mal blinken zu lassen für den Fall das wir im Hof bzw im Garten unterwegs sind.

Ich habe versucht den oberen Notify wie folgt anzupassen
Klingeltaster:open {
blink ( 'WZ_RGBSchrank', 'FF0000', 10);
        blink1 ( 'SchalterHausnr', 3);
}


und natürlich dazu dann die Änderung in der 99_myUtils.pm
#### Lampen Blinken Anfang ####
sub blink1(@)
{
  my ($LampenName, $t) = @_;

Ich habe bereits mehrere Stunden verbracht den Code evtl. anzupassen, leider ohne Erfolg. Dazu sind zu viele Variablen mit denen ich nicht wirklich was anfangen kann.

Ziel soll es halt sein den on|off Status vorher zu lesen, 3 mal zu blinken und dann den alten Status wieder zu setzen. Klappt mit dem Strip Code wunderbar.

Für eure Hilfe wäre ich Dankbar!

Gruß Jan

Thorsten Pferdekaemper

Hi,
könntest Du mal ganz kurz zusammenfassen, was denn nun funktioniert und was nicht? Außerdem wäre Dein momentaner Code der Funktion blink1 hilfreich.
Gruß,
   Thorsten
FUIP

BuBu79

Zitat von: Thorsten Pferdekaemper am 04 Februar 2017, 10:17:57
Hi,
könntest Du mal ganz kurz zusammenfassen, was denn nun funktioniert und was nicht? Außerdem wäre Dein momentaner Code der Funktion blink1 hilfreich.
Gruß,
   Thorsten

Funktionieren tut das Blinken des Strips.

Nicht funktionieren tut das Blinken der Hoflampe.
Meine Überlegung war nun, den Code <blink> umzuschreiben mit dem Namen von <blink1> für das blinken einer Lampe.
Der oben aufgeführte Code <blink> ließt den Status des Strips aus. An oder Aus und wenn an welcher RGB Wert ist gesetzt. Dann blinkt er den angegeben Wert und setzt danach wieder den alten Wert den er am Anfang ausgelesen hat.

Gruß Jan

Thorsten Pferdekaemper

...ja und wo sind Deine Versuche zu blink1?
Gruß,
   Thorsten
FUIP

BuBu79

Zitat von: Thorsten Pferdekaemper am 04 Februar 2017, 13:15:30
...ja und wo sind Deine Versuche zu blink1?
Gruß,
   Thorsten

:-[übern Jordan geschickt als es nicht funktioniert hat.

Ich Versuche es nochmal.

CoolTux

So richtig voran kommt das ja hier nicht. Weißt Du wieso? Weil es den Anschein hat als wenn die anderen für Dich die Arbeit machen sollen.
Am besten ist immer Du probierst alleine. Wenn du nicht weiter kommst postest du den Code und die derzeitige Fehlermeldung.

Anmerken möchte ich noch das Dein erster Code ganz oben, der der schon geht FHEM blockiert. Genau für die Zeit welche der Code zum durchlaufen brauch. Hier ist der Schleifendurchlauf das kritische Element. Gib mal als t 100 ein und du wirst bemerken was ich meine.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

BuBu79

Zitat von: CoolTux am 04 Februar 2017, 13:42:25
So richtig voran kommt das ja hier nicht. Weißt Du wieso? Weil es den Anschein hat als wenn die anderen für Dich die Arbeit machen sollen.

Dieser "Anschein" sollte natürlich nicht vermittelt werden.

Wie ich oben schon erwähnt habe, hatte ich mehrere Versuche gestartet.
Hab im Papierkorb noch die alte Notepad++ Datei gefunden wo ich Versucht habe den Code zu ändern:
#### Lampe Blinken Anfang ####
sub blink1(@)
{
  my ($LampenName, $t) = @_;
  # preserve actual 
  my $oldState = ReadingsVal($LampenName, '1','0');
  # set initial blink
  fhem "set $LampenName on";
# blink $t times ...
for (my $i=0; $i<$t; $i++) {
   fhem "set $LampenName 1 q; set $LampenName 0 q; set $LampenName 1 q; set $LampenName 0 q";
}
# restore old color
fhem "set $LampenName $oldState 0 q";
return undef;
}
#### Lampe Blinken Ende ####


Das Logfile:
2017.02.04 14:17:15 3: CUL_HM set SchalterHausnr on
2017.02.04 14:17:15 3: set SchalterHausnr 1 q; set SchalterHausnr 0 q; set SchalterHausnr 1 q; set SchalterHausnr 0 q : Unknown argument 1, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 0, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 1, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 0, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
2017.02.04 14:17:15 3: set SchalterHausnr 1 q; set SchalterHausnr 0 q; set SchalterHausnr 1 q; set SchalterHausnr 0 q : Unknown argument 1, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 0, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 1, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 0, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
2017.02.04 14:17:15 3: set SchalterHausnr 1 q; set SchalterHausnr 0 q; set SchalterHausnr 1 q; set SchalterHausnr 0 q : Unknown argument 1, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 0, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 1, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
Unknown argument 0, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg
2017.02.04 14:17:15 3: set SchalterHausnr 0 0 q : Unknown argument 0, choose one of assignHmKey:noArg clear:readings,trigger,register,oldRegs,rssi,msgEvents,attack,all deviceRename fwUpdate getConfig:noArg getDevInfo:noArg getRegRaw getSerial:noArg getVersion:noArg inhibit:on,off off:noArg on-for-timer on-till on:noArg pair:noArg peerBulk peerIODev press raw regBulk regSet reset:noArg sign:on,off statusRequest:noArg toggle:noArg unpair:noArg

jump to the top


Zitat von: CoolTux am 04 Februar 2017, 13:42:25
Anmerken möchte ich noch das Dein erster Code ganz oben, der der schon geht FHEM blockiert. Genau für die Zeit welche der Code zum durchlaufen brauch. Hier ist der Schleifendurchlauf das kritische Element. Gib mal als t 100 ein und du wirst bemerken was ich meine.
Wenn ich dich richtig verstehe soll ich die Anzahl des Blinken auf 100 Stellen. Meinst du das Fhem in der Zeit die es braucht 100 Mal zu blinken "festhängt"?

Jan

CoolTux

Zitat von: BuBu79 am 04 Februar 2017, 14:22:55

Wenn ich dich richtig verstehe soll ich die Anzahl des Blinken auf 100 Stellen. Meinst du das Fhem in der Zeit die es braucht 100 Mal zu blinken "festhängt"?

Jan

Genau das wollte ich damit sagen.
Desweiteren hast Du das Problem das Du entweder den Code nicht überschauen kannst oder ihn nicht verstehst.
Ein Vorschlag meiner seits. Wir können versuchen eine vernünftige Lösung zu finden. Das muß nicht unbedingt so komplexer Code sein. Daher schlage ich vor Du verrätst uns erstmal was Du genau für Lampen hast. Sowohl WZ_RGB_Schrank als auch die im Garten. Darauf aufbauend kann man schauen ob es alternative Befehle gibt. HUE zum Beispiel hat einen Blinkbefehl bereits ab Werk.
Wenn sich nichts weiter findet, schauen wir wo man sich am besten wiederholdende Befehle einbaut. Hier wäre zum Beispiel ein at ganz nett, was so weit ich mich erinnern kann mit Befehlswiederholungen arbeiten kann.


my $oldState = ReadingsVal($LampenName, '1','0');                  #### gibt es ein Reading Namens 1 beim Device?????
  # set initial blink
  fhem "set $LampenName on";
# blink $t times ...
for (my $i=0; $i<$t; $i++) {
   fhem "set $LampenName 1 q; set $LampenName 0 q; set $LampenName 1 q; set $LampenName 0 q";              ##### Was ist 1 und was ist q ?????
}
# restore old color
fhem "set $LampenName $oldState 0 q";


Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

Hi,
könnte man das nicht auch direkt als nacheinander ausgeführte FHEM-Befehle hinbekommen? Soweit ich mich erinnern kann, blockiert das FHEM-sleep nicht, wenn es in einer Abfolge von Befehlen steht.
...aber natürlich ist es noch besser, wenn das Device das alleine kann.
Gruß,
   Thorsten
FUIP

CoolTux

Ja kann man, aber man kann es auch flexible machen


define a7 at +*{3}00:00:02 set lamp on-for-timer 1 # Blink 3 times


Das hier bringt jede Lampe zum blinken und wird danach wieder automatisch gelöscht.
Bleibt einzig das Thema nach dem Urzustand wieder herstellen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

Wenn das Device "toggle" kann, dann vielleicht auch so:

define a7 at +*{6}00:00:01 set lamp toggle # Blink 3 times

Wenn man davon ausgeht, dass die Verbindung zur Lampe stabil ist und kein toggle verloren geht, dann sollte es danach wieder so sein wie am Anfang.
Gruß,
   Thorsten
FUIP

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

BuBu79

Zitat von: CoolTux am 04 Februar 2017, 14:36:47
Genau das wollte ich damit sagen.
Desweiteren hast Du das Problem das Du entweder den Code nicht überschauen kannst oder ihn nicht verstehst.
Ein Vorschlag meiner seits. Wir können versuchen eine vernünftige Lösung zu finden. Das muß nicht unbedingt so komplexer Code sein. Daher schlage ich vor Du verrätst uns erstmal was Du genau für Lampen hast. Sowohl WZ_RGB_Schrank als auch die im Garten. Darauf aufbauend kann man schauen ob es alternative Befehle gibt. HUE zum Beispiel hat einen Blinkbefehl bereits ab Werk.
Wenn sich nichts weiter findet, schauen wir wo man sich am besten wiederholdende Befehle einbaut. Hier wäre zum Beispiel ein at ganz nett, was so weit ich mich erinnern kann mit Befehlswiederholungen arbeiten kann.

Mit deiner Aussage magst du sogar Recht haben  :-\. Beschäftige mich seit ca. 3 Wochen aktive mit dem Thema Raspi + Fhem + Hausautomation.
Kenntnisse hatte ich vorher nur in Html und php. Was man sich so selber anlernt wenn man an Homepages bastelt. Deswegen auch dir Thread unter Anfängerfragen.

WZ_RGBSchrank ist ein Stripe der über LD382A angesteuert wird.

SchalterHausnr ist ein Homematic 076793 Unterputzschalter, 1fach der vorerst nur eine LED-Lampe schaltet.

Jan

CoolTux

Das sollte keine Kritik sein. Ich kann verstehen das es Reizt schnell tolle Dinge zu probieren. Aber eventuell wäre es einfacher und Frustbefreiter wenn du nicht gleich die Frau heiraten willst, sondern erstmal lernst zu flirten  ;D

Wenn ich das richtig verstanden habe ist doch die Sache mit der Wohnzimmer LED nicht ganz so wichtig weil du ja ein FunkGong bekommst. Wäre also erstmal das Hauptaugenmerk auf die Gartenlampe, die Du definitiv toggeln kannst mit dem obrigen at. Magst mal probieren?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

BuBu79

Zitat von: CoolTux am 04 Februar 2017, 18:46:14
Aber eventuell wäre es einfacher und Frustbefreiter wenn du nicht gleich die Frau heiraten willst, sondern erstmal lernst zu flirten  ;D

Das Kind ist leider schon in den Brunnen gefallen  :o

Das war so auch nicht wirklich geplant, gleich sowas kompliziertes. Bisher hat mir das automatische einschalten/ausschalten der Außenbeleuchtung via Twilight und das ausschalten des RGB-Stripe im Wohnzimmer wenn "Papa" mal wieder auf der Couch einschläft, eigentlich auch gereicht.

Das blinken des Strips nutze ich auch als Anrufsignalisierung wenn Tochterherz mal das Telefon wieder mit nach oben genommen hat und wir so einen Anruf nicht hören.

define a7 at +*{6}00:00:01 set SchalterHausnr toggle
habe ich über die Eingabezeile mal gestartet und funktioniert so auch.
Jetzt komme ich wieder in den "Anfängermodus". Meine Aufgabe jetzt, diesen Befehl mit in den Notify einzubauen anstelle von
blink ( 'WZ_RGBSchrank', 'FF0000', 10);

richtig?

Jan