Connair über FHEM steuern

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

Vorheriges Thema - Nächstes Thema

rippi46

Hallo zusammen,

bin über Simple Solutions an den Connair-Gateway gekommen, und habe meine Brennenstuhl, Elro und Intertechno Funkschalter geschalten.
Nachdem ich dann später auch noch die Heizköperthermostate von MAX! über den MAXLAN-Gateway steuerte bin ich auf die geniale Software FHEM gestoßen.
Leider gab es da keine Möglichkeit den Connair zu integrieren, deshalb habe ich versucht ( und eigentlich ist es mir auch gelungen) den Connair über FHEM anzusteuern.
Falls jemand Interesse hat kann er den Code bei sich integrieren.

Eintragung in der  fhem.cfg


define Umwaelzpumpe dummy
attr Umwaelzpumpe alias Umwälzpumpe Garage
attr Umwaelzpumpe eventMap BI:on B0:off
attr Umwaelzpumpe room Garage
attr Umwaelzpumpe setList state:on,off
define Umwaelzpumpe_ntfy notify Umwaelzpumpe:.* {\
    my $master = "01010";;\
    my $slave = "11101";;\
    my $v=Value("Umwaelzpumpe");;\
    if ($v eq "on") {connair("on",bin2dec("$master"),bin2dec("$slave"))};;\
    if ($v eq "off") {connair("off",bin2dec("$master"),bin2dec("$slave"))};;\
    }



Eintragung in der 99_myUtils.pm
die IP des Connair muß noch eingetragen werden


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

sub connair {
my $c_ip = "192.168.x.x";
my $c_port = "49880";
my $c_speed = "16";
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "15";
my $c_pause = "5600";
my $c_tune = "350";
my $c_baud = "25";
my $c_speed = "16";
my $c_AN = "1,3,1,3,3";
my $c_AUS = "3,1,1,3,1";
my $c_master = "$_[1]";
my $c_slave = "$_[2]";
my $c_bitLow="1";
my $c_bitHgh="3";

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


$c_bits[0]="$c_seqLow$c_seqLow$c_seqLow$c_seqLow$c_seqLow";
$c_bits[1]="$c_seqLow$c_seqLow$c_seqLow$c_seqLow$c_seqHgh";
$c_bits[2]="$c_seqLow$c_seqLow$c_seqLow$c_seqHgh$c_seqLow";
$c_bits[3]="$c_seqLow$c_seqLow$c_seqLow$c_seqHgh$c_seqHgh";
$c_bits[4]="$c_seqLow$c_seqLow$c_seqHgh$c_seqLow$c_seqLow";
$c_bits[5]="$c_seqLow$c_seqLow$c_seqHgh$c_seqLow$c_seqHgh";
$c_bits[6]="$c_seqLow$c_seqLow$c_seqHgh$c_seqHgh$c_seqLow";
$c_bits[7]="$c_seqLow$c_seqLow$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[8]="$c_seqLow$c_seqHgh$c_seqLow$c_seqLow$c_seqLow";
$c_bits[9]="$c_seqLow$c_seqHgh$c_seqLow$c_seqLow$c_seqHgh";
$c_bits[10]="$c_seqLow$c_seqHgh$c_seqLow$c_seqHgh$c_seqLow";
$c_bits[11]="$c_seqLow$c_seqHgh$c_seqLow$c_seqHgh$c_seqHgh";
$c_bits[12]="$c_seqLow$c_seqHgh$c_seqHgh$c_seqLow$c_seqLow";
$c_bits[13]="$c_seqLow$c_seqHgh$c_seqHgh$c_seqLow$c_seqHgh";
$c_bits[14]="$c_seqLow$c_seqHgh$c_seqHgh$c_seqHgh$c_seqLow";
$c_bits[15]="$c_seqLow$c_seqHgh$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[16]="$c_seqHgh$c_seqLow$c_seqLow$c_seqLow$c_seqLow";
$c_bits[17]="$c_seqHgh$c_seqLow$c_seqLow$c_seqLow$c_seqHgh";
$c_bits[18]="$c_seqHgh$c_seqLow$c_seqLow$c_seqHgh$c_seqLow";
$c_bits[19]="$c_seqHgh$c_seqLow$c_seqLow$c_seqHgh$c_seqHgh";
$c_bits[20]="$c_seqHgh$c_seqLow$c_seqHgh$c_seqLow$c_seqLow";
$c_bits[21]="$c_seqHgh$c_seqLow$c_seqHgh$c_seqLow$c_seqHgh";
$c_bits[22]="$c_seqHgh$c_seqLow$c_seqHgh$c_seqHgh$c_seqLow";
$c_bits[23]="$c_seqHgh$c_seqLow$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[24]="$c_seqHgh$c_seqHgh$c_seqLow$c_seqLow$c_seqLow";
$c_bits[25]="$c_seqHgh$c_seqHgh$c_seqLow$c_seqLow$c_seqHgh";
$c_bits[26]="$c_seqHgh$c_seqHgh$c_seqLow$c_seqHgh$c_seqLow";
$c_bits[27]="$c_seqHgh$c_seqHgh$c_seqLow$c_seqHgh$c_seqHgh";
$c_bits[28]="$c_seqHgh$c_seqHgh$c_seqHgh$c_seqLow$c_seqLow";
$c_bits[29]="$c_seqHgh$c_seqHgh$c_seqHgh$c_seqLow$c_seqHgh";
$c_bits[30]="$c_seqHgh$c_seqHgh$c_seqHgh$c_seqHgh$c_seqLow";
$c_bits[31]="$c_seqHgh$c_seqHgh$c_seqHgh$c_seqHgh$c_seqHgh";


 
my ($state) = "$_[0]";
if ($state eq "on")
{
  system("echo \"TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_bitHgh,$c_AN,1,1,$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_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_bitHgh,$c_AUS,1,1,$c_speed,;\" | nc -u $c_ip $c_port & pid=$! sleep 1 kill $pid 2>/dev/null >/dev/null");
}
}

sub bin2dec { return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); }





Leider sind mein Perlkenntnisse noch sehr mager und man kann das auch sicher noch schöner programmieren,aber es funktioniert.
Im Moment funktioniert es nur mit Brennenstuhl und Elro für Intertechno müssen die Parameter und der Sendestring angepasst werden.


Viel Spass damit.
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

mm

hi,

vielen dank, leider geht das bei mir nicht.

beim speichern bekomme ich:

2013.12.14 23:35:08 1: reload: Error:Modul 99_Utils deactivated:
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 276.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 277.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 278.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 279.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 280.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 281.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 282.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 283.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 284.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 285.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 286.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 287.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 288.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 289.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 290.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 291.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 292.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 293.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 294.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 295.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 296.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 297.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 298.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 299.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 300.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 301.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 302.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 303.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 304.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 305.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 306.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 307.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 314.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 314.
Global symbol "$pid" requires explicit package name at ./FHEM/99_Utils.pm line 314.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 318.
Global symbol "@c_bits" requires explicit package name at ./FHEM/99_Utils.pm line 318.
Global symbol "$pid" requires explicit package name at ./FHEM/99_Utils.pm line 318.

Danke

Joachim

Google mal:
requires explicit package name at
werden diverse Lösungen vorgeschlagen.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

mm

habe ich schon, dachte aber der code geht so.
hast Du strict ausgeklammert?

Joachim

FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

rippi46

Hallo mm,

wenn ich " use strict; " in meinen code einfüge, bekomme ich beim speicher die gleichen Fehlermeldungen.
Lasse es einfach mal weg, vielleicht funktioniert es dann.

Gruß

rippi46
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

UliM

Hi,

requires explicit package name
ist der Hinweis von perl, dass eine Variable verwendet wird, die zuvor nicht deklariert wurde.

Hast Du mal ein
my @c_bits;
eingefügt?

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

dirkeden

Hab auch noch Code zu dem Thema Connair:

define n_Leuchtstofflampe_actor notify Leuchtstofflampe_actor:* {connair("11100","00100","%")}



