Gå til innhold
  • Bli medlem
petersv

Lesing av HAN - The Easy Way (TM) - WIP

Anbefalte innlegg

3 minutter siden, petersv skrev:

Nei, tenker på klienten som skal publisere måledataene.

 

Ja, men som et tips.
Du trenger ikke sette opp en egen MQTT Broker (server), det finnes en i Node-RED i tillegg til klienten.

Endret av Odd
  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Takk, men for oss som kjører hass.io så har den allerede mosquitto innebygget som plugin.

Endret av petersv

Del dette innlegget


Lenke til innlegg
Del på andre sider
3 minutter siden, petersv skrev:

Takk, men for oss som kjører hass.io så har den allerede mosquitto innebygget som plugin.

 

Javel, så dette er for hass.io
Da misforsto jeg.

Del dette innlegget


Lenke til innlegg
Del på andre sider

Selvfølgelig ikke, men for oss med hass.io er det ikke nødvendig med node-red. :) 

 

Men når det er sagt, så kan det jo hende man kan gjøre alt i node-red, hente data fra multicast eller fil, og så publisere de, dette har jeg ikke undersøkt. Det kan være den måten med lavest brukerterskel, og derfor foretrukket. Jeg skal sjekke ut det.

Endret av petersv

Del dette innlegget


Lenke til innlegg
Del på andre sider
52 minutter siden, petersv skrev:

@ZoRaC, tusen takk!

@Thomas_ja27 Dette ser veldig bra ut. Jeg har sjekket litt, og MQTT.js ser ganske kurant ut, så hvis du kjører opp node på maskinen kan vi lage en MQTT-klient. Har du sjekket ut alternativet i appen som sender via multicast ip?

Nå har jeg installert mosquitto og lagt inn plugin for MQTT i Indigo. Så nå er det å klare å få dataene inn i MQTT på ett eller annet vis. Men her stopper det litt opp for meg, kan ikke skryte på meg at jeg kan så mye om slik programmering... Skal prøve og forske litt i kveld. 

Del dette innlegget


Lenke til innlegg
Del på andre sider

Som foreslått av @Odd over her, så kan node-red brukes til å lage flows og på den måten få dataene inn.

 

Jeg sjekket nå og det ser ut som om denne kilde-noden kan fungere bra: 

Quote

A UDP input node, that produces a msg.payload containing a Buffer, string, or base64 encoded string. Supports multicast.

 

 

Endret av petersv

Del dette innlegget


Lenke til innlegg
Del på andre sider

Her er en enkel flow som publiserer JSON-dataene på MQTT, men man kan også behandle dataene først, f.eks. skalere de riktig iom at de ser ut til å være oppgitt i millivolt/ampere fra måleren.

 

flow.PNG

Del dette innlegget


Lenke til innlegg
Del på andre sider
44 minutter siden, petersv skrev:

Som foreslått av @Odd over her, så kan node-red brukes til å lage flows og på den måten få dataene inn.

 

Jeg sjekket nå og det ser ut som om denne kilde-noden kan fungere bra: 

 

La det inn og har satt det opp med debug, ser at det er bare rådataene som kommer inn i node-red, de blir ikke dekodet før de blir multicastet.

image.thumb.png.0814248f339b5426b4da04edba94caab.png

Kan man konvertere dette i node-red?

Endret av Thomas_ja27

Del dette innlegget


Lenke til innlegg
Del på andre sider

Hmm.. Hva har du satt på `output` på udp-noden? Du kan prøve å slenge inn en JSON node mellom debug og UDP og se om den parser. Har vi uflaks betyr det er dataene som sendes på IP ikke er parset. Dette fikses nok enklest i C-koden ved å bruke samme metode som brukes før det printes til konsoll.

Del dette innlegget


Lenke til innlegg
Del på andre sider
19 minutter siden, petersv skrev:

Hmm.. Hva har du satt på `output` på udp-noden? Du kan prøve å slenge inn en JSON node mellom debug og UDP og se om den parser. Har vi uflaks betyr det er dataene som sendes på IP ikke er parset. Dette fikses nok enklest i C-koden ved å bruke samme metode som brukes før det printes til konsoll.

Sto på string, endret til buffer nå, og ser at dette er ukonverterte data.

Stemmer med det som jeg leste ut først når jeg leste rett fra comporten.

image.png.bf9bebc70135e74519dcc335fe97ec13.png

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Ble noen timer med spekkulering, men nå funker det! Mangler bare avrunding slik at man får bort noen desimaler så blir det bra :) 

 image.thumb.png.29cf22a71b75c9a4e8520be1f02a6208.png

Endret av Thomas_ja27
  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Nice, min sitter fast på exce noden, den berre buffrer og vil ikkje sende videre til msg.payload...

 

edit-

 Og ~5 minutter etter eg skreiv det så plutselig virket det...

edit-

 

Kan du fortelle hvordan du fekk det videre fra msg.payload? :) <-- Fekk det videre til Homeseer serveren med MQTT :)

 

Hvordan splittet du opp dataene? :)

Endret av hflatoey

Del dette innlegget


Lenke til innlegg
Del på andre sider
11 timer siden, Thomas_ja27 skrev:

Nå har jeg installert mosquitto

 

Som sagt du trenger ikke installere mosquitto på din automasjons server :)

Du trenger kun et MQTT plugin som du peker på Node-RED med.
Mosquitto broker (server) kan erstattes av Mosca som er en innebygget broker i Node-RED.

Fint hvis du vil ha minst mulig kjørende på automasjon serveren uavhengig hvilket system du har.
Det er andre fordeler med denne løsningen også men det oppdageren etter hvert som en bruker Node-RED.

 

Skjermbilde.thumb.PNG.2f0f5df95c6acc17befab601741cfc78.PNGSkjermbilde.thumb.PNG.b3b125cea7f42d8867008e01bd4cdd15.PNG

Endret av Odd
  • Like 2

Del dette innlegget


Lenke til innlegg
Del på andre sider
2 timer siden, petersv skrev:

Veldig bra du tok opp node-red @Odd! :)

 

@Thomas_ja27, hvis du tar en backup av flowene dine, som beskrevet her så kan vi andre bruke det samme: https://github.com/node-red/cookbook.nodered.org/wiki/How-to-backup-flows-and-related-configuration 

Skal gjøre det i kveld :)

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Supert, da ser det ut som alternativ 1 i "HAN The Easy Way" er ferdig. Med raspberry Pi er jo dette den desidert enkleste måten å gjøre det på pt.

Del dette innlegget


Lenke til innlegg
Del på andre sider

Har fått dataene inn i Grafana, syns det ble veldig bra :) Skal prøve å lage en liten oppskrift på hele greiene i kveld, så skal jeg legge ut det jeg har på Dropbox.

image.thumb.png.3d5e4b09fde6511d1b6b1db9f21609d6.png

  • Like 7

Del dette innlegget


Lenke til innlegg
Del på andre sider

Obs: Dokumentet i første post ser ut til å være slettet. Får beskjed av Google Disk at dokumentet er lagt i papirkurven av eieren:

 

Følg instruksjonene i dokumentet her.

Del dette innlegget


Lenke til innlegg
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.


  • Lignende innhold

    • Av Qwerdy
      Jeg har nettop fått tilgang til HAN på min strømmåler, men er usikker på om jeg får koblet til Tibber Pulse.
      Strømmåleren min er en Politerm800 (ser slik ut), og jeg har fått tilgang til en RJ12 kobling med et RS485 grensesnitt. Men etter hva jeg skjønner så bruker Tibber pulse RJ45 og snakker m-bus?
      Vil jeg kunne koble til Tibber pulse på noen måte, eller må jeg kjøpe denne m-bus adapteret til leverandøren min?
       

      Her er hvordan strømleverandøren forklarte det til meg på e-post.

       
    • Av bfg86
      Hei!
      Min første post :)

      Jeg har koblet til noe utstyr på HAN-porten og observerer noe rart:
      ca en gang i halvtimen leses det av veldig høye effektverdier i korte tidsrom. Opp til > 40 kW i 5 sekunder, ned til 5kW i 5 sekunder og opp til > 40kW igjen. Dette varer i ca 5 minutter før effektverdien stabiliserer seg på normalt nivå igjen. 
       
      Er dette normalt??
       
      Jeg bruker en TSS721 til MBUS->TTL, leser av med en nRF52832, sender til Raspberry Pi og parser data med han-port fra BKK. Har en Kaifa MA105H2E AMS.
      Eksempel output fra han-port og screenshot fra grafana vedlagt.
       

      han-port_output.txt
    • Av Preben
      Hei,
       
      Har mekka litt for å få HAN-data fra Kamstrup-måleren min (1-fas) inn i Home Assistant.
       
      Bruker ESPHome med en ESP32 for å få inn data, forsøkte med en ESP8266, men den var ikke helt glad i software serieport, derfor måtte jeg ty til 32'en.
       
      Koden er ganske stygg foreløpig, men kanskje det kan hjelpe noen andre på vei:)
       
      Parser dataen ved å lese ut OBIS-koder og så hente tilknyttede data. Ingen CRC-sjekk e.l. da dingsen min ikke ser ut til å lese korrupte data i det hele tatt så langt.
       
      Har lånt en del inspirasjon fra RoarFreds HAN-leser, selv om jeg endte opp med noe ganske annerledes etterhvert:)
       
      ESPHome-konfigurasjonsfil:
      esphome: name: ams platform: ESP32 board: nodemcu-32s includes: mbus.h wifi: power_save_mode: light networks: - ssid: "LulzNettOppe" password: ##PASSORD## - ssid: "LulzNettEkstra" password: ##PASSORD## - ssid: "LulzNett" password: ##PASSORD## # Enable logging logger: level: DEBUG # Enable Home Assistant API api: ota: uart: id: uart_bus tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 2400 # Example configuration entry dallas: - pin: GPIO25 sensor: - platform: dallas address: 0xEA0214808622FF28 name: "Temperature Sikringsskap" - platform: custom lambda: |- auto mbus_reader = new MbusReader(id(uart_bus)); App.register_component(mbus_reader); return {mbus_reader->wattage_sensor, mbus_reader->reactive_power_sensor, mbus_reader->amperage_sensor, mbus_reader->voltage_sensor, mbus_reader->energy_sensor, mbus_reader->reactive_energy_sensor}; sensors: - name: "AMS Wattage" unit_of_measurement: kW accuracy_decimals: 3 filters: - multiply: 0.001 - name: "AMS Reactive Power" unit_of_measurement: VAr accuracy_decimals: 0 internal: true - name: "AMS Amperage" unit_of_measurement: A accuracy_decimals: 2 filters: - multiply: 0.01 - name: "AMS Voltage" unit_of_measurement: V accuracy_decimals: 0 - name: "AMS Hourly Energy" unit_of_measurement: kWh accuracy_decimals: 3 filters: - multiply: 0.01 - name: "AMS Hourly Reactive Energy" unit_of_measurement: kVArh accuracy_decimals: 3 internal: true filters: - multiply: 0.01 mbus.h:
      #include "esphome.h" class MbusReader : public Component, public uart::UARTDevice, public Sensor { public: MbusReader(uart::UARTComponent *parent) : uart::UARTDevice(parent) {} uint8_t temp_byte = 0; uint8_t *temp_byte_pointer = &temp_byte; uint8_t uart_buffer_[512]{0}; uint16_t uart_counter = 0; char uart_message[550]; char temp_string[10]; char obis_code[32]; char temp_obis[10]; uint32_t obis_value = 0; float wattage = 0; float amperage = 0; float voltage = 0; float energy = 0; Sensor *wattage_sensor = new Sensor(); Sensor *amperage_sensor = new Sensor(); Sensor *voltage_sensor = new Sensor(); Sensor *energy_sensor = new Sensor(); Sensor *reactive_power_sensor = new Sensor(); Sensor *reactive_energy_sensor = new Sensor(); void setup() override { } void loop() override { bool have_message = read_message(); } bool read_message() { while(available() >= 1) { read_byte(this->temp_byte_pointer); if(temp_byte == 126) { if(uart_counter > 2) { uart_buffer_[uart_counter] = temp_byte; uart_counter++; uart_message[0] = '\0'; strcpy(uart_message, ""); for (uint16_t i = 0; i < uart_counter && i < 256; i++) { //sprintf(temp_string, "%02X", uart_buffer_[i]); //strncat(uart_message, temp_string, 2); if(uart_buffer_[i-1] == 9 && uart_buffer_[i] == 6) { obis_code[0] = '\0'; strcpy(obis_code, ""); for (uint16_t y = 1; y < 6; y++) { sprintf(temp_obis, "%d.", uart_buffer_[i + y]); strcat(obis_code, temp_obis); } sprintf(temp_obis, "%d", uart_buffer_[i + 6]); strcat(obis_code, temp_obis); ESP_LOGV("uart", "OBIS code found: %s message length: %d", obis_code, uart_buffer_[i + 7]); obis_value = 0; if(uart_buffer_[i + 7] == 6) { for(uint8_t y = 0; y < 4; y++) { obis_value += (long)uart_buffer_[i + 8 + y] << ((3-y) * 8); } } else if(uart_buffer_[i + 7] == 18) { for(uint8_t y = 0; y < 2; y++) { obis_value += (long)uart_buffer_[i + 8 + y] << ((1-y) * 8); } } if(strcmp(obis_code, "1.1.1.7.0.255") == 0) { ESP_LOGV("uart", "Wattage: %d", obis_value); wattage_sensor->publish_state(obis_value); } else if (strcmp(obis_code, "1.1.31.7.0.255") == 0) { ESP_LOGV("uart", "Amperage: %d", obis_value); amperage_sensor->publish_state(obis_value); } else if (strcmp(obis_code, "1.1.32.7.0.255") == 0) { ESP_LOGV("uart", "Voltage: %d", obis_value); voltage_sensor->publish_state(obis_value); } else if (strcmp(obis_code, "1.1.1.8.0.255") == 0) { ESP_LOGV("uart", "Energy Usage Last Hour: %d", obis_value); energy_sensor->publish_state(obis_value); } else if (strcmp(obis_code, "1.1.4.7.0.255") == 0) { ESP_LOGV("uart", "Reactive Power: %d", obis_value); reactive_power_sensor->publish_state(obis_value); } else if (strcmp(obis_code, "1.1.4.8.0.255") == 0) { ESP_LOGV("uart", "Reactive Power Last Hour: %d", obis_value); reactive_energy_sensor->publish_state(obis_value); } else { ESP_LOGV("uart", "Unknown OBIS %s, value: %d", obis_code, obis_value); } } //strncat(uart_message, " ", 1); } ESP_LOGV("uart", "%d length received", uart_counter); //ESP_LOGI("uart", "%d length received: %s", uart_counter, uart_message); ESP_LOGV("uart", "Message length: %d", uart_message[3]); uart_counter = 0; uart_message[0] = '\0'; strcpy(uart_message, ""); } else { uart_counter = 0; } } uart_buffer_[uart_counter] = temp_byte; uart_counter++; } return false; } };  
    • Av Robin Smidsrød
      Hei alle sammen!
       
      Etter at jeg har lest gjennom en del poster på forumet her rundt lesing/dekoding av data fra AMS HAN-porten har jeg begynt å lure på hvor sensitiv målepunkt-ID-en er. Hvis man kobler den sammen med navn på abonnent og adresse er det sannsynligvis relativt sensitivt, men hvis den står alene i en binærdump, hvor mye skade kan en ondsinnet person gjøre hvis de har kjennskap til en målepunkt-ID?
       
      Grunnen til at jeg spør er fordi jeg har laget en dekoder[1], og jeg tenkte at det kunne være nyttig å legge ved eksempler på dump-filer fra forskjellige målere. Men hvis kjennskap til målepunkt-ID kan brukes til noe (f.eks. bestille eller avslutte tjenester som koster penger) uten å kjenne navnet på abonnenten tenker jeg at de ikke burde gjøres tilgjengelig på internett.
       
      Jeg leste et eller annet sted at NVE sammenligner målepunkt-ID med personnummer, og skatteetaten sier at personnummer ikke er sensitivt, men det er personopplysninger. Folk flest gir ikke fra seg personnummeret sitt til hvem som helst som spør om det, selv om skatteetaten sier som over.
       
      Jeg vet at målepunkt-ID består av landskode, kraftverk-ID, løpenummer og kontrollsiffer, som i seg selv ikke kan identifisere brukeren direkte.
       
      Så i bunn og grunn, hvis man har en målepunkt-ID, hva kan man gjøre med den?
       
      1: https://github.com/robinsmidsrod/ams-han-decoder
    • Av Torbjørn
      Da har jeg fått installert det meste på en litt eldre raspberry.
      Koblet til USB-MBUS slave modul, følgt guiden jeg fant her til å sette opp influxdb, grafana og node-red.
      Når jeg kjører test_rx fila i han-port mappa får jeg dette:
      root@raspberrypi:/home/pi/src/han-port# ./test_rx num args: 1 read serial: 1 read socket: 0 read file: 0 write file: 1 serial_device: /dev/ttyUSB0 fname: empty key: host: undefined port num: 10001 decrypt: 0 open_serial OK: 4 7e a0 2a 41 08 83 13 04 13 e6 e7 00 0f 40 00 00 00 00 01 01 02 03 09 06 01 00 01 07 00 ff 06 00 00 06 c8 02 02 0f 00 16 1b e8 a5 7e Date Time: , Items: 0 7e a0 2a 41 08 83 13 04 13 e6 e7 00 0f 40 00 00 00 00 01 01 02 03 09 06 01 00 01 07 00 ff 06 00 00 06 c8 02 02 0f 00 16 1b e8 a5 7e Date Time: , Items: 0 7e a0 2a 41 08 83 13 04 13 e6 e7 00 0f 40 00 00 00 00 01 01 02 03 09 06 01 00 01 07 00 ff 06 00 00 06 cc 02 02 0f 00 16 1b 9e ca 7e Date Time: , Items: 0 Leste i en annen trår her at på Aidon måler fungerer et python script til å gjøre samme jobb.
      Men her fikk jeg ikke helt rette verdier tror jeg:
      ./aidon_test.py /dev/ttyUSB0 {'p_act_in': 1046} {'p_act_in': 1036} {'p_act_in': 1032} {'p_act_in': 1032} {'p_act_in': 1052} {'p_act_in': 1040} {'p_act_in': 1040} {'p_act_in': 1050} {'p_act_in': 1050} {'p_act_in': 1066} {'p_act_in': 1076} {'p_act_in': 1052} {'p_act_in': 1052} {'p_act_in': 1062} I node-red står det bare å blinker "connecting" under alle AMS boksene.
       
       
      Noen som har fått til Aidon målerene som Lyse bruker, som kan hjelpe litt?
×
×
  • Opprett ny...