Pullup-Widerstände über Firmata setzen

Begonnen von Christian., 23 Juli 2013, 06:57:09

Vorheriges Thema - Nächstes Thema

Christian.

Meiner Meinung nach sind die Werte in digital_write korrekt. Folgender Kommentar in Platform.pm macht mich aber stutzig (Zeile 590):# FIXME: 8 -> 7 bit translation should be done in the protocol moduleFehlt in digital_write evtl. die Umsetzung von 8 Bit auf 7 Bit?
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

da hast Du Recht, das fehlt tatsächlich. Ich hab den Fix dafür grade auf Github hochgeladen. Bin aber grade unterwegs und konnte es bzw. kann es erst morgen irgendwann selber testen.

Gruß,

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

Christian.

Hallo Norbert,

bei mir läuft es jetzt - vielen Dank!

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

prima, hab den Fix grade ins svn übertragen.

Gruß,

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

justme1968

hallo norbert,

ich habe gerade versucht mit einen arduino über FRM_IN ein relais zu überwachen. ich wollte den pin mit internal-pullup verwenden und mit dem relais gegen gnd ziehen.

nach meinem verständnis sollte fhem dann bei offenem relais on melden und bei geschlossenem relais off. das ist aber nicht so. sollte ich in den logs etwas sehen ?

es schaut immer noch so aus als ob internal-pullup nicht gesetzt wird. oder wo ist mein denkfehler?

ein weiteres problem ist das nach einer reihe schnell aufeinander folgender signale FRM_IN das verarbeiten weiterer änderungen einstellt. am arduino sehe ich noch das die sende led blinkt. nach einem reset geht es in fhem auch wieder eine weile.

weiterhin kann ich mit delete ein FRM_IN device nicht löschen. modify um z.b. den pin zu ändern funktioniert auch nicht richtig. der pin ist erst nach einem neustart tatsächlich geändert.

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

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

ntruchsess

das Attribut 'internal-pullup on' hast Du für das FRM_IN-device gesetzt? Kannst Du mal verbose 5 setzen um die Firmata-kommunikation mitzuloggen und mir den Teil des Logfiles schicken? (Bitte nur das eine FRM_IN-device konfigurieren).
Welchen Firmata-sketch benutzt Du?

Gruß,

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

justme1968

ja. internal-pullup ist für das frm_in device gesetzt.

zur zeit ist der configurable firmata sketch drauf standard firmata macht das gleiche.

ach ja. das ganze ist auf einem arduino nano.

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

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

ntruchsess

nach dem 'attr frmin internal-pullup' hört das log ein paar Sekunden später einfach auf? Falls nein, dann schau doch mal, ob noch irgenwelche ausgehende Firmata-kommunikation kommt (zu erkennen am > Zeichen, alles was mit < anfängt wird vom Arduino geschickt). Laut dem log geht das attr-kommando nämlich gar nicht raus. Gibt's vieleicht auf stdout/stderr eine Fehlermeldung (Perl-fehler landen manchmal nicht im Log)

Gruß,

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

justme1968

ich habe im log nur hunderte von den <90,08,00,90,00,00 zeilen mit denen der arduino das pin zustand meldet.

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

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

justme1968

fehler gefunden...

fhem hat die falsche version der perl firmat libs geladen. aus irgendeinem grund gab es im system perl pfad noch mal eine.

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

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

justme1968

#25
aber gleich noch drei probleme/fragen...

- nach einer folge (schneller?) on/off wechsel stellt fhem jedes reporting ein. ein reset am arduino hilf nicht. usb trennen und wieder verbinden hilft.

-> edit: das scheint weder am sketch noch am fhem modul zu liegen. da es nur mit dem relais reproduzierbar ist und nicht wenn ich den pin von hand schalte (egal wie schnell) vermute ich gerade eher das das relais über die 220v seite so viele störungen produziert das der arduino hardware mäßig gründlich durcheinander kommt. ich hab leider keine idee was man hier tun kann...

- beim wieder verbinden ist der pin status in fhem bis zum ersten neuen wechsel falsch bzw. wird beim reconnect nicht direkt abgefragt.

- ich habe gemerkt das mein relais leider prellt (eventuellt ist 1. eine folge davon?). gibt es eine firmat version die das entprellen per software macht?

-> edit: ich hab mal als workaround meinen pin mit der bounce lib entprellt. das klappt wunderbar. ist leider hard codiert. ich denke das wäre eine nette erweiterung für firmata wenn man für jeden input pin konfigurieren könnte ob und mit welchem timeout entprellt werden soll.

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

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

ntruchsess

na, da bin ich ja froh. Ich bin da schon etwas ins rätseln gekommen.

Passende Stichworte für Google: Suppressordiode, Freilaufdiode, Tiefpass, Entstörfilter, wobei die Freilaufdiode dabei mit das wichtigste ist (verheizt den in den Spule gespeicherten Strom nach dem Ausschalten).

Beim Wiederverbinden sollte der Arduino eigentlich alle Pins die auf 'on' liegen übertragen. Ich merke grade, dass das ja nichts hilft, wenn Fhem glaubt, der Pin wäre an, er beim wiederverbinden am Arduino tatsächlich aber aus ist (und deshalb keine Message kommt). Direkt abfragen kann man den Zustand nicht - der wird immer nur bei Änderung übertragen (mit bekanntem Default beim Reset). Da muss ich im FRM_IN wohl noch was für einbauen.

Das mit dem arduinoseitigem Entprellen ist eine gute Idee!

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

justme1968

wie die freilaufdiode helfen soll ist mir nicht ganz klar. die spule sitzt doch auf der primär seite (von der ich die finger lassen will). die sekundärseite ist nur ein schalter. d.h. die in der spule gespeicherte energie fliest nicht auf sekundär seite. ich schalte ja nicht mit dem arduino sondern der 220v kreis schaltet.

noch was zu usb trennen/reset. das trennen und wieder verbinden erkennt fhem und initialisiert alles. (bis auf das abfragen der richtigen input zusände). ein reset scheint fhem aber überhaupt nicht zu bemerken. d.h. danach wird nichts initialisiert und die inputs gehen alle nicht.

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

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

ntruchsess

hochfrequente Störungen brauchen keine leitende Verbindung, die werden per Induktion übertragen. Beim Abschalten bildet das Relais mit der (dann offenen) Leitung einen hochfrequenten Schwingkreis in dem die in der Relaisspule gespeicherte Energie abgebaut wird. Das Relais wird mit 220V AC geschaltet? (Freilaufdiode geht ja nur bei DC, aber eine bipolare Suppressordiode ausreichend hoher Spannung (>380V) würde die Spannungsspitzen auch beseitigen). Die Störungen kommen ja vieleicht auch über den 220V Schaltvorgang selber (und nicht den des eigentlichen Relais), wenn das nicht sauber im Phasendurchgang geschaltet wird, sondern mit einem normalen (mechanischen) Schalter oder Relais). Eventuell tuts ja auch ein Ferritring um die Leitung zwischen Relais und Arduino, oder ein simpler R/C-Tiefpass. Jedenfalls sollte der Arduino nicht unmittelbar neben dem Relais oder der 220V-Leitung sitzen, sonst geht die Sörung an den Entstörmaßnamen einfach vorbei.

Das mit dem Reset steht schon auf meiner ToDo-Liste ;-)

Gruß,

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

justme1968

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

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