Wie kann ich einige S0-Zähler mit fhem auf einer Fritz!Box 7390 auslesen?

Begonnen von Christian., 03 Juni 2013, 15:29:39

Vorheriges Thema - Nächstes Thema

tresa

Hallo,

ich glaube ich habe mich etwas schlecht ausgedrückt. Also ich will 2 IR-Sensoren EHZ001 von Hager an die Serielle Schnittstelle 2und 3 vom Arduino Mega hängen. Über diese Schnittstelle werden SML Daten übertragen. Diese Daten will ich ins Fhem übertragen am besten über Firmata. Fhem läuft bei mir zur Zeit noch auf einem alten Windows Rechner, wenn ich den dann mal durch einen Rasberry oder einen neueren REchner ersetzten will hätte ich so am wenigsten Probleme.
Kennt jemand von euch eine Möglichkeit wie man die Arduino Mega Schnittstellen 2 und 3 über Fhem auslesen kann?

Vielen Dank für eure Bemühungen.
Tresa

SkobyMobil

Arduino an S0-Bus, als WSZ-Zähler?

Hallo,
ich bin gerade dabei mir ein SmartMetering/EnergieManagement aufzubauen.
Als erste Grundlage verwende ich einen Arduino Mega 2560 und einen Atmel 328P-
der den S0-WSZ simuliert. Wenn diese Geschichte steht, dann soll das ganze
an einen MacMini/Netz zum weiter- verarbeiten gegeben werden.

Ich habe mir tatsächlich diese 11 Seiten durchgelesen, habe aber so meine
Bedenken an dem, was hier getrieben wird- oder ich verstehe es nicht...

Machen wir einmal das Leichte:
Wo finde ich denn den Sketch "imcount.ino"

Nun das Schwere:
Es ist richtig, das ihr die Leitungen des S0-Bus ohne Widerstand am Arduino
digitalPin betreibt? Also ohne Strombegrenzung? Oder wird der "interne" benutzt?
5V <-> S0-Plus
D1 <-> S0-Minus

nicht-

D1 <-> (Rx <-> GND) <-> S0-Minus

Dann das zählen/auswerten der Impulse:
Die "Länge" des S0-Imp spielt hier ja keine wirkliche Rolle? Es gibt WSZ mit
einer HighFlanke von 30ms oder auch 50ms.

Ich messe die Zeit (millis()) zwichen 2 HighFlanken, also:
High an D1 - millis() starten
millis() laufen
High an D1 - millis() stoppen

Die Differenz zwischen starten und stoppen ist meine Grundlage zur Berechnung.
Die gemessene Zeit setzt sich also aus x-mal (30/50ms High) + (X Low) zusammen.
Oder wird am S0 nur die LowFlanke gemessen?

Jetzt nehmen wir einmal einen S0-WSZ der bei 1kWh, 2000Imp liefert.
Bei einer maximalen Leistung von 3,680kWh sind das 7360Imp/Std. gleich- alle
489ms ein Impuls.

Wenn ich hier nun lese, das einige am Mega weit mehr als einen S0-WSZ
betreiben- was messen diese dann?

Die momentare Leistung kann ich mir ja noch vorstellen, aber einen sicheren
Zählerstand von mehreren S0-WSZ bekommt man damit doch nicht geliefert?

Von diesen WSZ würde ich ca. 17 Stck. benötigen, was mich nun treibt- ist,
welche Schnittstelle.

Bei S0 könnte man zu jedem Zähler einen 328P nehmen, der nichts anderes macht
als die Impulse zu zählen und sie in einer Variablen zum abrufen an den Mega
hält.
Mit dem Mega könnte man so einfach über seriell die ZählerStände abrufen, und
wenn gewollt auch die MomentarLeistung abrufen.

Oder nimmt man WSZ mit einer RS-485 Schnittstelle. Diese liefert einen Wechsel
des Zählerstand sofort- und die MomentarLeistung läßt sich abrufen.
Vielleicht kann mir ja mal jemand auf die Sprünge helfen.
Gruß und Dank
Andreas


Christian.

Zitat von: tresa am 17 September 2014, 15:45:31
Kennt jemand von euch eine Möglichkeit wie man die Arduino Mega Schnittstellen 2 und 3 über Fhem auslesen kann?

