Author: Security Brother

P1 monitor update 0.6.1 (Jilles)

P1 monitor update 0.6.1 (Jilles)

P1 monitor is op de Raspberry PI 3 gebaseerde software om je slimme meter uit te lezen. Voor een meer uitgebreide beschrijving zie hier.

Wat is er veranderd:

  • Kleine bugs zijn opgelost.
  • Het overzicht van verbruik van elektriciteit is uitbreidt met teruglevering.
  • Gas meting is toegevoegd.
  • Het voorspelingsscherm is verwijderd.
  • In het kostenoverzicht zijn de kosten voor het gebruik van gas toegevoegd.
  • In de setup kan het vastrecht en gebruikstarief van gas worden ingesteld.
  • De API is uitgebreid met de gas verbruiks waarde (versie 2 van de API, versie 1 wordt nog steeds ondersteund.
  • pi, p1mon wachtwoorden zijn aangepast, het root account van de PI is te gebruiken met het wachtwoord “toor”. Advies is om deze aan te passen.  Howto.
  • File systems zijn aangepast en maken meer gebruik van ram om slijtage van de flash card te beperken.
  • Security updates uitgevoerd tot 22-07-2017.

Upgrade of eerst installatie.

De software verkrijgen en installatie.

De P1 monitor software wordt geleverd als Raspberry Pi 3 B SDHC 8GB image. Die hieronder te downloaden is. Om de het image naar een SDHC card te kopiëren is een image tool nodig als je deze niet hebt dan kun je USB Image tool downloaden.

Mocht je een eerdere versie van de P1 monitor gebruiken exporteer dan deze data eerst!

  1. download het P1 monitor image file uit de download overzicht hieronder.
  2. pak het zip file uit en lees de leesmij.txt
  3. kopieer het p1mon_061.img file via de USB tool naar de 8GB SDHC card. Let op! data op de card wordt overschreven en is niet meer te herstellen.
  4. plaats de SDHC card in de Pi.
  5. start de Pi, netwerk en P1 kabel aangesloten.
  6. Importeer de data.

Veel plezier met de P1 monitor en laat weten hoe het bevalt.

Download de laatste versie als eerste artikel op de site.

Send email secure (or not)

Send email secure (or not)

Email is send with the Simple Mail Transfer Protocol ( SMTP ). It was invented back in the day (1982) when the Internet was run by people with the best intentions and de security was not needed or perceived not necessary. When you are sending an email the text, headers, email addresses, etc. are send over the Internet in plain-text (human readable). See http://www.freesoft.org/CIE/RFC/821/31.htm for an example.

Anyone that has access to the data stream (free WiFi is not your friend) can in theory read your emails. Not a save way of using email. What we need is a solution that will hide your emails from prying eyes. Cryptography to the rescue!

Most modern email providers like Gmail support Transport Layers (TLS). TLS encrypts all the network traffic making it unintelligible. TLS email is called STARTLS and is negotiated between de mail client and mail server. Normally a user cannot choose to use STARTTLS. It the mail server (administrator) to decide how to handle the SMTP traffic. Because of the move of the Internet to encrypt everything it will be a matter of time of STARTTLS will be the normal way of sending email.

To check if an email server supports TLS (STARTTLS) you can use the TLS check script tlschk (script below) Linux script.

# tslchk -d schiphol.nl
TLS check for SMTP server for domain schiphol.nl, hang on this could take a while....
schiphol-nl.mail.protection.outlook.com. version is TLSv1.2
email4.schiphol.nl. version is not available or TLS not supported
email5.schiphol.nl. version is not available or TLS not supported
domain schiphol.nl ready.

When an TLSVx.x answer is returned STARTTLS (TLS) is supported.

#!/bin/bash
# nslookup & openssl must be installed!
OPTIND=1 # Reset in case getopts has been used previously in the shell.
DOMAINNAME=""
PRGNAME=${0##*/}

function showHelp {
	echo $PRGNAME" -d <mail domain>"
	echo "Example: "$PRGNAME" -d gmail.com "
}

while getopts "h?d:" opt; do
    case "$opt" in
    h|\?)
        showHelp
        exit 0
        ;;
    d)  
	DOMAINNAME=$OPTARG
        ;;
    esac
done

shift $((OPTIND-1))

[ "$1" = "--" ] && shift

if [ -z "${DOMAINNAME}" ]; then
	showHelp
	exit
fi

# tell what domain that will be checked
echo "TLS check for SMTP server for domain "$DOMAINNAME", hang on this could take a while...."
# find MX record, used first one that we find.
MXLIST=$(nslookup -query=mx $DOMAINNAME | grep $DOMAINNAME |cut -d ' ' -f5)

