FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kiv-Kav am 01 April 2015, 16:27:38

Titel: Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 01 April 2015, 16:27:38
Hallo Leute,

wahrscheinlich gibt es dieses Thema schon zu Hauf.

Leider lese ich hier und bastele ich nun seit Tagen an meinem Pi, leider ohne Erfolg. Ich bin blutiger Anfänger auf diesem Gebiet.

Ich habe an meinen Pi mit wheezy einen ähnlichen Funksender wie diesen angeschlossen:
http://www.amazon.de/receiver-Superregeneration-Wireless-Transmitter-Burglar/dp/B00ATZV5EQ

Habe dann Fhem und rcswitch-pi installiert.

Über die Konsole(z.B. Putty) kann ich meine Funksteckdosen (mit Dip-Schaltern) auch ohne Probleme steuern, wenn ich folgende Befehle eingebe:
cd rcswitch-pi
sudo send 10111 1 1 bzw sudo send 10111 1 0

Leider schaffe ich es einfach nicht das ganze über Fhem zum laufen zu bringen, ich habe nun schon etliche Anleitungen und Tipps usw. (z.B. mit Dummys zu arbeiten) die ich finden konnte durchgelesen und getestet aber nichts hat mir geholfen.

Ich hoffe, dass ihr mir nun vielleicht weiterhelfen und mir die entsprechenden Befehle, die ich in Fhem eingeben muss, sagen könnt.

