FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: joachimt am 10 Mai 2014, 15:35:44

Titel: Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 10 Mai 2014, 15:35:44
Hallo zusammen,

ausgehend von fhemduino habe ich ein Modul geschrieben, das "Baumarkt" Funksteckdosen
auf 434 MHz Basis aus- und wieder einschaltet.
Zudem wird der Zustand der Funksteckdose automatisch angepasst, sollte man mit der normalen
Fernbedienung die Dose schalten. Mein Empfänger in der fhemduino Hardware ist leider nicht so
empfindlich wenn es Raumgrenzen hinweg geht, so dass diese Funktion nur in ca. 90% der Fälle
funktioniert.

Benötigt werden das in einer Zeile von mir geämderte Modul 00_fhemduino Modul und das neue 14_FHEMduino_fsd
(fsd = Funksteckdose) Modul, siehe Anhang.

Vorgehensweise:

In der Config bitte folgendes eintragen:

define Fhemduino FHEMduino /dev/ttyUSB0@9600
attr Fhemduino verbose 5

Wichtig ist verbose 5. Denn dann sieht man schon allein vom Fhemduino Modul die Tastencodes
des Funkschalters in den Logfiles von fhem.
Damit bitte die Definition der Dosen vornehmen:

Beispiel:
define FSD_Leselampe FHEMduino_fsd  1381457 1381460
attr FSD_Leselampe IODev Fhemduino

(DIe Codes in der Reihenfolge Einschalten Ausschalten)

Würde mich freuen, wenn das jemand vertesten würde.

Mit freundlichen Grüßen

Joachim



Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: palicaj am 02 Juli 2014, 21:18:57
Hi!

Im trying to use your software with PIR sensor.
Im receiving date, when sensor detect move i get:
Fhemduino_RAWMSG IR6044153

I set in fhem.cfg

define Fhemduino FHEMduino /dev/ttyUSB0@9600
attr Fhemduino verbose 5

define PIR FHEMduino_fsd IR6044153
attr PIR IODev Fhemduino

but in log i come:

2014.07.02 21:17:39 5: Fhemduino: IR6044153
2014.07.02 21:17:39 5: Fhemduino dispatch IR6044153
2014.07.02 21:17:39 5: Fhemduino_fsd: Parsing: IR6044153
2014.07.02 21:17:39 5: Fhemduino_fsd: Keine FSD fur Code IR6044153 in der Konfiguration definiert.

What im doing wrong?
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: palicaj am 02 Juli 2014, 21:23:32
OK.

I got it.
PIR must be defined only as 6044153 not IR6044153.
Now it Works!

Now i have question how to set that after 1 minute PIR goes off ?
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 18 Juli 2014, 14:51:15
Hi palicaj,

first of all thank you for testing my code.

I just tried to add an attribute "on-for-timer" in my module, but I found out that every sleep command in the
code blocks the whole fhem Software, so I gave that up ...
Maybe there are some functions that what do a "wait"  for me, but I am just a beginner in fhem programming.

What would solve your problem is to use the powerful notify tool in combination with at.

Assuming your "Device" is FSD_Steckdose_B you may put

define act_on_Steckdose_B_On notify FSD_Steckdose_B:on  define FSD_Steckdose_off at +00:00:10 set FSD_Steckdose_B off

in your fhem.cfg.
The event FSD_Steckdose_B on triggers an "At" Job which takes place in 10 sec in this case and which then sets the  FSD_Steckdose_B off


Best regards

Joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: justme1968 am 18 Juli 2014, 19:19:55
to get on-for-timer &co
just use the SetExtentions.

habe a look at the oder modulen how they are used.

if your device has on and off commands it is just two or there lines of code to get the functionality.

best regards
  andre
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 18 Juli 2014, 22:04:08
hallo,

habe den return String eingefügt.
Die Website zeigt weiterhin: on, off.

Leider akzeptiert fhem ein

set FSD_Steckdose_A on-for-timer 60 nicht, sagt
aber dass ich genau eins von den Dingen on,off,blink,on-for-timer
... benutzen soll. mmhh

