Zurück   KNX-User-Forum > Öffentlicher Bereich > KNX EIB Forum > Code-Schnipsel
knx-user-forum - International KNX Award Winner 2010


Links
Kalender
Spende

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.07.2012, 19:37
Benutzerbild von swiss
Erfahrener Benutzer
 
Registriert seit: 28.12.2008
Beiträge: 2.804
swiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäre
Standard ComfoAir Steuerung über RS232

So...

Nachdem das Plugin nun bei mehreren Testern über eine längere Zeit im produktiven Einsatz ist stelle ich es mal in der aktuellen Version hier ein.

Mit dem Plugin ist es möglich die Zehnder ComfoAir direkt über einen USB-Seriell Wandler an das Wiregate anzubinden und über KNX zu steuern.

Des weiteren können auch diverse Rückmeldungen auf dem KNX ausgegeben werden.

EDIT: Neue Version mit separater Config

Plugin:
Code:
# Plugin zur Ansteuerung einer Zender ComfoAir
# Version 1.5 14.08.2012 BETA
# Copyright: swiss (http://knx-user-forum.de/members/swiss.html)
# Aufbau moeglichst so, dass man unterhalb der Einstellungen nichts veraendern muss!
#
#

####################
###Einstellungen:###
####################


#BITTE ab sofort die Einstellungen unter conf.d vornemen. Damit bleiben die Einstellungen auch bei einem Update erhalten.


######################
##ENDE Einstellungen##
######################


#Ab hier nichts mehr aendern.
#Hauptverarbeitung


#Erzeuge Variablen fuer die Zuordnung Steuerfunktionen zu den Gruppenadressen:
my $ga_stufeabwesend = ''; #1bit Trigger fuer Stufe "Abwesend". 1=Aktivieren
my $ga_stufe1 = ''; #1bit Trigger fuer Stufe1. 1=Aktivieren
my $ga_stufe2 = ''; #1bit Trigger fuer Stufe2. 1=Aktivieren
my $ga_stufe3 = ''; #1bit Trigger fuer Stufe3. 1=Aktivieren
my $ga_komforttemp = ''; #GA DPT 9.001 zum setzen der Komforttemperatur
my $ga_reset_filter = ''; #1bit Trigger fuer das Zuruecksetzen des Betriebsstundenzaehlers des Filters. 1=Reset
my $ga_reset_error = ''; #1bit Trigger fuer das zuruecksetzen der KWL nach einem Fehler. 1=Reset

#Hier werden die Gruppenadressen fuer die Rueckmeldungen vergeben: (Nich vergeben = inaktiv)
my $ga_status_ventilator_zul = ''; #GA DPT5.001 fuer Status Ventilator Zuluft %
my $ga_status_ventilator_abl = ''; #GA DPT5.001 fuer Status Ventilator Abluft %
my $ga_status_bypass_prozent = ''; #GA DPT5.001 fuer Status Bypassklappe %
my $ga_betriebsstunden_filter = ''; #GA DPT16.000 fuer die Rueckmeldung der Betribsstunden des Filters
my $ga_zustand_badschalter = ''; #GA DPT1.001 fuer die Rueckmeldung des Zustandes des Badezimmerschalters
my $ga_fehler_filter = ''; #GA DPT 1.001 fuer den Zustand des Filters. 0=OK, 1=Filter Voll
my $ga_fehlercode = ''; #GA DPT 16.000 fuer das augeben des Fehlercodes als Text

#Hier werden die Gruppenadressen für die Temperaturen vergeben: (Nicht vergeben=inaktiv)
my $ga_aul_temp = ''; #GA DPT 9.001 für die Aussenlufttemperatur
my $ga_zul_temp = ''; #GA DPT 9.001 für die Zulufttemperatur
my $ga_abl_temp = ''; #GA DPT 9.001 für die Ablufttemperatur
my $ga_fol_temp = ''; #GA DPT 9.001 für die Fortlufttemperatur

