Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon! 🥇🥈🥉

Anbefalte innlegg

Skrevet
  daniel.h.iversen skrev (På 20.4.2018 den 8.25):

Jeg har en kraftig regnemaskin i boden like ved sikringsskapet som jeg bruker. 
Men ser ikke noen grunn til at det ikke skal gå på en rpi.
Skriving til database og til mqtt skjer async

Ekspander  

Jeg gjorde et forsøk på å denne koden til å kjøre på en pi (raspbian), men det gikk ikke (dvs. etter noen timers prøving). Får ikke installert alle Python-pakkene på kompatibelt vis. Men ved å ta bort sqlite-logging, og å bruke et virtualenv med Python 3.5, så fikk jeg scriptet til å rulle. Fikk dog kun ut instantaneffekt.

 

(koden ligger på https://github.com/Danielhiversen/AMSreader)

Skrevet (endret)

BKK har endelig (etter et halvår) klart å aktivere min HAN-port, og Pi'en som har ligget klar har endelig fått noe å gjøre på.

 

Jeg er egentlig fornøyd med output som kommer fra test_rx programmet (JSON), og lagde da heller en Python-wrapper som kjører test_rx som en subprosess, og som sender dataene videre over MQTT. Følgende Python-kode trengtes da:

import subprocess
import paho.mqtt.client as mqtt
import json

# If the binary is still active for some reason, kill it
subprocess.call("killall test_rx >/dev/null", shell=True)

proc = subprocess.Popen(['./test_rx'], stdout=subprocess.PIPE)

def on_connect(client, userdata, flags, rc):
    pass

def on_disconnect(client, userdata, rc=0):
    sys.exit(1)

client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect('mqttserver', 1883)


cumulativejson = ''
try:
    for line in iter(proc.stdout.readline, ''):
        line = line.rstrip()
        cumulativejson += line
        if line[-1:] == '}':
            print cumulativejson
            try:
                print json.loads(cumulativejson)
                client.publish('ams', cumulativejson)
                cumulativejson = ''
            except UnicodeDecodeError:
                # Sometimes we get something strange
                # on the serial line, just ignore it.
                cumulativejson = ''
                continue
except Exception:
    proc.terminate() 
    sys.exit(1)
    # Let systemd restart us

For at PI'en skal restarte prosessen hvis noe feil skjer, og etter reboot har jeg følgende i /etc/systemd/system/ams2mqtt.service:

[Unit] 
Description=start and stop the ams2mqtt service

[Service]
WorkingDirectory=/home/pi/han-port-1.14
User=pi
Group=pi
Restart=always
RestartSec=2
ExecStart=/usr/bin/python /home/pi/han-port-1.14/test_rx2mqtt.py


[Install]
WantedBy=multi-user.target
Alias=ams2mqtt.service

Så må man kjøre 'sudo systemctl enable ams2mqtt' for å aktivere denne

 

For å sende tallene videre fra MQTT inn i en OpenHAB item bruker jeg dette i en *items fil:

Number AMSpower "Strømforbruk instantant [%.0f W]" (Offlinewarning, Watt) {mqtt="<[mqttserver:ams:state:JSONPATH($.Act_Pow_P_Q1_Q4)]", expire="10s"}
Number AMS_volt_L1 {mqtt="<[mqttserver:ams:state:JSONPATH($.Volt_L1):.*Volt_L1.*]"}
Number AMS_volt_L2 {mqtt="<[mqttserver:ams:state:JSONPATH($.Volt_L2):.*Volt_L2.*]"}
Number AMS_volt_L3 {mqtt="<[mqttserver:ams:state:JSONPATH($.Volt_L3):.*Volt_L3.*]"}
Number AMS_cumulative_Wh {mqtt="<[mqttserver:ams:state:JSONPATH($.Act_Energy_P):.*Act_Energy_P.*]"}
Number AMS_Reactive_Q3Q4 {mqtt="<[mqttserver:ams:state:JSONPATH($.React_Pow_M_Q3_Q4):.*React_Pow.*]"}
Number AMS_Reactive_Q1Q2 {mqtt="<[mqttserver:ams:state:JSONPATH($.React_Pow_P_Q1_Q2):.*React_Pow.*]"}

 

Endret av berland
robustifisering av koden + kumulativt forbruk
  • Like 1
  • 3 uker senere...
Skrevet
  berland skrev (På 8.8.2018 den 18.20):

Jeg er egentlig fornøyd med output som kommer fra test_rx programmet (JSON), og lagde da heller en Python-wrapper som kjører test_rx som en subprosess, og som sender dataene videre over MQTT. Følgende Python-kode trengtes da:

Ekspander  

 

Veldig fin og oversiktlig kode :) 

