Arduino: Status "on-for-timer" abfragen

Begonnen von stobor, 09 März 2019, 21:12:42

Vorheriges Thema - Nächstes Thema

stobor

Hallo,
ich habe gerade festgestellt, dass Arduino Ausgänge (bei mir) anscheinend keinen Status on-for-timer zurückliefern. Ist das bei euch auch so? Wie kann ich bei Arduino-Ausgängen zwischen on und on-for-timer etc unterscheiden?

So ist mein Anschluss konfiguriert:
define Arduino1 FRM /dev/serial/by-id/usb-Arduino__www.arduino.cc__0043_85735313333351709191-if00@57600
attr Arduino1 room ArduinoCPU
attr Arduino1 verbose 4
#attr Arduino1 sampling-interval 1000

define Arduino_Pin5_Licht_West FRM_OUT 5  # Licht West
attr Arduino_Pin5_Licht_West IODev Arduino1
attr Arduino_Pin5_Licht_West alias Licht West
attr Arduino_Pin5_Licht_West room ArduinoCPU,Aussen
attr Arduino_Pin5_Licht_West stateFormat value


Nach dem Ausführen von set Arduino_Pin5_Licht_West on-for-timer 320 bekomme ich folgende Informationen vom Anschluss:
DEF: 5 # Licht West
IODev: Arduino1
NAME: Arduino_Pin5_Licht_West
NR: 97
PIN: 5
STATE: on
TYPE: FRM_OUT


Der Anschluss schaltet aber wie erwartet nach definierter Zeit zurück auf off. Ich bekomme allerdings nur den Status on bzw. off, aber keine Unterscheidungen wie on-for-timer. Die on-for-timer Anweisung liefert als Status lediglich on.
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

justme1968

wenn dein device die SetExtensions verwendet findest du die info im TIMED_OnOff internal.

wenn du hier im forum danach suchst solltest du ein paar mögliche anwendungen finden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

stobor

Wie kann/muss ich denn die SetExtensions verwenden?

Ich habe gerade einfach mal folgendes probiert:
InternalVal("Arduino_Pin2_Licht_Nord","TIMED_OnOff","")

Das Ergebnis: HASH(0x5586710)
Das Ergsbnis bekomme ich allerdings immer, egal ob on/off/on-for-timer.
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

justme1968

die SetExtensions muss das modul verwenden. nicht du.

im internal steckt ein hash mit mehreren werten.

auch mal wie vorgeschlagen und du wirst code dazu finden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

stobor

Bei meiner Suche habe ich nichts gefunden.
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

justme1968

eine suche nach TIMED_OnOff liefert 16 treffer.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

stobor

Ich habe da was gefunden, was passen könnte, weiß allerdings nicht, wie ich die Lösung umsetzen sollte.
(https://forum.fhem.de/index.php/topic,69075.0.html)
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

stobor

So richtig komme ich nicht weiter. Vielleicht fehlen mir auch weitere technische Hintergründe.
Was muss ich denn ggf. wo und wie einbinden/konfigurieren, damit ich den wirklichen Status von Arduino Devices abfragen kann?

P.S.: Die 16 Treffer gibt's übrigens nur, wenn ich die Sprache des Forums auf Engisch setze.
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

Wzut

Zitat von: justme1968 am 09 März 2019, 21:18:01
wenn dein device die SetExtensions verwendet findest du die info im TIMED_OnOff internal.
ja FRM_Out unterstützt die SetExtensions, hat aber keine direkte Anzeige der Restlaufzeit.
Vllt wäre es für den TE einfacher gewesen du hättest ihm gleich deine eigene Countdown Lösung verlinkt  :) -> https://forum.fhem.de/index.php/topic,84016.msg762888.html#msg762888
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

stobor

Ich bin an der Restlaufzeit eigentlich gar nicht interessiert, sondern nur daran, ob das Licht per on-for-timer eingeschaltet wurde.

...
define Arduino1 FRM /dev/serial/by-id/usb-Arduino__www.arduino.cc__0043_85735313333351709191-if00@57600
attr Arduino1 room ArduinoCPU
attr Arduino1 verbose 4
...
define Arduino_Pin5_Licht_West FRM_OUT 5  # Licht West
attr Arduino_Pin5_Licht_West IODev Arduino1
attr Arduino_Pin5_Licht_West alias Licht West
attr Arduino_Pin5_Licht_West room ArduinoCPU,Aussen
attr Arduino_Pin5_Licht_West stateFormat value
attr Arduino_Pin5_Licht_West useSetExtensions 1


