Categories
Betraktelser & Berättelse programming

Buggjävel

green black and brown insect
Photo by Pixabay on Pexels.com

Buggjävel eller BUGGDJÄVUL. Vad den nu handlar om så smiter den undan hela tiden rakt framför mina ögon. Har letat i många timmar nu. Man blir förbannad. Vill göra annat, roligare, än att jaga den här rackarn. Men jaga måste man. Tills man finner. Sådan är programmerarens lag och öde.

För övrigt blir jag äldre. Jodå, för varje minut som går. En seger kanske. Eller bara sorgligt. Vägen in i glömskan. Spotify lyssnandet på min musik har aldrig varit lägre. Blogg läsandet har kanske varit det, men ett tydligt lågvatten är det just nu. Är väl inte mycket bevänt med intresset för övrigt skrivande och släppt programvara heller. Alla pilar pekar nedåt alltså.

Men…

Som snart pensionär (skrämmande tanke!) är det bara att vänja sig. Världen tillhör de unga. Man får helt enkelt lära sig acceptera det. Sen finns det ju inget (tack & lov) som hindrar att man fortsätter med det man gör även i avsaknad av ovationer och lovord och påhejande härskaror.

Gott så!

Categories
Betraktelser & Berättelse programming

Github copilot

Gillar GitHub Copilot mer och mer. Det är verkligen tidsbesparande ibland och jag blir ofta förvånad över kvaliteten på hjälpen man får.

Skriver man t.ex.

print("usage: send_mqtt_heartbeat.py -v -c <pat-to-config-file> -h ")
    print("------------------------------------------------------------")
    print("-h/--help      - This text.")
    print("-v/--verbose   - Print output also to screen.")
    print("-c/--config    - Path to configuration file.")
    print("-b/--broker    - Broker to connect to.")
    print("-p/--port      - Port on broker to connect to.")
    print("-u/--user      - Username to use as credentials.")
    print("-P/--password  - Password to use as credentials.")
    print("-g/--guid      - GUID to use for event.")
    print("-t/--topic     - Topic to publish heartbeat on.")
    print("-0/--byte0     - Set optional byte 0.")
    print("-z/--zone      - Set zone.")
    print("-s/--subzone    - Set subzone.")

Och börjar på definitionen av parametrarna. Så fyller copilot själv i detta


  opts, args = getopt.getopt(args, 
                        "hvc:b:p:u:P:t:0:z:s:", 
                        ["help", 
                          "verbose", 
                          "config=",
                          "broker=",
                          "port=",
                          "user=",
                          "password=",
                          "topic=",
                          "byte0=",
                          "zone=",
                          "subzone="])

Japp. Det sparar tid. GILLAR!

Innan någon blir upprörd… Jo man kan hämta användarnamn och lösenord från .netrc också.

Fantastiskt. Liksom. Snart behövs man inte. Jippie. Kan gå i pension…

Categories
programming Techstuff

Det nya svarta.

Skriver ett Python script. Men under nästan en timme tror jag att jag kodar i node.js och kan inte fatta varför Math.round() inte fungerar…

Senile programmingSP

Categories
Betraktelser & Berättelse Linux M2M programming Sensors Techstuff VSCP

Ny smart elmätare från Ellevio

An English version is here.

Ett kretskort (som jag tillverkat för att många frågat efter det) för att koppla upp sig mot smarta mätare finns här.

—————————————————————————————

Så monterades den då den nya elmätaren. Tydligen skall 5.4 miljoner nya mätare ut innan 2025. Jodå, jag har samlat data från dess föregångare (som bara satt monterad här i två år) rätt länge. S0-puls var inte tillgänglig för vanligt folk men den blinkande IR dioden var det. Så effekt och energi har jag alltså loggat. Jodå, jag har en till mätare också, på mitt kontor. Läser S0 och IR där och kan på så sätt skilja på husets totala elförbrukning och kontorets elförbrukning.

Men den nya elmätaren lovade mer. Ett seriell interface för kunder. En HAN port. Japp, definitivt sådant som en sådan som jag går igång på. Några minuter efter att den var installerad var kundinterfacet aktiverat. Bara att gå in i på “mina sidor” och aktivera. Smidigt. Info från Ellevio finns här.

