Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Lesing av AMS data (AMS/HAN -> IoT)


Anbefalte innlegg

1 minutt siden, StenO skrev:

MicroUSB er kun power og har ingen data-linjer så vidt jeg husker.

 

Nei, den har datalinjer - den spytter ut debug helt til den har initialisert MBUS-enheten (for da tar sikkert den over UARTen?). 

 

2 minutter siden, StenO skrev:

men jeg tror RemoteDebug er en kanon-ide :-)

 

Ja, bør ikke være noe stort problem å implementere. :) 

Lenke til kommentar
Del på andre sider

3 minutter siden, xibriz skrev:

Hadde du lest hele tråden @ZoRaC så hadde du sett det du sliter med på side 11 :P

 

 

 

Jeg HAR lest hele tråden, men ikke i går... :P 

12 timer siden, ZoRaC skrev:

Mulig det står på en av disse sidene, men det begynner å bli en lang tråd - hvordan kan jeg debugge dette?

 

  • Haha 1
Lenke til kommentar
Del på andre sider

Jeg er ikke supergod på C, men er det noen enkel måte å "override" debug-metodene slik at man slipper å endre så mange steder?

Ellers må man endre flere steder i HanReader-biblioteket i tillegg til en god del i AmsToMqttBridge...

// Object used for debugging
HardwareSerial* debugger = NULL;
(...)
// Uncomment to debug over the same port as used for HAN communication
debugger = &Serial;

// the setup function runs once when you press reset or power the board
void setup() {
  if (debugger) {
    // Setup serial port for debugging
    debugger->begin(2400, SERIAL_8E1);
    while (!&debugger);
      debugger->println("Started...");
    }
  }
}

Her skulle jeg fått "debugger->print()" og "debugger->println" til å bare kjøre "rdebugDln()" fra "RemoteDebug"-biblioteket.

 

Noe sånt som:

#include "RemoteDebug.h"        //https://github.com/JoaoLopesF/RemoteDebug

RemoteDebug debugger;
(...)
// the setup function runs once when you press reset or power the board
void setup() {
  debugger.begin(HOST_NAME); // Initiaze the telnet server
  
  if (debugger) {
    while (!&debugger);
      debugger->println("Started...");
    }
  }
}

 

Lenke til kommentar
Del på andre sider

1 hour ago, ZoRaC said:

 


#include "RemoteDebug.h"        //https://github.com/JoaoLopesF/RemoteDebug

RemoteDebug debugger;
(...)
// the setup function runs once when you press reset or power the board
void setup() {
  debugger.begin(HOST_NAME); // Initiaze the telnet server
  
  if (debugger) {
    while (!&debugger);
      debugger->println("Started...");
    }
  }
}

 

 

"RemoteDebug debugger;" lager en instans av RemoteDebug. Denne instansen finnes i minnet, og vil ha en gitt adresse som garantert ikke er nullptr. Adressen til instansen finner du ved å kjøre "&debugger". I C er 0/NULL/nullptr definert til å være false, mens alle andre adresser er true. Linjen "while (!&debugger);" gir derfor ingen mening på så mange nivåer... (adressen av debugger vil aldri være nullptr, så derfor vil loopen aldri kjøre. Hadde den kjørt ville semikolon etterpå gjort at det ville blitt en evig loop, siden ingenting ville kunne satt debugger til nullptr. Koden i seg selv virker fornuftig, altså hvis du simpelthen bare fjerner linjen slik at det kun står "if (&debugger) { debugger->println...}

Lenke til kommentar
Del på andre sider

4 minutter siden, frodegill skrev:

Koden i seg selv virker fornuftig, altså hvis du simpelthen bare fjerner linjen slik at det kun står "if (&debugger) { debugger->println...}

 

Var det jeg håpet å unngå, for da må jeg også endre HanReader-biblioteket, for der sjekkes det også om den er false:

https://github.com/roarfred/AmsToMqttBridge/blob/master/Code/Arduino/HanReader/src/HanReader.cpp#L38

 

EDIT:

Jeg misforsto nok - det var bare den "while"-delen som skulle fjernes, ja. :) Det er selvsagt ikke noe problem. :)

Endret av ZoRaC
Lenke til kommentar
Del på andre sider

5 timer siden, frodegill skrev:

Koden i seg selv virker fornuftig, altså hvis du simpelthen bare fjerner linjen slik at det kun står "if (&debugger) { debugger->println...}

 

Men hvordan lager jeg en "wrapper"/"override" av "debugger->println()"?

Jeg ønsker å unngå å endre på RemoteDebug- og HanReader-klassene.

Ser for meg at jeg kan lage en RemoteDebugWrapper-klasse og som implementerer "print()" og "println()". I Java f.eks ville jeg brukt "extends", men hvordan kan jeg gjøre det i C?

Lenke til kommentar
Del på andre sider

