[FHZ] Kontextvariablen

Begonnen von Tobias, 09 Dezember 2008, 09:07:04

Vorheriges Thema - Nächstes Thema

Tobias

                                                                 

Hi all,

gibt es in FHEM eine Möglichkeit Kontextvariablen zu definieren, die
bei der Auswertung verschiedenster Events mit überprüft werden ?
Meine Vorstellung ist sowas wie: $HOLIDAY (ist true, wenn ich im
Urlaub bin, und wird bei verschiedensten Events abgefragt, da nur
bestimmte Dinge passieren sollen, wenn ich NICHT/DOCH im Urlaub bin).
So fallen mir noch viele Variablen ein: $AT_HOME, $OUT_AN_HOUR .....
oder so

Geht sowas per 'useattr' und wie frage ich dann diese attribute ab,
oder kann man anders globale Variablen setzen ?

Danke,
Gruß,
Olaf
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

rudolfkoenig

                                                   

> gibt es in FHEM eine Möglichkeit Kontextvariablen zu definieren, die
> bei der Auswertung verschiedenster Events mit überprüft werden ?

Ja, es gibt zwei Moeglichkeiten.
1. define HOLIDAY dummy
    set HOLIDAY 1
    list HOLIDAY
    { $value{HOLIDAY} }

2. attr global userattr HOLIDAY AT_HOME OUT_AN_HOUR
   attr global HOLIDAY 1
   list global
  { $attr{global}{HOLIDAY} }

Bei Methode 2 koennen alle Geraete ein Attribut HOLIDAY bekommen, aber
beim setzen von "userattr" muessen alle "neuen" Variablen enthalten
sein.

Gruss,
  Rudi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

nobody0472

                                                                 

Hi all,

habe die erste Variante verwendet, und folgende Definitionen germacht:

define HOLIDAY dummy

