Hallo,
ja jeder fängt mal an, fühle mich aber im Augenblick ein wenig überfordert.
Sitze schon etwas länger an folgender Problematik:
Benötigt wird eine Statusanzeige (Label) das den Zustand in der Weboberfläche von einem Heizregler anzeigt. Dieses Zustand kann sein AUTO,Manu, OFF. Wie können diese Informationen zur Laufzeit aus dem Regler gelesen werden? Wie wird dieser Zustand dann auf der Oberfläche angezeigt? Der Regler hat einen Mode der auch mit get gelsen werden kann, dies soll aber zur Laufzeit (beim Öffnen der Oberfläche) erfolgen.
Desweiteren soll dieser Zustand über ein DropDown Menü geschaltet werden. Hierzu wird die Set Eigenschaft verwendet. Über einen Button habe ich dies schon realisiert:
define HomeStatus dummy
attr HomeStatus setList 0 1 2
define n_homestatus notify HomeStatus { Log 3, "HomeStatus changed";;fhem("set K_Heiz_Ventil1 mode manu 16") }
attr n_homestatus room CUL_HM
define FS20_Button FS20 1234 10
attr FS20_Button fp_Grundriss 50,100,2,
define n_fs20home notify FS20_Button set HomeStatus 1
Finde dies aber sehr komplex! Über DropDown Menü soll die Vorwahl erzeugt werden:
Auto: set K_Heiz_Ventil1 mode auto
Manu: set K_Heiz_Ventil1 mode manu 16
OFF: set K_Heiz_Ventil1 mode off
Weiter ist mir leider auch die Funktionalität von perl etwas unklar, muss alles im FHEM.cfg File programmiert werden, dies wird dann aber sehr unübersichtlich.
Vielleicht kann mir ein Experte helfen, bin etwas verzweifelt.
MFG
Malte
Hallo,
wenn es sich um einen "Regler" handelt, dann ist der doch in fhem einbindbar? Und damit eigentlich auch direkt ansprechbar.
Um was für einen Regler handelt es sich denn dabei überhaupt? Diese Info geht irgendwie aus Deinem Beitrag nicht hervor.
zu perl:
Nein. Ich würde perl-Code immer in 99_myUtilsXXX.pm - Dateien auslagern. XXX= irgendwas.
Das hat den Vorteil, dass Du beim Abspeichern aus fhem heraus sofort Fehlermeldung bzgl. perl bekommst.
Wenn der perl-Code über die fhem-Oberfläche z.B. bei der def eines notify oder at eingegeben wird, wird der Code erst zur Laufzeit getestet.
Beispiel, wie ich es machen würde:
define Schalter_not notify Schalter:.* {Schalter_not($NAME,$EVENT);;}
$NAME und $EVENT sind von fhem vorbelegt und enthalten den Namen des devices, der das notify auslöst (im Beispiel oben immer "Schalter") und $EVENT das Ereignis (z.B. on oder off).
In der 99_myUtils.pm
steht dann bspw. folgendes:
sub Schalter_not($$)
{
my ($name,$event) = @_;
# damit werden die Werte auf lokale Variable geschrieben
# Dann z.B. Testausgabe ins Log
Log(3"sub Schalter_not aufgerufen mit name $name event $event");
# oder wenn Du das Objektspezifisch über das Attribut verbose ein- und ausschalten willst:
Log3($name,3,"usw...");
# weiterer Code
} # ebnd sub Schalter_not
Das die sub genausso heißt, wie das notify ist nicht zwingend, sondern einfach nur praktisch. Du kannst da für die sub auch jeden beliebigen anderen Namen verwenden.
99_myUtils.pm bearbeiten:
Links in fhem auf "Edit" klicken.
Rechts die 99_myUtils auswählen
In
den Text klicken und editieren.
Dann oben über dem Textfeld auf "Save 99_myUtils" klicken.
Damit die Änderungen auch wirksam werden, musst Du ein reload machen:
In de fhem-Zeile:
reload 99_myUtils.pm
Wie oben gesagt, den Regler musst Du erst näher beschreiben, bevor ich Dir da Tipps geben kann.
Gruß
Elektrolurch
Zitat von: Elektrolurch am 09 September 2014, 12:47:55
Dann oben über dem Textfeld auf "Save 99_myUtils" klicken.
Damit die Änderungen auch wirksam werden, musst Du ein reload machen:
Die 99_irgendwas wird doch automatisch reloaded beim speichern aus der Weboberfläche?!?
Zumindest hab ich immer im Log dann die meldungen
sub xxx redefined
sub xyz redefined
sub xyx redefined
etc...
Hallo Elektrolurch,
danke für die Rückmeldung. Beim Regler handelt es sich um einen HM-CC-RT-DN, ich habe mir aber zur Übung schon eine einfache Funktion ausgedacht:
Fhem.cfg
#Button Dummy
define urlaubsButton dummy
attr urlaubsButton fp_Grundriss 50,100,2,
attr urlaubsButton room Kueche
attr urlaubsButton webCmd setUrlaub
define myNotifyUrlaub notify urlaubsButton:setUrlaub { SetTempList_Heiz_Kueche_Sommer() }
99_MyUtils.pm
package main;
use strict;
use warnings;
use POSIX;
sub
MyUtils_Initialize($$)
{
my ($hash) = @_;
}
# Temperatur-Liste für das Küche
# setzen per Aufruf von "{SetTempList_HeizungFenster_ClimRT_tr}"
######################################################
sub
SetTempList_Heiz_Kueche_Sommer()
{
{ fhem ("set K_Heiz_Ventil1 tempListMon 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set K_Heiz_Ventil1 tempListTue 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set K_Heiz_Ventil1 tempListWed 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set K_Heiz_Ventil1 tempListThu 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set K_Heiz_Ventil1 tempListFri 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set K_Heiz_Ventil1 tempListSat 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set K_Heiz_Ventil1 tempListSun 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
}
# End Heiz_Kueche_Sommer
1;
Diese funktioniert auch, an das K_Heiz_Ventil1 werden die neuen Parameter übertragen. Jetzt wollte ich die SUB um eine Parameterübergabe erweitern, funktioniert aber leider nicht:
Fhem.cfg
#Button Dummy mit Object
define urlaubsButton1 dummy
attr urlaubsButton1 fp_Grundriss 100,100,2,
attr urlaubsButton1 room Kueche
attr urlaubsButton1 webCmd setUrlaub1
define myNotifyUrlaub1 notify urlaubsButton1:setUrlaub1 { SetTempList_Heiz_Kueche_Sommer(,,K_Heiz_Ventil1") }
####ZWEITER VERSUCH#####
sub
SetTempList_Heiz_Kueche_Sommer_Obj($)
{
my ($obj) = @_;
{ fhem ("set $obj tempListMon 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set $obj tempListTue 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set $obj tempListWed 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set $obj tempListThu 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set $obj tempListFri 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set $obj tempListSat 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
{ fhem ("set $obj tempListSun 05:30 10.0 07:00 15.0 20:30 19.0 24:00 15.0")};
}
# End Heiz_Kueche_Sommer_Obj
Irgendwie ist meine Deklaration wohl falsch. Bin wohl ein bisschen C#
Gruß
Malte
Deine Idee schau ich mir aber auch noch an!
SetTempList_Heiz_Kueche_Sommer(,,K_Heiz_Ventil1") }
Sieh Dir mal die Anfürhungszeichen an!