Connair über FHEM steuern

Begonnen von rippi46, 06 November 2013, 20:04:17

Vorheriges Thema - Nächstes Thema

rippi46

#165
Hallo RKronenberg,

hier der erste Versuch:

define LautsprecherBad dummy
attr LautsprecherBad alexaName lautsprecher
attr LautsprecherBad alexaRoom bad
attr LautsprecherBad alias Badlautsprecher
attr LautsprecherBad eventMap BI:on B0:off
attr LautsprecherBad genericDeviceType switch
attr LautsprecherBad group Lautsprecher
attr LautsprecherBad icon audio_volume_low
attr LautsprecherBad room Bad,Sound,alexa
attr LautsprecherBad setList state:on,off

define LautsprecherBad_ntfy notify LautsprecherBad:.* {\
    my $master = "A";;\
    my $slave = "1";;\
    my $v=Value("LautsprecherBad");;\
    if ($v eq "on") {revtele("$master","$slave","on")};;\
    if ($v eq "off") {revtele("$master","$slave","off")};;\
    }


und die 99_revtele.pm

use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;
use Time::Piece;
$main::NextUpdate = ();

sub revtele {
my $c_ip = "Deine IP des Gateway";
my $c_port = "49880";
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "10";
my $c_pause = "5600";
my $c_tune = "350";
my $c_baud = "25";
my $c_speed = "16";
my $c_master = "$_[0]";
my $c_slave = "$_[1]";
my $c_bitLow="1";
my $c_bitHgh="3";
my $c_tx433ver="1";

my $c_seqHgh="$c_bitHgh,$c_bitLow,$c_bitHgh,$c_bitLow,";
my $c_seqLow="$c_bitLow,$c_bitHgh,$c_bitLow,$c_bitHgh,";
my $c_seqF1="$c_bitLow,$c_bitHgh,$c_bitHgh,$c_bitLow,";


my $c_AN = "$c_seqF1$c_seqF1";
my $c_AUS = "$c_seqLow$c_seqLow";
my $c_add="$c_seqLow$c_seqF1$c_seqF1";


$c_bits[A]="$c_seqHgh$c_seqF1$c_seqF1$c_seqF1";
$c_bits[B]="$c_seqF1$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[C]="$c_seqF1$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[D]="$c_seqF1$c_seqF1$c_seqF1$c_seqHgh";

$c_bits[1]="$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[2]="$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[3]="$c_seqF1$c_seqF1$c_seqHgh";
   
my ($state) = "$_[2]";
if ($state eq "on")
{
  system("echo \"TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AN$c_tx433ver,$c_speed,;\" | nc -u $c_ip $c_port & pid=$! sleep 1 kill $pid 2>/dev/null >/dev/null");
}
else
{
  system("echo \"TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AUS$c_tx433ver,$c_speed,;\" | nc -u $c_ip $c_port & pid=$! sleep 1 kill $pid 2>/dev/null >/dev/null");
}
}



Leider vorerst nur mit netcat!

Und natürlich deine IP wieder eintragen.

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

rippi46

#166
oder mit udp:


use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;
use Time::Piece;
$main::NextUpdate = ();

sub revtele {
my $SendData="";
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "10";
my $c_pause = "5600";
my $c_tune = "350";
my $c_baud = "25";
my $c_speed = "16";
my $c_master = "$_[0]";
my $c_slave = "$_[1]";
my $c_bitLow="1";
my $c_bitHgh="3";
my $c_tx433ver="1";

my $c_seqHgh="$c_bitHgh,$c_bitLow,$c_bitHgh,$c_bitLow,";
my $c_seqLow="$c_bitLow,$c_bitHgh,$c_bitLow,$c_bitHgh,";
my $c_seqF1="$c_bitLow,$c_bitHgh,$c_bitHgh,$c_bitLow,";


my $c_AN = "$c_seqF1$c_seqF1";
my $c_AUS = "$c_seqLow$c_seqLow";
my $c_add="$c_seqLow$c_seqF1$c_seqF1";


$c_bits[A]="$c_seqHgh$c_seqF1$c_seqF1$c_seqF1";
$c_bits[B]="$c_seqF1$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[C]="$c_seqF1$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[D]="$c_seqF1$c_seqF1$c_seqF1$c_seqHgh";

$c_bits[1]="$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[2]="$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[3]="$c_seqF1$c_seqF1$c_seqHgh";


my ($state) = "$_[2]";
if ($state eq "on")
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AN$c_tx433ver,$c_speed";
}
else
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AUS$c_tx433ver,$c_speed";
}


