Eigene Variablen verwenden

Begonnen von Heffa, 13 Dezember 2013, 09:15:55

Vorheriges Thema - Nächstes Thema

Heffa

Hallo zusammen,

ich habe gerade mit FHEM angefangen und habe schon meine ersten erfolge gahabt.
Ich habe das Pollin Board AVR-NET-IO mit K8IO.

Soweit habe ich es geschafft die 1w Fühler abzufragen, die Relais zu schalten und die Relais abhängig von der Temperatur zu schalten.

Beispiel:
- das hier klappt -
define BrennerSchalten notify (HZ_1_Kessel:(temp).*) { if (%EVTPART1 < 24.0) { fhem("set Brenner on") } else { if (%EVTPART1 > 25.0) { fhem("set Brenner off") } } }[/font]

- wunsch -
define BrennerSchalten notify (HZ_1_Kessel:(temp).*) { if (%EVTPART1 < KesselMin) { fhem("set Brenner on") } else { if (%EVTPART1 > KesselMax) { fhem("set Brenner off") } } }[/font]

Was ich leider noch nicht hinbekommen habe ist, die festen Werte 24.0 und 25.0 dür vordefinierte Variablen zu ersetzen.
Da ich diese Werte öfters verwenden werde würde es Sinn machen diese an einer Stelle zu definieren.

Ich habe jede Menge gesucht, aber leider noch keine Lösung für genau dieses Problem gefunden.

Würde mich über etwas Hilfe freuen.

Gruß
Heffa

hckoe

Hallo Heffa,

suche im Forum einmal nach 99_myUtils.pm.

Gruß
Helmut
# CT mit Debian Buster / FHEM aktuell / EnOcean TCM310 / Eltako FSA12, FUD12NPN, FSB12, FRW, FSRP-230V
# Permundo PCS234, Nodon NO-SIN-2-2-00, GTAGS

Heffa

Hallo hckoe,

dank für die schnelle Antwort.
Ich habe leider über 250 Treffer zu dem 99_myUtils.pm bekommen  :(

Gibt es eventuell etwas konkreteres, ein Beispiel oder so?

Gruß
Heffa

ph1959de

Wie wärs als Start mit dem Wiki-Eintrag http://www.fhemwiki.de/wiki/99_myUtils_anlegen ... oder ist der auch schon bekannt und für unzureichend befunden worden?

Gruß, Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

Heffa

Danke für den Link.

Schaue ich mir an.

Was ich brauche sind "nur" Variablen mit feste Werte die ich im fhem.cfg zur Prüfung verwenden kann.
Ich dachte ich könnte das in der FHEM.CFG "einfach so" definieren.

Ich muss mich wohl noch etwas mehr einlesen in der FHEM Materia.

Danke
Heffa

Funfactor

Hallo Heffa,

Die benötigten Konstanten würde ich auch versuchen in der 99_Utils.pm zu definieren.

Wenn Du sie als Konstanten definierst könnte die verwendet Schreibweise funktionieren. Variablen müssen meines (aktuell noch sehr bescheidenen) Wissens nach mit $<Variablenname> verwendet werden.

Hier was zu Konstanten http://perldoc.perl.org/constant.html.

Grüße

Starkstrombastler

Ich habe einem Device Readings hinzugefügt. Diese lese und schreibe ich mit ReadingsVal() bzw. setReadingsVal().
Im Beispiel Reading Epoch:

my $stamp = TimeNow();
my $zeit = ReadingsVal("Stromzaehler","Epoch",1);
.....
setReadingsVal($defs{"Stromzaehler"},"Epoch",time(),$stamp);

Der Wert des Reading kann dann über die fhem-Oberfläche mittels setreading  eingegeben werden.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

Puschel74

Hallo,

ZitatDie benötigten Konstanten würde ich auch versuchen in der 99_Utils.pm zu definieren.

Würde ich nicht machen da bei einem update die 99_Utils.pm überschrieben werden kann.

Der Vorschlag dies über die 99_myUtils.pm zu erledigen macht schon Sinn.

Aber...
global verfügbar kannst du Variablen in der 99_myUtils.pm mit dem Schlüsselwort our erledigen.

our $KesselMin = "23";
our $KesselMax = "25";


Ab nun sind die Variablen $KesselMin und $KesselMax in FHEM global verfügbar.
Nachteil: Du darfst nicht vergessen diese Variablen schonmal definiert zu haben.
Den Namen darfst du nicht nochmal vergeben da die originalen dann überschrieben werden.

Besser ist es diese Variablen im notify zu deklarieren und mit dem Wert zu füllen.

Vorteil: Du kannst in jedem notify denselben Variablennamen verwenden.
Nachteil: Gibt es sicher nur fällt mir grad keiner ein  8)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Heffa

