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

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Christian.

Zu bgewehr:

Danke für den Tipp. Das Projekt hatte ich bereits auf dem Schirm, es scheidet aber aus mehreren Gründen für mich aus:
  • Ich konnte nicht klären, ob die Software auf einer Fritz!Box läuft. Einen Raspberry Pi wollte ich nicht extra für diesen Zweck nicht anschaffen, wo doch die Fritz!Box schon vorhanden ist und verwendet werden könnte. Außerdem scheint mir die Installation und Konfiguration nicht ganz ohne zu sein.
  • In der Liste der unterstützten Hardware-Controller hab ich nichts Passendes für meinen Zweck gefunden; den einen muss man sich selber zusammenlöten, der andere ist zu beschränkt in der Anzahl der Anschlüsse. Vom Arduino habe ich überhaupt nichts gelesen, die Anbindung ist deshalb vermutlich auch nicht mal eben gemacht.
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

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Christian.

Diese Variante hatte ich im ersten Posting auch schon bedacht (Variante 2). Für mehrere Zähler wird das aber schnell teuer. Trotzdem danke für die Idee.
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

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Christian.

Wie kommst Du auf 150€?
5 S0-Zähler à 20€ sind schonmal 100€. Wenn ich dann noch 3 1-Wire-Module à 50€ brauche, bin ich bei 250€. Alternativ das RS485-Modul à 120€, da komme ich auf 220€. Dagegen ist ein Arduino Mega 2560 schon für 15€ (China-Nachbau über eBay, sonst 50€) zu bekommen, damit kommt man etwas günstiger weg.
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.

Nachdem ich nun etwas besser verstehe, wie FHEM "tickt", habe ich mir nochmal im Wiki den Artikel zum  Firmata-Protokoll durchgelesen. Mittlerweile denke ich, dass man zum Auslesen von S0-Zählern über einen Arduino weder mein Modul IMPCOUNT noch meinen Arduino-Sketch impcount.ino benötigt. Es sollte auch über das bestehende Modul FRM_IN und den standardmäßig mit dem Arduino ausgelieferten Sketch StandardFirmata (evtl. sogar mit dem abgespeckten SimpleDigitalFirmata) funktionieren.

Von der Idee her werden die Impulse einfach nur vom Arduino an das Modul FRM_IN weitergeleitet. Die Weiterverarbeitung, z.B. Berechnung der kWh, erfolgt dann im Anschluss, z.B. über Events. Das müsste ohne viel Aufwand zu machen sein.

Ich versuche gerade, das für Pin 2 umzusetzen; hinbekommen habe ich es aber leider noch nicht. Hier ein Auszug aus meiner fhem.cfg:

define FIRMATA FRM /dev/ttyACM0@57600
attr   FIRMATA sampling-interval 1000
attr   FIRMATA room Firmata
attr   FIRMATA loglevel 3

define arduino_pin_02_frm FRM_IN 2
attr   arduino_pin_02_frm count-mode falling
attr   arduino_pin_02_frm room Firmata
Außerdem habe ich den Sketch SimpleDigitalFirmata zu Testzwecken wie folgt erweitert

long currentMillis = millis();
void loop() {
    // Hier steht der Original-Code aus SimpleDigitalFirmata, und danach:

    if (millis() - currentMillis > 2000) {
      outputPort(2, LOW);
      delay(500);
      outputPort(2, HIGH);
      currentMillis = millis();
    }
}
und auf den Arduino hochgeladen.

Im FHEM-Log sehe ich nun, dass Signale im Modul FRM eingehen, z.B.

2013.07.02 07:26:40 3: <92,01,00,92,30,00
2013.07.02 07:26:42 3: <92,00,00
2013.07.02 07:26:42 3: <92,01,00,92,30,00
2013.07.02 07:26:44 3: <92,00,00
2013.07.02 07:26:45 3: <92,01,00,92,30,00
Das Modul FRM_IN, also mein Gerät arduino_pin_02_frm, bekommt davon aber scheinbar nichts mit. Ich erwarte abwechselnd den Status on oder off, er ist aber immer nur reading:

(siehe Anhang / see attachement)


Fehlt mir noch etwas?
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

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

ntruchsess

hallo fhem-user,

so spontan sieht das erst mal korrekt aus (fhem.cfg, geloggte Firmata-messages). Der Wiki-artikel ist übrigens veraltet, FRM ist seit 5.4 im Standard drin und bekommt auch updates über ein normales FHEM 'update'. 'StandardFirmata.ino' als Sketch ist eigentlich auch 'out'. Aktuell ist ConfigurableFirmata (hier als zip-datei) Hat das FRM_IN-modul beim Hochfahren irgendwas geloggt? Was findet sich denn auf der Details-seite des FRM-moduls?

Gruß,

Norbert
while (!asleep()) {sheep++};

ntruchsess

Ich hab bemerkt, dass FRM_IN gar nichts zählt, wenn man keinen count-threshold definiert hat.

Hier habe ich grade einen Fix commited. Ist noch ungetestet (die Hardware steht zu Hause, da komme ich erst heute Abend dazu, dann kommt der Fix auch ins offizielle svn...)

Das reading (und der STATE) sollten aber auch ohne den Fix geupdated werden.

Gruß,

Norbert
while (!asleep()) {sheep++};

justme1968

wenn du das berechnen mit den userReadings machst ist vielleicht auch der patch hier Link für dich interessant (doku ganz untem in thread).

damit zählt fhem den counter auch weiter wenn zwischendurch der arduino oder s0 zähler resettet wird.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Christian.

Hallo Norbert,

danke für die schnelle Antwort. Ich habe FHEM neu gestartet, hier die Ausgaben.

Konsole der Fritz!Box:
# cd var/InternerSpeicher/fhem/
# chroot . bin/startfhem shutdown restart
mount: mounting proc on /proc failed: Device or resource busy
mount: mounting sysfs on /sys failed: Device or resource busy
mount: mounting usbfs on /proc/bus/usb failed: Device or resource busy
# Use of uninitialized value $buf in split at /usr/share/fhem/FHEM/10_FRM.pm line 412, <$fh> line 87.
Use of uninitialized value $wbuf in string eq at /opt/lib/perl5/site_perl/5.12.2/mips-linux/Device/SerialPort.pm line 1729, <$fh> line 87.
Use of uninitialized value $buf in split at /usr/share/fhem/FHEM/10_FRM.pm line 412, <$fh> line 87.
Use of uninitialized value $wbuf in string eq at /opt/lib/perl5/site_perl/5.12.2/mips-linux/Device/SerialPort.pm line 1729, <$fh> line 87.
Use of uninitialized value $buf in split at /usr/share/fhem/FHEM/10_FRM.pm line 412, <$fh> line 87.
Use of uninitialized value $wbuf in string eq at /opt/lib/perl5/site_perl/5.12.2/mips-linux/Device/SerialPort.pm line 1729, <$fh> line 87.
Use of uninitialized value $buf in split at /usr/share/fhem/FHEM/10_FRM.pm line 412, <$fh> line 88.
Use of uninitialized value $wbuf in string eq at /opt/lib/perl5/site_perl/5.12.2/mips-linux/Device/SerialPort.pm line 1729, <$fh> line 88.
Use of uninitialized value $buf in split at /usr/share/fhem/FHEM/10_FRM.pm line 412, <$fh> line 92.
Use of uninitialized value $wbuf in string eq at /opt/lib/perl5/site_perl/5.12.2/mips-linux/Device/SerialPort.pm line 1729, <$fh> line 92.
Use of uninitialized value $buf in split at /usr/share/fhem/FHEM/10_FRM.pm line 412, <$fh> line 92.
Use of uninitialized value $wbuf in string eq at /opt/lib/perl5/site_perl/5.12.2/mips-linux/Device/SerialPort.pm line 1729, <$fh> line 92.


FHEM-Log:
2013.07.02 20:32:13 1: Including /etc/fhem.cfg
2013.07.02 20:32:14 3: telnetPort: port 7072 opened
2013.07.02 20:32:15 3: WEB: port 8083 opened
2013.07.02 20:32:15 3: WEBphone: port 8084 opened
2013.07.02 20:32:15 3: WEBtablet: port 8085 opened
2013.07.02 20:32:15 3: Opening fbaha device localhost:2002
2013.07.02 20:32:15 3: Can't connect to localhost:2002: Connection refused
2013.07.02 20:32:17 3: Opening FIRMATA device /dev/ttyACM0
2013.07.02 20:32:17 3: Setting FIRMATA baudrate to 57600
2013.07.02 20:32:17 3: FIRMATA device opened
2013.07.02 20:32:19 3: Firmata Firmware Version: SimpleDigitalFirmata.ino V_0_01
2013.07.02 20:32:22 3: 3
2013.07.02 20:32:22 3: >
2013.07.02 20:32:22 3: SW:
2013.07.02 20:32:22 3: >
2013.07.02 20:32:22 3: SW:
2013.07.02 20:32:22 1: configfile: 3
2013.07.02 20:32:22 1: Including /var/log/fhem/fhem.save
2013.07.02 20:32:22 1: usb create starting
2013.07.02 20:32:22 3: Opening CUL device /dev/ttyACM1
2013.07.02 20:32:22 3: Can't open /dev/ttyACM1: Invalid argument
2013.07.02 20:32:22 3: Opening TCM310 device /dev/ttyUSB0
2013.07.02 20:32:22 3: Can't open /dev/ttyUSB0: No such device or address
2013.07.02 20:32:22 3: Opening TCM310 device /dev/ttyUSB1
2013.07.02 20:32:22 3: Can't open /dev/ttyUSB1: No such device or address
2013.07.02 20:32:22 1: usb create end
2013.07.02 20:32:22 2: SecurityCheck:  WEB,WEBphone,WEBtablet has no basicAuth attribute. telnetPort has no password/globalpassword attribute. Running with root privileges. Restart fhem for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2013.07.02 20:32:22 0: Server started with 12 defined entities (version Fhem 5.4 (DEVELOPMENT), $Id: fhem.pl 3008 2013-04-01 11:19:27Z rudolfkoenig $, AVM Build: 84.05.55-25188, pid 25194)
2013.07.02 20:32:24 3: <92,00,00,92,01,00,92,30,00
2013.07.02 20:32:25 3: <92,00,00
2013.07.02 20:32:25 3: <92,01,00,92,30,00
2013.07.02 20:32:27 3: <92,00,00
2013.07.02 20:32:28 3: <92,01,00,92,30,00
2013.07.02 20:32:30 3: <92,00,00
2013.07.02 20:32:30 3: <92,01,00,92,30,00
2013.07.02 20:32:32 3: <92,00,00


