Difference between revisions of "Volkszähler"
Jump to navigation
Jump to search
(2 intermediate revisions by the same user not shown) | |||
Line 27: | Line 27: | ||
</source> | </source> | ||
Follow instructions e.g. raspi-config - bind address for mysql, localization ... | Follow instructions e.g. raspi-config - bind address for mysql, localization ... | ||
− | === WLAN == | + | === WLAN === |
+ | use raspi-config | ||
see https://raspberrypi.stackexchange.com/a/123724/11220 | see https://raspberrypi.stackexchange.com/a/123724/11220 | ||
+ | === readmeter === | ||
+ | if you install the readmeter script below in the pi users's bin directorey you can simply call | ||
+ | <source lang='bash'> | ||
+ | readmeter | ||
+ | </source> | ||
= Install desktop = | = Install desktop = | ||
Line 37: | Line 43: | ||
sudo raspi-config # activate desktop via menu | sudo raspi-config # activate desktop via menu | ||
</source> | </source> | ||
+ | |||
= Test USB S0 reader = | = Test USB S0 reader = | ||
== readmeter == | == readmeter == |
Latest revision as of 14:31, 14 July 2021
- https://www.volkszaehler.org/
- https://wiki.volkszaehler.org/software/releases/start
- https://wiki.volkszaehler.org/howto/raspberry_pi_image
- https://wiki.volkszaehler.org/hardware/channels/meters/power/edl-ehz/edl21-ehz
- https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf?s[]=ir&s[]=lesekopf
- https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-usb-ausgang
Install from Image
VzLogger
- https://wiki.volkszaehler.org/howto/raspberry_pi_image
- https://demo.volkszaehler.org/downloads/volkszaehler_latest.zip
ls -l 2021-02-13-volkszaehler.img
-rw-rw-r--@ 1 wf staff 3665924608 13 Feb 11:42 2021-02-13-volkszaehler.img
Burn image e.g. https://www.balena.io/etcher/
First Login
/usr/bin/xauth: file /home/pi/.Xauthority does not exist
SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.
Wi-Fi is currently blocked by rfkill.
Use raspi-config to set the country before use
Follow instructions e.g. raspi-config - bind address for mysql, localization ...
WLAN
use raspi-config see https://raspberrypi.stackexchange.com/a/123724/11220
readmeter
if you install the readmeter script below in the pi users's bin directorey you can simply call
readmeter
Install desktop
If you'd like to have the desktop configuration for the raspberry that you configured using the Volkzsähler image you can install the desktop with:
sudo apt-get install raspberrypi-ui-mods -y
sudo raspi-config # activate desktop via menu
Test USB S0 reader
readmeter
Prerequsite
you need to install bc for the readmeter script to work
apt-get install bc
readmeter bash script
#!/bin/bash
# read and evaluate SML output received from EMH eHZ
getmeter() {
# set serial device
INPUT_DEV="/dev/ttyUSB0"
#set $INPUT_DEV to 9600 8N1
stty -F $INPUT_DEV 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
SML_START_SEQUENCE="1B1B1B1B0101010176"
METER_OUTPUT__START_SEQUENCE=""
while [ "$METER_OUTPUT__START_SEQUENCE" != "$SML_START_SEQUENCE" ]
do
METER_OUTPUT=`cat $INPUT_DEV 2>/dev/null | xxd -p -u -l 460 | tr -d '[:space:]'`
METER_OUTPUT__START_SEQUENCE=$(echo "${METER_OUTPUT:0:18}")
if [ "$METER_OUTPUT__START_SEQUENCE" != "$SML_START_SEQUENCE" ];
then
echo "missed start and trying again..."
sleep 0.1
#exit 1
fi
done
echo $METER_OUTPUT
}
#
# match
# 1: prefix
# 2: text
# 3: ofs
# 4: len
#
matchvalue() {
local l_prefix="$1"
local l_text="$2"
local l_ofs="$3"
local l_len="$4"
local l_prefix_len=${#l_prefix}
local l_text_len=${#l_text}
local l_start=0
let l_max=l_text_len-l_prefix_len
#echo "$l_prefix_len - $l_text_len - $l_max"
while [ $l_start -lt $l_max ]
do
l_part=${l_text:$l_start:$l_prefix_len}
if [ "$l_prefix" = "$l_part" ]
then
let l_start=l_start+l_prefix_len+l_ofs
local l_value_hex=${l_text:$l_start:$l_len}
let l_value=0x${l_value_hex}
# uncomment to debug - but then do not use bc below
# echo ${l_start}
# echo ${l_value_hex}
echo $l_value
return
fi
let l_start=l_start+1
done
}
#
# get a value from the SML Sequence
#
getvalue() {
local l_prefix="$1"
local l_text="$2"
local l_ofs="$3"
local l_len="$4"
local l_factor="$5"
local l_title="$6"
local l_unit="$7"
#echo "ofs:$l_ofs len: $l_len factor: $l_factor"
METER_180=$(matchvalue "$l_prefix" "$l_text" "$l_ofs" "$l_len")
#echo $METER_180
VALUE=$(echo "scale=2; $METER_180 / $l_factor" |bc)
echo "$l_title" $VALUE "$l_unit"
}
echo "SML SEQUENCE:"
getmeter
getvalue "77070100010800FF" "$METER_OUTPUT" 20 10 10000 "Meter 1.8.0 (from plant):" "kWh"
getvalue "77070100020800FF" "$METER_OUTPUT" 20 10 10000 "Meter 2.8.0 ( to plant):" "kWh"
#getvalue "77070100010801FF" "$METER_OUTPUT" 20 10 10 "1.8.1" "kW"
#getvalue "77070100010802FF" "$METER_OUTPUT" 20 10 10 "1.8.2" "kW"
#getvalue "77070100020801FF" "$METER_OUTPUT" 20 10 10 "2.8.1" "kW"
#getvalue "77070100020802FF" "$METER_OUTPUT" 20 10 10 "2.8.2" "kW"
Example output
./readmeter SML SEQUENCE: missed start and trying again... 1B1B1B1B0101010176070012028F6A8262006200726301017601010700120C6D78D609080C2AED2D4C4E9F01016337390076070012028F6A836200620072630701770109080C2AED2D4C4E9F070100620AFFFF726201650C6DEC247A77078181C78203FF0101010104454D480177070100000009FF0101010109080C2AED2D4C4E9F0177070100010800FF6401018201621E52FF5600156312070177070100020800FF6401018201621E52FF5600093E97510177070100010801FF0101621E52FF5600156312070177070100020801FF0101621E52FF5600093E97510177070100010802FF0101621E52FF5600000000000177070100020802FF0101621E52FF56000000000001770701000F0700FF0101621B52FF6500001E330177078181C78205FF01726201650C6DEC2501018302D9801652DE264F8D45221BDF3EB993C9083F800F6F1319C9BD7148567D336D72DBB1E5A845CC56C4A3EE32157EF495560101016358FA0076070012028F6A846200620072630201710163529A000000001B1B1B1B1A0376561B1B1B1B0101010176070012028F6A8862006200726301017601010700120C6D78D809080C2AED2D4C4E9F010163797A0076070012028F6A896200620072630701770109 Meter 1.8.0 (from plant): 35881.42 kWh Meter 2.8.0 ( to plant): 15509.69 kWh