State aus verschieden Dummys berechnen

Begonnen von Bobsonbob, 26 März 2017, 10:53:16

Vorheriges Thema - Nächstes Thema

Bobsonbob

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






franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bobsonbob

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

CoolTux

#3
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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

franky08

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";


}
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bobsonbob

#5
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.

CoolTux

Guten Morgen,

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



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bobsonbob

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

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bobsonbob

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. :-)

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Bobsonbob

#11
Das ist in jedem Fall die AussenTemperatur.
Dann werde ich mal sehen, wie ich mit einem Notify umgehen muss.

franky08

#12
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Bobsonbob

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.

franky08

define aufruf_at at +* 00:00:10 {name der sub}

commandref zu at mal ansehen  ;) ;)

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1