my ($socket,$data);
#  We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>'Deine IPadresse:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}



Gruß rippi

PS: Habe den Code noch einmal verändert. (12:54 Uhr)
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

RKronenberg

Wenn ich das in meine 99_myUtils.pm einsetze bekomme ich beim speichern folgenden Error:

Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 115. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 116. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 117. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 118. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 120. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 121. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 122. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 127. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 127. Global symbol "$pid" requires explicit package name at ./FHEM/99_myUtils.pm line 127. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 131. Global symbol "@c_bits" requires explicit package name at ./FHEM/99_myUtils.pm line 131. Global symbol "$pid" requires explicit package name at ./FHEM/99_myUtils.pm line 131.


Fehlt da was in meiner Installation?

Gruß Ralph

rippi46

#168
Mach eine eigene 99_revteleUtils.pm

oder lasse

use strict;

weg; und eine Klammer war zu viel. (Hab es im Code korrigiert)

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

RKronenberg

Hallo Rippi,

habe das jetzt in eine 99_revtele.pm gepackt und entsprechend angepasst. nach einem shutdown restart steht im Log:

2017.12.05 15:42:32 0: Server shutdown
2017.12.05 15:42:35 1: reload: Error:Modul 99_revtele deactivated:

2017.12.05 15:42:35 1: Including fhem.cfg


Ich arbeite noch mit fhem 5.7 falls von interesse.

Gruß Ralph

rippi46

#170
das alles in eine 99_revteleUtils.pm:

use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;
use Time::Piece;
$main::NextUpdate = ();

sub revtele {
my $SendData="";
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "10";
my $c_pause = "5600";
my $c_tune = "350";
my $c_baud = "25";
my $c_speed = "16";
my $c_master = "$_[0]";
my $c_slave = "$_[1]";
my $c_bitLow="1";
my $c_bitHgh="3";
my $c_tx433ver="1";

my $c_seqHgh="$c_bitHgh,$c_bitLow,$c_bitHgh,$c_bitLow,";
my $c_seqLow="$c_bitLow,$c_bitHgh,$c_bitLow,$c_bitHgh,";
my $c_seqF1="$c_bitLow,$c_bitHgh,$c_bitHgh,$c_bitLow,";


my $c_AN = "$c_seqF1$c_seqF1";
my $c_AUS = "$c_seqLow$c_seqLow";
my $c_add="$c_seqLow$c_seqF1$c_seqF1";


$c_bits[A]="$c_seqHgh$c_seqF1$c_seqF1$c_seqF1";
$c_bits[B]="$c_seqF1$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[C]="$c_seqF1$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[D]="$c_seqF1$c_seqF1$c_seqF1$c_seqHgh";

$c_bits[1]="$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[2]="$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[3]="$c_seqF1$c_seqF1$c_seqHgh";


my ($state) = "$_[2]";
if ($state eq "on")
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AN$c_tx433ver,$c_speed";
}
else
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AUS$c_tx433ver,$c_speed";
}


my ($socket,$data);
#  We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>'Deine IPadresse:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}



Wenn die Datei 99_revteleUtils.pm heißt, kannst du sie aus fhem heraus editieren.

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

RKronenberg

Hallo Rippi,

habe ich so gemacht, aber leider:

2017.12.05 16:55:16 0: Server shutdown
2017.12.05 16:55:19 1: reload: Error:Modul 99_revteleUtils deactivated:


>:(

rippi46

Ich glaube das kannst du erst mal ignorieren.
Das habe ich nach einem Neustart auch im Log.

Versuche mal eine Dose zu schalten.

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

RKronenberg

Hallo Rippi,

die Dose wird nicht geschaltet, am Gateway keine blaue Kontrolllampe. im Logfile steht dann auch:

2017.12.05 17:51:15 3: Schalter_8_ntfy return value: ERROR in Socket Creation : Das Argument ist ungültig

da die 99_revteleUtils nicht aktiviert wird, kann er mit dem revtele im notify wohl nichts anfangen.

Übrigens danke für deine unermüdliche Hilfe..

Gruß Ralph.




rippi46

#174
Hallo,

ich habe die IPadresse nicht richtig übergeben.

Hier der geänderte Code.

use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;
use Time::Piece;
$main::NextUpdate = ();

sub revtele {
my $SendData="";
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "10";
my $c_pause = "5600";
my $c_tune = "350";
my $c_baud = "25";
my $c_speed = "16";
my $c_master = "$_[0]";
my $c_slave = "$_[1]";
my $c_bitLow="1";
my $c_bitHgh="3";
my $c_tx433ver="1";

my $c_seqHgh="$c_bitHgh,$c_bitLow,$c_bitHgh,$c_bitLow,";
my $c_seqLow="$c_bitLow,$c_bitHgh,$c_bitLow,$c_bitHgh,";
my $c_seqF1="$c_bitLow,$c_bitHgh,$c_bitHgh,$c_bitLow,";


my $c_AN = "$c_seqF1$c_seqF1";
my $c_AUS = "$c_seqLow$c_seqLow";
my $c_add="$c_seqLow$c_seqF1$c_seqF1";


$c_bits[A]="$c_seqHgh$c_seqF1$c_seqF1$c_seqF1";
$c_bits[B]="$c_seqF1$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[C]="$c_seqF1$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[D]="$c_seqF1$c_seqF1$c_seqF1$c_seqHgh";

$c_bits[1]="$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[2]="$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[3]="$c_seqF1$c_seqF1$c_seqHgh";


my ($state) = "$_[2]";
if ($state eq "on")
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AN$c_tx433ver,$c_speed";
}
else
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AUS$c_tx433ver,$c_speed";
}


my ($socket,$data);
#  We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>'Deine IPadresse:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}


oder so:

use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;
use Time::Piece;
$main::NextUpdate = ();

sub revtele {
my $SendData="";
my $c_ip = "Deine IPadresse";
my $c_port = "49880";
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "10";
my $c_pause = "5600";
my $c_tune = "350";
my $c_baud = "25";
my $c_speed = "16";
my $c_master = "$_[0]";
my $c_slave = "$_[1]";
my $c_bitLow="1";
my $c_bitHgh="3";
my $c_tx433ver="1";

my $c_seqHgh="$c_bitHgh,$c_bitLow,$c_bitHgh,$c_bitLow,";
my $c_seqLow="$c_bitLow,$c_bitHgh,$c_bitLow,$c_bitHgh,";
my $c_seqF1="$c_bitLow,$c_bitHgh,$c_bitHgh,$c_bitLow,";


my $c_AN = "$c_seqF1$c_seqF1";
my $c_AUS = "$c_seqLow$c_seqLow";
my $c_add="$c_seqLow$c_seqF1$c_seqF1";


$c_bits[A]="$c_seqHgh$c_seqF1$c_seqF1$c_seqF1";
$c_bits[B]="$c_seqF1$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[C]="$c_seqF1$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[D]="$c_seqF1$c_seqF1$c_seqF1$c_seqHgh";

$c_bits[1]="$c_seqHgh$c_seqF1$c_seqF1";
$c_bits[2]="$c_seqF1$c_seqHgh$c_seqF1";
$c_bits[3]="$c_seqF1$c_seqF1$c_seqHgh";


my ($state) = "$_[2]";
if ($state eq "on")
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AN$c_tx433ver,$c_speed";
}
else
{
  $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bits[$c_master]$c_bits[$c_slave]$c_add$c_AUS$c_tx433ver,$c_speed";
}


