FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Gonzolo am 10 Mai 2017, 16:31:52

Titel: Dynamischer Parameter
Beitrag von: Gonzolo am 10 Mai 2017, 16:31:52
Hallo,

ich brauche mal wieder Eure Hilfe.

Ich habe mir einen Parameter für meine Heizungssteuerung gebaut:

define Steuerung dummy

Diesem Parameter wird am Tag "TempTag" und Nachts "TempNacht" zugewiesen.
DOIF [06:00]
SET Steuerung "TempTag
DOELSEIF [22:00]
SET Steuerung "TempNacht"


Wie warm es am Tag bzw. in der Nacht sein soll habe ich dem Parameter "Steuerung" per


setreading Steuerung TempTag 21.0
setreading Steuerung TempNacht 18.0


mitgeteilt.

Ist es morgens beim wechsel von TempNacht auf TempTag bereits schon wärmer als 21.0C, so werden die Heizungen ausgeschaltet.

Wird es nun im laufe des Tages oder in der folgenden Nacht kälter als die jeweilige Temperatur (also bis 22:00Uhr < 21C bzw. ab 22:00Uhr bis 06:00Uhr < 18C), soll die Heizung wieder angestellt werden.

So und nun zu meiner Frage....

Ist es möglich die Abfrage wie folgt zu bauen?

Zitat
wenn die Temperatur < Steurung:[das was gerade in STEUERUNG:STATE steht]
dann Heizung AN

Bestimmt ist das möglich, oder?!  Wie genau ist da die Syntax? Kann mir da einer von Euch helfen?

Vielen Dank!

Beste Grüße

Gonzolo
Titel: Antw:Dynamischer Parameter
Beitrag von: Amenophis86 am 10 Mai 2017, 17:20:56
Möchtest du das mit einem DOIF lösen, so solltest du den Post in DOIF Board verschieben.

Und ja, was du möchtest ist möglich, aber ich steige noch nicht durch um dir Helfen zu können. Sry. Kannst du vielleicht mal ohne dein Dummy und dein DOIF beschreiben was du möchtest in der Form:

Wenn xxx und yyy dann zzz Der Umweg über das DOIF und dein Dummy erscheint mir nicht nötig. Daher nochmal die Frage nach dem genauen Wunsch.
Titel: Antw:Dynamischer Parameter
Beitrag von: CoolTux am 10 Mai 2017, 17:23:08

set Steuerung [TempTag]


So kann es gehen.
Titel: Antw:Dynamischer Parameter
Beitrag von: Gonzolo am 10 Mai 2017, 18:15:28
Danke für Deine Antwort....



Okay... ich versuche es mal genauer zu erklären was ich mache :)

Ich will an einer zentralen Stelle in FHEM eingeben, welche Temperatur in der Wohnung herschen soll. Für Tag und für Nacht will ich es natürlich nicht gleich warm haben. Jetzt möchte ich, wenn diese Temperatur auch ohne heizen erreicht wird, dass FHEM die Heizung aus macht. Wenn im laufe des Tages die Temperatur absinkt und unter die vorgegebene Tagestemperatur fällt, soll FHEM die Heizung wieder mit der Tagestemperatur an machen! Wenn das erst in der Nacht die Temperatur unter die vorgegebene Nachttemperatur fällt, dann soll FHEM die Heizung mit der Nachttempereratur an machen.

Da ich jetzt zwischen TagTemperatur und NachtTemperatur unterscheide, will ich das dynamisch machen. Also wenn es Tag ist, dann steht in dem Steurungs-Parameter "es ist Tag" und an einer anderen Stelle steht, wie warm es am Tag sein soll. Wenn es Nacht ist, dann steht im Steuerungs-Parameter, das es Nacht ist und an einer anderen Stelle wie warm es in der Nacht sein soll. ...

Ich will das so machen, weil ich noch viele andere Sachen abhängig von Tag- oder Nachtbetrieb steuern will.

ZitatWenn xxx und yyy dann zzz