#Zuordnung der Namen fuer die RRD's:
my $Name_rrd_AUL = 'KWL_Aussenluft'; #Name RRD Aussenluft
my $Name_rrd_ZUL = 'KWL_Zuluft'; #Name RRD Zuluft
my $Name_rrd_ABL = 'KWL_Abluft'; #Name RRD Abluft
my $Name_rrd_FOL = 'KWL_Fortluft'; #Name RRD Fortluft

#Pfad zur seriellen Schnittstelle oder dem USB-Seriell-Wandler:
my $schnittstelle = '/dev/ttyUSB-1-1';

&readConf(); #conf.d einlesen

use Device::SerialPort;

my $return_value2;
my $daten;
my $reciv;
my $reciv_all;
my $ack = pack("H*","07F3");


# Zyklischer Aufruf nach restart, empfang GA oder nach einstellung rrd (typisch 300sek).
$plugin_info{$plugname.'_cycle'}  = 25; 

#Einrichten der Seriellen Schnittstelle fuer die Kommunikation mit dem ComfoAir
my $seriel = Device::SerialPort->new($schnittstelle) || die "Kann $schnittstelle nicht öffnen! ($!)\n";
$seriel->baudrate(9600);
$seriel->parity("none");
$seriel->databits(8);
$seriel->stopbits(1);

#plugin_log($plugname,''); 

if ($msg{'apci'} eq "A_GroupValue_Write"){ #Wenn ein Telegramm vom KNX empfangen wird, ab hier auswerten
    if ($msg{'dst'} eq $ga_stufeabwesend && knx_read($msg{'dst'},0,1) == 1) {
        $daten = "00990101";
        plugin_log($plugname,'Stufe abwesend');
        $return_value2 = command_senden($daten);
    }elsif ($msg{'dst'} eq $ga_stufe1 && knx_read($msg{'dst'},0,1) == 1) {
        $daten = "00990102";
        plugin_log($plugname,'Stufe 1');
        $return_value2 = command_senden($daten);
    }elsif ($msg{'dst'} eq $ga_stufe2 && knx_read($msg{'dst'},0,1) == 1) {
        $daten = "00990103";
        plugin_log($plugname,'Stufe 2');
        $return_value2 = command_senden($daten);
    }elsif ($msg{'dst'} eq $ga_stufe3 && knx_read($msg{'dst'},0,1) == 1) {
        $daten = "00990104";
        plugin_log($plugname,'Stufe 3');
        $return_value2 = command_senden($daten);
    }elsif ($msg{'dst'} eq $ga_komforttemp) {
        my $komforttemp = knx_read($msg{'dst'},0,9.001);
        plugin_log($plugname,'Komforttemp    : ' . $komforttemp . '°C');
        my $temphex = ($komforttemp + 20)*2; #Rechne die Temperatur fuer die ComfoAir um
        $temphex = sprintf "%x" , $temphex; # Mache aus Integer HEX
        $daten = "00D301" . $temphex;
        $return_value2 = command_senden($daten);
    }elsif ($msg{'dst'} eq $ga_reset_filter && knx_read($msg{'dst'},0,1) == 1) {
        $daten = "00DB0400000001";
        plugin_log($plugname,'Filter zurücksetzen');
        $return_value2 = command_senden($daten);
    }elsif ($msg{'dst'} eq $ga_reset_error && knx_read($msg{'dst'},0,1) == 1) {
        $daten = "00DB0401000000";
        plugin_log($plugname,'Fehler zurücksetzen');
        $return_value2 = command_senden($daten);
    }
    return;
} else { # zyklischer Aufruf

    # Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen
    $plugin_subscribe{$ga_stufeabwesend}{$plugname} = 1;
    $plugin_subscribe{$ga_stufe1}{$plugname} = 1;
    $plugin_subscribe{$ga_stufe2}{$plugname} = 1;
    $plugin_subscribe{$ga_stufe3}{$plugname} = 1;
    $plugin_subscribe{$ga_komforttemp}{$plugname} = 1;
    $plugin_subscribe{$ga_reset_filter}{$plugname} = 1;
    $plugin_subscribe{$ga_reset_error}{$plugname} = 1;
    
    $daten = "00D100";
    plugin_log($plugname,'Temperatur abrufen');
    $return_value2 = command_senden($daten);
    
    if($ga_status_ventilator_zul && $ga_status_ventilator_abl){ #Nur wenn beide GA's vergeben sind, dann die Zust�nde der Ventilatoren abfragen
        $daten = "000B00";
        plugin_log($plugname,'Ventilator Status abrufen');
        $return_value2 = command_senden($daten);
    }
    if($ga_status_bypass_prozent){ #Nur wenn die GA vergeben ist, dann Zustand Bypassklappe abfragen
        $daten = "000D00";
        plugin_log($plugname,'Bypass Zustand abrufen');
        $return_value2 = command_senden($daten);
    }
    if($ga_betriebsstunden_filter){ #Nur wenn die GA vergeben ist, die Betriebsstunden abfragen
        $daten = "00DD00";
        plugin_log($plugname,'Betriebsstunden abrufen');
        $return_value2 = command_senden($daten);
    }
    if($ga_zustand_badschalter){ #Nur wenn die GA vergeben ist, die Binaereingaenge abfragen
        $daten = "000300";
        plugin_log($plugname,'Binäreingänge abrufen');
        $return_value2 = command_senden($daten);
    }

    #Hier werden die Stoermeldungen abgefragt
    $daten = "00D900";
    plugin_log($plugname,'Störungen abrufen');
    $return_value2 = command_senden($daten);
    
    return;
}