for mxrec in $MXLIST
do
	#echo "checking MX record "$mxrec
	OUTPUT=$(echo "Q"|openssl s_client  -starttls smtp  -crlf -connect $mxrec:25 2>/dev/null | tr -d ' '| grep Protocol: | cut -d ':' -f2)
	if [ -z "${OUTPUT}" ]; then
		echo $mxrec" version is not available or TLS not supported"
	else 
		echo $mxrec" version is "$OUTPUT
	fi
done
echo "domain "$DOMAINNAME" ready."

Download

[download id=”310″]

P1 monitor

P1 monitor

P1 monitor is op de Raspberry PI 3 gebaseerde software om je “slimme” meter uit te lezen. De slimme meter heeft een zogenaamde P1 poort/aansluiting waar elke 10 seconden de laatste waarden uit te lezen zijn. Als je huidige en historisch elektriciteit verbruik wil meten dan is P1 monitor de oplossing voor je. Hieronder een simpel schema hoe de P1 monitor werkt.

P1 monitor principe
P1 monitor principe

Gebruik

P1 monitor heeft een aantal schermen waar de huidige en historische waarden zijn te raadplegen en een scherm waar zaken als de tarieven elektriciteit en andere gegevens ingevoerd worden. De meeste schermen verklaren zichzelf, onderstaande afbeeldingen geven een impressie.

ACTUEEL VERBRUIK

Geeft aan welk elektrisch vermogen er wordt gebruikt (links boven), het vermogen van vandaag en de kosten. Onderin wordt het actuele verbruik van de laatste 4 uur weergegeven.

Actuele verbruik

HOME

Dit scherm geeft zowel het verbruik als het geleverd vermogen weer. Het geleverd vermogen is met name interessant voor als er zelf elektriciteit opwekt met bijvoorbeeld zonnepanelen.

Verbruik en geleverd vermogen zijn identiek qua lay-out. De meter geeft aan wat het huidige vermogen is wat wordt verbruikt of terug geleverd. Met een zon of maan symbool wordt aangeven of piek of dal tarief van de leverancier van toepassing is. Het klok en pijl omhoog symbool geven aan hoeveel en op welke moment van de dag maximaal vermogen is geleverd of verbruikt. Totaal vandaag geeft het aantal verbruikte kWh per dag en de kosten van die dag. Daaronder wordt met een grafiek met een interval van 10 sec (maximale mogelijkheid van de slimme meter) de laatste 10 minuten weergegeven.

Home pagina
Home

GRAFIEK

Dit overzicht geeft met de kleuren geel het verbruikte vermogen weer en met de kleur groen het terug geleverde vermogen. Er kan via de vooringestelde intervallen linksboven worden ingezoomd. Er kan tevens met de horizontale scrollbar een vrij in te stellen interval worden gekozen. Daarnaast kan met de optie rechtsboven gekozen worden of alleen verbruikte vermogen of geleverd vermogen worden gekozen of beide. Er kan voor minuten, uren, dagen, maanden of jaren worden gekozen. Hieronder de minuten screenshot.

Schreenshot minuten scherm.

Screenshot dagen: alle grafieken hebben een pop up als met de muis over een grafiek element wordt bewogen (zweven met de muis).

Screenshot dagen.

Screenshot: maanden, geleverd vermogen is uitgeschakeld.

Screenshot maanden
Screenshot maanden.

FINANCIEEL

De werking van de financiële overzichten is gelijk aan die van de grafieken maar geeft aan wat de kosten of opbrengsten zijn van per dag, maand of jaar.

Screenshot financieel
Screenshot financieel.

INSTELLINGEN

Met deze pagina kunnen parameters worden ingesteld voor het gebruik. De TARIEVEN ELEKTRICITEIT zijn de kWh prijzen zonder het vastrechtgedeelte van de elektriciteit. Deze kan in het vakje vastrecht worden opgevoerd.

SYSTEEM kan worden gebruikt om de P1 monitor te herstarten of te stoppen. Bij het stoppen of herstarten wordt er zeker gesteld dat alle gegevens vanuit het geheugen naar de SD-card worden geschreven. Het herstarten door de voeding uit de Raspberry Pi te halen kan ook maar kan tot data verlies leiden.

Met BESTANDEN DELEN kan toegang gekregen worden via SAMBA naar alle bestanden of alleen de databestanden. Normaal staat deze uit maar als er een back-up wil maken dan kan de optie Database worden gekozen. Als alternatief kan de exportfunctie worden gebruikt.

P1 POORT SLIMME METER: De P1 poort kan gebruik maken van andere instellingen per netbeheerder. Zie de pop-up in de user interface (UI) voor bekende waarden.

