FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bobsonbob am 26 März 2017, 10:53:16

Titel: State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 26 März 2017, 10:53:16
Hallo, ihr fleißigen Hacker
Ich bin neu im Fhem unterweg und habe auch keine Erfahrungen mit Perl.
Suche mich im Forum durch und komme Schritt für Schritt weiter mit meiner Heizungssteuerung.
Ich weiss, das es ein ZHK gibt. Auch von anderen Tools habe ich gelesen.
Ich möchte aber von Grund auf selber Programieren, damit ich später weiss, wie die Zusammenhänge sind.
Auf meine jetzige Frage habe ich im Forum leider keine (für mich verständliche) Antwort bekommen.
Ich habe verschiedene Fühler/Dummy-Werte (state). Diese möchte ich in einer Formel berechnen und in
einem weiteren Dummy als state anlegen, um damit eine Mischersteuerung zu verwirklichen.
Wo denke ich Falsch? Hat das was mit Reading zu tun? Kann ich die Formel aus dem Perl-Editor so übernehmen?
Hat hier jemand einen Sinnvollen und für mich als Newbee verständlichen Vorschlag.
PS. Dieses Forum hat mir bis jetzt echt oft weiter geholfen. Daumen hoch. :-)
Gruß Jörg





Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 26 März 2017, 12:16:02
So richtig verstehe ich deine Frage nicht...

Du kannst in einer sub, in myUtils z.B. alles berechnen lassen und das Ergebnis dann mit z.B. "fhem set <name vom dummy der das Ergebnis enthalten soll> $Ergebnis" in das dummy schreiben.

VG
Frank
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 26 März 2017, 15:00:32
Danke für deine schnelle Antwort.
Habe das auch schon versucht. Und bräuchte (Weil Anfänger, Newbee) eine etwas genauere Antwort.
Ja, ich habe mir die Anfängertutorials durchgelesen und ja ich weiss es gibt bestimmt irgendwo eine
Antwort, die für einen efahrenen User logisch ist.
Aber noch mal zur Verständnis. Es würde mir sehr helfen, zu verstehen, wie das mit diesen MyUtils geht.
1. Wie bekomme ich da die Daten rein (zB States von Fühlern oder Dummy usw)
2. Wie binde ich solch eine Datei da letztendlich ein, ohne diese ganzen Fehlermeldungen bei meinen
Versuchen. Im 1. Post habe ich meine Datei abgebildet.
Wenn es eine, für einen Anfänger logische Erklärung gibt, würde ich mich wirklich über einen Link freuen.
Wie gesagt, SUB und MYUTILS als Tip ist mir zu wenig. Da bekomme ich das leider nicht hin.
Es wäre wirklich super, wenn mich da mal jemand an die Hand nimmt und es mir Schritt für Schritt erklärt.

Vielen lieben Dank
Jörg
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: CoolTux am 26 März 2017, 16:21:05
Zitat von: Bobsonbob am 26 März 2017, 15:00:32
Danke für deine schnelle Antwort.
Habe das auch schon versucht. Und bräuchte (Weil Anfänger, Newbee) eine etwas genauere Antwort.
Ja, ich habe mir die Anfängertutorials durchgelesen und ja ich weiss es gibt bestimmt irgendwo eine
Antwort, die für einen efahrenen User logisch ist.
Aber noch mal zur Verständnis. Es würde mir sehr helfen, zu verstehen, wie das mit diesen MyUtils geht.
1. Wie bekomme ich da die Daten rein (zB States von Fühlern oder Dummy usw)
2. Wie binde ich solch eine Datei da letztendlich ein, ohne diese ganzen Fehlermeldungen bei meinen
Versuchen. Im 1. Post habe ich meine Datei abgebildet.
Wenn es eine, für einen Anfänger logische Erklärung gibt, würde ich mich wirklich über einen Link freuen.
Wie gesagt, SUB und MYUTILS als Tip ist mir zu wenig. Da bekomme ich das leider nicht hin.
Es wäre wirklich super, wenn mich da mal jemand an die Hand nimmt und es mir Schritt für Schritt erklärt.

Vielen lieben Dank
Jörg

Hallo Jörg,

Readings liest man mit ReadingsVal aus. Damit auch am besten den state vom Dummy auslesen.

my $erg = ReadingsVal ('dummyName1','state', 0) + ReadingsVal ('dummyName2','state', 0);


Das Ergebnis steht dann in $erg
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 26 März 2017, 16:24:09
OK, hier mal eine sub aus meiner Utils, diese berechnet eine Differenz aus einem Temp Sensor (etwas anderes, passendes hab ich iMo nicht zur Hand bzw. meine anderen sub´s sind ziemlich komplex)

sub diff()
{

my $x1 = ReadingsVal("Diff_Sensor_WZ_T2","temperature","99" );
my $x2 = ReadingsVal("Diff_Sensor_WZ_T1","temperature","99" );
my $x3 = ($x1/$x2);
my $x4 = int(100 * $x3 + 0.5) / 100;
fhem "set diff_dummy $x4";


}
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 08:28:42
Huten Morgen
Jetzt habe ich das mal in die 99_myutils geschrieben.
Ich bekomme nach dem Abspeichern der Datei einen Falschen Wert angezeigt.
Der ausgegebene Wert ist unterschiedlich, wenn Ich die letzte zahl in der
Reading Zeile verändere. Wofür steht die "0" oder "99"?
Was sollte bei mir da stehen? Ich bin davon ausgegangen, das diese die Zeit
zwischen den Wiederholungen ist.
Ich schicke Euch mal ein Bild von meinen Einträgen.
Kleiner Nachtrag:
Das Problem muss bei den Readings liegen.
Wenn ich dort Zahlen eingebe, rechnet er richting und gibt den Wert auch richtig in die Reading des Dummys weiter. Wir kommen der Sache näher. :)
Er aktualisiert den Reading auch nur dann, wenn ich die Datei abspeicher. Das skript sollte das reading aber alle 10 Sekunden aktualisieren. Gibt es da einen Eintrag für?
Noch mal vielen Dank für Eure Hilfe.
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: CoolTux am 27 März 2017, 08:55:28
Guten Morgen,

Schaue mal in die Commandref. Da findest Du Informationen zu ReadingsVal.
Im Bereich Perl specials.



Grüße
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 09:06:52
Da habe ich schon gesucht. Habe ReadingVal leider nicht gefunden.
Da stehen nur Sachen wie:  rereadcfg und readingsChange   readingsGroup   readingsHistory   readingsProxy
Bist du bitte so nett und schickst mir den Link? Dann würde ich nachher mal weiter machen. Ich muss jetzt zur Arbeit. Würde gerne weiter basteln, aber dann sterbe ich am Ende vor Hunger. ;D
Ich weiss, ich wiederhole mich.
Ich bin euch für Eure Hilfe unendlich dankbar. Ohne diese Tips wäre ich noch kein stück weiter.
Und natürlich danke ich euch für euer Verständnis. Es muss schlimm sein, wenn jemand so Fragen stellt, die eigentlich selbstverständlich sind. Ich bin noch nicht so weit, aber ich lese mich jeden Tag 1-2 Stunden in diese Thema ein. Ich werde das schon irgend wann begreifen.
Bis später Jörg
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: CoolTux am 27 März 2017, 09:09:43
https://fhem.de/commandref_DE.html#perl

Diesen Absatz lesen und dann schauen wir weiter.
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 18:07:23
Der Link hat mir nicht wirklich geholfen. Da brauch ich wohl noch ein wenig Verständnis. Das mit der Berechnung geht aber, dank Eurer Hilfe jetzt. Ich habe ein wenig rumprobiert und hatte dabei festgestellt, das der später mit alias vergebene Name nicht geht. ich musste den beim define verwendeten Namen nehmen. :-)
Wieder ein wenig weiter. Man denkt halt quer.
Aber nun brauche ich noch mal bitte einen Tip, wie ich die Aktualisierung alle 10 Sekunden hin bekomme.
Sprich, ich hätte gerne, das das Reading in VorlaufSoll alle 10 Sekunden neu berechnet und aktualisiert wird.
Ist wahrscheinlich wieder eine ganz einfache Sache, auf die ich nicht komme.
Ich werde mal ein wenig rumprobieren, bis jemand einen Tip hat. Hat bei der anderen Sache ja auch geholfen. :-)
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: CoolTux am 27 März 2017, 18:36:12
Zitat von: Bobsonbob am 27 März 2017, 18:07:23
Der Link hat mir nicht wirklich geholfen. Da brauch ich wohl noch ein wenig Verständnis. Das mit der Berechnung geht aber, dank Eurer Hilfe jetzt. Ich habe ein wenig rumprobiert und hatte dabei festgestellt, das der später mit alias vergebene Name nicht geht. ich musste den beim define verwendeten Namen nehmen. :-)
Wieder ein wenig weiter. Man denkt halt quer.
Aber nun brauche ich noch mal bitte einen Tip, wie ich die Aktualisierung alle 10 Sekunden hin bekomme.
Sprich, ich hätte gerne, das das Reading in VorlaufSoll alle 10 Sekunden neu berechnet und aktualisiert wird.
Ist wahrscheinlich wieder eine ganz einfache Sache, auf die ich nicht komme.
Ich werde mal ein wenig rumprobieren, bis jemand einen Tip hat. Hat bei der anderen Sache ja auch geholfen. :-)

Ich würde es abhängig von den verwendeten Devices machen. Also ein Notify und schauen welche Device Reading Kombi die meisten Events aus wirft. Das nimmst du als Trigger für Dein Notify.
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 18:37:38
Das ist in jedem Fall die AussenTemperatur.
Dann werde ich mal sehen, wie ich mit einem Notify umgehen muss.
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 27 März 2017, 18:43:26
oder du triggerst über ein at welches alle 10 sec. deine sub aufruft.

P.S. Das bringt aber nicht viel, wenn die sensoren z.B. nur alle Minuten neue Werte liefern, dann solltest du, wie cooltux schon schrieb, dass mit einem notify machen

VG
Frank
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 18:45:56
Das würde mir au jeden Fall reichen. Wie sieht denn da der Code aus?
Ich bin wirklich gerade 1 Woche dabei und habe keine Ahnung.
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 27 März 2017, 18:49:30
define aufruf_at at +* 00:00:10 {name der sub}

commandref zu at mal ansehen  ;) ;)

VG
Frank
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 18:53:41
Bekomme da leider einen Fehler.

Wrong timespec : either HH:MM:SS or {perlcode}
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: CoolTux am 27 März 2017, 18:56:41
list DEVICENAME

Und die Ausgabe hier in Codetags (oben Rautesymbol) posten.
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 27 März 2017, 18:56:58
Zitatdefine aufruf_at at +* 00:00:10 {name der sub}

da ist mir dummerweise ein Leerzeichen reingerutscht :o

+*00:00:10
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 19:02:07
define aufruf_at at +*00:00:10 {99_myUtils}
habe ich geschrieben

syntax error at (eval 288) line 1, near "99_myUtils"
und das war das Ergibnis
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 27 März 2017, 19:03:01
Name der sub, nicht der utils, oh mann...
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 19:04:25
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}


# Berechnung der Vorlauftemperatur nach der Aussentemperatur.

# Vorgaben

my $Aussentemp = ReadingsVal("Aussentemp","state","" );
my $Raumsoll = ReadingsVal("RaumSoll","state","" );
my $minVorlauf = ReadingsVal("minVorlauf","state","" );
my $maxVorlauf = ReadingsVal("maxVorlauf","state","" );
my $Steigung = ReadingsVal("Steigung","state","" );
my $Paralel = ReadingsVal("Paralel","state","" );

# Berechnung

my $VorlaufSoll = ($Raumsoll-$Aussentemp)*$Steigung**(1/1.3)+$Paralel;

if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };

$VorlaufSoll = int(100 * $VorlaufSoll + 0.5) / 100;

fhem "set VorlaufSoll $VorlaufSoll";

1;
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 19:05:23
Ich bin noch nicht so weit. Wo muß ich der Sub einen Namen geben?
Ich weiss, das das doof klingt. Aber es ist für einen Anfänger nicht selbstverständlich.

Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 27 März 2017, 19:09:10
Man nehme das Ganze:

sub Berechnung()

{

# Berechnung der Vorlauftemperatur nach der Aussentemperatur.

# Vorgaben

my $Aussentemp = ReadingsVal("Aussentemp","state","" );
my $Raumsoll = ReadingsVal("RaumSoll","state","" );
my $minVorlauf = ReadingsVal("minVorlauf","state","" );
my $maxVorlauf = ReadingsVal("maxVorlauf","state","" );
my $Steigung = ReadingsVal("Steigung","state","" );
my $Paralel = ReadingsVal("Paralel","state","" );

# Berechnung

my $VorlaufSoll = ($Raumsoll-$Aussentemp)*$Steigung**(1/1.3)+$Paralel;

if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };

$VorlaufSoll = int(100 * $VorlaufSoll + 0.5) / 100;

fhem "set VorlaufSoll $VorlaufSoll";
}


und gebe ihm einen Namen!


P.S. und spätestens das:
if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };


wird dir auch Fehler bringen
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 19:14:26
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub
Vorlaufberechnung()
{
# Berechnung der Vorlauftemperatur nach der Aussentemperatur.

# Vorgaben

my $Aussentemp = ReadingsVal("Aussentemp","state","" );
my $Raumsoll = ReadingsVal("RaumSoll","state","" );
my $minVorlauf = ReadingsVal("minVorlauf","state","" );
my $maxVorlauf = ReadingsVal("maxVorlauf","state","" );
my $Steigung = ReadingsVal("Steigung","state","" );
my $Paralel = ReadingsVal("Paralel","state","" );

# Berechnung

my $VorlaufSoll = ($Raumsoll-$Aussentemp)*$Steigung**(1/1.3)+$Paralel;

if($VorlaufSoll > $maxVorlauf)
  { $VorlaufSoll = $maxVorlauf };
if($VorlaufSoll < $minVorlauf)
  { $VorlaufSoll = $minVorlauf };

$VorlaufSoll = int(100 * $VorlaufSoll + 0.5) / 100;

fhem "set VorlaufSoll $VorlaufSoll";

}
1;




Ist das so in Ordnung?
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: DeeSPe am 27 März 2017, 19:14:49
Zitat von: Bobsonbob am 27 März 2017, 19:05:23
Ich bin noch nicht so weit. Wo muß ich der Sub einen Namen geben?
Ich weiss, das das doof klingt. Aber es ist für einen Anfänger nicht selbstverständlich.

Ich denke Du solltest Dich vor der Benutzung von FHEM mit den Perl Grundlagen vertraut machen, zumindest bevor Du irgendwelche wilden Konstrukte in die 99_myUtils schreibst.
Perl Grundlagen haben erst mal nichts mit FHEM zu tun, sie sind aber dringend nötig um FHEM zu programmieren/erweitern.
Zu FHEM werden Dir hier sicher viele helfen! Beim Erlernen der Grundlagen von Perl eher wenige, denn diese sind im Internet oder auch in altmodischen Büchern bestens erklärt/dokumentiert. ;)

Gruß
Dan
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 19:16:07
OK. Vielen Dank für deine Hilfe
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: franky08 am 27 März 2017, 19:16:37
ZitatIst das so in Ordnung?

Vom Aufbau her ja, von der Syntax her ehr nein...

Siehe DeeSPe

P.S. unbedingt mal ein Perl Buch besorgen, ohne Perl Grundlagen wirst du sonst nicht voran kommen...

VG
Frank
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: Bobsonbob am 27 März 2017, 19:22:34
Es Funktioniert jetzt. Habt vielen lieben Dank. Lade euch gerne auf nen Kaffee oder Bier ein, wenn Ihr mal in der Nähe seid.
Ihr müsst Geduld mit mir haben. Ich weiß, leichter gesagt, als getan. hehe
Danke nochmal
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: MichlB am 11 März 2022, 08:22:24
hallo, ich muß mich bei derfrage anschließen, ich bekomms nicht hin...
ich habe ein DOIF wo ich wenn die situation eintritt, die position meines Stellmotors auslese und dann möchte ich 10 steps abziehen und diesen wert dann als neue position übergeben... funkt nur irgendwie nicht.. kann mir bitte wer sagen so ich den fheler habe?


([WW9:temperature] >= 35) ({my $Wert = ReadingsVal("FBHMisch", "position", "");
    fhem("set FBHMisch $Wert ,
    set A1 on,
    set A0 off,
    set MMLC_HZGbot message FBH zu heiss [WW9:temperature]"),
    })

DOELSE ()
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: rabehd am 11 März 2022, 09:36:09
Zitatfunkt nur irgendwie nicht..
Das ist die Fehlermeldung?

Ich würde sowas als Funktion auslagern.

Hast Du das mal manuell ausprobiert. Ich vermute das geht nicht. Du list den Wert von Position aus um ihn dann als state zu setzen. Dann wird was ein und was anders aus geschaltet...
Wo werden dei 10 Stepsa abgezogen?
...
Titel: Antw:State aus verschieden Dummys berechnen
Beitrag von: MichlB am 11 März 2022, 09:59:09
ha!
tja, wenn man ihn nicht sagt, dass er was berechnen bzw abziehen soll, dann macht er das auch nicht...
eh klar!...
ich bin so ein depp...
([WW9:temperature] >= 35) ({my $Wert = (ReadingsVal("FBHMisch", "position", "") - 10);
    fhem("set FBHMisch $Wert ,
    set A1 on,
    set A0 off,
    set MMLC_HZGbot message FBH zu heiss [WW9:temperature]"),
    })


funktioniert einwandfrei... vielen Dank