Dann habe ich noch einen Screenshot von den FRM-Details; da scheint irgendwas ein set mit ungültigem Parameter aufzurufen:

(siehe Anhang / see attachement)


Dann habe ich noch ein update stable check versucht; das liefert aber nur
2013.07.02 20:40:33 3: update get http://fhem.de/fhemupdate4/stable/controls_fhem.txt
2013.07.02 20:40:33 1: update File 'controls_fhem.txt' (remote) is corrupt


Zu guter letzt habe auch das Archiv arduino-configurable.zip ins Verzeichnis $ARDUINO_HOME/libraries/ConfigurableFirmata entpackt und den Sketch ConfigurableFirmata geöffnet. Beim Compile erhalte ich aber
ConfigurableFirmata:42: error: 'DigitalInputFirmata' does not name a type

Dabei steht der include eine Zeile drüber?! Ich habe es unter Windows mit der Arduino IDE 1.0.5 und 1.5.2 versucht.

Heute ist wohl kein guter Tag...

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

ntruchsess

Hallo Christian,

ZitatZu guter letzt habe auch das Archiv arduino-configurable.zip ins Verzeichnis $ARDUINO_HOME/libraries/ConfigurableFirmata entpackt und den Sketch ConfigurableFirmata geöffnet. Beim Compile erhalte ich aber

Du musst den Inhalt des arduino-configurable.zip nach $ARDUINO_HOME/libraries/Firmata/ entpacken. Das Verzeichniss muss so heißen, wie der darin enthaltene Haeder-file 'Firmata.h' bzw. cpp-file 'Firmata.cpp'. Die im Sketch referenzierten Haederfiles liegen dann alle in $ARDUINO_HOME/libraries/Firmata/utility/. Die Ide fügt dieses utility-verzeichniss automatisch dem Include-Pfad hinzu.

Wenn die Library nicht so wie das Verzeichnis heißt, dann funktioniert diese Automatik leider nicht.

Den ConfigurableFirmata-sketch findest Du dann unter 'Datai->Beispiele->Firmata->ConfigurableFirmata'

Gruß,

Norbert
while (!asleep()) {sheep++};

Christian.

Das Compile-Problem konnte ich mit Norberts Hilfe beheben. Es hat nicht gereicht, das Verzeichnis korrekt zu benennen, das ursprüngliche Firmata-Verzeichnis muss komplett raus aus dem libraries-Verzeichnis. Ich hatte es nur umbenannt, damit ging es aber noch nicht.

Jetzt kann ich also kompilieren. Ich habe bis auf FirmataDigitalInput alles entfernt und loop() um eine Schleife erweitert, die alle 2 Sekunden abwechselnd
digitalInput.reportDigital(2, LOW)
und
digitalInput.reportDigital(2, HIGH)
aufruft.
Auf dem Serial Monitor sehe ich davon aber nichts. Ich werde mal weiter probieren.
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.

Mit folgender Erweiterung der ConfigurableFirmata werden jetzt periodisch wechselnde Werte gesendet:

const byte PIN_NUMBER = 2;
long currentMillis = millis();
boolean low = true;

void loop() {
...
    if (millis() - currentMillis > 2000) {
      Firmata.sendDigitalPort(PIN_NUMBER, low ? LOW : HIGH);
      low = !low;
      currentMillis = millis();
    }

Das Ergebnis entspricht (wie ich eigentlich auch erwartet habe) dem der vorigen Variante mit SimpleDigitalFirmata. Im Log finde ich jetzt
2013.07.05 22:12:42 3: <92,01,00
2013.07.05 22:12:44 3: <92,00,00
2013.07.05 22:12:46 3: <92,01,00
2013.07.05 22:12:48 3: <92,00,00
In FHEM habe ich noch nichts weiter probiert, deshalb besteht das Problem der fehlenden Werte immer noch.
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