Wenn ich Dich richtig verstehe, suchst Du ein Firmata-Feature, das die Daten, die an den seriellen Schnittstellen des Mega eintreffen, über Firmata an den Host übermitteln. So etwas gibt es meines Wissens noch nicht. Firmata-Issue #97 ("software serial (and support for additional UARTs)") addressiert genau Dein Problem. Es scheint auch schon Code dafür zu geben. Schau es Dir bei Bedarf doch mal an.
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

Christian.

[
Zitat von: SkobyMobil am 08 Oktober 2014, 16:44:03Wo finde ich denn den Sketch "imcount.ino"
Hier

Zitat von: SkobyMobil am 08 Oktober 2014, 16:44:03Es ist richtig, das ihr die Leitungen des S0-Bus ohne Widerstand am Arduino digitalPin betreibt? Also ohne Strombegrenzung? Oder wird der "interne" benutzt?

S0 ist kein Bus, sondern Punkt-zu-Punkt; bei mir: S0+ -> D1, S0- -> GND und Aktivierung des internen Pullup-Widerstandes.

Zitat von: SkobyMobil am 08 Oktober 2014, 16:44:03Die "Länge" des S0-Imp spielt hier ja keine wirkliche Rolle?
Genau. Ich verwende wie beschrieben nicht mehr impcount, sondern Firmata. Das macht für das Zählen aber keinen Unterschied. Mit Firmata zähle ich die Dauer zwischen zwei fallenden Flanken.

Zitat von: SkobyMobil am 08 Oktober 2014, 16:44:03Wenn ich hier nun lese, das einige am Mega weit mehr als einen S0-WSZ betreiben-was messen diese dann?
Ich habe 12 Zähler und ein bisschen was anderes an einem Mega2560. Ich messe für jeden Eingang die Dauer zwischen den Signalen und rechne das in die momentane Leistung um. Der Zählerstand ergibt sich auch, und zwar aus der Anzahl der Impulse.

Ich verstehe nicht, wo Du ein Problem siehst. Erscheint Dir der Arduino überlastet? Und welchen Sinn haben die zusätzlichen 328P in Deinem Konzept?
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

SkobyMobil

Hallo,
erst mal schönen Dank für Deine Mühe.

Die 328P sollen nichts weiter machen, als Impulse zählen.
Das ist der Zählerstand...

"Der Zählerstand ergibt sich auch, und zwar aus der Anzahl der Impulse"

Und genau hier habe ich mein Problem.
Der Arduino kann nur eins nach dem anderen...
Bei 12 WSZ schaffst Du vielleicht 6 Zähler mit InterruptZauberei und Zwischen-
Speicher zu lesen und zu halten.
Das funktioniert aber nur bei geringer Last.
Wenn Du Zähler 1 bis 6 gelesen hast, und liest 8, wo zählst Du denn die Impulse
der anderen Zähler- die laufen doch weiter.
Oder schaltest Du zwischen den Low/HighFlanken weiter und holst Dir nur
jeweils einen Impuls von den Zählern?
Gruß und Dank
Andreas

Christian.

Zitat von: SkobyMobil am 08 Oktober 2014, 18:28:58
Bei 12 WSZ schaffst Du vielleicht 6 Zähler mit InterruptZauberei und Zwischen-
Speicher zu lesen und zu halten.
Wo kommt denn diese Zahl her? Könntest Du vielleicht Deine Annahmen etwas detaillierter erläutern?

Ich versuche mal eine Beispiel-Rechnung mit den Daten aus meiner Einsatzumgebung, vielleicht hilft das. Meine Zähler liefern 1000 Impulse pro Wh, die Impulsdauer beträgt ca. 60ms. Der Arduino ist mit 16 MHz getaktet. Ich verwende keine Interrupts.

Die loop()-Methode des Arduino-Sketches liest nacheinander alle digitalen Eingänge ein und sendet im Fall eines Signalwechsels eine Nachricht über die serielle Schnittstelle. Wie lange dauert ein Durchlauf? Ich habe das bei der Entwicklung von impcount.ino mal gemessen: ca. 80 µs im Leerlauf und ca. 600 µs, falls ein Signal gemessen und übermittelt wird (das entspricht also etwa 1280 bzw. 9600 Maschinenbefehlen).

Lassen wir jetzt mal je 1 Impuls von 20 Zählern direkt nacheinander eintreffen. Wenn die einfach stumpf nacheinander abgearbeitet werden, dauert das also 12 ms. Man könnte natürlich noch optimieren, indem man erst alle Signale eines Durchlaufs sammelt und gemeinsam über die serielle Schnittstelle schickt. Interrupts sind eine weitere Möglichkeit.

Zu Bedenken ist sicherlich die Kommunikationsgeschwindigkeit. Ich habe mit der seriellen Schnittstelle gearbeitet, es gibt ja auch noch Ethernet oder Funk; das sollte man berücksichtigen, wenn man kein Signal verpassen möchte.

Zu guter Letzt: die o.g. Zahlen basieren auf impcount.ino. Für Firmata gehe ich von derselben Größenordnung aus. Firmata ist recht effizient implementiert, es werden z.B. 8 digitale Signale mit einem einzigen Befehl gelesen, und das Kommunikationsprotokoll ist ebenfalls sehr kompakt. Aus diesen Gründen und wegen der guten Erweiterbarkeit arbeite ich lieber damit als mit impcount.ino.

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

SkobyMobil

Hallo,
hier habe ich die 12 Zähler her:
"Ich habe 12 Zähler und ein bisschen was anderes an einem Mega2560"
Das aber nur am Rande...

Wie Du es machst, habe ich begriffen. Das bekomme ich auch auf dem Mega
umgesetzt.
Theoretisch und rechnerisch funktioniert das bei Dir, ich habe da aber eine
andere Rechnung, die besagt- das funktioniert so nicht.

Ich bin mir da aber nicht mehr gaaanz so sicher, ich muß da mal etwas probieren.

Dann fragte ich nach "Wo finde ich denn den Sketch "imcount.ino"
Dein Link für auf eine andere Seite, aber nicht zum "downLoaden" zu finden.
Gruß und Dank
Andreas

Christian.

Hallo Andreas,

Zitat von: SkobyMobil am 08 Oktober 2014, 21:09:07
Dein Link für auf eine andere Seite, aber nicht zum "downLoaden" zu finden.

mein Link führt zu Antwort #61 in diesem Thread (28.09.2013, 07:22:59). An diesem Beitrag hängt auch die Datei impcount.ino. Vielleicht ist sie nur sichtbar, wenn man eingeloggt ist?

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

SkobyMobil

Hallo,
"einloggen" ist das Zauberwort für den Link.

Ich habe mir noch 2 S0-WSZ bestellt, dann habe ich 3 Stck.
Wir "rechnen" dann noch einmal...
Aber bis hier her- erst einmal vielen Dank für Deine Hilfe.
Gruß und Spaß
Andreas

matthias soll

Hallo zusammen,
ich habe in fhem alles eingefügt wie christian auf seit 4 beschrieben hat, aber ich habe große "ausreisser" bei den messwerten:

2015-04-05_09:54:38 Solarzaehler power: 1.87568 kW
2015-04-05_09:54:43 Solarzaehler power: 0.87105 kW
2015-04-05_09:54:43 Solarzaehler power: 103.74308 kW
2015-04-05_09:54:44 Solarzaehler power: 2.16379 kW
2015-04-05_09:54:46 Solarzaehler power: 1.82997 kW

Muss ich noch etwas machen? eventuell software pullups?
Ich habe auf meinem Mega die configurable Firmata unverändert aufgespielt, viele FRM Out und einen onewire pin mit 10 devices auf dem Bus kann es sein dass der überfordert ist?
Mir fällt grade noch auf, dass die Ausreisser immer in der leichen Millisekunde auftreten kann das das Problem sein?
Gruß
Matthias

Christian.

Solche Ausreißer siehst Du, wenn zwei Signale direkt hintereinander, also mit nur wenigen Millisekunden Abstand, eingehen. Das kann z.B. bei mechanischen Zählern durch Prellen verursacht werden.
Du kannst dein Device so konfigurieren, dass ein Signal nur dann als gültig gewertet wird, wenn seit dem vorigen Signal eine gewisse Dauer verstrichen ist. Folgende Zeile bewirkt eine Dauer von 1 Sekunde und könnte bei Deinem Problem helfen:

attr zaehler event-min-interval power:1

Das zweite Signal wird dadurch ignoriert bzw. geht verloren, je nach Blickrichtung.

Es könnte auch sein, dass count-mode mit both belegt ist, sodass sowohl steigende als auch fallende Flanke als Signal gewertet werden. Dann sollte eine Änderung auf falling oder rising Abhilfe schaffen.
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

Franz Tenbrock

Hallo Christian, super Sache die mich brennend interessiert.

ich wühl mich  nun schon 30 min durch den Thread...
Kannst du nicht im ersten Post den aktuellen Stand anhängen....dann würde sich sicher die eine oder andere Frage erübrigen

Hier und da wurde ja immer wieder was neues geschrieben, so dass man den Thread wohl  3x mal lesen muss, um keine Fehler zu machen. Ardunio nano flashen, löten etc kann ich ja mittlerweile...
Will langfristig FS20 entfernen und dann muss was neues für die ESAs her, wenns noch zuverlässiger wäre wäre das super

"Antwort #70 am: 01 März 2014, 09:31:08 »
Zitat
Mir ist gerade aufgefallen, dass ich meine Konfiguration nach dem Post #57 wegen der Pullup-Problematik nochmal geändert habe. Ich habe deshalb den aktuellen Stand angehängt. Einige Funktionen habe ich zwischenzeitlich auch in die Datei 99_myUtils.pl ausgelagert. Ganz wichtig ist das Attribut internal-pullup des Moduls FRM_IN, das Norbert vor einigen Monaten eingebaut hat. Wenn das nicht auf on gesetzt wäre, würde schon bei bestehender Verbindung von Zähler und Ardunio dauerhaft gezählt."
da gibts auch wichtige Anhänge ?!
?
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Christian.

Zitat von: Franz Tenbrock am 05 April 2015, 22:13:03
Kannst du nicht im ersten Post den aktuellen Stand anhängen....dann würde sich sicher die eine oder andere Frage erübrigen
Kein Problem, habe ich gerade gemacht.

Zitat von: Franz Tenbrock am 05 April 2015, 22:13:03
Hier und da wurde ja immer wieder was neues geschrieben, so dass man den Thread wohl  3x mal lesen muss, um keine Fehler zu machen.
Eigentlich nicht. Seit Post #70 ist von mir nichts mehr hinzugekommen. Ob in den nachfolgenden Threads etwas für Dich dabei ist, kann ich für Dich nicht entscheiden.

Du beklagst, dass Du hier nicht auf den ersten Blick alles für Dich Interessante findest. Es ist ganz normal, dass ein Foren-Thread schnell unübersichtlich wird, weil er nicht thematisch, sondern zeitlich sortiert ist. Du suchst eigentlich keinen Foren-Thread, sondern eine Schritt-für-Schritt-Anleitung, z.B. in Form eines Wiki-Artikels. Eine solche Anleitung gibt es zur Zeit nicht. Jeder, der ihn vermisst, kann das aber ändern.
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

Franz Tenbrock

#163
Ich will mich keinesfalls beklagen !!


nur wenn ich das mache
kommt wahrscheinlich chaos raus...
Hab mal einen wiki erstellt, da hab ich mich dann 3 Wochen mit Hilfe anderer durchgequält
zisterne Ultraschallsensor.
oder auch mal cubitruck Einrichtung... fhemduino Anleitungen
Bin halt FHEM infiziert, nur leider fehlt häufig die Zeit ( wie bei den meisten anderen auch )
Wenn ich was nachbaue, hab ich meist auch eine Anleitung für Dummies geschrieben und die dann auch ins Netz zur weiteren Bearbeitung gestellt, in der Hoffnung das dann hinterher ein Einsteigerleitfaden dabei rauskommt. Es gibt halt hier so viele geile Dinge die man gerne nachbauen würde

so wie du es jetzt gemacht hast ( gerade nachgesehen) ist ja bestens, Thanks

War keinesfalls als Kritik gedacht
Frohe Ostern
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

matthias soll

@Chriatian danke für die Antwort werde ich ausprobieren.
Mein Mega hängt im Netzwerk, ich hoffe, dass ich damit nicht Pobleme mit der Zählerauswertung bekomme.
Ich werde berichten.

Melde mich jetzt erst weil die email benachrichtigung nicht funktioiert hat, muss ich nochmal neu einstellen.

Der Beitrag sollte am besten zusammengefasst im Wiki stehen.
Das Thema ist bestimmt für sehr viele interessant und die Lösung mit Firmata und einem Arduino Mega ist supergünstig und bietet
sehr viele Möglichkeiten für die Automatisierung.
Gruß
Matthias