Hallo,

danke für eure Antworten.

Ich habe die Variablen jetzt in die 99_myUtils.pm mit our definiert

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
  our $Kessel_Min = 23.0;
  our $Kessel_Max = 26.0;
  our $Brauchwasser_Min = 22.0;
  our $Brauchwasser_Max = 25.0;
  our $Panikmax_Min = 85.0;
  our $Panikmax_Max = 86.0;
  our $Vorlauftemp = 0;
}

klappt so weit auch wie ich es brauche.

Ich verwende die Variablen dann so:

define BrennerSchalten notify (HZ_1_Kessel:(temp).*) {\
if (ReadingsVal("HZ_1_Kessel", "temp", 99) < $main::Kessel_Min) {\
  fhem("set Brenner on")\
} else {\
if (ReadingsVal("HZ_1_Kessel", "temp", 99) > $main::Kessel_Max) {\
fhem("set Brenner off") } } }



Ich habe jetzt eine dynamische Variable erstellt der in Abhängigkeit von einem Fühler einen anderen Wert bekommt.

sub
SetVorlauf($)
{
  my ($temp) = @_;
  if ($temp < -15.0) {
    our $Vorlauftemp = 82.0;
  }
  elsif ($temp < -14.0) {
    our $Vorlauftemp = 81.2;
  }
  elsif ($temp < -13.0) {
    our $Vorlauftemp = 80.4;
  }
.
.
.
.
  else {
    our $Vorlauftemp = 55.0;
  }
}

die ich dann so:


define myVorlauf at +*00:00:10 { SetVorlauf(ReadingsVal("HZ_3_Aussen", "temp", 99)) }


aufrufe.

das klappt soweit "scheinbar" auch.

Jetzt möchte ich gerne in der GUI die Werte auch darstellen.
Mit der dummy Definition klappt es auch, nur die dynamische Variable $Vorlauftemp wird in der GUI nicht aktualisiert.

Hat jemand eine Idee wie ich das umsetzten kann?

Danke

Heffa

Puschel74

Hallo,

ZitatHat jemand eine Idee wie ich das umsetzten kann?

Sollen wir jetzt einen neuen Code zusammen bauen oder zeigst du uns was du bisher versucht hast?

Zitatdefine myVorlauf at +*00:00:10 { SetVorlauf(ReadingsVal("HZ_3_Aussen", "temp", 99)) }

Die Temperatur alle 10 Sekunden zu prüfen ist mMn overkill und unnötig - da sich die Aussentemperatur mit ziemlicher Sicherheit nicht so schnell ändern wird das das notwendig wäre.

Versuchs mal so:

define myVorlauf notify HZ_3_Aussen:temp.* { SetVorlauf(ReadingsVal("HZ_3_Aussen", "temp", 99)) }
Am HZ_3_Aussen versuchen das Attribut "event-on-change-reading .*" zu setzen damit FHEM nur ein Event auslöst wenn sich ein Wert auch ändert.

Zitatdefine BrennerSchalten notify (HZ_1_Kessel:(temp).*) {\
Ob das so klappt mit dem regexp kann ich fast nicht glauben.
Sollte eher so aussehen:
define BrennerSchalten notify HZ_1_Kessel:temp.* {\

Ich hab grad gesehen das du die fhem.cfg direkt bearbeitest - dann bitte selbst um den zeilenschutz bzw. die Zeichenmaskierung kümmern da ich ausschliesslich und nur das DEF bearbeite und mich um diese Zeichen nicht kümmere.

Grüsse
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.