# Ab hier wird das Datenpaket inklusive Checksumme zusammengestellt und an die ComfoAir uebertragen
sub command_senden{
    my $checksum = 0;
    my $data = $_[0];
    
    my $datasum = $data . "AD"; #+173 fuer die Checksummenberechnung
    my @hex  = map { hex($_) } ($datasum =~ /(..)/g);
    
    
    my $x07warschon = 0;
    
    foreach (@hex) {
        $checksum += ($_) unless $x07warschon; # unless ist dasselbe wie if not/!
        if ($_ == 0x07) { $x07warschon = 1; }
    }

    $checksum = sprintf "%x\n" , $checksum; #Mache aus Integer wieder HEX
    $checksum = substr($checksum,-3,2); #Verwede nur die letzten beiden Stellen
    my $command = pack("H*","07F0" . $data . $checksum . "070F");
    my $commandhex = $command;
    
    $commandhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg;
    #plugin_log($plugname,'transmit       : ' . $commandhex); #Zeigt im Pluginlog das fertige Datenpaket, dass �bertragen wird
    $seriel->write($command); #Befehl an die ComfoAir senden
    $reciv = '';
        
    $|=1;
    my $exit=0;
    while($exit < 25000)
    {
        my ($cin, $sin) = $seriel->read(45);
        if($cin > 0){
        $sin = unpack "H*", $sin;
        $reciv .= $sin;
        $exit=0;
    }else{
        $exit++
    }

    if($reciv =~ /070f/i){           
           $seriel->write($ack); #ACK senden
            last;
    }
    }    


        my $test = substr($reciv,0,4);
        if($test eq '07f3'){
            $reciv = substr($reciv,4); #falls noch ein 07f3 enthalten ist, wir dieses hier entfernt.
            #plugin_log($plugname,'reciv neu      : ' . $reciv);
        }

    my $laenge = length($reciv); #Laenge des Antworttelegramms ermitteln

    if($reciv =~ /07f000D209/i and $laenge == 34){ #Wenn die Temperaturen empfangen wurden und die L�nge passt
        
        my $t1 = substr($reciv,12,2);
                my $t2 = substr($reciv,14,2);
                my $t3 = substr($reciv,16,2);
                my $t4 = substr($reciv,18,2);
                
                #Hier werden die Temperaturen "decodiert" damit sie einen Sinn ergeben
                $t1 =  (hex($t1)/2)-20;
                $t2 =  (hex($t2)/2)-20;
                $t3 =  (hex($t3)/2)-20;
                $t4 =  (hex($t4)/2)-20;
                
                #Wenn die GA's vergebenwurde, die Temperaturen auf die GA's senden
                if($ga_aul_temp ne ''){knx_write($ga_aul_temp,$t1,9.001);}
                if($ga_zul_temp ne ''){knx_write($ga_zul_temp,$t2,9.001);}
                if($ga_abl_temp ne ''){knx_write($ga_abl_temp,$t3,9.001);}
                if($ga_fol_temp ne ''){knx_write($ga_fol_temp,$t4,9.001);}
                
                #Ab hier werden die RRD's mit den aktuellen Temperaturen aktualisiert:
                update_rrd($Name_rrd_AUL,"",$t1);
                update_rrd($Name_rrd_ZUL,"",$t2);
                update_rrd($Name_rrd_ABL,"",$t3);
                update_rrd($Name_rrd_FOL,"",$t4);
                
                plugin_log($plugname,'AUL: ' . $t1 . '°C, ZUL:' . $t2 . '°C, ABL: ' . $t3 . '°C, FOL: ' . $t4 . '°C');

    }elsif($reciv =~ /07f0000C06/i and $laenge == 28){ #Wenn der Status fuer die Ventilatoren empfangen wurden
                my $vent_zul = substr($reciv,10,2);
                my $vent_abl = substr($reciv,12,2);
                plugin_log($plugname,'ZUL: ' . hex($vent_zul) . '% ABL: ' . hex($vent_abl) . '%');
                knx_write($ga_status_ventilator_zul,hex($vent_zul),5.001);
                knx_write($ga_status_ventilator_abl,hex($vent_abl),5.001);    
    }elsif($reciv =~ /07f0000E04/i and $laenge == 24){ #Wenn der Status fuer die Bypassklappe empfangen wurden
                my $bypass_prozent = substr($reciv,10,2);
                plugin_log($plugname,'Bypass: ' . hex($bypass_prozent) . '%');                
                knx_write($ga_status_bypass_prozent,hex($bypass_prozent),5.001);
    }elsif($reciv =~ /07f000DE14/i and $laenge == 56){ #Wenn die Rueckmeldung der Betriebsstunden empfangen wurden
                my $betriebsstunden_filter = substr($reciv,40,4);
                plugin_log($plugname,'Betriebsstunden: ' . hex($betriebsstunden_filter) . 'h');                 
                knx_write($ga_betriebsstunden_filter,hex($betriebsstunden_filter) . 'h',16.000);
    }elsif($reciv =~ /07f0000402/i){ #Wenn die Rueckmeldung der Binaereingaenge empfangen wurden
                my $zustand_badschalter = substr($reciv,12,1);
                plugin_log($plugname,'Zustand Badezimmerschalter: ' . $zustand_badschalter);                 
                knx_write($ga_zustand_badschalter,$zustand_badschalter,1.001);
    }elsif($reciv =~ /07f000DA11/i and $laenge == 50){ #Wenn die Rueckmeldung der Stoermeldungen empfangen wurden
                my $fehlerAlo = substr($reciv,10,2);
                my $fehlerAhi = substr($reciv,34,2);
                my $fehlerE = substr($reciv,12,2);
                my $fehlerFilter = substr($reciv,26,2);
                my $fehlerEA = substr($reciv,28,2);
                
        my $numAlo = 'A';
        my $numAhi = 'A';
        my $numE = 'A';
        my $numEA = 'A';
        
        $numAlo .= unpack("B*",pack("H*",$fehlerAlo));
        $numAhi .= unpack("B*",pack("H*",$fehlerAhi));
        $numE .= unpack("B*",pack("H*",$fehlerE));
        $numEA .= unpack("B*",pack("H*",$fehlerEA));
                        
                $fehlerAlo = reverse($numAlo); #Wandle den Wert in Binaer und drehe die Reihenfolge um. z.B 0x02 = 00000010 = 010000000
                $fehlerAlo = index($fehlerAlo,'1')+1; # Zaehle an welcher Stelle die 1 auftaucht (von links gelesen) z.B. 01000000 = INDEX 2 = Feler2

        if($fehlerAhi ne '00'){
            $fehlerAhi = index(reverse($numAhi),'1')+9;
        }else{
            $fehlerAhi = '';
        }
                $fehlerE = index(reverse($numE),'1')+1;
                $fehlerEA = index(reverse($numEA),'1')+1;
                
                if($fehlerAhi == 16){$fehlerAhi = 0;}
                
                if($ga_fehlercode){ #Wenn die GA fuer das uebertragen den Fehlercodes eingertagen wurde, ab hier auswerten

                    if($fehlerAlo > 0){
                        plugin_log($plugname,'Aktueller Fehlercode: A' . $fehlerAlo);
                        knx_write($ga_fehlercode,'A' . $fehlerAlo,16.001);
                    }elsif($fehlerAhi ne ''){
                        plugin_log($plugname,'Aktueller Fehlercode: A' . $fehlerAhi);
                        knx_write($ga_fehlercode,'A' . $fehlerAhi,16.001);                        
                    }elsif($fehlerE > 0){
                        plugin_log($plugname,'Aktueller Fehlercode: E' . $fehlerE);
                        knx_write($ga_fehlercode,'E' . $fehlerE,16.001);
                    }elsif($fehlerEA > 0){
                        plugin_log($plugname,'Aktueller Fehlercode: EA' . $fehlerEA);
                        knx_write($ga_fehlercode,'EA' . $fehlerEA,16.001);
                    }else{
                        plugin_log($plugname,'Aktueller Fehlercode: keiner' );
                        knx_write($ga_fehlercode,'keiner' . $fehlerEA,16.001);
                    }    
                }
                if(hex($fehlerFilter) > 0){
                    plugin_log($plugname,'Aktueller Fehler: Filter Voll');
                    knx_write($ga_fehler_filter,1,1);
                }else{
            knx_write($ga_fehler_filter,0,1);
                }               
    }
}