sub connair($$$){
my ($Master,$Slave,$action) = @_;
my  $SendData="";
my    $sA=0;
my    $sG=0;
my    $sRepeat=10;
my    $sPause=5600;
my    $sTune=350;
my    $sBaud=25;
my    $sSpeed=16;
my    $uSleep=800000;
my    $txversion=2;
my    $HEAD="TXP:$sA,$sG,$sRepeat,$sPause,$sTune,$sBaud,";
my    $TAIL=",$txversion,1,$sSpeed,;";
my    $AN="1,3,1,3,3";
my    $AUS="3,1,1,3,1";
my    $bitLow=1;
my    $bitHgh=3;
my    $seqLow=$bitHgh.",".$bitHgh.",".$bitLow.",".$bitLow.",";
my    $seqHgh=$bitHgh.",".$bitLow.",".$bitHgh.",".$bitLow.",";
my    $i=0;
my    $bit="";   
my    $msg="";

my  $bits=$Master;
    for($i=0; $i<length($bits); $i++) {   
        $bit=substr($bits,$i,1);
        if($bit=="0") {
            $msg=$msg.$seqLow;
        } else {
            $msg=$msg.$seqHgh;
        }
    }
my    $msgM=$msg;
   
    $bits=$Slave;
   
    $msg="";
    for($i=0; $i<length($bits); $i++) {
        $bit=substr($bits,$i,1);
        if($bit=="0") {
            $msg=$msg.$seqLow;
        } else {
            $msg=$msg.$seqHgh;
        }
    }
my    $msgS=$msg;

    if($action eq "on") {
        $SendData = $HEAD.$bitLow.",".$msgM.$msgS.$bitHgh.",".$AN.$TAIL;
    } else {
        $SendData = $HEAD.$bitLow.",".$msgM.$msgS.$bitHgh.",".$AUS.$TAIL;
    }
my ($socket,$data);
#  We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>'192.168.9.102:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}



Ollo65

moin,

ich habe mich jetzt auch mal an fhem gewagt und das Beispiel von rippi46 benutzt. Hat auch funktioniert.
Ich bekomme es nur leider nicht selbst hin, eine neue Lampe einzurichten.
Kann mir von euch vielleicht jemand erklären, wie ich z.B.
die Papierlampe im Kinderzimmer mit Elro (00001 00100) eingeben muss?
Was muß in die Befehlzeile von fhem rein geschrieben werden und was direkt 99_Utils.pm geschrieben werden oder in die fhem.cfg.

Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte

Grüße aus dem Norden

rippi46

#9
Hallo Ollo65,

wenn du den code von mir verwendest, muss der nachfolgende code in die fhem.cfg
In der Befehlszeile kannst du einfach "set Papierlampe on" bzw "set Papierlampe off" eingeben
(ohne Anführungsstriche).


define Papierlampe dummy
attr Papierlampe alias Papierlampe Kinderzimmer
attr Papierlampe eventMap BI:on B0:off
attr Papierlampe room Kinderzimmer
attr Papierlampe setList state:on,off
define Papierlampe_ntfy notify Papierlampe:.* {\
    my $master = "00001";;\
    my $slave = "00100";;\
    my $v=Value("Papierlampe");;\
    if ($v eq "on") {connair("on",bin2dec("$master"),bin2dec("$slave"))};;\
    if ($v eq "off") {connair("off",bin2dec("$master"),bin2dec("$slave"))};;\
    }


Oder du nimmst den code von dirkeden.


define Papierlampe dummy
attr Papierlampe alias Papierlampe Kinderzimmer
attr Papierlampe eventMap BI:on B0:off
attr Papierlampe room Kinderzimmer
attr Papierlampe setList state:on,off
define Papierlampe_ntfy notify Papierlampe:.* {\
    my $master = "00001";;\
    my $slave = "00100";;\
    my $v=Value("Papierlampe");;\
    if ($v eq "on") {connair("$master","$slave","on")};;\
    if ($v eq "off") {connair("$master","$slave","off")};;\
    }


Du musst dann aber die sub connair von dirkeden verwenden und in 99_myUtils kopieren.
Habe ich aber selber noch nicht getestet.(P.S.: funktioniert auch, ist sogar etwas eleganter)
Vielleicht kann ja dirkeden was dazu sagen.
Ansonsten musst du nur die Anweisungen im ersten Post befolgen.

Gruß rippi46

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

Ollo65

#10
hi rippi46,

hat wunderbar funktioniert.
ich danke Dir für Deine Hilfe.
Hat es von euch schon jemand geschafft einen timer zu integrieren.
Habe es mit "define onAt at 20:45 set Papierlampe on-for-timer 600" hat leider nicht funktioniert.

Gruß Ollo65

rippi46

Hallo Ollo65

define Timer_LautsprecherGaeste_off at *00:00:20 { fhem("set LautsprecherGaeste off")}
attr Timer_LautsprecherGaeste_off room Gästeklo,Timer


oder in Abhängigkeit mit Sonnenauf/untergang.

define Timer_Christbaum_on at *{sunset(-600)} { fhem("set ChristbaumHof on")}
attr Timer_Christbaum_on room Hof,Timer
define Timer_Christbaum_off at *{sunrise(+900)} { fhem("set ChristbaumHof off")}
attr Timer_Christbaum_off room Hof,Timer


so hat es bei mir funktioniert

Gruß

rippi46
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

Ollo65

Hallo rippi46,

Genial.......ich Danke Dir für Deine Hilfe.......funktioniert super.
Jetzt kann ich weiter basteln :)

