Connair über FHEM steuern

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

Vorheriges Thema - Nächstes Thema

McElch

Ja, das ist schade, aber wie gesagt, ich bin sehr glücklich damit, dass die ConnAir wieder was zu tun hat.

Ich will eh den Rest eigentlich mit Arduinos machen. Dass die ConnAir den gesamten Bereich "Funksteckdosen" übernimmt, ist doch klasse.

Mal sehen was ich für die neue Wohnung dann noch alles brauche. Wenn man weiß, was die vorhandene Technik alles kann und was nicht, kann man ja entsprechend passende Sachen zukaufen.

Viele Grüße
Nico

McElch

Hi Rippi,

sag mal, hast du vielleicht für intertechno auch noch eine UDP-Lösung in der Schublade? Habe deinen Code für das einzige Intertechno-Gerät was ich habe, eine E27-lampenfassung ausprobiert, da kommt auch die nc not found Fehlermeldung.

Wenn nicht ist das nicht schlimm, früher oder später muss ich mir das mit dem netcat auf der Synology eh mal ansehen.

Vielen Dank & VG
McElch

rippi46

Hi McElch

keine Garantie!

aber probiers mal damit:

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

sub intertech {
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "6";
my $c_pause = "11125";
my $c_tune = "89";
my $c_baud = "25";
my $c_speed = "125";
my $c_AN = "12,4,4,12,12,4";
my $c_AUS = "12,4,4,12,4,12";
my $c_master = "$_[1]";
my $c_slave = "$_[2]";
my $c_bitLow="4";
my $c_bitHgh="12";

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


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

$c_bits[1]="$c_seqHgh$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[2]="$c_seqLow$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[3]="$c_seqHgh$c_seqLow$c_seqLow$c_seqHgh";
   
my ($state) = "$_[0]";

if($state eq "on") {
        $SendData = "$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_seqHgh$c_seqLow$c_bitHgh,$c_AN,1,$c_speed";
    } else {
        $SendData = "$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_seqHgh$c_seqLow$c_bitHgh,$c_AUS,1,$c_speed";
    }
my ($socket,$data);
#  We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>'192.168.178.40:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();
}


IP wieder anpassen!

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

McElch

Und wieder sieht das log gleich freundlicher aus:

2016.03.14 16:29:36 3: Kuechendecke_ntfy return value: 1
2016.03.14 16:29:37 3: Kuechendecke_ntfy return value: 1
2016.03.14 16:29:39 3: Kuechendecke_ntfy return value: 1
2016.03.14 16:29:41 3: Kuechendecke_ntfy return value: 1
2016.03.14 16:30:02 3: Kuechendecke_ntfy return value: 1
2016.03.14 16:30:06 3: Kuechendecke_ntfy return value: 1

Aber es schaltet nicht. Das kann jetzt aber an allem möglichen liegen, zB dass die Fassung ja schon irgendeinen Code hatte, den ich nicht mehr kenne, und sich mit einer anderen Code-Kombi nicht anlernen lässt, oder?

Ist jetzt aber wirklich nicht schlimm. Ich hab wie gesagt nur die eine Fassung. Kannst du mir eine Kaufempfehlung für Fassungen geben, die leicht mit der Connair funktionieren? Ich werde da sicher in der neuen Wohnung die eine oder andere haben wollen.

Vielen Dank!
McElch :)

rippi46

Hi McElch,

wenn ich mich recht entsinne, musste ich meine Intertechno  in den Lernmodus versetzen, und dann mit meinem Connair irgendeinen Code senden. Anschließend konnte ich die Intertechno 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

McElch

Ja, genauso habe ich das versucht. Habe mir extra die Anleitung von der Fassung nochmal runtergeladen. Den Code aus deinem Beispiel habe ich nicht verändert, weil der ja eigentlich egal ist, die Fassung sollte es ja lernen.

So hat das damals auch mit der alten Software ( http://www.l3x.de/connair/ ) geklappt. ich hatte nie eine Fernbedienung für das Teil.

Factory Setting klappt nach Handbuch nur mit einem gepairten Handsender - finde den Fehler! :)

Ist aber wie gesagt nicht schlimm. Ich werde mir neue Fassungen suchen und vorher drauf achten, dass die mit dem Connair gehen.

VG
McElch

rippi46