Tyvärr han jag inte gå vidare med att bygga den interface logik som krävs för att kunna läsa ut värden från interfacet då den dan. Fick (otåligt) hålla mig till dagen efter eftersom jag hade annat att göra. Men det var mycket enkelt. En transistor några motstånd och en USB till serie konverter är allt som behövs. Sen kunde en Raspberry Pi läsa informationen som mätaren skickar ut. Man skulle lika gärna kunnat använda en ESP32’a eller en ESP8266, Arduino, eller en pc såklart. Inget konstigt, dyrt eller avancerat.

Den nya mätaren ger ström och spänning och aktiv och reaktiv last på alla faser separat. Plus summerad energi. Ja både in och ut, om man nu är en sådan som har ett vindkraftverk eller solpaneler på tomten. Härligheter för den som gillar data. All data skickas ut var tionde sekund.

Så vad skickar mätaren?

Efter vad jag förstår heter protokollet “P1 Companion Standard” som är baserad på IEC 62056-21 Mode D. Energiföretagen har gett ut en Branschrekommendation för lokalt kundgränssnitt för elmätare som beskriver funktion och protokoll. Man kan gissa att Ellevio inte är de enda som har det här kundinterfacet och protokollet.

Det seriella formatet är okrypterat med hastighet och format 115200,N,8,1. Lite standard. Sänds dock inverterat så det måste man ta hand om.

Kontakten på elmätaren är en RJ12 enligt nedan

Kundgränssnitt på elmätare

Mätaren skickar data på pin 5 när D_Rqst(RTS) är hög. Jag har testat anpassningskretsen nedan med både 5V och 3.3V och båda fungerar utmärkt.

Tittar man på hur gränssnittet på mätaren ser ut så förstår man att både 3.3V och 5V fungerar.

Kundgränssnitt på elmätare

Mätaren ger +5V, max 250mA ut på 5V.

En enkel krets är det enda som behövs för att anpassa det här till en USB TTL serieadapter som jag använt eller till de seriella kanalerna på en Raspberry Pi, Arduino eller annan enhet.

p1 serial interface

Välj 5V för VCC om rx skall anslutas till en 5V ingång (Arduino etc), annars välj 3.3V (ESP32/ESP8266/Raspberry Pi etc). I mitt fall så använder jag en USB till serie adapter som kan hantera TTL nivåer. Kom ihåg att koppla jorden också till den enhet som skall läsa data.

Om din mätare har strömmatning på 5V och om du vill köra VCC=3.3V så koppla inte VCC till strömmatningen på mätaren. Vid VCC=5V kan du välja om du skall strömförsörja lokalt eller externt. Bra är det att inte köra båda på samma gång.

Om du använder en usb till serie adapter som jag och Raspberry Pi så kommer den att bli tillgänglig som /dev/ttyUSB0, /dev/ttyUSB1, etc när den kopplas in. Med programmet Minicom kan du titta på den råa datan. Installera Minicom med

sudo apt install minicom

Vill du kunna öppna porten utan “sudo” så adderar du bara den användare du kör under (oftast “pi”) till dialout i /dev/group

Använd editorn nano eller vim eller din egen favorit.

Kör nu Minicom med

minicom -b115200 -D/dev/ttyUSB0

Addera sudo om du inte gjort ändringen i /dev/group.

Switcharna talar väl för sig själv. Men för säkerhets skull tar vi dom. -b sätter baudraten. -D anger den port som du vill kommunicera på. Du ändrar såklart till den port du använder. Om allt är som det skall skrivs följande ut på skärmen var tionde sekund

I det länkade dokumentet ovan finns en bilaga 3 som talar om vad respektive rad är för typ av data. Enkelt att “parsa”. Man har tänkt till.

För att avsluta Minicom skriver du

ctrl-A Z X 

och väljer “yes” när du får frågan “Leave Minicom?” Bäst att skriva det eftersom sekvensen inte är den första man kommer på.

Mer än så är det inte. Nu är det bara att skriva ett program som läser de här värdena och listar dem i diagram och tabeller. node-red är en utmärkt verktyg att använda för det här. node-red kan läsa från en seriell port direkt eller också kan man skriva en snutt som denna i Python

import serial

sio = serial.Serial(
port='/dev/ttyUSB1',\
baudrate=115200,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
timeout=12)

print("connected to: " + sio.portstr)
count=1

while True:
line = sio.readline().decode('ascii')
if (-1 != line.find("1-0:31.7.0")):
print("[" + line + "]")
print("Fas L1:"+line[11:-5]+ " " + line[-4])
print(float(line[11:-5]))

Lämpligen skickar man sen data till en MQTT broker eller liknande istället för att skriva ut den. Lite roligt kodande för en kväll helt enkelt.

