Ankündigung

Einklappen
Keine Ankündigung bisher.

Volkszähler am Bus

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

    Volkszähler am Bus

    Habe mich heute damit beschäftigt, den Lesekopf für meinen eHZ (NetzeBW, Hersteller ist iskra) auf den Bus zu bringen. Das Skript sollte mit den meisten anderen elektronischen Zählern auch funktionieren (wenn sie SML sprechen, was aber Standard ist), ggf. muss man in "POWER_START_SEQUENCE" das "F0 07 00" (= OBIS 15.7.0, bei meinem Zähler die aktuelle Leistung) durch etwas Passenderes ersetzen.

    Zutaten:
    • USB-IR-Lesekopf von Udo (udo.volksz@gmail.com, Kosten ca. 25 EUR und ein paar Minuten Löten - keine Sorge, das geht auch mit dem Dachrinnenkolben)
    • Ein Beaglebone, der noch rumlag (ein RPi hätte es genauso getan) mit Netzverbindung
    • KNX-IP-Schnittstelle (sowieso vorhanden)
    Es ging einfacher als erwartet. Auf den Bloatcode von volkszaehler.org habe ich verzichtet und selbst folgendes Skript gebaut:
    Code:
    #!/bin/bash
    # read and evaluate SML output received from EMH eHZ
    
    # set serial device
    INPUT_DEV="/dev/ttyUSB0"
    GA="0/7/100"
    
    #set $INPUT_DEV to 9600 8N1
    stty -F $INPUT_DEV 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
    
    SML_START_SEQUENCE="1B1B1B1B0101010176"
    POWER_START_SEQUENCE="770701000F0700FF0101621B520065"
    METER_OUTPUT__START_SEQUENCE=""
    
    #while [ "$METER_OUTPUT__START_SEQUENCE" != "$SML_START_SEQUENCE" ]
    while true
    do
            METER_OUTPUT=`cat $INPUT_DEV 2>/dev/null | xxd -p -u -l 460|tr -d '\n'`
            METER_OUTPUT__START_SEQUENCE=$(echo "${METER_OUTPUT:0:18}")
            if [ $METER_OUTPUT__START_SEQUENCE != $SML_START_SEQUENCE ];
            then
                    echo "missed start and trying again..."
                    #exit 1
            else
                POWER_VAL=`echo $METER_OUTPUT|awk "{ pos=match(\"$METER_OUTPUT\",\"$POWER_START_SEQUENCE\"); hex=substr(\"$METER_OUTPUT\",pos+30,8); print(strtonum(\"0x\" hex)); }"`
                echo $POWER_VAL
                groupsocketwrite ip:hausmeister $GA $(perl -e "\$val=$POWER_VAL*100; \$exp=0; while(\$val > 2047) { \$exp++; \$val=\$val/2; } \$out = \$val + (\$exp << 11); printf(\"%02x %02x\",\$out>>8,\$out&0xFF);")
            fi
    done
    Die Werte werden als DPT9 auf die 0/7/100 geschrieben, das lässt sich in der Zeile "GA=..." anpassen.

    Dass der Code schön ist, behaupte ich nicht

    Gruß,

    Max

    #2
    Nimm lieber DPT14 der DPT9 ist reichlich ungenau, je nach dem was der Zähler so hergibt.
    Ich hatte sowas damals auch mal gemacht: https://sourceforge.net/p/openautoma...r/sml_meter.pl
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      geht das System bei jeden eHZ Zähler??

      und woher weis ich was der Kopf alles abfragen kann?

      Kommentar


        #4
        Da ich das Problem auch gerade hatte - falls das jemand mit smarthome.py lösen möchte, da gibt es ein Plugin für Iskra-Zähler (MT681)

        Kommentar

        Lädt...
        X