#111
Hallo McElch,

ich habs noch einmal mit udp probiert. Der Code aus post #107 hat auch bei mir nicht funktioniert.
Der Connair leuchtet zwar auf, aber es passiert nichts.

Ich habe jetzt den Code abgeändert und dieser funktioniert jetzt bei mir.

sub intertech_udp {
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "6";
my $c_pause = "11125";
my $c_tune = "89";
my $c_baud = "25";
my $c_speed = "125";
my $c_AN = "12,4,4,12,12,4";
my $c_AUS = "12,4,4,12,4,12";
my $c_master = "$_[1]";
my $c_slave = "$_[2]";
my $c_bitLow="4";
my $c_bitHgh="12";

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


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

$c_bits[1]="$c_seqHgh$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[2]="$c_seqLow$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[3]="$c_seqHgh$c_seqLow$c_seqLow$c_seqHgh";
   
my ($state) = "$_[0]";
if ($state eq "on")
    {
        $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_seqHgh$c_seqLow$c_bitHgh,$c_AN,1,$c_speed";
    } else {
        $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_seqHgh$c_seqLow$c_bitHgh,$c_AUS,1,$c_speed";
    }
my ($socket,$data);
#  We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>'192.168.178.40:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}


IP anpassen und reload 99_Modulname.pm eingeben um das Modul, in dem sich die Routine befindet neu zu laden.

P.S.: in der fhem.cfg dann halt mit intertech_udp aufrufen.

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

McElch

Hat funktioniert! Genial!

Nochmal viiieeeelen Dank!!! :)

Tompsg

Wer Interesse hat, ich schreibe gerade ein Brematic-Modul (ähnlich Connair). Aktuell kann ich Brematic und Intertechno und noch ein undefinerbares 2722-Gerät damit steuern. Ich stelle es gerne zur Verfügung, wenn fertig auch offiziell.

rippi46

Hallo Tompsg,

finde ich eine super Idee.
Bin leider nicht so der Programmierer, aber habe mir damals den Connair in Fhem über myutils eingebunden.
Der Connair kann leider kein Empfang.
Kann der Brematic empfangen?

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

Tompsg

Die Brematic kann leider auch nicht empfangen. Ich steuere damit alles, was sowieso nichts zurück meldet und unkritisch ist, wenn es mal nicht klappt.

Elbwurm

Hallo zusammen...

Ich denke ich könnte hier mit meinem Problem ganz gut aufgehoben sein...

Zur Basis:

Intel NUC mit Win10
fhem 5.7
Brematic Gateway

Elro/Brennstuhl Funksteckdosen die mit Hilfe dieses Threads einwandfrei funktionieren.

Intertechno strteikt und ich habe keine Ahnung warum.
Ich bin absoluter Frischling und kann vieles nicht interpretieren oder auch nur Ansatzweise verstehen.

Trotzdem mag ich nicht aufgeben und hoffe hier kann mir geholfen werden.

Einträge in der myUtils sehen folgendermaßen aus...
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

# use strict;
use warnings;
use POSIX;
use CGI qw(:standard);
use IO::Socket;
use MIME::Base64;
use Time::Piece;

sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}



# start with your own functions below this line

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.178.50:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}