EX -/IMPORTEREN GEGEVENS met export worden alle gegevens uit de SQLite database naar SQL statements in een zip file weggeschreven. Het exporteren is primair bedoeld om de gegevens veilig te stellen als er een nieuwe versie van P1 monitor uitkomt. Importeren is bedoeld voor het inlezen en werkt alleen met een P1 monitor exportfile.

NETWERK INSTELLINGEN maakt het mogelijke Wi-FI met WPA te gebruiken het wordt echter aanbevolen een bedraad netwerk te gebruiken.

API er is een beperkte API beschikbaar die de huidige gegevens in JSON kan aanleveren voor bijvoorbeeld een domotica product als de FIBARO Home Center 2.

Screenshot instellingen
Screenshot instellingen

INFORMATIE

Dit scherm geeft diverse zaken weer over de werking (of als het tegen zit het niet werken) van de P1 monitor.

DATABASE: Er wordt gebruikt gemaakt van een SQLite database. Die in diverse bestanden (databases) de huidige en historische gegevens bijhoudt. De database draait in RAM omdat dit sneller is en de SDHC kaart er minder snel van slijt (lees stuk gaat). Om te voorkomen dat de gegevens verloren gaan wordt er periodiek (minimaal binnen 15 min) een kopie van de RAM-database naar de SDHC kaart geschreven. Dit gaat volledig automatisch.

P1 POORT STATUS: deze geeft aan of er gegevens uit de P1 te lezen zijn. Als erg geen gegevens kunnen worden gelezen dat wordt dit aangeven. Op PC’s wordt tevens een geluidsignaal afgegeven.

PROCESSEN: De P1 monitor heeft drie primaire programma’s draaien die zorgen dat gegevens tijdig gelezen worden, een database en een bewakingsprogramma die diverse huishoudelijke zaken uitvoert.

SYSTEEM: tijd sinds de laatste (her)start, besturingssysteem versie, de Python versie die gebruikt wordt en de versie van P1 monitor.

NETWERK: diverse zaken die netwerk gerelateerd zijn, zoals is er Internet toegang (belangrijk voor de juiste tijd) en de IP-adressen van het vaste en eventuele Wi-Fi netwerk.

SLIMME METER: hier is te zien wat de ruwe gegevens zijn uit de slimme meter (elke 10 seconden aangepast). Processor, database en geheugen belasting geven respectievelijke weer hoe druk de processor is, hoeveel ruimte de database in beslag neemt en hoeveel RAM geheugen er in gebruik is.

Screenshot informatie
Screenshot informatie

Wat heb ik nodig en wat zijn de kosten

Het goede nieuws is de P1 monitor software is gratis (zie Juridisch spul en zo).

  • Raspberry Pi 3 B Starter Kit compleet, gezien voor 59 euro, de Pi, SDHC card 8Gb, Voeding, netwerk kabel en behuizing.
  • De P1 kabel kost ongeveer 20 euro, even googelen op “p1 kabel slimme meter”.  Ik geef  de voorkeur aan kabels gebaseerd op de  FT232R chip.
  • Het spreekt vanzelf dat je een slimme meter moet hebben. Indien er nog geen slimme meter  is geplaatst kan deze worden aanvraagt bij de netbeheerder en deze wordt geplaatst voor ongeveer 70 euro (zie de website van uw netbeheerder) of even geduld  hebben en wachten tot de netbeheerder deze gratis komt plaatsen.

Juridisch spul en zo

Creative Commons-Licentie

Dit werk valt onder een Creative Commons Naamsvermelding-NietCommercieel 4.0 Internationaal-licentie.

De rechten van onderliggende softwareproducten zijn qua licentierechten niet gewijzigd Dit geldt voor bijvoorbeeld het besturingssysteem en javascript bibliotheken. De rechten van onderliggende producten gaan voor deze licentie.

DE SOFTWARE IS GELEVERD “ZOALS”, ZONDER GARANTIE VAN ENIGE SOORT, INCLUSIEF MAAR NIET BEPERKT OP DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL. IN GEEN GEVAL ZAL HET AUTEURS OF COPYRIGHT HOLDERS AANSPRAKELIJK ZIJN VOOR ENIGE EISEN, SCHADE OF ANDERE AANSPRAKELIJKHEID IN VERBAND MET DE SOFTWARE OF HET GEBRUIK VAN DE SOFTWARE.

Samengevat: gebruik is voor eigen risico.

De software verkrijgen en installatie.