my ($socket,$data);
#  We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>"$c_ip:$c_port",Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}


IPadresse nicht vergessen

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

RKronenberg

Hallo Rippi,

wir sind einen Schritt weiter, die blaue Aktivitäts-LED am Gateway sendet jetzt etwas, aber die Dosen schalten noch nicht.

2017.12.05 22:11:16 3: Schalter_8_ntfy return value: 1
2017.12.05 22:11:55 3: Schalter_8_ntfy return value: 1


ich glaube du bist kurz vor dem Ziel.

Gruß Ralph

RKronenberg

Hallo Rippi,

habe beide Versionen ausprobiert, beide sprechen das Gateway an, aber die Dosen schalten noch nicht.

Gruß Ralph

rippi46

Hallo RKonenberg,

vielleicht kannst du es noch einmal probieren. Habe vermutlich ein Komma vergessen.

habe den Code im letzten Beitrag geändert.

ich habe als Beispiel auch den direkten Code für A1 für on und off zum testen.

on:$SendData = "TXP:0,0,10,5600,350,25,3,1,3,1,1,3,3,1,1,3,3,1,1,3,3,1,3,1,3,1,1,3,3,1,1,3,3,1,1,3,1,3,1,3,3,1,1,3,3,1,1,3,3,1,1,3,3,1,1,16";

off:$SendData = "TXP:0,0,10,5600,350,25,3,1,3,1,1,3,3,1,1,3,3,1,1,3,3,1,3,1,3,1,1,3,3,1,1,3,3,1,1,3,1,3,1,3,3,1,1,3,3,1,1,3,1,3,1,3,1,3,1,16";

zum Testen einfach die beiden Zeilen in der 99_revteleUtils.pm austauschen, außer es funktioniert so schon

Gruß rippi.
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

RKronenberg

Hallo Rippi,

Guten Morgen 😄, habe gestern noch bis 2:00 Uhr an dem Problem gesessen. Bei $c_tx433ver="1" habe ich ein Komma angehängt ="1," . War aber noch nicht zielführend. Am Ende von $SendData gehört da nicht hinter $c_speed nicht noch ein ";" ?

Ich habe dann noch mit Wireshark versucht mal zu sehen, ob und was mein Raspi an das Gateway schickt, das war leider nicht von Erfolg gekrönt. Ein Paket von meinem Fire Tablet mit Powerswitch konnte ich aber aufzeichnen. Sitze gerade nicht an meinem Rechner, schicke das aber gleich mal nach...

Gruß Ralph

RKronenberg

So, hier der Mitschnitt:

0000  54 58 50 3a 30 2c 30 2c 31 30 2c 35 36 30 30 2c   TXP:0,0,10,5600,
0010  33 35 30 2c 32 35 2c 33 2c 31 2c 33 2c 31 2c 31   350,25,3,1,3,1,1
0020  2c 33 2c 33 2c 31 2c 31 2c 33 2c 33 2c 31 2c 31   ,3,3,1,1,3,3,1,1
0030  2c 33 2c 33 2c 31 2c 33 2c 31 2c 33 2c 31 2c 31   ,3,3,1,3,1,3,1,1
0040  2c 33 2c 33 2c 31 2c 31 2c 33 2c 33 2c 31 2c 31   ,3,3,1,1,3,3,1,1
0050  2c 33 2c 31 2c 33 2c 31 2c 33 2c 33 2c 31 2c 31   ,3,1,3,1,3,3,1,1
0060  2c 33 2c 33 2c 31 2c 31 2c 33 2c 33 2c 31 2c 31   ,3,3,1,1,3,3,1,1
0070  2c 33 2c 33 2c 31 2c 31 2c 31 36 3b               ,3,3,1,1,16;


das ist eine funktionierende Einschaltsequenz.

Gruß Ralph