Stromzähler mit S0 Ausgang in FHEM einbinden

Begonnen von Markus Bloch, 17 September 2013, 23:35:34

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo zusammen,

um den Stromverbrauch von einzelnen Komponenten zu überwachen, habe ich mir einen digitalen Stromzähler mit S0 Ausgang zugelegt (gibt es für ca. 20€ z.B. bei Amazon).

Der S0 Ausgang ist dabei nichts anderes als ein Kontakt, der bei einem Impuls geschlossen wird. Je nach Zähler wird für jede Verbrauchte Kilowattstunde eine unterschiedliche Anzahl an Impulsen generiert. In meinem Fall habe ich einen Zähler der 2000 Impulse pro verbrauchste Kilowattstunde erzeugt.

Die einfachste Möglichkeit diese Impulse in FHEM zu integrieren ist über einen RS232 Anschluss am heimischen FHEM Rechner. Dazu gibt es unter http://wiki.volkszaehler.org/hardware/controllers/s0-an-rs232 eine einfache Anleitung. Man lötet die beiden Adern des S0 Ausganges (S0+ und S0-) an einen RS232 Stecker und öffnet dann die Schnittstelle mit 50 Baud ohne Flusssteuerung oder Pufferung und dergleichen.

Unter Linux konfiguriert man dazu die TTY mit dem Befehl:

stty raw -F /dev/ttyUSB0 50

Wie im Artikel beschrieben, kann man mit

strace -ttt -e read cat  < /dev/ttyUSB0 > /dev/null

testen, ob Impulse auf dem Anschluss eintreffen (sofern am Zähler Strom verbraucht wird).

Wenn alles in Ordnung ist, kann man dann mit dem angehangenen Modul den Zähler in FHEM einbinden.

Dazu das File in den selben Ordner kopieren, wo auch alle anderen Module installiert sind, FHEM neustarten und dann mit:

define Herd S0COUNTER /dev/ttyUSB0

einbinden.

Das Modul hat als Attribut "impulse_per_unit", welches im Standartwert auf 2000 Impulse pro kWh eingestellt ist. Je nach Zähler muss man hier einen anderen Wert setzen.

Es wird, sofern ein Impuls eintrifft ein Reading "power" erzeugt, mit der verbrauchten Leistung in Watt.

Hoffe jemand kann es gebrauchen.

Viel Spaß damit.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Dennis D.

Hi Markus,

genau DAS, was ich gesucht habe. Bin vom Volkszählerprojekt weg, da ich alles zentral in FHEM loggen möchte. Ein Modul für das Auslesen des Hauptzählers ist ja schon in der Entwicklung.
Für meine vier S0-Zähler fehlte mir noch ein entsprechendes Modul.

Werde Deinen Counter direkt heute Abend mal ausprobieren. Bin schon gespannt.

EDIT: Wie kann ich denn meine S0-Zähler zuweisen? Habe die auf den GPIO Inputs 0 bis 4 angeschlossen. Was muss ich da als "Pfad" im define angeben? /dev/???

LG,
Dennis
FHEM 5.5 auf RPi Rev. B 512 mit HMLAN (HM-CFG-LAN)

CUL_HM: HM-LC-Bl1PBU-FM,HM-LC-SW1-BA-PCB,HM-LC-SW4-SM,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-PB-2-WM55,HM-RC-KEY3-B,HM-SEC-KEY,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SD,HM-WDS10-TH-O,HM-WDS40-TH-I

OWDevice: DS18B20,DS2438

Papaloewe

Hast Du das hier gelesen:

ZitatBeim Raspberry Pi ist ein interne UART als /dev/ttyAMA0 vorhanden. Die Pinbelegung ist GPIO 15 für RXD (P1-10) und GPIO 17 für RTS (P1-11), siehe http://elinux.org/RPi_Low-level_peripherals. Allerdings ist die RTS Funktion standardmäßig deaktiviert. Zum aktivieren muss der Pin erst in Alternate Function 3 versetzt werden. Das kann z.B. mit diesem Tool erfolgen: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=39138&p=322253 gpio_alt -p 17 -f 3. Einfacher ist wahrscheinlich alternativ dazu die Nutzung von 's0vz' https://github.com/w3llschmidt/s0vz am Raspberry Pi.
Achtung! Das funktioniert nicht in Verbindung mit Udos RPi-Erweiterungen, da dort diese Pins schon belegt sind.

Quelle:http://wiki.volkszaehler.org/hardware/controllers/s0-an-rs232

Alles von mir nicht geprüft und ohne Gewähr ;-).

Gruß Thomas

Markus Bloch

Da ich den Zähler direkt am NAS brauche, habe ich einen USB-RS232 Adapter verwendet.

Das Raspberry stellt allerdings nur eine RS232 Schnittstelle per GPIO zur Verfügung. D

Ausprobiert habe ich es mit einem Raspberry nicht.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Dennis D.

Hallo Thomas,

ja, der Beitrag ist mir bekannt. Ich habe ja die RPi-Erweiterung von Udo. An dem ttyAMA0 ist meines Wissens nach die D0-Schnittstelle für den IR-Schreiblesekopf gebunden. Die sechs S0 Eingänge müssen aber auch irgendwo verfügbar sein, schließlich konnte ich ja mit dem s0vz-deamon die Impulse der Zähler erfassen und weitergeben.

Im Source-Code vom s0vz fand ich folgende Zeile:


char gpio_pin_id[] = { 17, 18, 27, 22, 23, 24 }, url[128];


Daraus schloss ich, dass dies die GPIO-Pins sind, auf dem die sechs S0-Eingänge der RPi Erweiterung liegen. Daher habe ich dann versucht mit dem S0COUNTER diese zu adressieren:


define "name" S0COUNTER /sys/class/gpio/gpio18/value


Leider funktioniert das aber nicht. Habe ich hier einen Denkfehler?

Gruß,
Dennis
FHEM 5.5 auf RPi Rev. B 512 mit HMLAN (HM-CFG-LAN)

CUL_HM: HM-LC-Bl1PBU-FM,HM-LC-SW1-BA-PCB,HM-LC-SW4-SM,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-PB-2-WM55,HM-RC-KEY3-B,HM-SEC-KEY,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SD,HM-WDS10-TH-O,HM-WDS40-TH-I

OWDevice: DS18B20,DS2438

Markus Bloch

Hallo Dennis,

der s0vz liest zyklisch den Status der GPIOs ein indem es den Pfad  /sys/class/gpio/gpio18/value öffnet und schaut was da drinn steht (0 oder 1). Ein solches Pollingverfahren ist in FHEM leider nicht so einfach möglich bedingt durch die interne Ablaufstruktur von FHEM.

Über einen RS232 Adapter (oder eben die UART schnittstelle des Raspberrys) läuft das ganze Event-gesteuert. Sobald ein solchen Event auftritt, tritt das S0COUNTER Modul in Aktion und berechnet aufgrund der vergangenen Zeit des letzten Events den Stromverbrauch.

Ein solches Polling ist in FHEM nicht zuverlässig umsetzbar. Man könnte dies mit einem kleinen Daemon lösen, der wie der s0vz die GPIO's pollt und dann per TCP-IP ein Event schickt, falls sich der Wert aufgrund eines Impulses ändert. So etwas könnte man mit einem Modul verarbeiten.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Dennis D.

Hi Markus,

ok, dann ist das also nicht so leicht möglich, wie ich mir das vorgestellt habe. Schade. Hatte gehofft, dass ich mit dem S0COUNTER mal eben realisieren könnte.

Gruß,
Dennis
FHEM 5.5 auf RPi Rev. B 512 mit HMLAN (HM-CFG-LAN)

CUL_HM: HM-LC-Bl1PBU-FM,HM-LC-SW1-BA-PCB,HM-LC-SW4-SM,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-PB-2-WM55,HM-RC-KEY3-B,HM-SEC-KEY,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SD,HM-WDS10-TH-O,HM-WDS40-TH-I

OWDevice: DS18B20,DS2438

Christian.

Hallo,

nur zur Info: ich hatte ähnliche Anforderungen und logge inzwischen erfolgreich 7 S0-Zähler über einen Arduino in FHEM auf einer Fritz!Box 7390. Dafür ist dank Firmata kein eigener Code und kein neues Modul notwendig, nur ein paar Zeilen Konfiguration. Ich habe hier alles beschrieben.

Schöne Grüße,
Christian
Raspberry Pi 3 mit FHEM; Arduino Nano mit ConfigurableFirmata (S0-Stromzähler); nanoCUL (MAX!); SIGNALduino (RXB6, 433 MHz); eBus; RS485 & D0 (SolarView); DVB-T (Thermo-/Hygrometer); Z-Wave; ZigBee

karl2100

Hallo,

bin gerade bei meine ersten Schritten mit FHEM und verschiedenen Aktoren und Sensoren.

Zum einbinden des S0-Moduls unter Windows komme ich nicht weiter. Evtl. kann mir einer der sich mit Windows auskennt ein wenig unter die Arme greifen.

S0-Modul in FHEM läuft soweit, Port ist geöffnet, Hardware S0-Modul liefert Impulse, hab aber Probleme mit der COM1.

FHEM Fehler Meldung: REQURED Settings STOP at FHEM/DevIo.pm line 245
                                 REQURED Settings PARITY at FHEM/DevIo.pm line 245
                                 REQURED Settings DATA at FHEM/DevIo.pm line 245
                                 REQURED Settings BAUD at FHEM/DevIo.pm line 245
