Ankündigung

Einklappen
Keine Ankündigung bisher.

MBus via usb2serial

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] MBus via usb2serial

    Hallo miteinander,

    anbei mein erstes Wiregate Plugin um meine Gas- und Wasserzähler auszulesen.
    Die Zähler sind wie folgt angeschlossen:

    Gas|Wasser Zähler <-> SCE interface <-> MBus Slave <-> MBUS10 Pegelwandler <-> usb2serial Kabel am Wiregate

    Code:
    # Perl script um Zählerwerte via MBUS10(Pegelwandler) auszulesen
    # welcher über die serielle Schnittstelle am Wiregate angeschlossen ist
    
    use Device::SerialPort;
    
    ##################
    ### DEFINITION ###
    ##################
    
    my $zaehler_ga="14/6/1"; # Zaehler GA im EIS 9 Format
    my @zaehler_id=(0x10,0x7B,0x01,0x7C,0x16); # Zaehler ID des MBus Geraet
    my $port = Device::SerialPort->new("/dev/usbserial-1-3.4");
    my $anzahl_zeichen=33; # Anzahl Zeichen welche vom MBus Geraet gelesen werden
    
    
    my $send_data = pack("C*", @zaehler_id);
    # Set up the serial port
    # 2400, 81E on the USB2Serial driver
    $port->read_char_time(0);     # don't wait for each character
    $port->read_const_time(1000); # 1 second per unfulfilled "read" call
    $port->baudrate(2400);
    $port->databits(8);
    $port->stopbits(1);
    $port->parity("even");
    
    my $timeout=1;
    
    #######################
    ### ENDE DEFINITION ###
    #######################
    
    # Eigenen Aufruf-Zyklus auf X Sekunden setzen
    $plugin_info{$plugname.'_cycle'} = 300;
    
    # Hauptverarbeitung
    
    my $count_out = $port->write("$send_data\n")
            || die "Kann Daten nicht schreiben ...\n";
    
    my $chars=0;
    my $buffer="";
    while ($timeout > 0) {
        my ($count,$saw)=$port->read($anzahl_zeichen);
        if ($count > 0) {
            $chars+=$count;
            $buffer.=$saw;
        }
        else {
            $timeout--;
        }
    }
    
    # If we get data, then print it
    my $data="";
    if ($chars eq $anzahl_zeichen) {
        $data=unpack("H*", $buffer);
        my $zaehlerstand=int(substr($data,60,2) . substr($data,58,2) . substr($data,56,2) . substr($data,54
    ,2));
        if ($plugin_info{$plugname.'_result_saved'} < $zaehlerstand) {
            $plugin_info{$plugname.'_result_saved'} = $zaehlerstand;
            knx_write($zaehler_ga,$zaehlerstand,14); # Zaehlerstand auf den Bus schreiben
            return $zaehlerstand;
        } else {
            return 0;
        }
    } else {
        return "no data received!\n";
    }
    seit: 11'08 KNX / 04'09 HS3 / 12'09 WG mit 21 Temp & 4 Feuchtesensoren / 10'10 Enocean mit 15 Fenstergriffe Hoppe / 02'11 MBus2Serial Gas-Wasserzähler
    HS3: 99% / VISU: PV 99%, iPad 99%
    60 Akt. Linie1 / 14 Akt. Linie2

    #2
    Sehr schön.

    Diskussion war zuvor hier: https://knx-user-forum.de/forum/supp...wiregate/12502

    Kommentar


      #3
      Wenn es dauerhaft funzt &
      Ansonsten hätte ich noch 1-2 Anregungen (socat dazwischen, ist einfacher als sich mit dem Port da rumzuschlagen) aber hauptsache ist: das es geht

      Makki
      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
      -> Bitte KEINE PNs!

      Kommentar


        #4
        Zitat von makki Beitrag anzeigen
        socat dazwischen
        Danke für die Blumen.

        Mit socat hab ich das als Anfänger nicht hingekriegt, nehme aber gerne Anregungen entgegen.
        Desweiteren würde ich es gerne so erweitern, dass der Wert nur dann auf den Bus gesendet wird, wenn sie sich vom vorher gelesenen Wert unterscheidet (sbc).

        Gruss
        Marcel
        seit: 11'08 KNX / 04'09 HS3 / 12'09 WG mit 21 Temp & 4 Feuchtesensoren / 10'10 Enocean mit 15 Fenstergriffe Hoppe / 02'11 MBus2Serial Gas-Wasserzähler
        HS3: 99% / VISU: PV 99%, iPad 99%
        60 Akt. Linie1 / 14 Akt. Linie2

        Kommentar


          #5
          I'm reading this with much interest.

          Would it be possible to adopt this script to reading data from a electricity m-bus meter (Voltage, current, power...)?

          Kommentar


            #6
            Hi,

            of course ! You just need the appropriate m-bus address.
            In my example i have used the address (@zaehler_id) for reading the meter value.

            regards
            Marcel
            seit: 11'08 KNX / 04'09 HS3 / 12'09 WG mit 21 Temp & 4 Feuchtesensoren / 10'10 Enocean mit 15 Fenstergriffe Hoppe / 02'11 MBus2Serial Gas-Wasserzähler
            HS3: 99% / VISU: PV 99%, iPad 99%
            60 Akt. Linie1 / 14 Akt. Linie2

            Kommentar


              #7
              Cooles teil!

              Könntest du mal noch deine Hardwarekomponenten die du hinter dem zähler hast genauer aufschlüsseln (Hersteller, Artnr, etc)?
              Damit ich weis was ich da alles so kaufen muss.

              Kommentar


                #8
                Zitat von mkeil Beitrag anzeigen
                Damit ich weis was ich da alles so kaufen muss.
                Falls dein Zähler bereits als M-Bus Slave lesbar ist (d.h. bereits das M-Bus interface hat), benötigst du nur noch einen M-Bus Pegelwandler. Dieser Pegelwandler habe ich mit einem usb2serial Kabel an meinem Wiregate angeschlossen.

                Bei dem Pegelwandler gibt es Hersteller wie www.relay.de oder www.a2s.pl

                Zuerst hatte ich den PW3 von Relay. Allerdings habe ich erst danach gelesen, dass mein Zähler sich wie 4 M-Bus Geräte verhält. Da der PW3 offiziell nur max. 3 M-Bus Geräte unterstützt konnte ich nicht gleichzeitig Wasser und Gaszähler über den PW3 ansprechen.

                Ich habe diesen dann ersetzt mit dem MBus10 von a2s.pl welcher bis 10 Geräte unterstützt. Somit kann ich nun gleichzeitig meine beiden Zähler anhand von zwei wiregate-plugins auslesen.

                Gruss
                Marcel
                seit: 11'08 KNX / 04'09 HS3 / 12'09 WG mit 21 Temp & 4 Feuchtesensoren / 10'10 Enocean mit 15 Fenstergriffe Hoppe / 02'11 MBus2Serial Gas-Wasserzähler
                HS3: 99% / VISU: PV 99%, iPad 99%
                60 Akt. Linie1 / 14 Akt. Linie2

                Kommentar


                  #9
                  Den MBus10 von a2s.pl habe ich hier auch aufm Schreibtisch: gut, günstig, funktioniert..

                  @McKajVah: sure it's possbile to adopt but one needs to do for every single MBus-device (no secret, just want to clarify that!)

                  Makki
                  EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                  -> Bitte KEINE PNs!

                  Kommentar


                    #10
                    Hallo zusammen,

                    habe das plugin noch etwas gepimpt.

                    1. der Zählerstand wird nun nur dann auf den Bus gesendet, wenn sich der Wert geändert hat (grösser ist als der vorher abgelesene).
                    2. Code bereinigt

                    Gruss
                    Marcel
                    seit: 11'08 KNX / 04'09 HS3 / 12'09 WG mit 21 Temp & 4 Feuchtesensoren / 10'10 Enocean mit 15 Fenstergriffe Hoppe / 02'11 MBus2Serial Gas-Wasserzähler
                    HS3: 99% / VISU: PV 99%, iPad 99%
                    60 Akt. Linie1 / 14 Akt. Linie2

                    Kommentar


                      #11
                      Hallo,

                      kann die oben gezeigte Lösung diese des UVR1611 ersetzen?
                      Oder enhält dessen Box noch mehr als den Converter zwischen den Bussen?

                      Gruß,
                      Hendrik

                      Kommentar


                        #12
                        Könntest Du die Frage präzisieren? Welche Funktion soll nun genau "ersetzt" werden?

                        Bei den DREI von Dir verlinkten CAN-Buskonverter geht es darum die UVR1611 über den CAN-Bus mit dem M-Bus und zusätzlich weiteren CAN-Bussen oder KNX zu erweitern.

                        Bei der Lösung von Marlan ging es darum BESTIMMTE Zähler am M-Bus über ein Plugin im WireGate Multifunktionsgateway auszulesen und die Daten auf den KNX zu schreiben.

                        In meinen Augen ist das alles was völlig anderes. Und ich verstehe die Frage nicht wirklich.

                        LG

                        Stefan

                        Kommentar


                          #13
                          Zitat von henfri Beitrag anzeigen
                          kann die oben gezeigte Lösung diese des UVR1611 ersetzen?
                          Ich habe auch nicht genau verstanden was du wissen willst, aber vielleicht mein Skript mit anderen Worten erklärt:

                          Es kommuniziert mit einem Seriellen Interface anhand eines usb2serial Kabel.
                          Es wird eine definierte Adresse angefragt und als Antwort erhalte ich (in verpackter Form) den Zählerstand.

                          Gruss
                          Marcel
                          seit: 11'08 KNX / 04'09 HS3 / 12'09 WG mit 21 Temp & 4 Feuchtesensoren / 10'10 Enocean mit 15 Fenstergriffe Hoppe / 02'11 MBus2Serial Gas-Wasserzähler
                          HS3: 99% / VISU: PV 99%, iPad 99%
                          60 Akt. Linie1 / 14 Akt. Linie2

                          Kommentar


                            #14
                            Hallo,

                            sorry, wenn ich mich unklar ausgedrückt hab.

                            Ich dachte, der UVR1611 hätte einen M-Bus und dachte, man könne mit obiger Lösung die UVR1611 mit dem Wiregate verbinden.

                            In Wahrheit hat die UVR allerdings einen CAN-Bus, wodurch das Quatsch ist.
                            Sorry.

                            Gruß,
                            Hendrik

                            Kommentar


                              #15
                              noch ne kurze Frage dazu ...

                              Wo hast Du die 12-24V für den Pegelwandler hergenommen?
                              Gruss
                              Uwe

                              Kommentar

                              Lädt...
                              X