Ergänzung: In diesem Beitrag(: http://forum.fhem.de/index.php/topic,25040.0.html#top ), bzw. dem PDF ist das ja alles ab Seite 13 super gut erklärt, aber ich kann machen was ich will er schaltet die Steckdose über Fhem einfach nicht. Wie schaffe ich das?

Vielen Dank!
Titel: Antw:Funksteckdosen + Raspberry-Remote + 433 mhz Sender
Beitrag von: Bracew am 01 April 2015, 16:36:15
Guckst Du hier:
https://www.hempel-online.de/cms/index.php/fhem/articles/intertechno-steckdosen-mit-raspberry-pi-aus-fhem-ansteuern.html

Gruß Bracew
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 01 April 2015, 18:08:02
das klappt leider auch nicht :(
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Bracew am 01 April 2015, 18:26:36
Warum nicht?
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: arokh12 am 01 April 2015, 18:27:09
Les dir mal den Link durch. Vor allem der verlinkte Beitrag von mir mit dem  sudo visudo.

http://forum.fhem.de/index.php/topic,35588.msg279609.html#msg279609

arokh12
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: FHEM__Newbie am 02 April 2015, 10:52:57
Welche Funksteckdosen hast Du den in Benutzung?
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 02 April 2015, 11:37:45
Ich benutze diese:
http://www.amazon.de/gp/product/B001AX8QUM?ref_=cm_sw_r_awd_VXqhvb10TV99Q

Wie gesagt, wenn ich die Befehle in der Konsole ausführe funktioniert alles wunderbar, egal ob ich diese im Ordner rcswitch-pi oder bin ausführe!

Ich steuer z.B. MiLight über Fhem und das klappt wunderbar.

Vielen Dank schon mal für eure Hilfe!
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: ErzGabriel am 02 April 2015, 12:05:23
Ich vermute, das Fhem die Rechte fehlen. Führe mal die folgenden Befehle im Terminal aus, danach sollte es funktionieren.
sudo chown root ./send
sudo chmod 4711 ./send


Sollte das nicht klappen, überprüfe mal, ob Du das Modul GenShellSwitch im Ordner /opt/fhem/FHEM steht. Hänge das Modul mal an meinen Beitrag an.
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: arokh12 am 02 April 2015, 14:49:16
hast du meinen link beachtet?

arokh12
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 03 April 2015, 17:41:40
Hi Leute,

ich hab jetzt eure Tipps berücksichtigt.

Leider klappt es immer noch nicht.

Ich habe in Fhem folgende Befehle eingegeben:

define PFS3_1 dummy
attr PFS3_1 setList on off
attr PFS3_1 room Schlafzimmer
define off_PFS3_1 notify PFS3_1:off {system("/usr/bin/send 10111 3 0 &")}
define on_PFS3_1 notify PFS3_1:on {system("/usr/bin/send 10111 3 1 &")}
attr PFS3_1 alias Licht_Steckdose

In meinem Logfile sieht das aber auch komisch aus:

2015.04.03 17:39:56 3: on_PFS3_1 return value: Unrecognized character \xE2; marked by <-- HERE after {system(<-- HERE near column 9 at (eval 15) line 1.

2015.04.03 17:39:57 3: off_PFS3_1 return value: Unrecognized character \xE2; marked by <-- HERE after {system(<-- HERE near column 9 at (eval 16) line 1.

Wisst ihr, was das bedeutet?

Auch weiterhin kann ich in /bin und in /rcswitch-pi den send-Befehl über die Konsole erfolgreich ausfrühen.

Danke für eure Mühe!
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Puschel74 am 03 April 2015, 17:43:35
Ja.
Du hast den Code mit einem Texteditor kopiert der Steuerzeichen einfügt.
Das hätte sich aber auch finden lassen.
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 03 April 2015, 17:51:28
Puschel74, danke für den Hinweis!!

Ich hab das jetzt alles per Hand abgetippt und bekomme folgendes im Logfile:

2015.04.03 17:51:01 3: on_PFS3_1 return value: -1
2015.04.03 17:51:02 3: off_PFS3_1 return value: -1

send hat alle Rechte und 00GenShellSwitch ist auch vorhanden, visudo habe ich auch gemacht und die Zeile am Ende eingefügt.
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Hollo am 03 April 2015, 18:30:49
Was soll denn da Deiner Meinung nach kommen?
FHEM kann ja keine Rückmeldung von Deinem Device bekommen.

Die Frage ist doch, ob geschaltet wird oder nicht?

Warum machst Du das noch über ein zusätzliches Notify, Du hast doch schon den Dummy!?
Das ist zum Probieren erstmal nur 1 Zeile und Du kannst das aus FHEM heraus bedienen.
define PFS3_1 GenShellSwitch /usr/local/bin/send 10111 1 1 0

Vorausgesetzt Deine "Nummer" passt; zuerst war es 1, jetzt hast Du ne 3 gepostet.
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 03 April 2015, 19:18:22
Zitat von: Hollo am 03 April 2015, 18:30:49
Was soll denn da Deiner Meinung nach kommen?
FHEM kann ja keine Rückmeldung von Deinem Device bekommen.

Die Frage ist doch, ob geschaltet wird oder nicht?

Warum machst Du das noch über ein zusätzliches Notify, Du hast doch schon den Dummy!?
Das ist zum Probieren erstmal nur 1 Zeile und Du kannst das aus FHEM heraus bedienen.
define PFS3_1 GenShellSwitch /usr/local/bin/send 10111 1 1 0

Vorausgesetzt Deine "Nummer" passt; zuerst war es 1, jetzt hast Du ne 3 gepostet.
Ich weiß nicht, ob das die Antwort auf deine Frage ist, was noch kommen soll: Es müsste Licht angehen, das klappt über die Konsole auch.

Ich bin wie gesagt ein Anfänger auf den Gebiet und bin nach der oben genannten Anleitung vorgegangen.

Ich habe die 3 als Beispiel genommen, die 1 ist auch vorhanden, beides schaltet aber nicht!

Auch dein Befehl hatte keinen Erfolg.

Im Logfile:

2015.04.03 19:17:34 1: PERL WARNING: Can't exec "/usr/local/bin/send": No such file or directory at ./FHEM/00_GenShellSwitch.pm line 131.
2015.04.03 19:17:34 2: GenShellSwitch set PFS3_1 on
2015.04.03 19:17:35 1: PERL WARNING: Can't exec "/usr/local/bin/send": No such file or directory at ./FHEM/00_GenShellSwitch.pm line 131.
2015.04.03 19:17:35 2: GenShellSwitch set PFS3_1 off

Ist also etwas an der Datei 00_GenShellSwitch.pm nicht richtig? Ich habe die von ErzGarbiel genommen.

################################################################
#
#  Copyright notice
#
#  (c) 2013 NICK-ST
#
#  This script is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  The GNU General Public License can be found at
#  http://www.gnu.org/copyleft/gpl.html.
#  A copy is found in the textfile GPL.txt and important notices to the license
#  from the author is found in LICENSE.txt distributed with these scripts.
#
#  This script is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  This copyright notice MUST APPEAR in all copies of the script!
#
################################################################

# derived from 23_ALL4027.pm, dummy.pm

package main;

use strict;
use warnings;

###################################
sub
GenShellSwitch_Initialize($)
{
  my ($hash) = @_;

  $hash->{SetFn}     = "GenShellSwitch_Set";
  $hash->{DefFn}     = "GenShellSwitch_Define";
  $hash->{AttrList}  = "loglevel:0,1,2,3,4,5,6 ". $readingFnAttributes;
}

###################################
sub
GenShellSwitch_Set($@)
{
  my ($hash, @a) = @_;

  return "no set value specified" if(int(@a) < 2);
  return "Unknown argument $a[1], choose one of on off toggle on-for-timer" if($a[1] eq "?");

  my $v = $a[1];
  my $v2= "";
  if(defined($a[2])) { $v2=$a[2]; }

  if($v eq "toggle")
  {
    if(defined $hash->{READINGS}{state}{VAL})
    {
      if($hash->{READINGS}{state}{VAL} eq "off")
      {
        $v="on";
      }
      else
      {
        $v="off";
      }
    }
    else
    {
      $v="off";
    }
  }
  elsif($v eq "on-for-timer")
  {
    InternalTimer(gettimeofday()+$v2, "GenShellSwitch_on_timeout",$hash, 0);
    # on-for-timer is now a on.
    $v="on";
  }
  GenShellSwitch_execute($hash,$v);

  Log GetLogLevel($a[0],2), "GenShellSwitch set @a";

  $hash->{CHANGED}[0] = $v;
  $hash->{STATE} = $v;
  $hash->{READINGS}{state}{TIME} = TimeNow();
  $hash->{READINGS}{state}{VAL} = $v;

  DoTrigger($hash->{NAME}, undef);

  return undef;
}

###################################
sub
GenShellSwitch_on_timeout($)
{
  my ($hash) = @_;
  my @a;

  $a[0]=$hash->{NAME};
  $a[1]="off";

  GenShellSwitch_Set($hash,@a);

  return undef;
}

###################################
sub
GenShellSwitch_execute($@)
{
my ($hash, $cmd) = @_;
  my $command=$hash->{Command};
 
  if($cmd eq "on")
  {
    $command.=$hash->{OnValue}." |";
  }
  elsif($cmd eq "off")
  {
    $command.=$hash->{OffValue}." |";
  }
  else
  {
    return undef;
  }

Log GetLogLevel($hash->{NAME},4), "GenShellSwitch command line: $command";
  open(DATA,$command);
  while ( defined( my $line = <DATA> )  )
  {
    chomp($line);
    Log GetLogLevel($hash->{NAME},3), "GenShellSwitch command result: $line";
  }
  close DATA;
 
  #little sleep to avoid continous activities; controller might not like this
  sleep 0.25;

  return undef;
}

###################################
sub
GenShellSwitch_Define($$)
{
  my ($hash, $def) = @_;
  my $name=$hash->{NAME};

  my @a = split("[ \t][ \t]*", $def); 
  return "Wrong syntax: use define <name> GenShellSwitch <send command e.g. /home/pi/GenShellSwitch-pi/send a 1 1> <on value e.g. 1> <off value e.g. 0>" if(int(@a) < 5);
 
  my $command;
  my $max = int(@a)-2;
  for (my $i=2;$i<$max;$i+=1)
  {
    $command.=$a[$i]." ";
  }
  my $onvalue = $a[int(@a)-2];
my $offvalue = $a[int(@a)-1];
 
  $hash->{Command} = $command;
  $hash->{OnValue} = $onvalue;
  $hash->{OffValue} = $offvalue;

  return undef;
}

1;

=pod
=begin html

<a name="GenShellSwitch"></a>
<h3>GenShellSwitch</h3>
<ul>
  Note: Take care that commands can be executed with fhem's user rights.
  <br><br>
  <a name="GenShellSwitch"></a>
  <b>Define</b>
  <ul>
    <code>define &lt;name&gt; GenShellSwitch &lt;command&gt &lt;on value&gt &lt;off value&gt;</code>
    <br><br>
    Defines a generic switch that executes a command line. This can be e.g. used to integrate rcswitch. &lt;command&gt may contain spaces. Command is executed followed by the on/off value.<br><br>


    Examples:
    <ul>
      <code>define lamp1 RCSwitch /home/pi/rcswitch-pi/send a 1 1 1 0</code><br>
    </ul>
  </ul>
  <br>

  <a name="GenShellSwitchset"></a>
  <b>Set </b>
  <ul>
    <code>set &lt;name&gt; &lt;value&gt;</code>
    <br><br>
    where <code>value</code> is one of:<br>
    <pre>
    off
    on
    on-for-timer &lt;Seconds&gt;
    toggle
    </pre>
    Examples:
    <ul>
      <code>set lamp1 on</code><br>
    </ul>
    <br>
    Notes:
    <ul>
      <li>Toggle is special implemented. List name returns "on" or "off" even after a toggle command</li>
    </ul>
  </ul>
</ul>

=end html
=cut
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Hollo am 03 April 2015, 21:08:52
Musste gerade erst an den Anfang zurück, Dein send liegt ja unter /usr/bin .
Lösch also mal das local/ dazwischen raus.

Das hättest Du aber auch sehen können;
die Fehlermeldung sagt ja schon, dass das send nicht gefunden wird.

Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 03 April 2015, 21:21:54
Zitat von: Hollo am 03 April 2015, 21:08:52
Musste gerade erst an den Anfang zurück, Dein send liegt ja unter /usr/bin .
Lösch also mal das local/ dazwischen raus.

Das hättest Du aber auch sehen können;
die Fehlermeldung sagt ja schon, dass das send nicht gefunden wird.

stimmt, hätte ich sehen können!

Jetzt sagt Logfile auch, dass GenShellSwitch angeschaltet wurde, aber es ist nicht an!
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 03 April 2015, 21:54:24
Hier mal ein Screenshot von meiner Eingabe.
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Hollo am 04 April 2015, 14:28:27
Dann kann es eigentlich nur noch an Deiner Codierung liegen.
Die sieht mir eh so "gemischt" aus mit Dual- und Dezimalangabe.
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Kiv-Kav am 05 April 2015, 11:37:55
Aber genau so wird es doch überall beschrieben!
Titel: Antw:Funksteckdosen + rcswitch-pi + 433MHZ Sender
Beitrag von: Hollo am 06 April 2015, 10:54:27
Nein, genau so habe ich m.E. es noch nirgends gesehen.
Entweder Dualzahlen oder Dezimalzahlen; am Ende die 1 und 0 für ON und OFF; meinst am Anfang der Modus des verwendeten send.

Wenn das bei Dir von der Konsole funktioniert und die Rechte passen, muss das eigentlich auch identisch von FHEM aus gehen.
Guck doch mal im Logfile, welches Kommando genau rausgeht, und vergleich das mit dem, was Du brauchst.
Dann siehst Du schon mal, ob das identisch ist, und das GenShellSwitch kopatibel ist.