sub intertech_udp {
my $c_A = "0";
my $c_G = "0";
my $c_repeat = "6";
my $c_pause = "11125";
my $c_tune = "89";
my $c_baud = "25";
my $c_speed = "125";
my $c_AN = "12,4,4,12,12,4";
my $c_AUS = "12,4,4,12,4,12";
my $c_master = "$_[1]";
my $c_slave = "$_[2]";
my $c_bitLow="4";
my $c_bitHgh="12";

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

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

$c_bits[1]="$c_seqHgh$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[2]="$c_seqLow$c_seqHgh$c_seqHgh$c_seqHgh";
$c_bits[3]="$c_seqHgh$c_seqLow$c_seqLow$c_seqHgh";
   
my ($state) = "$_[0]";
if ($state eq "ON")
    {
        $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_seqHgh$c_seqLow$c_bitHgh,$c_AN,1,$c_speed";
    } else {
        $SendData = "TXP:$c_A,$c_G,$c_repeat,$c_pause,$c_tune,$c_baud,$c_bitLow,$c_bits[$c_master]$c_bits[$c_slave]$c_seqHgh$c_seqLow$c_bitHgh,$c_AUS,1,$c_speed";
    }
my ($socket,$data);
# We call IO::Socket::INET->new() to create the UDP Socket
$socket = new IO::Socket::INET(PeerAddr=>'192.168.178.50:49880',Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
$socket->send($SendData);

$socket->close();

}


1;


In der fhem.cfg für die Intertechno (Code A3)
define lk dummy
attr lk alias lk
attr lk eventMap BI:on B0:off
attr lk setList state:on,off
attr lk userReadings STATE
define lk_ntfy notify lk:.* {\
    my $master = "A";;\
    my $slave = "3";;\
    my $state=Value("lk");;\
    if ($state eq "on") {intertech_udp("$master","$slave","on")};;\
    if ($state eq "off") {intertech_udp("$master","$slave","off")};;\
    }


Im LOG taucht etwas auf was ich absolut nicht verstehe bzw. weiß wie ich es "beheben" kann.

2016.09.25 09:32:19 1: PERL WARNING: Argument "A" isn't numeric in array element at ./FHEM/99_MyUtils.pm line 107.
2016.09.25 09:32:19 1: PERL WARNING: Argument "B" isn't numeric in array element at ./FHEM/99_MyUtils.pm line 108.
2016.09.25 09:32:19 1: PERL WARNING: Argument "C" isn't numeric in array element at ./FHEM/99_MyUtils.pm line 109.
2016.09.25 09:32:19 1: PERL WARNING: Argument "D" isn't numeric in array element at ./FHEM/99_MyUtils.pm line 110.


und

PERL WARNING: Argument "on" isn't numeric in array or hash lookup at ./FHEM/99_MyUtils.pm line 121.
PERL WARNING: Argument "off" isn't numeric in array or hash lookup at ./FHEM/99_MyUtils.pm line 121.


Also wie gesagt, der Thread hier hat mir also schon deutlich weitergeholfen indem ich die Elros und Brennstuhl Schalten kann.
Die Intertechno bereiten mir als Anfänger Kopfweh.

Das Gatway wird scheinbar angesprochen... Die Lampe leuchtet blau auf.
Auch ein Mitschnitt des reinen TXP-Signals von der App Powerswitch scheint sich mit den Abfolgen des intertech_udp 1:1 zu decken bis auf $c_speed der im Mitschnitt bei 140 liegt im Gegensatz zum Eintrag im Script wo 125 eingetragen sind.

So, ich hoffe damit kann jemand etwas anfangen und mir weiterhelfen bitte.

VG ELbwurm
Nimm dir Zeit freundlich zu sein, dass ist der Weg zum Glück.

rippi46

Hallo Elbwurm,

so auf Anhieb kann ich keinen Unterschied feststellen. hast du den Code aus Post #111 genommen?
Dieser sollte eigentlich funktionieren.

Was du vielleicht auch noch berücksichtigen solltest, dass der connair(brennenstuhlGW) angelernt werden muß.

Zitatwenn ich mich recht entsinne, musste ich meine Intertechno  in den Lernmodus versetzen, und dann mit meinem Connair irgendeinen Code senden. Anschließend konnte ich die Intertechno 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

Elbwurm

Hallo Rippi,

ich war der Meinung das diese Sache mit dem Anlernen was mit Empfängern ohne Codierrad zu tun hat!?
Habe hier 3 x PAR 1500 mit Codierrad und die Fernbedienung PAR 1000 dazu.

Ich glaube der Code war tatsächlich aus #111 aber beschwören möchte ich es nicht.

So ganz verstehe ich das nicht mit dem Anlernen...

Also z.B. Empfänger in den Lernmodus (wie auch immer das geht, muss ich mal Google bemühen)
Dann mit der App vom Smartphone ein Signal absetzen?
Nimm dir Zeit freundlich zu sein, dass ist der Weg zum Glück.

rippi46

Hallo Elbwurm,

ich denke es war kein richtiges Anlernen, sondern eher eine Berechtigung diesen Funkempfänger zu schalten.
Also ich mußte einmal im Lernmodus(Setup etc) den Funkempfänger mit dem eingestellten Code schalten.

Was mir noch aufgefallen ist: In meinen Dummy habe ich kein "userReadings STATE".

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