Wenn Heizung aus UND
Temperatur < SollTemperatur
DANN
Setzte die Heiztemperatu auf die SollTemperatur

Ergänzung: Die SollTemperatur ist am Tag eine andere als in der Nacht

Hoffe jetzt ist es klarer??

Danke für die Hilfe!

Gruß

Gonzolo
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 10 Mai 2017, 19:05:02
Hi,
das könnte man jetzt mit einem notify oder einem DOIF machen, aber ich würde das mit einem at lösen. Dann muss man sich nicht überlegen, welche Events man überwachen muss (Änderung der Ist-Temperatur, Änderung der Soll-Temperatur, Änderung der Tag/Nacht Zeiten...). Außerdem ist es dann weniger nervös, wenn die Temperatur ungefähr die Soll-Temperatur ist.
Also in etwa...

define heizungsSchalter at +*00:05:00 ...

Im Kommandoteil (also die drei Punkte oben) müsste dann sowas stehen wie

IF ([Steuerung] eq "TempTag" and [Thermometer:Temperatur] < [Steuerung:TempTag] or [Steuerung] ne "TempTag" and [Thermometer:Temperatur] < [Steuerung:TempNacht]) (set Heizung on) ELSE (set Heizung off)

Du solltest außerdem bei "set Steuerung "Temp..." " die """ weglassen.
Gruß,
  Thorsten


Titel: Antw:Dynamischer Parameter
Beitrag von: Gonzolo am 10 Mai 2017, 19:51:20
Hallo Thorsten,

danke für Deine ausführliche Antwort.


Mir geht es allerdings darum, wie man die Abfragen [Steuerung:TempTag] dynamisieren kann.


also sowas wie [Steuerung:"Platzhalter"]

Ich will genau nicht
IF ([Steuerung] eq "TempTag" and [Thermometer:Temperatur] < [Steuerung:TempTag]  or "TempNacht" and [Thermometer:Temperatur] < [Steuerung:TempNacht])

Ich will sowas wie


IF [Thermometer:Temperatur] < [Steuerung:"Platzhalter"]  THEN set Heizung


Und in den Platzhalte kommt dann das rein, was zu dem Zeitpunkt in Steuerung:State seht (also entweder TempTag oder TempNacht)

Danke für Euere Geduld und Hilfe

Gruß

Gonzolo
Titel: Antw:Dynamischer Parameter
Beitrag von: Icinger am 10 Mai 2017, 20:22:45
Ich würde gern auch noch das threshold-Modul in den Raum werfen.
Zusammen mit einem at oder einem DOIF, welches desired_temp setzt, sollte das ruhiger laufen.

lg, Stefan
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 10 Mai 2017, 20:25:25
Hi,
achso. Ich glaube nicht, dass das mit "set magic" geht, da würde es dann so aussehen:

IF ([Thermometer:Temperatur] < [Steuerung:[Steuerung:state]])  (set Heizung ...

Aber wie gesagt, ich bezweifle, dass das geht. Da muss man dann auf die Perl-Ebene gehen, also

{ if(ReadingsVal("Thermometer","Temperatur",0) < ReadingsVal("Steuerung",ReadingsVal("Steuerung","state","blabla"),22)) { fhem("set Heizung on")} }

Gruß,
   Thorsten
Titel: Antw:Dynamischer Parameter
Beitrag von: Damian am 10 Mai 2017, 21:25:42
Zufällig weiß ich ;) , dass THRESHOLD sogar eine dynamische Komponente hat:

Auszug aus der Commandref zu THRESHOLD:

ZitatBerechnung der Solltemperatur für die Vorlauftemperatur für Fußbodenheizung mit Hilfe der 0,8-Heizkennlinie anhand der Außentemperatur :

define TH_heating THRESHOLD flow:temperature:2:outdoor:temperature heating
attr TH_heating target_func -0.578*_tv+33.56


Hier wird die Vorgabetemperatur aus dem Reading outdoor:temperature und der target_func dynamisch gebildet. _tv ist der Platzhalter für outdoor:temperature


Titel: Antw:Dynamischer Parameter
Beitrag von: KernSani am 10 Mai 2017, 21:29:14
Jetzt mal dumm gefragt... Warum setzt du dir nicht statt eines Dummies, der der sagt, ob Tag oder Nachsteuerung aktiv ist gleich die gewünschte Temperatur?


also:


DOIF [06:00]
setreading Steuerung desired_temp [Steuerung:tempTag]
DOELSEIF [22:00]
setreading Steuerung desired_temp [Steuerung:tempNacht]



und dann

IF ([Thermometer:Temperatur] < [Steuerung:desired_temp] ...


Edit: Irgendwie waren die Code Tags zerschossen...
Titel: Antw:Dynamischer Parameter
Beitrag von: Damian am 10 Mai 2017, 21:41:20
Zitat von: KernSani am 10 Mai 2017, 21:29:14
Jetzt mal dumm gefragt... Warum setzt du dir nicht statt eines Dummies, der der sagt, ob Tag oder Nachsteuerung aktiv ist gleich die gewünschte Temperatur?


also:


[/code]

DOIF [06:00]
setreading Steuerung desired_temp [Steuerung:tempTag]
DOELSEIF [22:00]
setreading Steuerung desired_temp [Steuerung:tempNacht]



und dann

IF ([Thermometer:Temperatur] < [Steuerung:desired_temp] ...

ja, aber auch das ist der Standardfall beim THRESHOLD:

ZitatZeitgesteuertes Heizen mit Hilfe des DOIF-Moduls:

define TH_room THRESHOLD temp_room heating
define di_room DOIF ([05:30-23:00|8] or [07:00-23:00|7]) (set TH_room desired 20) DOELSE (set TH_room desired 18)

Da braucht mal noch nicht mal ein IF ;)

Edit: selbst die feste Vorgabe von 20 oder 18 kannst du als Reading angeben.
Titel: Antw:Dynamischer Parameter
Beitrag von: KernSani am 10 Mai 2017, 21:58:12
Zitat von: Damian am 10 Mai 2017, 21:41:20
ja, aber auch das ist der Standardfall beim THRESHOLD:

Da braucht mal noch nicht mal ein IF ;)

Edit: selbst die feste Vorgabe von 20 oder 18 kannst du als Reading angeben.
Um Missverständnissen vorzubeugen. Ich hatte mich bei meinem Post auf den Ursprungspost des TE bezogen, nicht auf deinen Threshold Vorschlag.

Titel: Antw:Dynamischer Parameter
Beitrag von: Damian am 10 Mai 2017, 22:04:54
Zitat von: KernSani am 10 Mai 2017, 21:58:12
Um Missverständnissen vorzubeugen. Ich hatte mich bei meinem Post auf den Ursprungspost des TE bezogen, nicht auf deinen Threshold Vorschlag.

Das ist mir schon klar, nur, die ganzen IF-Vorschläge müssen ja noch in ein notify eingepackt werden (IF ist ja kein Modul), und das sollte bei zyklisch sendenden Sensoren ein ständiges Schalten unterbinden  und genau das macht das THRESHOLD-Modul.

Edit: Als nächstes wird ihm auffallen, dass bei schwankender Temperatur um den Sollpunkt hin und her geschaltet wird, also braucht er eine Hysterese und schon sind wir wieder bei THRES....
Titel: Antw:Dynamischer Parameter
Beitrag von: nils_ am 11 Mai 2017, 09:52:23
Zitat von: Damian am 10 Mai 2017, 22:04:54
Edit: Als nächstes wird ihm auffallen, dass bei schwankender Temperatur um den Sollpunkt hin und her geschaltet wird, also braucht er eine Hysterese und schon sind wir wieder bei THRES....
nicht das sowas schonmal erwähnt wurde  ::) --> https://forum.fhem.de/index.php/topic,63488.0.html
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 11 Mai 2017, 10:22:38
Hi,
deshalb ja mein Vorschlag, das mit einem at zu machen. Das ist einfach und wahrscheinlich wirkungsvoll.
Dann "schwankt" es auch, aber eben nur maximal alle 5 Minuten (oder welches Intervall auch immer eingestellt ist).
Gruß,
   Thorsten
Titel: Antw:Dynamischer Parameter
Beitrag von: Damian am 11 Mai 2017, 13:11:06
Zitat von: Thorsten Pferdekaemper am 11 Mai 2017, 10:22:38
Hi,
deshalb ja mein Vorschlag, das mit einem at zu machen. Das ist einfach und wahrscheinlich wirkungsvoll.
Dann "schwankt" es auch, aber eben nur maximal alle 5 Minuten (oder welches Intervall auch immer eingestellt ist).
Gruß,
   Thorsten

Dennoch musst du auch beim at das mehrfache Schalten unterbinden z. B. durch Filter. Abgesehen davon ist pollen immer ein schlechter Ansatz, wenn ein System Ereignissteuerung beherrscht.
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 11 Mai 2017, 13:24:51
Zitat von: Damian am 11 Mai 2017, 13:11:06
Dennoch musst du auch beim at das mehrfache Schalten unterbinden
Warum?

Zitat
Abgesehen davon ist pollen immer ein schlechter Ansatz, wenn ein System Ereignissteuerung beherrscht.
Naja, mal angenommen, ich habe ein Messwert, der naturgemäß schwankt. Temperaturen haben das z.B. so an sich. Dann bekomme ich ggf. alle paar Sekunden ein Ereignis. Ich muss dann irgendwas machen (Hysterese, event-min-interval oder so), damit ich diese Ereignisse nicht so oft bekomme. Warum dann nicht gleich ein Takt vorgeben, mit dem meine Regelung arbeitet?
Gruß,
   Thorsten

PS: Aussagen mit "immer" sind immer falsch.  ;)
Titel: Antw:Dynamischer Parameter
Beitrag von: Gonzolo am 12 Mai 2017, 07:14:24
Danke für Eure vielen Anregungen!

ABER... die Dynamisierung nach dem Muster


[Steuerung:"Platzhalter"] wobei der "Platzhalter" gleich dem aktuellen Reading [Stuerung:State] ist, geht also nicht?! Habe ich das richtig verstanden?

Danke und Gruß

Gonzolo
Titel: Antw:Dynamischer Parameter
Beitrag von: CoolTux am 12 Mai 2017, 07:30:23
Klar geht das. Aber da Du uns nicht verrätst welches Modul Du verwenden willst ist es schwer Dir da korrekte Tips zu geben.
Aber, JA
Zitat von: Gonzolo am 12 Mai 2017, 07:14:24
... die Dynamisierung nach dem Muster
[Steuerung:Platzhalter] wobei der "Platzhalter" gleich dem aktuellen Reading [Stuerung:State]

geht definitiv.

Wenn Du uns sagst wie Du Dich nun entschieden hast, ob notify, DOIF oder at, können wir Dir sicherlich weiter helfen. Bis dahin schöne ich meine Nerven.
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 12 Mai 2017, 07:40:56
Zitat von: Gonzolo am 12 Mai 2017, 07:14:24ABER... die Dynamisierung nach dem Muster
Hast Du meinen Beitrag #7 gelesen?

Zitat von: CoolTux am 12 Mai 2017, 07:30:23
Klar geht das.
Da würde mich jetzt auch interessieren, wie das geht ohne auf Perl zu wechseln. Das müsste dann ja so aussehen, oder?

[Steuerung:[Steuerung:state]]

Gruß,
   Thorsten
Titel: Antw:Dynamischer Parameter
Beitrag von: CoolTux am 12 Mai 2017, 07:48:12
Ok habe das mal geändert. Bei den ganzen durcheinander kommt man selbst ins grübbeln.

Wenn ich das ganze richtig verstanden habe, will er doch einfach nur seine Tag und Nacht Temperatur in zwei Dummys oder besser noch ein Dummy mit Tag Nacht Reading setzen und beim schalten sollen diese Temperaturen dann einfach aus den Dummy Readings ausgelesen werden. So war zu mindest mein Verständnis bevor das hier ausgeufert ist.

Also.
Man(n) erstelle ein dummy. Gebe ihm ein setList und setReadings.
Danach nehme man at, notify oder DOIF und füge dort ein

set ThermostatWohnzimmer desired-temp [dummyName:dayTemp]

und alles ist schick.
So zu mindest war mal die Ausgangsfrage

In einem zweiten Thread geht es dem Kollegen dann noch um eine Berechnung oder Bedingung oder so. Ist immer schwer zu verstehen.
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 12 Mai 2017, 07:59:59
Zitat von: CoolTux am 12 Mai 2017, 07:48:12
Wenn ich das ganze richtig verstanden habe, will er doch einfach nur seine Tag und Nacht Temperatur in zwei Dummys oder besser noch ein Dummy mit Tag Nacht Reading setzen...
Tja, von dem, was die Leute schreiben, auf das zu kommen, was sie wirklich wollen, grenzt oft an Exegese. Ich wage nicht zu behaupten, dass mir bisher so viel Erleuchtung zu Teil wurde, dass mir das immer gelingt.
[/Geschwafelmodus]

Ich glaube, wir haben hier sozusagen zwei Ebenen. Einmal die Anwendung, also irgendwas mit einer Heizung, dass man wahrscheinlich auf 100 verschiedene Arten machen könnte. ...und daran aufgehängt eine allgemeine technische Frage. Die geht soweit ich das verstanden habe so:
Gegeben ein Device mit einem Reading "readingname". (Statt "readingname" kann man auch "state" nehmen, das macht's aber schwerer verständlich.) In diesem Reading steht der Name eines anderen Reading. Wie kann ich jetzt auf das Reading zugreifen, dessen Name im Reading "readingname" steht? (Ob man das wirklich braucht ist eine andere Frage.)

Gruß,
   Thorsten



Titel: Antw:Dynamischer Parameter
Beitrag von: CoolTux am 12 Mai 2017, 08:27:09
Zitat von: Thorsten Pferdekaemper am 12 Mai 2017, 07:59:59
Frage. Die geht soweit ich das verstanden habe so:
Gegeben ein Device mit einem Reading "readingname". (Statt "readingname" kann man auch "state" nehmen, das macht's aber schwerer verständlich.) In diesem Reading steht der Name eines anderen Reading. Wie kann ich jetzt auf das Reading zugreifen, dessen Name im Reading "readingname" steht? (Ob man das wirklich braucht ist eine andere Frage.)

Soetwas braucht man nicht! Es muß/sollte anders gelöst werden.
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 12 Mai 2017, 08:46:45
Zitat von: CoolTux am 12 Mai 2017, 08:27:09
Soetwas braucht man nicht! Es muß/sollte anders gelöst werden.
Warum so dogmatisch? Zumal es doch eigentlich einfach ist:

ReadingsVal("device",ReadingsVal("device","readingname","blabla"),0)

Gruß,
   Thorsten
Titel: Antw:Dynamischer Parameter
Beitrag von: CoolTux am 12 Mai 2017, 08:57:53
Ja es geht. Aber nicht alles was geht sollte man einem Anfänger gleich zu muten. Oder magst Du ihm die Anwendung verschachtelter Funktionsaufrufe erklären  ;).  Zumal es sicherlich, mit reiflicher Überlegung verbunden, eine bessere und vor allem verständlichere Alternative gibt.
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 12 Mai 2017, 10:07:26
Zitat von: CoolTux am 12 Mai 2017, 08:57:53Oder magst Du ihm die Anwendung verschachtelter Funktionsaufrufe erklären 
...zumindest lieber als DOIF oder THRESHOLD.  :P
Titel: Antw:Dynamischer Parameter
Beitrag von: Gonzolo am 12 Mai 2017, 10:12:46
... ich würde es gerne mit DOIF machen!  ;)
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 12 Mai 2017, 10:20:30
Zitat von: Gonzolo am 12 Mai 2017, 10:12:46
... ich würde es gerne mit DOIF machen!  ;)
Dann bin ich raus, für DOIF bin ich zu blöd.
Gruß,
   Thorsten
Titel: Antw:Dynamischer Parameter
Beitrag von: Gonzolo am 12 Mai 2017, 10:29:45
... schade denn DU hast mich verstanden.

ZitatIch glaube, wir haben hier sozusagen zwei Ebenen. Einmal die Anwendung, also irgendwas mit einer Heizung, dass man wahrscheinlich auf 100 verschiedene Arten machen könnte. ...und daran aufgehängt eine allgemeine technische Frage. Die geht soweit ich das verstanden habe so:
Gegeben ein Device mit einem Reading "readingname". (Statt "readingname" kann man auch "state" nehmen, das macht's aber schwerer verständlich.) In diesem Reading steht der Name eines anderen Reading. Wie kann ich jetzt auf das Reading zugreifen, dessen Name im Reading "readingname" steht? (Ob man das wirklich braucht ist eine andere Frage.)

ich wollte hier nicht meine komplette Steuerung erklären. Ich brauche dieses komplizierte Konstrukt, da es halt nicht nur die Heizung ist, die ich damit steuere (z.B. auch Rollladen).

Was muss ich schreiben, dass Ihr meine Frage versteht?!  :-[ Drücke ich mich tatsächlich sooooo kompliziert aus?  :o ... Schade!
Titel: Antw:Dynamischer Parameter
Beitrag von: Damian am 12 Mai 2017, 10:30:35
Ich weiß nicht wo das Problem ist, bevor wir uns hier noch tagelang mit einer banalen Anforderung beschäftigen, hier eine Komplettlösung in zwei Zeilen:



define TH_Heizung THRESHOLD Temp Heizung

define di_room DOIF ([TagNacht] eq "es ist Tag") (set Heizung desired [Tagtemp]) DOELSE (set TH_Heizung desired [Nachttemp])



Voraussetzungen:

Heizung ist deine Heizung, geschaltet mit on/off

Dummy TagNacht mit "es ist Tag" bzw. "es ist Nacht" (wie gewünscht)
Dummy Tagtemp mit der Solltemperatur für Tag z. B. 20
Dummy Nachttemp mi der Solltemperatur für Nacht z. B. 18

Temperaturfühler namens Temp mit dem Reading temperature

Default-Hysterese beträgt 1 Grad.
Titel: Antw:Dynamischer Parameter
Beitrag von: Thorsten Pferdekaemper am 12 Mai 2017, 10:37:25
Zitat von: Gonzolo am 12 Mai 2017, 10:29:45
... schade denn DU hast mich verstanden.
Warum willst Du es dann mit DOIF machen? Ich hatte Dir doch schon eine Lösung geliefert.
Gruß,
   Thorsten
Titel: Antw:Dynamischer Parameter
Beitrag von: Gonzolo am 12 Mai 2017, 10:40:19
Danke für Eure Hilfe!! Und entschuldigt bitte das ich mich missverständlich ausdrücke!!

Ich Versuche es mal mit den genannten Vorschlägen. Ansonsten muss ich mir was anders überlegen!  ;) Will nicht weiter durch meine unwissenheit  Verwirrung stiften und Eure nerven strapazieren..... :-[

Ein ernst gemeintes VIELEN DANK an alle!!!!

Viele Grüße

Gonzolo
Titel: Antw:Dynamischer Parameter
Beitrag von: CoolTux am 12 Mai 2017, 10:54:33
Vielleicht können wir es so machen. Du versuchst noch mal genau zu erklären und zu zeigen was Du willst. Daraufhin nimmt Dich EIN Helfender an die Hand und zeigt Dir Lösungswege. Alles andere führt nur zu noch mehr Verwirrung
Titel: Antw:Dynamischer Parameter
Beitrag von: Gonzolo am 12 Mai 2017, 11:27:03
Thorsten ... Vielen Dank! Ich mache es anders ...  :)