Hauptmenü

einfacher zähler

Begonnen von mroschk, 17 Mai 2019, 12:23:26

Vorheriges Thema - Nächstes Thema

mroschk

Hallo,

ja genau, funktioniert super!
Danke dir/euch für die Hilfe !
Wieder was gelernt :-)

Jetzt werd ich mal schauen wie ich das mit Pearl hinbekomme :-)

Matthias
ich stehe leider noch am Anfang mit FHEM :-)
deConz Stick
Maple_CUL 868 MAX Mode für Max! HT + Stackable 433
Xiaomi Roborock S5 (weiß, 2. Generation)

Damian

#16
Hier ein Beispiel wie man diese Aufgabe in DOIF-Perl-Mode umsetzen kann:

define di_count DOIF
subs { # Deklaration von Funktionen
sub count_inc { #Funktion zum hochzählen
  if ($_count < 10) {
    $_count++; # zähle Instanzvariable $_count eins hoch
    set_Reading("count",$_count,1); # setze Reading count
    set_Exec("timer",1,"count_inc"); # Funktion ruft sich selbst auf in einer Sekunde
  }
}

sub count_dec { #Funktion zum runterzählen
  if ($_count > 0) {
    $_count--;
    set_Reading("count",$_count,1);
    set_Exec("timer",1,"count_dec")
  }
}

}
## BLock reagiert auf Trigger von Schalter und ruft ggf. Funktion count_inc auf
{if ([Schalter] eq "on" and $_count < 100) {count_inc()}}

## BLock reagiert auf Trigger von Schalter und ruft ggf. Funktion count_dec auf
{if ([Schalter] eq "off" and $_count > 0) {count_dec()}}


Im Reading count von di_count kann man sehen, was passiert.

An diesem Beispiel sieht man, wie man im DOIF-Perl-Mode:

- Trigger-Blöcke definiert
- eigene Funktionen programmiert
- eigene Funktionen sich über Timer selbst aufrufen können
- Device-Variablen (Instanzvariablen) nutzt ($_count)
- Perl nutzt, Angaben in eckigen Klammern stellen hier einer Erweiterung der Perl-Syntax um Trigger dar, diese gibt es im reinen Perl so natürlich nicht
- ohne FHEM-Befehle auskommt, der FHEM-Parser wird zur Laufzeit gar nicht in Anspruch genommen
- ohne Attribute auskommt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mroschk

Hallo,

wow, was für eine SUPER Erklärung mit Kommentaren !!
Das werd ich vielleicht nachher noch ausprobieren.
Ich danke dir sehr !!

Matthias
ich stehe leider noch am Anfang mit FHEM :-)
deConz Stick
Maple_CUL 868 MAX Mode für Max! HT + Stackable 433
Xiaomi Roborock S5 (weiß, 2. Generation)

rischbiter123

Moin,

müsste es hier
sub count_inc { #Funktion zum hochzählen
  if ($_count < 10) {
    $_count++; # zähle Instanzvariable $_count eins hoch

nicht auch <100 heißen?

LG

Andreas

OT
Könnte man das nicht so auch als 'Eieruhr' nutzen?
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

mroschk

ja egal, sind doch nur Testwerte.
aber Eieruhr klingt gut :-)

Matthias
ich stehe leider noch am Anfang mit FHEM :-)
deConz Stick
Maple_CUL 868 MAX Mode für Max! HT + Stackable 433
Xiaomi Roborock S5 (weiß, 2. Generation)

Damian

#20
10 war Absicht, sonst muss man zu lange warten, bis man beim höchsten Wert ankommt. Es sind auch nicht 0.2 Sekunden ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mroschk

Hallo,

im Umzugsstress hatte ich kurz zeit das DOIF mit Pearl zu testen.

Was genau soll denn diese Zeile machen?

set_Reading("count",$_count,1); # setze Reading count


ich hab mal noch ein fhem"set count $_count" in das DOIF aufgenommen, damit wird das state von dem dummy namens "count" gesetzt.

Soll die das Reading ( also state ) von dem dummy "count" setzen ? Falls ja, dann funktioniert das nicht.
Zweite Frage: Woher kommt denn $_count ? Das wird ja nirgends definiert.

Dank euch für die Hilfe.

Matthias
ich stehe leider noch am Anfang mit FHEM :-)
deConz Stick
Maple_CUL 868 MAX Mode für Max! HT + Stackable 433
Xiaomi Roborock S5 (weiß, 2. Generation)

Prof. Dr. Peter Henning

ZitatPearl
::)
Freundlicher Hinweis: Bei Pearl handelt es sich um eine ANDERE Programmiersprache als die für FHEM verwendete Sprache Perl

pah

Damian

Zitat von: mroschk am 20 Mai 2019, 10:32:06
Hallo,

im Umzugsstress hatte ich kurz zeit das DOIF mit Pearl zu testen.

Was genau soll denn diese Zeile machen?

set_Reading("count",$_count,1); # setze Reading count


ich hab mal noch ein fhem"set count $_count" in das DOIF aufgenommen, damit wird das state von dem dummy namens "count" gesetzt.

Soll die das Reading ( also state ) von dem dummy "count" setzen ? Falls ja, dann funktioniert das nicht.
Zweite Frage: Woher kommt denn $_count ? Das wird ja nirgends definiert.

Dank euch für die Hilfe.

Matthias

Ich zitiere mal:

ZitatIm Reading count von di_count kann man sehen, was passiert.

Zum Thema Instanzvariablen im DOIF-Perl-Mode und dass man sie nicht definieren muss, kann man hier nachlesen: https://fhem.de/commandref_DE.html#DOIF_Device-Variablen

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mroschk

oh, ich muss besser lesen...SORRY !!

Danke nochmal
Matthias
ich stehe leider noch am Anfang mit FHEM :-)
deConz Stick
Maple_CUL 868 MAX Mode für Max! HT + Stackable 433
Xiaomi Roborock S5 (weiß, 2. Generation)

Damian

Nebenbei:

Bei meinem Beispiel kommt man auch mit einem Ereignisblock aus, da der Trigger der selbe ist.

Statt:

## BLock reagiert auf Trigger von Schalter und ruft ggf. Funktion count_inc auf
{if ([Schalter] eq "on" and $_count < 100) {count_inc()}}

## BLock reagiert auf Trigger von Schalter und ruft ggf. Funktion count_dec auf
{if ([Schalter] eq "off" and $_count > 0) {count_dec()}}


lässt sich auch definieren:

{if ([Schalter] eq "on" and $_count < 100) {count_inc()} elsif ([Schalter] eq "off" and $_count > 0) {count_dec()}}


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mroschk

Hallo,

ahh, ok...probier ich, wenn ich meinen Raspi wieder in Stellung gebracht habe :-)

Matthias
ich stehe leider noch am Anfang mit FHEM :-)
deConz Stick
Maple_CUL 868 MAX Mode für Max! HT + Stackable 433
Xiaomi Roborock S5 (weiß, 2. Generation)

nils_

Zitat von: mroschk am 18 Mai 2019, 09:03:07
Das hatte ich schon mal bei was anderem probiert und kenne ich auch aus C#. Da muss man auch immer aufpassen, das einem die HUI nicht einfriert.
oha.... wie kommst du zu dieser annahme??
viele Wege in FHEM es gibt!