De P1 monitor  software wordt geleverd als Raspberry Pi 3 B  SDHC 8GB image.  Die hieronder te downloaden is. Om de het image naar een SDHC card te kopiëren is een image tool nodig als je deze niet hebt dan kun je USB Image tool downloaden.

  1. Download het P1 monitor image file hier,
  2. Pak het zip file uit en lees de leesmij.txt
  3. kopieer het p1monYYYYMMDD.img file via de USB tool naar de lege 8GB SDHC card. Let op! data op de card wordt overschreven en is niet meer te herstellen.
  4. Sluit de Raspberry Pi aan op het netwerk via de kabel en plaatst de P1 kabel in een van de USB poorten.
  5. Sluit de RJ11 stekker aan op slimme meter (kleine stekker aan de P1 kabel)
  6. Sluit de voeding aan op de Raspberry PI. Na ongeveer 1 minuut zal de Raspberry PI gereed zijn voor gebruik. Bij gebruik van een Raspberry PI kan het starten wat langer duren.
  7. Nu komt het lastig stuk, het IP adres achterhalen van de P1 monitor. De meeste thuisnetwerken werken met het automatisch uitgeven van IP adressen. via DHCP als je toegang tot je Internet router hebt van Ziggo, Kpn dan kun je daar het adres vinden van de P1 monitor.  Als alternatief kun je een netwerkscanner tooltje voor je mobiel gebruiken als Fing – Network Tools van Domotz Ltd (Google is je vriend).
  8. Vul het IP adres is in de browser naar keuze. http://<het ipadress>

Veel plezier met de P1 monitor en laat weten hoe het bevalt.

Certificate Authority Authorization (CAA) cometh

Certificate Authority Authorization (CAA) cometh

DNS Certification Authority Authorization (CAA) Resource Record are defined in RFC6844 since January 2013. The goal of the CAA record is to give the ability to a CA to check if the CA may issue a CA certificate.

Abstract from RFC6844

The Certification Authority Authorization (CAA) DNS Resource Record allows a DNS domain name holder to specify one or more Certification Authorities (CAs) authorized to issue certificates for that domain. CAA Resource Records allow a public Certification Authority to implement additional controls to reduce the risk of unintended certificate mis-issue.

On March 8 the CA Browser forum voted in favor of the rule that CAA RR records are mandatory for certificate authorities, effective from September 2017 all certificate authorities must implement CAA record checking.  Until  September 2017 checking and using CAA records where optional.

Ballot 187 – Make CAA Checking Mandatory

This option gives domain owners more security.  If a domain owner fails to put in CAA records any CA can issue a certificate for the domain. This is a bad thing.  Not adding a CAA record is a bad idea and not taking security responsibility.

Dns Spy logo
DNS SPY

Checking if your domain has CAA records can easily done by using dnsspy. Check google.com to see the support for the Google and Symantec CA’s.

0 issue “pki.goog”
0 issue “symantec.com”

Browser suppliers can use CAA to check the website certificate to verify the authenticity. Google planned to require Certificate transparency starting in October 2017 but has moved the compliance date to April 2018.

We’ve been making excellent progress towards our goal of robust Certificate Transparency deployment for all publicly trusted certificates — and we also have new opportunities to improve Certificate Transparency and Chrome to better serve the Internet ecosystem. I’m pleased to announce that we’ll be moving forward with our plan to require Certificate Transparency for all newly issued, publicly trusted certificates starting in April 2018.

Go ahead make the Internet a safer place and add CAA records to your DNS servers.

Python Internet availability

Python Internet availability

This Python code snippet gives you a solution when you need to check if your Python application can reach the Internet.  You can always check if an Internet website is responding with urllib.request.urlretrieve.  For instance, www.google.com.  I have found this is not always reliable or even lock up the program.

A more reliable method is pinging one or more public DNS servers.  This snippet is a Python 3 function that does just that.  The function checks at random the set of DNS servers in the ‘li’ list and return ‘1’ when a DNS server responds or ‘0’ when all  DNS severs fail.

function

import random
import os
import socket
import subprocess

def getInternetStatusByDnsServers():
    r = ‘0’
    li = ["8.8.8.8",\
    "8.8.4.4",\
    "209.244.0.3",\
    "209.244.0.4",\
    "208.67.222.222",\
    "37.235.1.174",\
    "91.239.100.100"\
    ]

    random.shuffle(li)
    for i in range(len(li)):
       try :
           hostname = li[i]
           p = subprocess.Popen(["/bin/ping", "-c1", "-W1", hostname], stdout=subprocess.PIPE).stdout.read()
           for item in str(p).split("\n"):
               if "0% packet loss" in item:
                   return ‘1’
        except Exception as inst:
            print(type(inst))
            print(inst.args)
            print(inst)
    return r