Wie und wo kann ich die Parameter setzen, was mach ich falsch?



Vielen Dank für Eure Hilfe.
Windows 7 32-Bit, ActivePerl 5.16, FHEM 5.5, mehrere DS1820, fs20piri, fs20pira, fs20st2, Fritz DECT200, FHZ1000PC
Testweise: Fritz!Box7390, CUL,

Tobias

ich finde die beste Art für S0-Impulse ist ein 1wire Modul....
Ich habe hier schon 14 ATTiny 1wire Zähler von dougie. An diese können jeweils 2 Stromzähler angeschlossen werden. So will ich meine 28 Stromkreise direkt im Zählerschrank überwachen....
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Dennis D.

Habe nun mal die vorhandenen Module durchforstet und siehe da, ich bin fündig geworden. Es war einfacher als gedacht. Über das Modul RPI_GPIO kann man bis zu sechs S0-Zähler über die RPi-Erweiterung von Udo vom Volkszähler-Projekt einbinden.  ;D
FHEM 5.5 auf RPi Rev. B 512 mit HMLAN (HM-CFG-LAN)

CUL_HM: HM-LC-Bl1PBU-FM,HM-LC-SW1-BA-PCB,HM-LC-SW4-SM,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-PB-2-WM55,HM-RC-KEY3-B,HM-SEC-KEY,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SD,HM-WDS10-TH-O,HM-WDS40-TH-I

OWDevice: DS18B20,DS2438

Eniac

Hallo Markus,
hattest du es jetzt eigentlich geschafft, den S0-Stromzähler per USB an die Synology zu verbinden?

Muss man beim USB-Adapter etwas beachten oder gibt es ggf direkt die Möglichkeit, den Stromzähler auf einen USB-Stecker zu legen?

Viele Grüße
Eniac
--------------------

Using FHEM on a Synology DS212j with Homematic devices

Henno

Ich würde das ganze gerne mit HourCount verbinden.
Hat das schon jemand geschafft?

Markus Bloch

Zitat von: Eniac am 19 Januar 2014, 13:58:57
Hallo Markus,
hattest du es jetzt eigentlich geschafft, den S0-Stromzähler per USB an die Synology zu verbinden?

Muss man beim USB-Adapter etwas beachten oder gibt es ggf direkt die Möglichkeit, den Stromzähler auf einen USB-Stecker zu legen?

Viele Grüße
Eniac

Hallo Eniac,

sorry für die späte Antwort, offenbar gab es keine Benachrichtigungsmail mehr. Ich habe den S0 via RS232-zu-USB Adapter direkt an mein Synology NAS angeschlossen.

Also so etwas: http://www.amazon.de/IC-Intracom-USB-Konverter-USB-Seriell/dp/B0007OWNYA/ref=sr_1_1?ie=UTF8&qid=1394877319&sr=8-1&keywords=rs232+usb

Dazu das Kabel auf ein entsprechendes Gegenstück gelötet:

http://www.conrad.de/ce/de/product/711764/D-SUB-Gehaeuse-Polzahl-9-Kunststoff-metallisiert-180-Silber-BKL-Electronic-10120076-1-St/?ref=bundles&rt=bundles&rb=1
http://www.conrad.de/ce/de/product/742082/D-SUB-Buchsenleiste-180-Polzahl-9-Loetkelch-1-St?ref=list

und dann einfach verbunden und via USB an mein NAS.

Läuft bisher sehr gut und ohne Probleme.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

jt5569

Hallo Markus,

ich habe Deine Lösung (S0 direkt an RS232) ausprobiert.
Ich bekomme die richtigen Daten, aber bei hohen Leistungen bekomme ich falsche Werte.
Bei mir hängt eine Wärmepumpe an dem Drehstromzähler.
Über ca. 4000W kommt es zu Fehlmessungen.
Beim genaueren Analysieren der Daten fällt auf, daß immer nach einem zu kleinem Leistungswert (=längerer zeitlicher Abstand von zwei Impulsen) ein viel zu  großer Leistungswert (= kurzer zeitlicher Abstand zweier Impulse) folgt. (Siehe Bild S0.png)
Ich gehe davon aus, dass mein altes Notebook (FHEM Server) bei parallelen Prozessen (z.b. den 1-wire Bus abfragen) zu langsam ist.
Anders kann ich mir dieses Problem nicht erklären.

Deshalb die Frage, ob schon jemand das 74_S0COUNTER.pm umgeschrieben hat und z.b. nur jede Minute einen aktuellen Leistungswert zu schreiben und dafür die Energie pro Tag auf zu summieren?

Z.b. wie bei meiner PV-Anlage. (Siehe Bild PV.png)

Vielen Dank schon mal für Tips.

Gruß
Jürgen