Gruß Ollo65

ms81

Hallo,

kann ich damit auch direkt fertige TXP Codes senden bzw. gibt es eine andere Möglichkeit mit FHEM TXP Codes an den Gateway zu senden?

Ich möchte damit Rolladen Funkschalter von rohrmotor24 schalten, die TXP Codes habe ich durch anlernen in der Steckerchecker app und auslesen der UDP Pakete erhalten.

Es sind jeweils 3 TXP Codes: Auf,Ab und Stop.

In der Console kann ich z.b. mittels

echo "TXP:0,0,10,10920,91,42,57,18,8,4,4,8,8,4,4,8,4,8,4,8,4,8,8,4,8,4,4,8,8,4,8,4,8,4,4,8,8,4,4,8,4,8,8,4,4,8,8,4,8,4,8,4,4,8,8,4,8,4,4,8,8,4,8,4,4,8,8,4,8,4,8,4,4,8,8,4,4,8,8,4,4,8,8,4,4,8,8,120,0;" | nc -u 192.168.178.20 49880


einen Code absenden und der wird auch ausgeführt.

rippi46

Hallo ms81

das hier in die fhem.cfg


define RolladenW dummy
attr RolladenW alias Rolladen Wohnzimmer
attr RolladenW eventMap BI:auf B0:ab
attr RolladenW room Wohnzimmer
attr RolladenW setList state:auf,ab
define RolladenW_ntfy notify RolladenW:.* {\
    my $v=Value("RolladenW");;\
    if ($v eq "auf") {connair("auf")};;\
    if ($v eq "ab") {connair("ab")};;\
    }


und das in die 99_myUtils.pm


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

sub connair {

   
my ($state) = "$_[0]";
if ($state eq "auf")
{
  system("echo \"TXP:0,0,10,10920,91,42,57,18,8,4,4,8,8,4,4,8,4,8,4,8,4,8,8,4,8,4,4,8,8,4,8,4,8,4,4,8,8,4,4,8,4,8,8,4,4,8,8,4,8,4,8,4,4,8,8,4,8,4,4,8,8,4,8,4,4,8,8,4,8,4,8,4,4,8,8,4,4,8,8,4,4,8,8,4,4,8,8,120,0;\" | nc -u 192.168.178.20 49880 & pid=$! sleep 1 kill $pid 2>/dev/null >/dev/null");
}
else
{
  system("echo \Befehl für on oder off, da ich nicht weiss was der obere Befehl macht\" | nc -u 192.168.178.20 49880 & pid=$! sleep 1 kill $pid 2>/dev/null >/dev/null");
}
}



So könnte es funktionieren.
Keine Garantie!!
kannst dich  ja mal melden wenn es funktioniert hat

Gruß ripp46

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