Jag har knappat ihop projektet vscp-python-p1-power-meter som skickar sensorvärden till valfri MQTT broker. Gillar du inte VSCP så kan koden enkelt anpassas för andra format (det finns till och men en konfigurering för VSCP hatare ;-)). Jag tror att koden är ganska enkel att förstå. Konfigurering sker i filen config.ini och du har dokumentation på kodsidan. Nedan en skärmdump från MQTT explorer som visar MQTT VSCP data för spänning, fas 1 i realtid

Och strömmen för samma fas

Notera diagrammet nere till höger. En smidig finess i MQTT explorer för att snabbt visualisera data.

Såhär kan set se ut när data presenteras i node-red

Men det är mycket enkelt att göra en egen websida för att presentera data om man först sänder den till en MQTT broker. Websockets är din vän där. Skickar du VSCP events över det interfacet istället för någon annan slumpvis data så har du en lösning som både skalar och är återanvändbar på alla nivåer. Återkommer kanske senare med ett exempel som visar hur det där går till.

Ja och såhär någonting ser det ut när allt rullar.

Demo i realtid finns här

Drivare till VSCP daemon finns här.

Categories
Betraktelser & Berättelse programming Techstuff

1000+

Några tusen #ifdef … är väl också ett låtsasjobb. Tar längre tid att få till än man tror. I alla fall om de skall fylla det tänkta syftet.

WIN32” skriver man då fortfarande. Minns på dagen när jag skrev min första “WIN32“. En ny skön 32-bitars värld var på ingående. Microsoft trummade in migrationsvägen. Inte kunde man väl ana då att det skulle bli en 64-bitars värld snabbare än snabbt efter det. Tydligen inte folket på Microsoft heller. “WIN32” hänger kvar som en kvarnsten och ett minnesmärke över en svunnen tid om alla Windows programmerares hals. Vi borde kanske alla skämmas lite för den bristen på framsyn som aldrig såg “WIN64” komma då. Alltså vi som var med när “WIN32” andades framtid.

Roligt är också att se att Microsoft folk sitter och portar Linux lib. till Windows för fulla muggar. Att koda saker som går på båda plattformarna har blivit mycket lättare än det var för tjugo år sedan när vi startade VSCP projektet. Ja Linux snurrar ju till och med på Windows så det går att köra applikationer rakt av också. Men jag menar native kompilerat alltså. Fortfarande tar det mycket tid. Men överkomligt. Definitivt. VSCP utvecklades för Windows från början. Men portases till Linux. Men såg inget behov av Windows efter ett tag. För mycket jobb. Släppte det. Ja och så nu tillbaks igen då. Efter att ha kodat om rubbet. Jodå.

Liksom.

Categories
programming

Gamla synder

Fick ett mail

Hi, 
Nearly 20 years ago I wrote some software for a friend which utilised the encryption Active X control EsDES. It appears to have come from eurosource.se.  Is that something you know about?! I am attempting to update the software I wrote for him. I am using VB6 to view the code and recompile the result in the hope that it will run on Windows 10. Would you be able to provide a copy of the relevant OCX file?  Many thanks, xxxxxxxxxxx

Och det är klart att koden finns kvar. Det ser Sourceforge till.

Visual Basic var en ganska spännande konstruktion. Den kom när det tog två dagar att ens få upp minimal körbar kod konstruerad med Microsoft Windows SDK (som jag f.ö. var bland dom första som köpte här i landet). Så man kunde komma igång och utveckla alltså. Så presenterades Visual Basic. Jag minns att man visade den på Berns i Stockholm. Ett enkelt ritprogram skapades på några minuter. Alla reste sig upp och applåderade. Det var stort. En milstolpe.

Till Visual Basic hade Microsoft gjort det möjligt att addera tillläggsprogram som kallades VBX’er. Jag tror man inte förväntade sig det intresse dessa skulle tilldra sig. Det var objektorientering på riktigt. Men var nog en sådan där vänsterhandsgrej som någon la in och ingen på M$ egentligen brydde sig särskilt mycket om. En marknaden växte upp och den exploderade. Det började lukta pengar. Så vad för Microsoft då?

Jo man hittar på ett nytt format OCX. Krångligt, Dåligt. Kasst. Ger sig sen in på marknaden själv. Allt dör en ganska snabb död. Ett misstag som Microsoft säkert ångrar bittert.

En av de där vbx/ocx företagen var alltså eurosurce och jag. Fast det där var alltså förr det.