Einen Dummy über einen Grenzwert schalten

Begonnen von Stargazer, 08 August 2016, 15:33:13

Vorheriges Thema - Nächstes Thema

Stargazer

Hi,

komischerweise läuft es jetzt. Es steht zwar immer noch "To add a regexp an eventTypes definition is needed" oben im Wizard, aber er schaltet den Dummy.
Das "state" des Dummys ändert sich. Wenn ich ihn auf "Aus" schalte, dauert es einen Moment und er springt wieder auf "An" um.
Im Moment läuft die Anlage und das würde passen. Wenn die Anlage abschaltet, würde er doch jetzt durch das "if"-Kommando doch auch wieder ausschalten, oder ?

Ist diese o.g. Meldung denn von großer Wichtigkeit, auch wenn jetzt läuft ?

Viele Grüße und vielen Dank

André

Stargazer

Hi Dan,

oben im Wizard kann ich nichts auswählen. Da geht es nur weiter zum Commandref.

Viele Grüße

André

DeeSPe

Wenn es wieder ausschalten soll dann nimm meinen zweiten Vorschlag:
define n_Windturbine_Gemittelte_Leistung notify Windturbine:Gemittelte_Leistung.* {if($EVTPART1 > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

#18
Zitat von: Stargazer am 08 August 2016, 20:18:16
Hi Dan,

oben im Wizard kann ich nichts auswählen. Da geht es nur weiter zum Commandref.

Viele Grüße

André

Ich meine das wie im angehängten Bild!

Gruß
Dan

EDIT: Dateianhang entfernt.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stargazer

Hi Dan,

ähhm..nö. Hab ich so nicht zur Auswahl.

Hier nochmal der Code, der derzeit aktiv ist.

define Windturbine_An notify Windturbine:Gemittelte_Leistung.* {fhem("set Windanlage_in_Betrieb on") if($EVTPART1 > 0)}
define Windturbine_Aus notify Windturbine:Gemittelte_Leistung.* {if($EVTPART1 > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}


Ich muss mal gucken wie das wird, da das reading der Gemittelten_Leistung nicht ganz 0 wird, sonder bei 0,01 stehen bleibt. Aber das kann man ja anpassen.

VG

André

DeeSPe

#20
Du brauchst nur das zweite notify, das erledigt beide Zustände.
Also am Besten:
delete Windturbine_An
rename Windturbine_Aus Windturbine_Gemittelte_Leistung

in die FHEM Eingabezeile.

Gruß
Dan

EDIT: Wenn es dann jetzt wie gewünscht funktioniert kann Dir die Meldung auch egal sein, aber eigentlich (wenn das Device Events erzeugt) sollten die auch im "Regexp wizard" auswählbar sein.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Ach ja, und falls die gemittelte Leistung nie auf 0 geht, so kannst Du in dem notify die "> 0" einfach anpassen in einen Dir besser passenden Wert.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stargazer

Hi Dan,

ich danke dir recht Herzlich für deine Hilfe !!

Wenn man so etwas einmal gemacht hat, sacken lässt, versteht man es auch und kann es in Zukunft anwenden.

Vielen Dank nochmal und viele Grüße

André

DeeSPe

Ich hoffe es funktioniert nun wie gewünscht, das ist das Wichtigste.

Kleiner Tipp noch:
Ich bevorzuge folgende Schreibweise für Gerätenamen und kann es anderen nur ähnlich empfehlen:

n_Windturbine_Gemittelte_Leistung

Also das ist z.B. ein notify, beginnend mit "n_",
dann schreibe ich immer den Device Namen, "n_Windturbine",
und dann entweder das Reading auf welches das notify reagiert oder die Funktion die dahinter steht, n_Windturbine_Gemittelte_Leistung.

Somit weiß man immer gleich am Gerätenamen was es ist und was es voraussichtlich macht.
Hat für manche Regex auch Vorteile wenn Du mehrere Devices mit einem Regex ansprechen willst. Stell Dir vor Du hast mehrere Windturbinen und willst die in einem Regex erwischen. Dann würde der Regex eben auch das notify mitnehmen weil es am Anfang genau so heißt wie Deine Windturbinen. Um das relativ einfach zu vermeiden stelle ich das "n_" voran. ;)

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stargazer

Hi Dan,

Danke für dein Tipp. In der Tat...Anfangs geht das ja alles noch..aber je mehr das wird...da gebe ich dir recht.

Viele Grüße und Danke nochmal..

André

Stargazer

Hallo zusammen,

vorhin gab es einmal richtig Wind. FHEM hat es perfekt gemeistert. Alles lief mit dem Dummy, wie es sollte.

Nun wollte ich das ganze noch um eine Sturmabschaltung
erweitern. Unsere Wetterstation wird über das HTTPMOD Modul ausgelesen. Leider steht da dann folgendes komplett:

2,5 m/s from 241° (WSW)

Er zeigt mir im Notify das reading korrekt an. Nur möchte ich den Grenzwert bei den m/s einstellen. Ich habe Dan seine Befehlszeile genommen und anstatt der 0 einfach mal eine 1 eingetragen. Auch 1,0 oder 1 m/s brachte nichts. Ich weiß auch nicht, ob das Komma störend wirkt.

Viele Grüße und besten Dank

André

DeeSPe

#26
Das Komma wird störend sein! In Perl (und auch anderen Sprachen) ist der Punkt das Komma und auch nur damit lässt sich rechnen bzw. wird das als Float Zahl erkannt.

Man kann das aber umformatieren wenn Du es benötigst.

my $reading = ReadingsVal("Windturbine","Gemittelte_Leistung","7,5");
$reading =~ s/,/./;


EDIT:
Oder wie oben mit $EVTPART:
my $reading = $EVTPART1;
$reading =~ s/,/./;


In $EVTPART1 steht wirklich nur die Zahl (z.B. 2,5).
In ReadingsVal steckt das komplette Reading, also "2,5 m/s from 241° (WSW)".

Das ersetzt , durch .

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stargazer

Hi Dan,

erklär mich für doof, aber wo soll ich das ersetzen ?

{if($EVTPART1 > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}

wäre das dann...

{if(my $reading > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}     

?

Aber wo füge ich die zweite Zeile ein ($reading =~ s/,/./;)  ?

Viele Grüße und besten Dank

André


DeeSPe

#28
Zitat von: Stargazer am 09 August 2016, 16:45:18
Hi Dan,

erklär mich für doof, aber wo soll ich das ersetzen ?

{if($EVTPART1 > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}

wäre das dann...

{if(my $reading > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}     

?

Aber wo füge ich die zweite Zeile ein ($reading =~ s/,/./;)  ?

Viele Grüße und besten Dank

André

Dich erklärt keiner für doof, jeder hat mal klein angefangen...

{my $reading = $EVTPART1; $reading =~ s/,/./; if($reading > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}

Gruß
Dan

EDIT: Eventuell muss man $reading noch in eine Zahl umwandeln (ich denke das ist sonst ein String), dann etwa so:
{my $reading = $EVTPART1; $reading =~ s/,/./; $reading = $reading*1; if($reading > 0){fhem("set Windanlage_in_Betrieb on")} else {fhem("set Windanlage_in_Betrieb off")}}
(mit sprintf könnte man noch anders runden)
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stargazer

Hi Dan,

vielen Dank für deine Unterstützung. Ich habe den Code eingetragen.
Wie das Leben so will, hab ich derzeit keinen Kontakt vom Windmesser. Vorhin hatte er den kurz. Kommt selten vor, aber wenn, dann genau jetzt. Wird wohl wiederkommen.

Ich berichte, wenn es geklappt hat.

Viele Grüße

André