define switchholiday notify VC2 { if("%" ne "off") { fhem("set HOLIDAY
1") } else { fhem("set HOLIDAY 0") } }        /* fürs VoiceCommand */
define act_on_holiday notify HOLIDAY { fhem("trigger act_on_sztemp
$value{sz}")}

define act_on_sztemp notify sz { if(% < 25 || $value{HOLIDAY})  { fhem
("set AirCondition off") } else { fhem("set AirCondition on") }  }

Das Problem ist jetzt, wenn sich HOLIDAY ändert wird auf eine Änderung
im SZ-TEMP gewartet (SZ ist ein FHT mit measured-temp attribut).

Trotz Trigger wird die Änderung nicht sofort propagiert. Obwohl SZ-
Temp paßt und es sofort nach Änderung von HOLIDAY schalten müßte.

Ich wäre für Hilfe dankbar,
Gruß,
Olaf
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

nobody0472

                                                                 

Hi all,

und noch eine Frage:

Ist es möglich dem Dummy-Device HOLIDAY Attribute zuzuweisen wie: Day
und MONTH und diese auch in Notify oder AT Kommandos abzufragen ?
Und wenn, wie seht die Syntax dafür aus ....

Zu Erklärung:

Ziel ist, das System bis zu einem gewissen Tag in HOLIDAY zu schicken
und gemäß vorher (per WEB) definiertem Attribute die FHT's und FS20
entsprechend wieder anzufahren.

Danke,
Gruß,
Olaf
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

nobody0472

                                                                 

Eine Korrektur:

das act_on_sztemp sieht etwas anders aus:

define act_on_sztemp notify sz { if(($value{sz} gt "measured-temp:
18.0") && $value{HOLIDAY} == 0) { fhem("set AirCondition on") } else
{ fhem("set AirCondition off") } }

Schaltet die AirCo ein, wenn nicht HOLIDAY und Temp über 18 Grad.
Allerdings auch hier: Wenn HOLIDAY schaltet und obiges getriggert
wird, wartet das System auf ein Update für SZ-Temp. Warum ?

On 10 Dez., 01:54, Olaf Droegehorn computertechnik.de> wrote:
> Hi all,
>
> habe die erste Variante verwendet, und folgende Definitionen germacht:
>
> define HOLIDAY dummy
>
> define switchholiday notify VC2 { if("%" ne "off") { fhem("set HOLIDAY
> 1") } else { fhem("set HOLIDAY 0") } }        /* fürs VoiceCommand */
> define act_on_holiday notify HOLIDAY { fhem("trigger act_on_sztemp
> $value{sz}")}
>
> define act_on_sztemp notify sz { if(% < 25 || $value{HOLIDAY})  { fhem
> ("set AirCondition off") } else { fhem("set AirCondition on") }  }
>
> Das Problem ist jetzt, wenn sich HOLIDAY ändert wird auf eine Änderung
> im SZ-TEMP gewartet (SZ ist ein FHT mit measured-temp attribut).
>
> Trotz Trigger wird die Änderung nicht sofort propagiert. Obwohl SZ-
> Temp paßt und es sofort nach Änderung von HOLIDAY schalten müßte.
>
> Ich wäre für Hilfe dankbar,
> Gruß,
> Olaf
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

                                                   

> Ich wäre für Hilfe dankbar,

Man triggert keine "notify" definitionen, sondern die Events, worauf
die notifies hoeren, in deinem Fall also "trigger sz 25", wobei mir
nicht klar ist, wieso "%<25" funktionieren soll, ein FHT meldet
ueblicherweise nicht nur ein Wert.

Weiterhin sollte "inform timer" in einem telnet Fenster Dir helfen,
dann sieht man sofort, welche Event herumfliegen.



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

                                                   

> Ist es möglich dem Dummy-Device HOLIDAY Attribute zuzuweisen wie: Day
> und MONTH und diese auch in Notify oder AT Kommandos abzufragen ?
> Und wenn, wie seht die Syntax dafür aus ....

Aeh. Siehe Loesung 2 weiter oben...

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

                                                   

> Aeh. Siehe Loesung 2 weiter oben...

Sorry. Die Frage war wohl eher wie man das im notify/at abfragt, und
nicht wie man es definiert:
Antwort: im Kommando Teil, der zwangsweise in perl sein muss, und dann
mit {if($attr{HOLIDAY}{MONTH})...}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

nobody0472

                                                                 

Hi,

danke, das ist klasse.

Bzgl. SZ > 25 hast Du natürlich recht, ich bekomme aber keine Variante
ans laufen, dass auf die gemessene Temperatur verglichen wird.
Habe folgendes versucht:

define act_on_sztemp notify sz { if(($value{sz} gt "measured-temp:
18.0")  .........

das geht nicht, zumindest nicht wenn ich Werte über 25.0 eintrage ....

Darauf hab ich dann nach suche hier folgendes versucht:

define act_on_sztemp notify sz { if($defs{sz}{READINGS}{"measured-
temp"}{VAL} gt "25.0") ........

das geht irgendwie genau so wenig

Wenn mir noch einer verraten kann, wie ich zuverlässig auf die
gemessene Temp eines FHT zugreifen kann, wäre ich quasi glücklich.
Dann hat FHEM meine Aktuatoren voll im Griff.

Danke,
Olaf
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

                                                   

> Bzgl. SZ > 25 hast Du natürlich recht, ich bekomme aber keine Variante
> ans laufen, dass auf die gemessene Temperatur verglichen wird.
> Habe folgendes versucht:

Versuch mal FAQ #12 (http://www.koeniglich.de/fhem/faq.html#faq12)
"durchzuarbeiten".
Wenn es hakt, dann sag mir an welcher Stelle der Anleitung. So kann
ich besser helfen.

Gruss,
  Rudi
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

JuergenL

                                               

> Versuch mal FAQ #12 (http://www.koeniglich.de/fhem/faq.html#faq12)
> "durchzuarbeiten".
> Wenn es hakt, dann sag mir an welcher Stelle der Anleitung. So kann
> ich besser helfen.

Es hakt, zumindest bei mir unter FHEM 4.1:

FHZ> { "$value{hzk.dg.bad}" }
Bareword "hzk" not allowed while "strict subs" in use at (eval 41)
line 1.
Bareword "dg" not allowed while "strict subs" in use at (eval 41) line
1.
Bareword "bad" not allowed while "strict subs" in use at (eval 41)
line 1.

Oder geht das auch noch nicht in 4.1?

LG,
Jürgen
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

rudolfkoenig

                                                   

> FHZ> { "$value{hzk.dg.bad}" }

Das schreibt man so:

{ $value{"hzk.dg.bad"} }

oder

{ $value{'hzk.dg.bad'} }

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

JuergenL

                                               

Aber in der FAQ steht (die Anführungszeichen hatte ich nur zur
Abgrenzung des Befehls drumherum gemacht).: {$value{hzk.dg.bad}}
Und das geht eben nicht:
FHZ> {$value{hzk.dg.bad}}
Bareword "hzk" not allowed while "strict subs" in use at (eval 17)
line 1.
Bareword "dg" not allowed while "strict subs" in use at (eval 17) line
1.
Bareword "bad" not allowed while "strict subs" in use at (eval 17)
line 1.

/Jürgen

On 13 Dez., 13:53, Rudolf Koenig wrote:
> > FHZ> { "$value{hzk.dg.bad}" }
>
> Das schreibt man so:
>
> { $value{"hzk.dg.bad"} }
>
> oder
>
> { $value{'hzk.dg.bad'} }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-

Martin Fischer

Am Mittwoch, 10. Dezember 2008 schrieb Olaf Droegehorn:
> Zu Erklärung:
>
> Ziel ist, das System bis zu einem gewissen Tag in HOLIDAY zu schicken
> und gemäß vorher (per WEB) definiertem Attribute die FHT's und FS20
> entsprechend wieder anzufahren.

warum machst du das nicht alles über ein externes script? das macht dir das
leben vielleicht etwas leichter.

beispiel:
meine frau arbeitet halbtags nach einem festen rhytmus. z.b. an geraden wochen
vormittags und an ungeraden nachmittags.

dazu habe ich mir ein script geschrieben (rotateShiftWork.sh) welches um 00:15
uhr über einen at-befehl aufgerufen wird.

# FHT Wochenplan setzen
define at.11.EG.wz.HZ at *00:15:00 "/usr/local/bin/rotateShiftWork.sh
EG.wz.HZ"

das script prüft nach gerader / ungerader woche und setzt dann dementsprechend
an den übergebenen FHT's den wochenplan neu.

in dem script definiere ich die zeiten. hier mal ein paar auszüge aus dem
script:

# define work days
WORK="mon tue wed thu fri"
# define recreation days
FREE="sat sun"
# define range for odd weeks, e.g. "Frühschicht",
# (from1 to1 from2 to2)
odd=(12:30 22:30 24:00 24:00)
# define range for even weeks, e.g. "Spätschicht",
# (from1 to1 from2 to2)
even=(08:30 11:30 16:30 22:30)
# define range for recreation, e.g. "Wochenende",
# (from1 to1 from2 to2)
free=(08:30 23:50 24:00 24:00)
# define fhem.pl host:port
FHEM_BIN="/usr/local/bin/fhem.pl localhost:7072"
# define file for rotation
WEEKFILE="/var/fhem/week.save"

und diese setze ich dann:

# set work days
for ((i=0; i<${#span
  • };i++)); do
       for DAY in ${WORK}; do
                VALUE="${VALUE}${DAY}-${span[$i]} ${week[$i]} "
        done
        for FHT in ${FHT_SET}; do
                ${FHEM_BIN} "set ${FHT} ${VALUE}"
        done
        unset VALUE
done

# set recreation days
for ((i=0; i<${#span
  • };i++)); do
       for DAY in ${FREE}; do
                VALUE="${VALUE}${DAY}-${span[$i]} ${free[$i]} "
        done
        for FHT in ${FHT_SET}; do
                ${FHEM_BIN} "set ${FHT} ${VALUE}"
        done
        unset VALUE
done

so was ähnliches könntest du dir dann auch für dein HOLIDAY definieren und
dann auswerten.

das komplette script ist laut rudi im 4.5er release im contrib-verzeichnis zu
finden.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

Martin Fischer

Am Donnerstag, 11. Dezember 2008 schrieb Rudolf Koenig:
> Versuch mal FAQ #12 (http://www.koeniglich.de/fhem/faq.html#faq12)
> "durchzuarbeiten".
> Wenn es hakt, dann sag mir an welcher Stelle der Anleitung. So kann
> ich besser helfen.

ich habe das mal zum anlass genommen um auch etwas zu testen..

folgendes habe ich gemacht:

attr global userattr BINspeech
attr global BINspeech echo
define EG.wz.HZ.n01 notify .*actuator.* { { $attr{global}{BINspeech} } "@" }

das ergebnis im logfile:
Useless use of hash element in void context at (eval 137) line 1.
2008.12.13 16:44:48 3: EGszHeizung

es klappt also soweit, bis auf die fehlermeldung... wo ist das problem?

die fehlermeldung
"Useless use of hash element in void context at (eval 137) line 1."
bringt er auch bei "%" oder "@ %"

gruß martin

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "FHZ1000 users on Linux" group.
To post to this group, send email to FHZ1000-users-on-unix@googlegroups.com
To unsubscribe from this group, send email to FHZ1000-users-on-unix+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/FHZ1000-users-on-unix?hl=en
-~----------~----~----~----~------~----~------~--~-
--
Admin, Developer, Gründungsmitglied des FHEM e.V.