16 hours ago, ZoRaC said:

 

Men hvordan lager jeg en "wrapper"/"override" av "debugger->println()"?

Jeg ønsker å unngå å endre på RemoteDebug- og HanReader-klassene.

Ser for meg at jeg kan lage en RemoteDebugWrapper-klasse og som implementerer "print()" og "println()". I Java f.eks ville jeg brukt "extends", men hvordan kan jeg gjøre det i C?

C har ikke konseptet klasser, så du kan ikke "extend"''e noe. I C vil du typisk bruke #ifdef og #define til å endre ting i preprocessoren, eller bruke cast av pekere for å tvinge dem til en gitt type.

Nå har jeg kun tatt et kjapt blikk på kodene du nevner, og her brukes det C++. I C++ har du multiple inheritance, så kan bruke konstruksjoner som f.eks "class Debugger: public RemoteDebug, public HardwareSerial {...

(men jeg skjønner ikke helt skrekken din mot å endre eksisterende kode)

Lenke til kommentar
Del på andre sider

12 timer siden, frodegill skrev:

(men jeg skjønner ikke helt skrekken din mot å endre eksisterende kode)

 

Det er mest fordi jeg ikke vil drive å vedlikeholde biblioteker jeg egentlig bare skal "bruke". Regner med noen fikser HanReader slik at den støtter alle målere etterhvert, da er det kjedelig om jeg sitter med en modifisert utgave av HanReader som jeg da enten må implementere alle de endringene i selv, eller jeg må gjøre alle mine endringer på nytt i den nyeste versjonen av HanReader.

 

Men, dette blir nok litt for komplisert for meg, så jeg ender nok opp med å bare bytte ut alle "debugger->print()"-referanser med "rdebugIln()" fra RemoteDebug. Så får jeg enten ta jobben med å endre igjen når noen oppdaterer HanReader eller så får jeg bare kjøre med "gammel versjon". :) 

Lenke til kommentar
Del på andre sider

11 timer siden, ZoRaC skrev:

Men, dette blir nok litt for komplisert for meg, så jeg ender nok opp med å bare bytte ut alle "debugger->print()"-referanser med "rdebugIln()" fra RemoteDebug. Så får jeg enten ta jobben med å endre igjen når noen oppdaterer HanReader eller så får jeg bare kjøre med "gammel versjon". :) 

 

...og det ble også for komplisert... :P:( 

https://github.com/JoaoLopesF/RemoteDebug/issues/17#issuecomment-421133781

Lenke til kommentar
Del på andre sider

11 timer siden, xibriz skrev:

Du må vel hive på en & her?

 


hanReader.setRemoteDebug(&Debug);

 

Det mener jeg var det første jeg prøvde, men kan prøve det igjen i kveld.

 

Nå har jeg ventet siden mandag på å få åpnet HAN-porten, den ble åpnet nå, så det er jo ikke sikkert jeg trenger debugging heller - at det bare virker på første forsøk (sa ingen utvikler noen sinne... :P). :) 

Lenke til kommentar
Del på andre sider

23 timer siden, xibriz skrev:

Du må vel hive på en & her?

 


hanReader.setRemoteDebug(&Debug);

 

Prøvde det igjen, fikk en kryptisk feilmelding om en temp-fil. Restartet IDE og kompilerte igjen, da gikk det plutselig! :o 

 

Koblet til kabelen til HAN-porten og her kommer det data med en gang! :D så ingen debug nødvendig likevel...! :P 

Lenke til kommentar
Del på andre sider

Noen som har Kaifa på 3-fas 230v IT og bruker koden til roarfred? Jeg får aldri liste 3, antar den bare har en udefinert/annen listestørrelse, men hvis noen allerede har implementert det så trenger ikke jeg «finne opp kruttet». :) 

 

Noen som vet hvordan man kan få riktig skala i HomeSeer/mcsMQTT? U må deles på 10, I må nok deles på 1000(?). 

 

EDIT:

Burde ikke en av I’ene være negativ? Summen av I1+I2+I3 skal vel bli 0? Eller husker jeg feil fra det vi lærte på skolen? :) 

Endret av ZoRaC
Lenke til kommentar
Del på andre sider

9 timer siden, ZoRaC skrev:

Jeg får aldri liste 3, antar den bare har en udefinert/annen listestørrelse, men hvis noen allerede har implementert det så trenger ikke jeg «finne opp kruttet».

 

Jeg la til at «listsize» sendes med i MQTT-meldingen, men jeg får bare listene på 1 og 13, ikke den på 18 (liste 3). 

 

Liste 3 skal komme 10 sekunder over hver hele time, men dette er siste 15 min:

91F61810-B536-4655-85D7-F6F8872F59E6.png.a83baf4b19c798eb163c9e87d2de8d0c.png

 

Det et også veldig ustabilt for liste 1 og 2, som dere ser - andre som opplever det? 

CE0B82F1-80B0-48B4-BB28-61C542363B8E.thumb.jpeg.0e6aed899ec3c693b8d16dfc0ee16483.jpeg

 

Tips til hva som kan være problemet eller hvordan jeg kan feilsøke dette videre?

Lenke til kommentar
Del på andre sider

Kan det være at Kaifa har oppdatert firmwaren og denne ikke lenger er nødvendig?

 

Sitat
// Compensate for the known Kaifa bug

hanReader.compensateFor09HeaderBug = (ap.config.meterType == 1);

 

Jeg har egentlig ikke trua på det, fordi det er vel lite sannsynlig at du hadde fått noe data i det hele tatt hvis dette var fikset.

Men det er vel verd ett forsøk å kommentere ut den linjen.

Lenke til kommentar
Del på andre sider

On 15.9.2018 at 22:09, ZoRaC said:

 

Jeg la til at «listsize» sendes med i MQTT-meldingen, men jeg får bare listene på 1 og 13, ikke den på 18 (liste 3). 

 

Liste 3 skal komme 10 sekunder over hver hele time, men dette er siste 15 min:

 

Det et også veldig ustabilt for liste 1 og 2, som dere ser - andre som opplever det? 

 

 

 

Har du endret #define MQTT_MAX_PACKET_SIZE 1024   (//økt til 1024 fra 128) i PubSubClient.h?

Lenke til kommentar
Del på andre sider

Akkurat nå, Stedy skrev:

Har du endret #define MQTT_MAX_PACKET_SIZE 1024   (//økt til 1024 fra 128) i PubSubClient.h?

 

Jepp. 

 

7 timer siden, xibriz skrev:

Kan det være at Kaifa har oppdatert firmwaren og denne ikke lenger er nødvendig?

 

 

Jeg har egentlig ikke trua på det, fordi det er vel lite sannsynlig at du hadde fått noe data i det hele tatt hvis dette var fikset.

Men det er vel verd ett forsøk å kommentere ut den linjen.

 

Kan prøve det. 

Lenke til kommentar
Del på andre sider

On 2/27/2018 at 21:24, xibriz said:

Jeg har forresten noen kopiser som jeg skal lage slike HAN-interface til så jeg holder på å lage kode slik at ESP booter opp som AP med Web-server først.

Deretter går man til en web-side som man putter inn SSID/passord/MQTT IP som lagres i EEPROM.

Da er den good to go :)

 

Koden har også mulighet for å oppgradere firmware med å sende en URL der firmwaren ligger over en MQTT-topic.

 

Blir full selvbetjening :)

 

Hei.

Lurer på om det du beskriver her, er tilgjengelig i github, eller det er helt "privat"?

 

Lenke til kommentar
Del på andre sider

Da er jeg igang med å koble meg til min Kamstrup-måler. Har kretskortdesignet til @DIYglenn og lasta over koden fra hans git. Får boota opp som AP og satt opp. Ved reboot ser jeg følgende på de to mqtt-topicene:

image.thumb.png.f0d962b786b08e1f70613418148ed600.png

Utover dette er det heeeelt stille. Ser heller ikke noe i seriell overvåkeren:

image.png.92fc2b36baf8dace543aa2c89f273590.png

 

Norgesnett har aktivering av HAN via "min side" og jeg har fått bekreftelse fra de på epost at porten er åpnet. What to do next? :P

Noen som har noen gode tips her?

Lenke til kommentar
Del på andre sider

2 timer siden, Morten B skrev:

Da er jeg igang med å koble meg til min Kamstrup-måler. Har kretskortdesignet til @DIYglenn og lasta over koden fra hans git. Får boota opp som AP og satt opp. Ved reboot ser jeg følgende på de to mqtt-topicene:

image.thumb.png.f0d962b786b08e1f70613418148ed600.png

Utover dette er det heeeelt stille. Ser heller ikke noe i seriell overvåkeren:

image.png.92fc2b36baf8dace543aa2c89f273590.png

 

Norgesnett har aktivering av HAN via "min side" og jeg har fått bekreftelse fra de på epost at porten er åpnet. What to do next? :P

Noen som har noen gode tips her?

Jeg har selv ikke kommet så langt. Gikk i gang med dokumentasjon og litt opprydding istedet. Har ikke fungert 100% på min Apple-hardware, så ønsket å luke ut bugs først. 

 

Skal lage meg en til enhet så jeg kan debugge på en og ha en annen i drift. 

 

Btw ikke mitt PCB-design, jeg har satt prosjektnavn og dato for bestilling på, men ikke gjort annet enn å få de bestilt. ?

 

Blir kanskje en V2 i en framtid fra min side, men isåfall ønsker jeg at den er kompatibel. 

  • Like 1
Lenke til kommentar
Del på andre sider

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.