liefert allerdings einen Fehler:
Arduino_Pin5_Licht_West: unknown attribute useSetExtensions. Type 'attr Arduino_Pin5_Licht_West ?' for a detailed list.

Kann es sein, dass FRM_OUT die Extensions doch nicht unterstützt?

Ich möchte eigentlich nur erreichen, dass die Lampe sich per on-for-timer für eine bestimmte Zeit einschaltet, sofern sie nicht eh schon dauerhaft eingeschaltet wurde:
if ((Value("PIR_Automatik") eq "on") && (Value("isNACHT") eq "on") && (Value("Arduino_Pin5_Licht_West") ne "on")) {\
  fhem "set Arduino_Pin5_Licht_West on-for-timer 320";;\
}

Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

Wzut

Zitat von: stobor am 05 April 2019, 14:03:32
attr Arduino_Pin5_Licht_West useSetExtensions 1[/code]

Kann es sein, dass FRM_OUT die Extensions doch nicht unterstützt?
useSetExtensions 1 kann man beim Dummy benutzen , bei FRM_Out ist das bereits im Modul.
Teste es doch einfach mit einem set Arduino_Pin5_Licht_West on-for-timer 10  , das Licht wird nach 10 Sekunden ausgehen.
Wenn du schnell bist und innerhalb der 10 Sekunden ein list Arduino_Pin5_Licht_West eingibst siehst du auch die TIMED_OnOff Struktur,
die ist allerdings weg sobald die Zeit abgelaufen ist.
Im anderen Fred hat doch Rudi ein schönes Bsp gepostet , warum verwendest du das nicht ?
set Arduino_Pin5_Licht_West:FILTER=TIMED_OnOff!=HASH.* on-for-timer 320
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

stobor

#11
Wo genau meinst Du denn?

Was macht denn Dein Beispiel
set Arduino_Pin5_Licht_West:FILTER=TIMED_OnOff!=HASH.* on-for-timer 320
genau?

Oder heißt das (umgangssprachlich): sofern kein Hash-Wert existiert, schalte das Licht für 320sec ein?
Dann wäre meine Lösung also:
if ((Value("PIR_Automatik") eq "on") && (Value("isNACHT") eq "on") && (Value("Arduino_Pin5_Licht_West") ne "on")) {\
set Arduino_Pin5_Licht_West:FILTER=TIMED_OnOff!=HASH.* on-for-timer 320;;\
}

anstatt  fhem "set Arduino_Pin5_Licht_West on-for-timer 320";;\

Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

Wzut

IMHO genau so
D.h. schaltest du dein Licht zuvor selbst mit "set Arduino_Pin5_Licht_West on" an greift deine UND Verknüpfung und der Timer läuft nicht los.
Ist es aber aus und kein Timer Kommando der setExtenions aktiv ( TIMED_OnOff nicht vorhanden ) geht das Licht für 320 Sekunden an und danach wieder aus. Ob es dann in dieser Nacht nochmal für 320 Sekunden an geht entscheidet das Verhalten deines PIR_Automatik
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

stobor

#13
Das Problem ist aber, dass ich bei dieser Konstruktion nicht nachtriggern kann, da  Value("Arduino_Pin5_Licht_West") auch ein on liefert, wenn der Ausgang per on-for-timer getriggert wurde. Das Licht muss also immer erst kurz ausgehen, damit es wieder für 320sec einschaltet.
Kann ich Value("Arduino_Pin5_Licht_West") ne "on" irgendwie so verändern, dass ich prüfen kann, ob das Licht aus ist oder nur zeitlich begrenzt eingeschaltet wurde?

Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

stobor

#14
Vielleicht doch eher so:


if ((Value("PIR_Automatik") eq "on") && (Value("isNACHT") eq "on")) {\
  if (Value("Arduino_Pin5_Licht_West") ne "on") {\
    set Arduino_Pin5_Licht_West on-for-timer 320;;\
  } else {\
    set Arduino_Pin5_Licht_West:FILTER=TIMED_OnOff=HASH.* on-for-timer 320;;\
  }\
}


Würde so das Licht für 320sek. eingeschaltet bzw. nachgetriggert werden, wenn die Lampe nicht dauerhaft eingeschaltet ist?
Läuft die Lampe bereits im on-for-timer Betrieb, zeigt die Value-Abfrage leider nur ein "on", so dass der ELSE-Zweig dann wenn on-for-timer gerade aktiv ist, nachtriggern sollte, oder?

Was meint ihr, kann man das vereinfachen?
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus