Hauptmenü

Zeit in Millisekunden

Begonnen von pula, 16 Mai 2015, 23:21:10

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Zitat von: TWART016 am 28 März 2017, 08:47:49
Wie würde denn ein at mit gettimeofday und Millisekunden aussehen?
Hi,
ich bin mir nicht 100% sicher, aber ich glaube, dass das nicht geht. Ein "at" kann nur Sekunden-Auflösung. Du kannst auf Millisekunden gehen, wenn Du direkt die Funktion InternalTimer verwendest.
...aber auch dann kommt es darauf an, wie genau das im Zweifelsfall sein muss. Da FHEM in nur einem Thread läuft, kann immer mal wieder etwas blockieren. Ich versuche das bei mir zu beschränken, aber ich bekomme es auch nicht hin, die längsten Blockierer unter etwa 100ms zu drücken. Auf schnellerer Hardware wird das besser, aber in den (einstelligen) Millisekundenbereich kommt man wahrscheinlich auf keinen Fall. D.h. deine 5,25 Sekunden sind manchmal wirklich 5,25 Sekunden, es könnten aber auch mal 5,35 Sekunden werden.
Der meiner Meinung nach sinnvollste Ausweg wäre (wie schon öfter angedeutet), so etwas direkt im Arduino zu implementieren.
Gruß,
   Thorsten
FUIP

Rince

Das was der Thorsten sagt.
Mit FHEM geht das nicht. Das ist kein Echtzeit-Tool. Dafür ist es nicht gebaut.

Wenn du ein exaktes Timing willst, mach es auf einer eigenen Hardware. In deinem Fall auf einem Arduino.
Und sogar dort musst du es richtig machen!

Ich habe dir mal einen Link rausgesucht, der das sehr schön erläutert:

Hier wirst du in die Problemstellung mit "delay" eingeführt
https://learn.adafruit.com/multi-tasking-the-arduino-part-1/ditch-the-delay

Hier wird gezeigt, wie man dieses Problem umgeht
https://learn.adafruit.com/multi-tasking-the-arduino-part-1/using-millis-for-timing

Wenn du es mit den Millisekunden ernst meinst, dann führt da quasi kaum ein anderer Weg vorbei.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

TWART016

Danke schon mal für die Infos. Ich schaue mir das mal an.

Ich möchte auch nur in Dezimal schalten, also 5,7 oder 5,8.

Problem ist, dass ich verschiedene Programme (6-10) laufen lassen möchte, immer mit einem anderen Ablauf und Dauer. Leider habe ich bisher kaum Infos gefunden, wie ich ein Paket an einen Arduino sende um dort zu entprellen.

Thorsten Pferdekaemper

Zitat von: TWART016 am 28 März 2017, 15:06:41Ich möchte auch nur in Dezimal schalten, also 5,7 oder 5,8.
Geht auch nicht mit at. Ohne at mit FHEM kommt es dann wieder darauf an, was so alles blockiert.

Zitat
Problem ist, dass ich verschiedene Programme (6-10) laufen lassen möchte, immer mit einem anderen Ablauf und Dauer. Leider habe ich bisher kaum Infos gefunden, wie ich ein Paket an einen Arduino sende um dort zu entprellen.
Warum redest Du eigentlich dauernd von "entprellen" und dann wieder von verschiedenen Schaltprogrammen. Das sind zwei unterschiedliche Dinge.
...und ein "Paket an einen Arduino senden" ist mir auch etwas unklar. Wie man im Prinzip einen Sketch schreibt weißt Du? (...oder nicht?) Dann müsstest Du ja auch wissen, wie man einen Sketch auf einen Arduino lädt. Wenn das Coding das drin hat, was Du brauchst, dann ist doch gut, oder?
Ich habe den Eindruck, wir reden hier auf verschiedenen Ebenen aneinander vorbei.
Gruß,
   Thorsten

FUIP

Rince

Wie man einen Taster am Arduino entprellt habe ich dir gepostet. Auf Seite 1 von deinem Thread.
Wieso du ein ankommendes Paket entprellen willst, weiß ich nicht. Da steht doch ein eindeutiger Wert drin???
Entprellen tut man Taster, weil die beim gedrückt werden und beim losgelassen werden dazu neigen, ganz schnell noch mal von 1 auf 0 oder von 0 auf 1 zu gehen.

Vielleicht beschreibst du das nochmal genauer? Was ist wo angeschlossen?

Ansonsten:
Firmata, Homebrew Wired oder MQTT
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Thorsten Pferdekaemper

Zitat von: Rince am 28 März 2017, 15:21:41Wieso du ein ankommendes Paket entprellen willst,
Ach so. Ein "Paket entprellen". Leider ist meine Glaskugel nicht leistungsfähig genug, um dem Begriff eine Semantik zu geben...

Zitat(Firmata,) Homebrew Wired oder MQTT
:)
FUIP

TWART016

Vielleicht habe ich das wirklich nicht ganz verstanden.

Folgende Stand: Derzeit ist ein Arduino Uno an einen Pi angeschlossen. Auf dem Pi läuft FHEM und darüber kann ein Motor mit FRM gesteuert werden.

Ziel: Arduino per Ethernet ans Netzwerk anschließen (vermutlich Shield) und darüber mehrere Motoren über FHEM steuern. FHEM läuft dabei an auf einem anderen Server im Netzwerk. Ich denke soweit kein Problem.

Von FHEM aus sollen jedoch mehrere "Programme" gestartet werden, z.B.
1) set Motor1 value 255;[2 Sekunden warten];set Motor1 value 0
2) set Motor1 value 255;[2 Sekunden warten];set Motor1 value 0;set Motor1 value 120;[2 Sekunden warten];set Motor2 value 255
3) set Motor1 value 255;[2 Sekunden warten];set Motor1 value 0;set Motor1 value 120;[2 Sekunden warten];set Motor2 value 255
usw.

Ich denke jedesmal einen neuen Sketch pushen wir schwierig.

Daher hatte ich gedacht, den obigen Code schicke ich gesammelt zum Arduino, und dieser führt den aus. Oder der Arduino holt sich einen Wert aus einem FHEM device. Dabei sollte möglichst alles von FHEM aus konfigurierbar sein.

Wie würdet ihr das angehen?

Thorsten Pferdekaemper

Hi,
das kommt ganz stark darauf an, wie genau die 2 Sekunden eingehalten warden müssen. Vielleicht verrätst Du das noch.
Gruß,
   Thorsten
FUIP

Beta-User

#23
Mysensors...

EDIT:
...wäre meine antwort auf die Frage gewesen, wie das uU anzugehen wäre.
Jetzt noch (nicht mehr mobil) einige Anmerkungen:
Mit MySensors kann man z.B. auch recht gut Konfigurationseinstellungen (hier die onTime) von FHEM an die Arduinos verteilen. Ein Beispiel mit einer automatischen Ausschaltung nach einer einstellbaren Zeit wäre hier zu finden, ein (eher kompliziert zu verstehendes) weiteres (für Temperaturgrenzwerte) hier.

"Problem" dabei ist nur, dass das eigentlich nicht gemacht ist für nur einen Arduino (und die obigen Sketche Funk-Clients sind, was aber leicht zu ändern wäre). Man kann diese eine Node auch als gateway-only-Version ohne RF ausgestalten, aber das ist eigentlich nicht Sinn der Sache... Empfehlen würde ich die Übertragung per RS485 (zwei Drähte), das ist dann recht ähnlich zu HM Wired.

Eine weitere Alternative wäre die Nutzung von Asksin (RF über CC1101, HM-Protokoll), aber da habe ich keine Erfahrung oder Beispiele.

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Rince

Was denn nun?

ZitatVon FHEM aus sollen jedoch mehrere "Programme" gestartet werden, z.B.
1) set Motor1 value 255;[2 Sekunden warten];set Motor1 value 0

ZitatMode 1: Motor an für 5,25 Sekunden, danach aus

Mit Pulas Fragestellung hat das nichts zu tun.

Was willst du eigentlich???
Erst willst du was im Milli-Bereich, dann schreibst du was von Sekunden, jetzt gibst du als Wert für nen Motor noch Werte zwischen 0 und 255 an.

Da steige ich aus.

Außer du sagst jetzt ganz genau was du eigentlich hast und willst.

Ich habe ja nichts dagegen anderen Leuten im Rahmen meiner Möglichkeiten zu helfen. Mache ich sogar gern.
Aber wenn dann nicht mal ordentlich beschrieben ist, worum es geht, dann vergeht mir echt die Lust. Ist wie Thorsten schreibt.
ZitatLeider ist meine Glaskugel nicht leistungsfähig genug

Wenn du also eine ernsthafte Antwort erwartest:
1. Mach nen neuen Thread auf
2. Beschreibe nochmal vernünftig was du hast:
Arduino (welchen)
Ethernetshield (welches)
Welche Motoren willst du eigentlich ansteuern? (Servo, Stepper, normal?)
3. Wie hast du dir die Ansteuerung gedacht? (vielleicht noch ein Shield?)
4. Was hängt an den Motoren eigentlich dran?
5. Wie ist das Timing der Motoren denn wirklich gedacht?
6. Was von den Timings ist wie kritisch?
7. Wie willst du die Motoren starten? (Taster, von FHEM aus, noch ne andere Variante?)
...

bin nicht sicher ob ich da drauf antworten kann, aber ich denke es ist eine gute Voraussetzung, dass dir jemand eine für dich hilfreiche Antwort geben kann
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

TWART016

Entweder ich mache es in Dezimalsekunden, oder mit value beim Motor. Da weiß ich noch nicht, wie es sinnvoll ist.

Ich habe schon mal einen neuen Thread erstellt.
https://forum.fhem.de/index.php/topic,69788.msg613153.html#msg613153

Wäre nett, wenn ich  mir da antworten würdet.