Am Code muss ich weiter nichts ändern, der on-for-timer funktionier so, dass mein mein Modul einmal mit on und nach Ablauf der Zeit mit off gerufen wird.

Oder muss ich noch was beachten?

Gruss

Joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: justme1968 am 18 Juli 2014, 23:32:14
das der on-for-timer schon mal da steht ist doch schon ein anfang :) den rest bekommst du auch noch hin.

zeig mal deine set funktion.

ja. dein modul muss nur on und off unterstützen. die logik und den timer für alles andere macht fhem dann intern und ruft dein modul mit dem normalen on und off auf.

gruss
  andre
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 19 Juli 2014, 10:10:34
Hallo Andre,

hier ist meine Set Funktion, die Variable $cmd habe ich kurzerhand weggelassen, weil ich sie nicht sinnvoll zu füllen wusste.
In anderen Beispielen wurde auch so verfahren.

sub
FHEMduino_fsd_Set($@)
{
  my ($hash, @a) = @_;
  my $ret = undef;
  my $na = int(@a);

  return "no set value specified" if($na < 2 || $na > 3);

  my $list = join(" ", sort keys %fsd_c2b);
  my $name = $hash->{NAME};

  my $c = $fsd_c2b{$a[1]};
  if(!defined($c)) {
    #return "Unknown argument $a[1], choose one of " .
    #                            join(" ", sort keys %fsd_c2b);
    #return SetExtensions($hash, $list, $name, $cmd, @a);
    return SetExtensions($hash, $list, $name, @a);
     }

  my $io = $hash->{IODev};

  my $code_to_send=$hash->{$fsd_c2b{"$a[1]"}};

  # Umrechnung dezimal -> tristate
  my $b=sprintf "%b", $code_to_send;
  my $length=length($b);

  for ( my $i=1; $i <= (24-$length); $i++ ) {
          $b= "0" . $b;
      }

  my $tmpstring;
  my $tristate="";
  for ( my $i=0; $i <= 11; $i++ ) {
          $tmpstring=substr($b,2*$i,2);
          $tristate =  $tristate . "0" if ( $tmpstring eq "00" );
          $tristate =  $tristate . "F" if ( $tmpstring eq "01" );
          $tristate =  $tristate . "1" if ( $tmpstring eq "11" );
          }

  my $message="is" . $tristate;

  Log3 $hash ,5, "Fhemduino_fsd: Tristate Code an Arduino: $message";
 
  my $msg = CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", $message));
 
  Log3 $hash ,5, "Fhemduino_fsd: Arduinos Antwort: $msg";
 
  $hash->{STATE}="$a[1]";
 
  return $ret;

}

Gruß

Joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: JoWiemann am 19 Juli 2014, 11:04:55
Warum nutzt ihr nicht das seit langem verfügbare Modul 14_FHEMduino_PT2262.pm. Da ist alles drin, was ihr braucht. Bitte schaut dazu in den FHEMduino Thread.

http://forum.fhem.de/index.php/topic,17196.0.html

Please have a look at the FHEMduino thread and at the 14_FHEMduino_PT2262.pm. This modul has all the functions you are asking for.

Grüße

Jörg
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 19 Juli 2014, 13:02:48
Ok,

das Moul kannte ich nicht.
Nichtsdetoweniger verwendet das Modul ebenso wenig SetExtensions.

Darum geht es ja hier gerade.

Gruß

Joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: JoWiemann am 19 Juli 2014, 13:44:05
Stimmt nicht. Habe ich vor 2-3 Wochen eingebaut. Sieh mal ein paar Post zurück oder unter https://github.com/mdorenka/fhemduino_modules/tree/trunk

Grüße Jörg
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 19 Juli 2014, 16:55:09
Hallo zusammen,

ok nach Sichtung der SetExtensions.pm und ein paar selbst eingebauten DEBUG prints habe ich die
Funktion verstanden und mein Skript entsprechend angepasst.

Funktioniert.

Gruß

Joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 19 Juli 2014, 19:04:19
Hallo nochmal,

unter github gibt ja jetzt einige Module für fhemduino.

@Jörg: Gibt es Überlegungen für fhemduino ein Datenprotokoll festzulegen, mit dem man Sensordaten jedweder Art und eigener Erfassung z.B. mit einem anderen Arduino übertragen kann ?
Oder kann man etwas Vorhandenes auf fhemduino umsetzen und dann nutzen?

Wäre daran interessiert und würde, wenn Bedarf besteht, auch gerne mithelfen.

Viele Grüsse

Joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: justme1968 am 19 Juli 2014, 20:48:22
schaut euch das jeelabs room node protokoll an und auch das swap protokoll der panstamps. vor allem letzteres ist wirklich universell und natürlich nicht auf panstamps beschränkt.

gruss
  andre
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: palicaj am 23 Juli 2014, 16:38:04
Hi!

I still dont get to work...
I want pir1 turn ligth1 on for 30seconds (light1 is EIB)
Can someone copy a fhem.cfg example?

Now i have:
define pir1 FHEMduino_fsd 6044153
attr pir1 IODev Fhemduino

And in FHEM i get status "on"

Must i change something in 14_FHEMduino_fsd.pm ??

Log file:
2014.07.23 16:17:34 5: Fhemduino: IR6044153
2014.07.23 16:17:34 5: Fhemduino dispatch IR6044153
2014.07.23 16:17:34 5: Fhemduino_fsd: Parsing: IR6044153
2014.07.23 16:17:34 5: Fhemduino_fsd: fsd: pir1, neuer Zustand: on

I also programmed my arduino with newest FHEMduino v2.2
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 23 Juli 2014, 18:44:35
hi,

you need a second IR Code to turn your light off.
Normaly it is next to your Code in tristate mode.


Try define pir1 FHEMduino 6044153 6044156 (or 6044150).

The second code is your off code.
If that works manually, define a notify as decribed a few posts above.

hope that works for your device.

best regards

Joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: palicaj am 23 Juli 2014, 21:53:59
I have PIR sensors , and they send only code when sensor detect movement.
So no signal when pir goes off.

Im only getting IR6465353

And i want , when i detect IR6465353 from pir1, to turn light1 for 60 seconds. (or for example after 120 seconds turn on alarm)
an then i have pir2 , where i want to turn light2 .... andd so on.


Im trying to use this:
define act_on_Steckdose_B_On notify FSD_Steckdose_B:on  define FSD_Steckdose_off at +00:00:10 set FSD_Steckdose_B off

But, dont work for me (i dont know how to use it to connect action with detection of PIR)

Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 23 Juli 2014, 22:34:11
Ah, ok I understand.

But what you need anyway is a way in fhem to turn your light off.
Assuming your fhem command is for example  "set light1 off"
try

define act_on_pir1_movement_detected notify pir1:on define light1_off at 00:00:30 set light1 off

But remember the fhem command - set light1 off- must work.

best regards

joachim
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: palicaj am 24 Juli 2014, 17:10:52
Problem is that notify do not react when pir detect movement.
I get record in log, but no action, nothing happened.
If i klick on Picture, then notify Works.
So it looks like notify do not register everything...
I dont know why.

command set light1 off or set light1 on Works!
Also with notify , but only with my mose click , not with help of PIR
Titel: Antw:Fhemduino - "Baumarkt" Funksteckdosen aus und einschalten
Beitrag von: joachimt am 26 Juli 2014, 17:45:29
Hi palicaj,

I was able to reproduce your error and I think a found the solution.

As I said in my first post I am myself just a beginner in fhem programming.
Debugging what is going on when and how triggers and notifys are created
I found out that there was a wrong return value in my FHEMduino_fsd Parse
Function.
I fixed it and attached the new file. Hope that It works for you now.

Remember to use my version of 00_fhemduino.pm because there is routing decision which module
to use when receiving an IR... Code.

my %matchListSlowRF = (
    "1:IT"              => "^i......\$",
    "2:FHEMduino_EZ6"     => "E...........\$",
    "3:FHEMduino_KW9010"  => "K...........\$",
    "4:FHEMduino_fsd"  => "^IR.......\$",
);

Please let me know when your application is working.

Best regards

Joachim