Har du hatt noe problemer med stdout.readline i programmet ditt?  Jeg opplever at det av og til henger seg for min kode ved oppstart.

Skrevet
  Liabjørn skrev (På 29.8.2018 den 12.45):

 

Veldig fin og oversiktlig kode :) 

Har du hatt noe problemer med stdout.readline i programmet ditt?  Jeg opplever at det av og til henger seg for min kode ved oppstart.

Ekspander  

Ikke sett det problemet. Jeg vil gjette på at det er test_rx som henger i de tilfellene.

  • Like 1
Skrevet

readline er vel blocking, så det er ikke rart om den henger :)

Prøv https://docs.python.org/3/library/queue.html#queue.Queue.get_nowait

 

import sys
from subprocess import PIPE, Popen
from threading  import Thread

try:
    from queue import Queue, Empty
except ImportError:
    from Queue import Queue, Empty  # python 2.x

ON_POSIX = 'posix' in sys.builtin_module_names

def enqueue_output(out, queue):
    for line in iter(out.readline, b''):
        queue.put(line)
    out.close()

p = Popen(['myprogram.exe'], stdout=PIPE, bufsize=1, close_fds=ON_POSIX)
q = Queue()
t = Thread(target=enqueue_output, args=(p.stdout, q))
t.daemon = True # thread dies with the program
t.start()

# ... do other things here

# read line without blocking
try:  line = q.get_nowait() # or q.get(timeout=.1)
except Empty:
    print('no output yet')
else: # got line
    # ... do something with line

Som foreslått her: https://stackoverflow.com/questions/375427/non-blocking-read-on-a-subprocess-pipe-in-python

  • Like 1
Skrevet

Hei!

 

Jeg driver og tester med en https://www.aliexpress.com/item/Freeshipping-USB-to-MBUS-slave-module-discrete-component-non-TSS721-circuit-M-BUS-bus-data-monitor/32814808312.html?spm=a2g0s.9042311.0.0.27424c4dLTipJ3

Ser jeg mottar data hvert 10. sekund. Kamstrup måler fra Valdres Energinett. De har bekreftet at HAN-port skal være aktivisert. De gjorde riktignok det før HAN-modul var satt i måler, så det kan være en mulig feilkilde. Dog ser det ut som modulen er passiv og kun konverterer signalet fra måleren til Mbus.

 

Vedlagt er hva jeg ser av data ved bruk av "od -x < /dev/ttyUSB0" og "./test_rx -x -n -d /dev/ttyUSB0 -i" (han-port v1.14)

Utifra hva jeg ser får jeg ikke fullstendige datagram med 7e som start og stop...

2018-09-02 HAN testing 1.rtfHenter informasjon...

 

Har også prøvd alternative strømkilder på RPi for å eliminere power brownout som mulig feilkilde. 

 

Noen tips?

Skrevet (endret)
  BjornA skrev (På 2.9.2018 den 10.34):

Hei!

 

Jeg driver og tester med en https://www.aliexpress.com/item/Freeshipping-USB-to-MBUS-slave-module-discrete-component-non-TSS721-circuit-M-BUS-bus-data-monitor/32814808312.html?spm=a2g0s.9042311.0.0.27424c4dLTipJ3

Ser jeg mottar data hvert 10. sekund. Kamstrup måler fra Valdres Energinett. De har bekreftet at HAN-port skal være aktivisert. De gjorde riktignok det før HAN-modul var satt i måler, så det kan være en mulig feilkilde. Dog ser det ut som modulen er passiv og kun konverterer signalet fra måleren til Mbus.

 

Vedlagt er hva jeg ser av data ved bruk av "od -x < /dev/ttyUSB0" og "./test_rx -x -n -d /dev/ttyUSB0 -i" (han-port v1.14)

Utifra hva jeg ser får jeg ikke fullstendige datagram med 7e som start og stop...

2018-09-02 HAN testing 1.rtfHenter informasjon...

 

Har også prøvd alternative strømkilder på RPi for å eliminere power brownout som mulig feilkilde. 

 

Noen tips?

Ekspander  

 

Prøv å sleng på

-P E

på kommandoen.

Endret av xibriz
Skrevet

Hei jeg hadde samme USB enhet som deg. Som skrevet over her forlangte den even paritet for å gi ut noe signal jeg kunne bruke, dessuten så "mistet den byte" i meldingene som kom. Jeg kjøpte 2 stk og de var var veldig ustabile og med en gang meldingen ble lengre mistet jeg stadig byte på random plasser i meldingen slik at jeg ikke kunne bruke de. Det er flere her som sier deres virker bra, så jeg tror det bare er dårlig/variabel kvalitet. Jeg kjøpte en annen enhet https://www.aliexpress.com/item/USB-transfer-MBUS-module-slave-module-communication-debug-alternative-TSS721/32719562958.html?spm=a2g0s.9042311.0.0.c8314c4dpbv1pv  og den har nå stått og gått et par måneder og virker veldig bra her hos meg. 

Skrevet
  frodegill skrev (På 9.4.2018 den 19.43):

For min del kommer jeg, som vanlig, til å lage et REST-endepunkt som en Munin plugin kobler seg opp mot. Ønsker du MQTT bør du nok bruke roarfred sin kode.

Ekspander  

 

Jeg får (endelig) AMS-måler på mandag og skal prøve å få koblet opp dette. Kunne du delt koden din? Så får jeg se om den kanskje er like grei å bruke som roarfred sin. :) 

Skrevet
  frodegill skrev (På 9.4.2018 den 19.28):

På NodeMCU setter jeg opp RX med "Serial.begin(9600, SERIAL_8N1);  Serial.setDebugOutput(false);", men ender da opp med å måtte bruke Serial1 for debug.

Ekspander  

 

Serial1 er vel en annen fysisk tilkobling enn via micro-USB-kontakten? Så man må ha en programmeringskabel og koble seg til på pinnene for å debugge via Serial monitor?

Skrevet
  ZoRaC skrev (På 7.9.2018 den 19.07):

Kunne du delt koden din? Så får jeg se om den kanskje er like grei å bruke som roarfred sin. :) 

Ekspander  

Koden har lagt ute hele tiden. https://github.com/frodegill/ams-han (Jeg holder forøvrig på å gjøre om koden til å pushe til MQTT. Endringene er så fersk at jeg ikke har pushet det til github)

 

  ZoRaC skrev (På 7.9.2018 den 19.13):

Serial1 er vel en annen fysisk tilkobling enn via micro-USB-kontakten? Så man må ha en programmeringskabel og koble seg til på pinnene for å debugge via Serial monitor?

Ekspander  

Velger bare debug-port i ArduinoIDE, og ting funker automagisk...

Skrevet
  frodegill skrev (På 7.9.2018 den 20.27):

Koden har lagt ute hele tiden. https://github.com/frodegill/ams-han (Jeg holder forøvrig på å gjøre om koden til å pushe til MQTT. Endringene er så fersk at jeg ikke har pushet det til github)

 

Velger bare debug-port i ArduinoIDE, og ting funker automagisk...

Ekspander  

 

Supert! :) 

Er det forresten forskjell på polariteten på M-bus? Altså har det noe å si om jeg tar pin1 og 2 til MB A eller MB B?

Skrevet
  frodegill skrev (På 8.9.2018 den 4.56):

Jeg har en Aidon fra Hafslund, så det er Aidons standard firmware (altså ikke oppdatert til OBIS ennå)

Ekspander  

 

Aha, jeg får Kaifa. Da får jeg vel prøve roarfred sin kode - så vidt jeg har skjønt så gjør kretsen hans det samme som TSS721 og dermed skal fungere uten noen tilpasninger?

Skrevet

Er det noen med kamstrup-måler som har fått test_rx programmet til å virke? Eller noe som helst?

Mitt nettselskap har bekreftet at porten er åpnet, men jeg får ikke ut noen ting.

Noen tips til feilsøking?

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.