+ Antworten
Seite 1 von 24 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 236
  1. #1
    Registriert seit
    Feb 2008
    Ort
    127.0.0.1
    Beiträge
    455

    Lightbulb Temperaturwerte aus einem Pelletkessel der FA. ETA auslesen

    Version 2.0

    Hallo Freunde,

    Ich habe mich mal mit dem Datenprotokoll der Fa. ETA beschäftigt. Und will meine Erfahrungen mit euch teilen.
    Ich habe mir das Protokoll von ETA per Mail senden lassen.

    Link: Protokoll gibt es auf Anfrage bei der Fa. ETA

    1. Hardware:
    An meinem Heizkessel (PE15) hängt hinten ein serielles Schnittstellenkabel raus.
    Da mein IPSymcon PC aber mindestens 10m weg ist, habe ich eine Velängerung gebaut.
    Es werden nur 3 Adern im 9-pol Sub D Stecker benötigt.

    RX 2
    TX 3
    GND 5

    2. Software
    Als erstes muß in IPS eine "Serial Port" Instance hinzugefügt werden. Die Parameter wie im Bild eingeben:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	COM.png 
Hits:	2143 
Größe:	25.4 KB 
ID:	4429

    Danach eine "Cutter" Instance anlegen mit dem eben angelegtem Serial Port verbinden und wie im Bild konfigurieren.
    Da alle Daten die vom Kessel kommen, mit "{" und "}" begrenzt sind, läßt sich damit der Datenstring gut einsammeln und weiterverarbeiten.
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Cutter.png 
Hits:	1452 
Größe:	28.7 KB 
ID:	4428

    Als letztes eine "Register Variable" Instance anlegen und mit dem "Cutter" verbinden.
    Die Register Variable wie folgt konfigurieren.
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Register.png 
Hits:	1395 
Größe:	31.7 KB 
ID:	4430

    Der Kessel sendet in einstellbaren Intervallen die gewünschten Parameter/Temperaturen.
    Um dies zu veranlassen dieses Script einmalig ausführen:
    PHP-Code:
    <?
    /*
    File     : Datenanforderung_ETA.ips.php
    */
    // Konfigurationsteil
    $ID 24136;  //Instances ID des COM-Ports
    $Anzahl =11;  // Anzahl der Auszulesenden Parameter
    $Para1 19;  //Abgastemperatur
    $Para2 20;  //Kesseltemp
    $Para3 21;  //Boilertemp
    $Para4 22;  //Aussentemp
    $Para5 23;  //Kesselvorlauf
    $Para6 24;  //Vorlauftemperatur
    $Para7 86;  //Pelletsvorrat
    $Para8 18;  //Luftschieber in %
    $Para9 28;  //Gebläsedrehzahl  in U/min
    $Para10 63//Behälterinhalt
    $Para11 73//Tag/Nacht Modus MK0
    $Para12 53;
    $Para13 54;
    $Para14 55;
    $Para15 56;
    $Para16 57;
    $Para17 58;
    $Para18 59;
    $Para19 70//Tag/Nacht Modus Direktkreis

    $HighByte 0//normalerweise immer 0
    $Intervall 90;  // RefreshTime , aller wieviele Sekunden sollen die Daten von der Heizung gesendet werden
    $Node 16;  //hier: Pelletkessel  bis 30kW(16 + 0 )
    //NodeNr: Setzt sich aus der Grundnummer + der Knotenschalterstellung zusammen.

    //Knotenschalter:
    //Der Schalter (dip-Switch oder Drehschalter) befindet sich auf der Platine und steht standardmssig auf  0.

    //Grundnummer:
    //Scheitholzkessel: 0x08   (8 decimal)
    //Pelletskessel bis 30 kW: 0x10  (16 decimal)
    //Pelletskessel ab 35 kW: 0x18   (24 decimal)
    //Hackgutfeuerung: Hauptplatine 0x18, Drehstromplatine 0x28
    //Heizungserweiterung: 0x20   (32 decimal)

    // Konfigurationsteil Ende

    //Prüfsummenberrechnung
    $PS = ($Anzahl $Node) + ( $Anzahl $HighByte) + $Intervall;
    for (
    $i=1$i<=$Anzahl$i++)
      {
      
    $a "Para" $i;
      
    $PS $PS + $$a;
      }
    $PS $PS 255;    // Rest aus Division durch 256

    //Prüfsummenberechnung Ende

    //Datenstring "bauen"
    //1. Byte     Startzeichen: immer { entspr. hex  0x7B
    //2. und 3. Byte    Servicekennung    (hier: "MC")
    //4. Byte      Anzahl der Nutzdatenbytes
    //5. Byte      Prfsumme: alle Nutzdatenbytes addiert, modulo 256
    //ab 6. Byte   Byte RefreshTime [sec.] (binr) und jeweils 3 byte Nutzdaten pro Parameter (1.Byte NodeNr (binr)  2. + 3. Byte: uword Monitorlistenindex (binr, zuerst HB,dann LB)
    //letztes Byte    Stoppzeichen immer } entspr. hex  0x7D

    $Daten ="{MC";                  //Startzeichen und Servicekennung
    $Daten .= chr(1+($Anzahl*3));   //Anzahl der Nutzdatenbytes ( RefreshTime + Anzahl * 3 byte)
    $Daten .= chr($PS);             //Prfsumme
    $Daten .= chr($Intervall);
    for (
    $i=1$i<=$Anzahl$i++)   //Die n Anzahl Parameter
      
    {
      
    $a "Para" $i;
      
    $Daten .= chr($Node) . chr($HighByte) . chr($$a);   //...jeweils 3 byte
      
    }
    $Daten .= "}";                   //Stoppzeichen
    //Datenstring "bauen" Ende

    //Datenstring ausgeben
    ComPort_SendText($ID$Daten);

    ?>
    Dieses Script muß nur einmal ausgeführt werden ( einfach 1x Execute drücken) ,
    dann sendet der Kessel die Daten im eingestellten Intervall selbstständig.

    Zum Ausschalten der Datenübertragung 1x folgendes Script ausführen:
    PHP-Code:
    <?
    /*
    File     : Datenanforderung_ETA_aus.ips.php
    */
    $ID 24136;
    $Daten ="{ME";                //Startzeichen und Servicekennung
    $Daten .= chr(0);             //Anzahl der Nutzdatenbytes
    $Daten .= chr(0);             //Prüfsumme
    $Daten .= "}";                //Stoppzeichen

    ComPort_SendText($ID$Daten);
    ?>
    Das nächste Script empfängt den Datenstring, zerlegt ihn in die einzelnen Temperaturwerte und übergibt diese an IPS-Variablen.
    Die Variablen werden nach fogendem Schema vom Script selbst angelegt:
    Präfix + Monitorlistenindex (z.b. ETA.20)
    Das Script wird aufgerufen wenn neue Daten am Serial Port ankommen.
    PHP-Code:
     <?
    /*
    File     : COM_string_zerlegen.ips.php
    Trigger  : durch Registermodul bei Dateneingang
    dieses Script dient dazu den Datenstring der von der "ETA" Heizung gesendet wird,
    in einzelne Variablen zu zerlegen*/

    $Anzahl 20;   // Anzahl der übertragenen Parameter
    $COM_String $_IPS['VALUE']; //übernahme des Datenstrings aus dem Registermodul!
    $ID_Variablen_Kategorie 12345;
    /* ######## Einstellwerte ##############
    Werte die z.b. am Bedienpult der Heizung eingestellt werden,
    werden durch die Heizung mit der Kennung "MK" auf der Schnittstelle ausgegeben.
    Hier werden diese in IPS Variablen abgespeichert.*/
    if(substr($COM_String,0,2) == "MK") {
      
    $Index 256 ord($COM_String{5}) + ord($COM_String{6});
      
    $Value 256 ord($COM_String{7}) + ord($COM_String{8});
      
    ATN_SetValueByParentID("ETA.Set.".$Index$Value$ID_Variablen_Kategorie);
    }
    /*######### Fehlermeldungen ###########
    Fehlermeldungen werden durch die Kennung "IM" auf der Schnittstelle ausgegeben
    */
    if(substr($COM_String,0,2) == "IM") {     // Fehlermeldungen
      
    IPS_LogMessage"ETA PE 15"substr($COM_String,4) );
      
    // Mail/SMS senden u.s.w
    }
    /*######### Messwerte############
    Temperaturen und alle anderen Werte werden mit der Kennung "MD" ausgegeben
    Abspeichern der Werte in IPS Variablen*/
    if (strlen($COM_String) == $Anzahl *4   //kompletter Datensatz empfangen?
        
    AND substr($COM_String,0,2) == "MD")    //Kennung "MD"?
         
    {
        for (
    $i=01$i<=$Anzahl$i++){
          
    $Index ord($COM_String{$i*5+1});
          
    $Value 256 ord($COM_String{$i*5+2}) + ord($COM_String{$i*5+3});
          if(
    $Value >= 30000) {                 //Temperatur unter 0 C ?
            
    $Value $Value 65536;
          }
          switch (
    $Index) {
            Case 
    86:    //Pellettsvorrat
            
    Case 67:    //Restsauerstoffgehalt im Abgas in %
            
    Case 68:    //Gesamtverbrauch
                
    $Value $Value 100;
                break;
            Case 
    63:    //Behältervorrat
            
    Case 19:    //Abgastemperatur
            
    Case 20:    //Kesseltemperatur
            
    Case 23:    //Kesselvorlauf
            
    Case 18:    //Luftschieber
            
    Case 21:    //Warmwasser im Boiler
            
    Case 22:    //Aussentemperatur
            
    Case 24:    // Vorlauf MK0
                
    $Value $Value 10;
                break;
          }
        
    ATN_SetValueByParentID("ETA.".$Index$Value$ID_Variablen_Kategorie);
      }
    }

    function 
    ATN_SetValueByParentID($Variable,$Wert,$ParentID){
        
    $id = @IPS_GetVariableIDByName($Variable,$ParentID);
       if(
    $id == 0) {                         // wenn Variable fehlt: anlegen
           
    if     (is_bool($Wert))   $typ 0;
           elseif (
    is_int($Wert))    $typ 1;
           elseif (
    is_float($Wert))  $typ 2;
           elseif (
    is_string($Wert)) $typ 3;
          
    $id IPS_CreateVariable($typ);
          
    IPS_SetParent($id,$ParentID);
          
    IPS_SetName($id,$Variable);
          
    IPS_SetInfo($id"Diese Variable wurde Automatisch erstellt");
          }
       
    SetValue($id,$Wert);                   // Ausgabe der Werte
    }
    ?>
    Diese Variablen kann man im Dashboard oder WebInterface visualisieren.
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	temp_cr.jpg 
Hits:	1757 
Größe:	55.3 KB 
ID:	2878
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Dashboard.png 
Hits:	2804 
Größe:	63.3 KB 
ID:	4427

    Edit 14.02.2008
    Script "verschönert"

    Edit 16.02.2008:
    Script angepasst da Temperaturwerte unter 0°C falsch angezeigt wurden

    Edit 20.02.2008
    kleiner Bug beseitigt

    Edit 03.03.2008
    Einbau Cutchars und Scriptanpassung

    Edit 14.05.2008
    Überarbeitete Scripte

    Edit 15.03.2009
    Änderung der Anleitung für Version 2.0

    Edit 8.1.2018
    Befehlsupdate
    MfG
    Attain
    Geändert von Attain (08.01.18 um 20:12 Uhr)

  2. #2
    Registriert seit
    Sep 2005
    Ort
    Stade
    Beiträge
    6,587

    Hallo und willkommen im Forum...

    Es freut mich, dass du deine Arbeit mit der community teilen magst. Nur vorsichtshalber frage ich mal:

    Hast du geklärt ob du das Protokoll einfach weitergeben darfst?


    Gruß,

    Toni


  3. #3
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,673

    ... wir haben Kontakt zur Fa. ETA.
    Die Protokolle sind "öffentlich", jedoch sollten sie bei der Fa. ETA angefragt werden.

    MST

  4. #4
    Registriert seit
    Dec 2007
    Beiträge
    16

    Standard ETA Protokoll

    Hallo Steiner,

    Melde mich hier zum ersten Mal.
    Was ich habe: Jalosiesteuerung 8x, Lichtsteuerung. Ausgabe erfolgt an eigenes µC System, 32 Kanäle; MEMPIO als Eingang, FHZ1300 für Sensoren
    Was ich möchte: Mit mienem ETA PE15 Kessel kommunizieren (Temp. lesen), Kessel steht nahe bei IPS PC :-)

    An wen soll ich mich bei der Firma ETA wenden um das Protokoll zu bekommen?
    Grüße
    adni

  5. #5
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,673

    ... Zentrale und durchfragen ...

  6. #6
    Registriert seit
    Feb 2008
    Ort
    127.0.0.1
    Beiträge
    455

    Hallo adni,

    Ich hatte einfach eine Mail an kundendienst@eta.co.at mit meiner Anfrage gesendet. Am nächsten Tag war die Beschreibung im Postfach. Ich glaube zwar nicht , daß das alle Befehle sind. Aber für den Anfang hat es gereicht.

    MfG
    Attain

  7. #7
    Registriert seit
    Feb 2008
    Ort
    127.0.0.1
    Beiträge
    455

    Guten Abend,

    ich habe mal einige Sachen ausprobiert. Mit der Servicekennung "MJ" kann man Heizungsparameter setzten. Die Heizung antwortet dann mit der Servicekennung "MK" und dem übertragenen Parameter.
    Was mir noch fehlt ist die Möglichkeit, die in der Heizung eingestellten Werte abzufragen, dann wäre es leicht ein Script zu schreiben um ein "Backup" der Heizungseinstellungen zu machen. Hat jemand eine "ausführlichere" Protokollbeschreibung?

    HF
    Attain

  8. #8
    Registriert seit
    Dec 2007
    Beiträge
    16

    Hallo Attain,

    Irgendwie bekomme ich die Kommunikation mit dem Kessel nicht hin, ich habe dein Script 1:1 übernommen (ausser InstanceID natürlich), da ich auch einen Pelletskessel unter 30kW habe. Nach dem Senden von MC... antwortet der Kessel auch alle 2min. mit MD..., die Daten sind aber irgendwie korrupt, siehe Mitschnitt des Hyperterminals. Beispiel: Warum bekomme ich nur 26 statt 35 Nutzbytes?

    Beste Grüße
    Adni

    PS: Noch was, warum steht in COM_String _Zerlegen "{MD", die { ist doch durch cutchar. schon weg??
    Angehängte Grafiken Angehängte Grafiken  

  9. #9
    Registriert seit
    Feb 2008
    Ort
    127.0.0.1
    Beiträge
    455

    Hi Adni,

    Zitat Zitat von adni Beitrag anzeigen
    mit MD..., die Daten sind aber irgendwie korrupt, siehe Mitschnitt des Hyperterminals. Beispiel: Warum bekomme ich nur 26 statt 35 Nutzbytes?
    Dein Datenstring ist so wie ich es erkennen kann 31 bytes lang.Obwohl das 4.Byte (Anzahl der Nutzdatenbytes) steht ein "#" Zeichen und dies bedeutet 35. Ich gehe davon aus das Hyperterminal die HexWerte 0x00 nicht darstellt und damit der String kürzer aussieht. Hast Du die IPS Variablen angelegt? Dann müßten die Temperaturwerte dort eingetragen werden.


    Zitat Zitat von adni Beitrag anzeigen
    PS: Noch was, warum steht in COM_String _Zerlegen "{MD", die { ist doch durch cutchar. schon weg??
    Richtig, hatte ich hier im Script vergessen zu ändern , da ich die Cutchars erst später eingebaut habe. Richtig muß es heißen:
    PHP-Code:
    if(substr($COM_String,0,2) == "MD"
    Geändert von Attain (02.03.08 um 20:58 Uhr)

  10. #10
    Registriert seit
    Dec 2007
    Beiträge
    16

    Hallo Attain,

    Logisch, die Variablen habe ich angelegt. Im Anhang ein Screenshot (mit den falschen Variablen-Werten). Ich bekomme einen Fehler, ich denke weil der String zu kurz ist.
    Wie kann ich überprüfen ob Ausgangs- bzw. Eingangs-string korrekt sind (zB welches Terminalprogramm)?

    Beste Grüße
    Adni
    Angehängte Grafiken Angehängte Grafiken  

Ähnliche Themen

  1. Temperaturwerte schnell auslesen!!!
    Von crezs im Forum Allgemeine Diskussion
    Antworten: 3
    Letzter Beitrag: 13.11.06, 08:46
  2. 3 TemperaturWerte?
    Von test1linux im Forum Allgemeine Diskussion
    Antworten: 1
    Letzter Beitrag: 22.10.06, 13:46
  3. [neuling] wie elv fht auslesen und steuern
    Von pleibling im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 21.12.05, 11:31