sub readConf
{
    my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
    if (! -f $confFile)
    {
        plugin_log($plugname, " no conf file [$confFile] found."); 
    }
    else
    {
        plugin_log($plugname, " reading conf file [$confFile]."); 
        open(CONF, $confFile);
        my @lines = <CONF>;
        close($confFile);
        my $result = eval("@lines");
        ($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
        if ($@) 
        {
            plugin_log($plugname, " conf file [$confFile] returned:");
            my @parts = split(/\n/, $@);
            plugin_log($plugname, " --> $_") foreach (@parts);
        }
    }
} # readConf
config:

Code:
####################
###Einstellungen:###
####################

#Zuordnung Steuerfunktionen zu den Gruppenadressen:
$ga_stufeabwesend = '14/7/0'; #1bit Trigger fuer Stufe "Abwesend". 1=Aktivieren
$ga_stufe1 = '14/7/1'; #1bit Trigger fuer Stufe1. 1=Aktivieren
$ga_stufe2 = '14/7/2'; #1bit Trigger fuer Stufe2. 1=Aktivieren
$ga_stufe3 = '14/7/3'; #1bit Trigger fuer Stufe3. 1=Aktivieren
$ga_komforttemp = '4/4/7'; #GA DPT 9.001 zum setzen der Komforttemperatur
$ga_reset_filter = '14/7/5'; #1bit Trigger fuer das Zuruecksetzen des Betriebsstundenzaehlers des Filters. 1=Reset
$ga_reset_error = '14/7/6'; #1bit Trigger fuer das zuruecksetzen der KWL nach einem Fehler. 1=Reset

#Hier werden die Gruppenadressen fuer die Rueckmeldungen vergeben: (Nich vergeben = inaktiv)
$ga_status_ventilator_zul = '14/4/3'; #GA DPT5.001 fuer Status Ventilator Zuluft %
$ga_status_ventilator_abl = '14/4/4'; #GA DPT5.001 fuer Status Ventilator Abluft %
$ga_status_bypass_prozent = '14/4/5'; #GA DPT5.001 fuer Status Bypassklappe %
$ga_betriebsstunden_filter = '14/4/6'; #GA DPT16.000 fuer die Rueckmeldung der Betribsstunden des Filters
$ga_zustand_badschalter = ''; #GA DPT1.001 fuer die Rueckmeldung des Zustandes des Badezimmerschalters
$ga_fehler_filter = '14/0/5'; #GA DPT 1.001 fuer den Zustand des Filters. 0=OK, 1=Filter Voll
$ga_fehlercode = '14/0/6'; #GA DPT 16.000 fuer das augeben des Fehlercodes als Text

#Hier werden die Gruppenadressen für die Temperaturen vergeben: (Nicht vergeben=inaktiv)
$ga_aul_temp = '14/0/8'; #GA DPT 9.001 für die Aussenlufttemperatur
$ga_zul_temp = '14/0/9'; #GA DPT 9.001 für die Zulufttemperatur
$ga_abl_temp = '14/0/10'; #GA DPT 9.001 für die Ablufttemperatur
$ga_fol_temp = '14/0/11'; #GA DPT 9.001 für die Fortlufttemperatur

#Zuordnung der Namen fuer die RRD's:
$Name_rrd_AUL = 'KWL_Aussenluft'; #Name RRD Aussenluft
$Name_rrd_ZUL = 'KWL_Zuluft'; #Name RRD Zuluft
$Name_rrd_ABL = 'KWL_Abluft'; #Name RRD Abluft
$Name_rrd_FOL = 'KWL_Fortluft'; #Name RRD Fortluft

#Pfad zur seriellen Schnittstelle oder dem USB-Seriell-Wandler:
$schnittstelle = '/dev/ttyUSB-1-2';

######################
##ENDE Einstellungen##
######################
__________________
Gruss Patrik alias swiss

Geändert von swiss (23.08.2012 um 20:45 Uhr)
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #2  
Alt 14.08.2012, 01:26
Neuer Benutzer
 
Registriert seit: 19.05.2012
Ort: Wien
Beiträge: 8
docben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das klingt ja phantastisch!
Wie kann ich herausfinden, ob das auch bei meiner Paul Novus 450 funktioniert?
Wenn es auch nur eine geringe Chance dafür gibt kauf ich mir sofort ein wiregate...

Thx, docben
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #3  
Alt 16.08.2012, 21:48
Benutzerbild von swiss
Erfahrener Benutzer
 
Registriert seit: 28.12.2008
Beiträge: 2.804
swiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo docben

Leider kenne ich die Paul Novus 450 nicht. Beim kurzen überfliegen des Schemas fiel mir aber auf, dass dieses Gerät scheinbar keine RS232 schnittstelle besitzt. Auch das Protokoll könnte grundlegend anders sein Vieleicht findest du darüber etwas beim Hersteller heraus
__________________
Gruss Patrik alias swiss
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #4  
Alt 16.08.2012, 21:53
Neuer Benutzer
 
Registriert seit: 19.05.2012
Ort: Wien
Beiträge: 8
docben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

es hat einen RS485 Bus, also auch ein serielles Protokoll.
Der Hersteller stellt sich leider dumm und verweist mich auf den Installateur, der nicht einmal weiß was eine serielle Schnittstelle ist.

Danke, Ben
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #5  
Alt 16.08.2012, 22:00
Benutzerbild von swiss
Erfahrener Benutzer
 
Registriert seit: 28.12.2008
Beiträge: 2.804
swiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäre
Standard

Ja. Aber ein RS485 Protokoll ist ganz anders aufgebaut als ein RS232. Dabei geht es um Dinge wie Kolisionserkennung, Geräteadresse usw. Das ist bei dem von mir implementierten Protokoll das auf RS232 basiert nicht enthalten. Ich befürchte, das Plugin wird bei der Paul nicht funktionieren auch wenn es aus dem Hause Zehnder zu kommen scheint.

Wenn du aber gut in im Protokollerraten bist, kannst du versuchen die für dich wichtigen Befehle mitzuschneiden und eine Protokollbeschreibung für die Paul erstellen. Dann wäre eine Implementierung in einem Plugin nicht mehr so weit
Ansonnsten muss ich dich leider endtäuschen. Ohne Protokollbeschreibung wird das leider nichts

PS: USB ist auch seriell aber das Protokoll hat mit RS232 auch nicht viel gemeinsam.
__________________
Gruss Patrik alias swiss

Geändert von swiss (17.08.2012 um 12:04 Uhr)
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #6  
Alt 16.08.2012, 22:37
Neuer Benutzer
 
Registriert seit: 19.05.2012
Ort: Wien
Beiträge: 8
docben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ein bisschen hab ich schon mitgeloggt, ergibt allerdings noch keinen Sinn für mich...
Gibts es eine Beschreibung verschiedener etablierter RS485 Protokolle? Ich nehme an, die werden kein neues erfunden haben...
Danke, Ben
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #7  
Alt 17.08.2012, 02:09
Benutzerbild von GLT
GLT GLT ist offline
Erfahrener Benutzer
 
Registriert seit: 02.06.2007
Ort: Chiemgau
Beiträge: 1.527
GLT wird schon bald berühmt werdenGLT wird schon bald berühmt werden
Standard

Zitat von docben Beitrag anzeigen
Gibts es eine Beschreibung verschiedener etablierter RS485 Protokolle?
RS485 beschreibt einen elektrischen Standard - beileibe kein Protokoll.

Selbst bei Verwendung von MODBUS kämst Du nicht weiter, wenn die Funktion der Registeradressen unbekannt bleiben.
__________________
Gruss
GLT
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #8  
Alt 19.08.2012, 21:00
Neuer Benutzer
 
Registriert seit: 19.05.2012
Ort: Wien
Beiträge: 8
docben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok. Habe ich eine Chance wenn ich über einen RS485 <> RS232 Umsetzer mitlogge? Und ein dann ein bekanntes Protokoll wie zB. Modbus annehme? Wie gesagt, ich nehme nicht an, dass die was ganz neues erfunden haben...
Meine Heizung (Ökofen Pelletsofen) hat auch einen RS485 Bus. Die ist nach der Lüftung dran...

Wie ist das beste Vorgehen, was brauche ich alles dazu?
(Anfänger halt :-)

Danke, Ben
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #9  
Alt 21.08.2012, 08:24
Benutzer
 
Registriert seit: 16.06.2010
Ort: Schweiz
Beiträge: 30
rschwend ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo

Kann ich die Applikation auch ohne Wiregate nutzen, z.B. mit HS oder EIBD?
Ich kann IP Telegramme senden/empfangen. Wie funktioniert die Umwandlung IP/Serial?

rschwend
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
  #10  
Alt 22.08.2012, 12:27
Benutzerbild von swiss
Erfahrener Benutzer
 
Registriert seit: 28.12.2008
Beiträge: 2.804
swiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäreswiss sorgt für eine eindrucksvolle Atmosphäre
Standard

Zum Tema Protokoll sniffen und interpretieren kann ich nichts sagen. Da habe ich 0 Ahnung...

Zum nutzen des Plugins im hs oder mit eibd:

HS... Naja geht nur sehr beschränkt. Wird sich wohl auf das senden beschränken und du must das Protokoll vollständig neu implementieren. Das Plugin so wie es hier oben veröffentlicht ist, kannst du im HS nicht nutzen.

eibd... Das hängt sehr stark von deinen Linuxkentnissen ab. Da hängen sehr viele Dinge dran. EIBD ist nur die Schnittstelle zum KNX (Softwaremässig). Dann brauchst du noch einen Perl-interpreter eine lib die dir knxread und knxwrite zur Verfügung stellt, dann noch das RRD-Tool und unter umständem musst du doch noch das Plugin anpassen...

-> Da ist mir ein WG für 300 Euro in dem ich einfach nur das Plugin hineinkopieren muss und den USB-Seriell wandler anschliessen kann 1000 mal lieber
__________________
Gruss Patrik alias swiss

Geändert von swiss (09.12.2012 um 21:47 Uhr)
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Stichworte
comfoair; zehnder;

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[KNX/EIB] Unterschied RS232 und RS232 Ft1.2 aides KNX EIB Forum 7 16.09.2010 21:04
Moxa 5110 / 5150 (RS232) / IRTrans Stingel KNX EIB Forum 19 20.12.2009 13:52
Expresscard to rs232 schnittstelle 1984Chris KNX EIB Forum 6 19.10.2009 23:07
Protokoll zur Steuerung von LG LCD über RS232 jonofe KNX EIB Forum 8 13.10.2009 07:09
Welche Steuerung für Wärmepumpe obi KNX EIB Forum 0 28.09.2009 07:09


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:11 Uhr.



SEO by vBSEO