Erste Schritte mit Scripts ...

Begonnen von ritchie, 17 April 2013, 09:21:30

Vorheriges Thema - Nächstes Thema

Rohan


define evt_kuFensterkontaktKl notify kuFensterkontaktKl:.* { fhem "set kuFensterkontaktKlBattery NotOk" }


dürfte mM eher passen.

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

ritchie

Hi,

in der Doku. steht
http://www.fhemwiki.de/wiki/Funktionsbeschreibung_zu_notify#Syntax_von_notify
das leider nicht so.

Kann ich erst probieren, wenn ich wieder senden darf :-(.

Wie wird den jetzt das FHEM Kommando geschrieben

Edit1:
fhem("set kuFensterkontaktKlBattery NotOk");
oder
fhem "set kuFensterkontaktKlBattery NotOk";

Edit2:
Kann man eigentlich die Art es Events in der Routine auswerten, damit ich für jeden Sensor nur eine Routine verwenden kann.
Hiermit könnte ich evtl. auch diese Routine besser Debuggen, wenn ich z.B. Die Arte der Meldung "Status" und den "Wert" seperat bekomme.


Gruss R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

Ralph

Moin,
ich hatte schon mal mit der Erkennung (halb)leerer Batterien experimentiert
und dabei beim CUL_FHTTK-2 das schon mal reproduziert.
So geht es:define a_NotExist CUL_FHTTK 000001
attr a_NotExist room Test
setstate a_NotExist 2012-02-22 08:58:03 Battery low batt
setstate a_NotExist 2012-02-22 08:24:14 Previous Open
setstate a_NotExist 2012-02-22 08:58:03 Reliability ok
setstate a_NotExist 2012-02-22 08:58:03 Window Closed, low batt
setstate a_NotExist Closed, low batt

Vorsicht:
Nicht alle melden gleich, andere melden anders, gilt nur für FHTTK-2
FHEM auf RaspberryPi3 mit Geekworm USV und SignalDUINO 433MHz und HM-MOD-RPI-PCB mit 3 HM-Sec-SD-2, 5 FHT, 2 RM 100-2 Uni S, 2 HMS100, 6 CUL_WS, 6 CUL_FHTTK, 11 FS20 und 7 FS20V Spannungsüberwachungen

ritchie

Hi,

nur zum besseren Verständnis des Patterns, den ich glaube hier liegt der Fehler.


define evt_kuFensterkontaktKl notify kuFensterkontaktKl:.* { fhem "set kuFensterkontaktKlBattery NotOk" }



"kuFensterkontaktKl" gibt die Komponente an

":" ist ein Trennzeichen und heisst bezogen auf den Logfile "Leerzeichen", bis zum nächsten Eintrag
".*" Beginnend ab Zeichen 1 wird jedes Element diesen Notify auslösen.
"bat.*" würde also alle Zeilen auslösen, wo "bat" am Anfang steht.

Dann müsste doch diese Zeile korrekt arbeiten:

define evt_kuFensterkontaktKl notify kuFensterkontaktKl:bat.* { fhem "set kuFensterkontaktKlBattery %" }


Gruss R.

P.S.: Testen kann ich das jetzt nicht.


IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

Rohan

Hi,

Zitatdefine evt_kuFensterkontaktKl notify kuFensterkontaktKl:bat.* { fhem "set kuFensterkontaktKlBattery %";; }

an sich ja, wenn du den Perl-Befehl in "{}" noch mit ";;" abschließt.

Aber: Testen kann ich atm auch nicht. So wie hier läuft es aber z.B. bei mir (eben für alle Geräte, egal ob battery oder Battery).

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

ritchie

Hallo Thomas,

leider arbeitet auch mein Script immer noch nicht.

Nun ja, ich nehme diesen Script nicht, da es ja ein Lernbeispiel seinen soll, keine Tipübung.

Welche Debug Möglichkeiten habe ich eigentlich bei FHEM ?

Gibt es Debug Schalter ?


Hier der Code:

kuFensterkontaktKl:battery.*
{
 fhem "set kuFensterkontaktKlBattery %";;
}


Hier der Log File:

2013-04-19_16:06:41 kuFensterkontaktKl battery: ok
2013-04-19_16:06:41 kuFensterkontaktKl onoff: 1
2013-04-19_16:06:41 kuFensterkontaktKl opened
2013-04-19_16:08:52 kuFensterkontaktKl battery: ok
2013-04-19_16:08:52 kuFensterkontaktKl onoff: 0
2013-04-19_16:08:52 kuFensterkontaktKl closed
2013-04-19_16:11:33 kuFensterkontaktKl battery: ok
2013-04-19_16:11:33 kuFensterkontaktKl onoff: 1
2013-04-19_16:11:33 kuFensterkontaktKl opened


Der Eintrag in meinem LOG File ist von gestern, wo ich ein Update check gemacht habe.

Nachtrag:
Ich konnte die Dummy-Variable mit dem Kommando "set kuFensterkontaktKlBattery test" über die Kommandozeile im Web Browser ändern. Die scheint also korrekt zu sein.

Gruss R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

ritchie

Hallo Zusammen,

hier wohl die erste Funktion:


kuFensterkontaktKl:bat.* { fhem "set kuFensterkontaktKlBattery %" }


Ich habe wirklich keine ";;" im script und er arbeitet so !

Dieser gibt mir den Wert "battery: ok" in der Variable % zurück.
Also nicht den Wert "ok".


Gruss R.




IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

Puschel74

Hallo,

was spricht eigentlich gegen das Wiki? http://www.fhemwiki.de/wiki/Batterieueberwachung

Der matcht wunderbar auf alles was durch fhem wandert und Battery oder battery als Event und noch irgendwas hinten dran hat.
Danach wird geschaut ob das "Anhängsel" nicht
Zitatok
lautet und dann was gemacht.

ZitatÄhnliche Beispiele wären auch o.k.

siehe Wiki ;-)

Grüße

Edith:
ZitatDieser gibt mir den Wert "battery: ok" in der Variable % zurück.
Ist klar. Der FHT liefert auch
Zitatactuator: 0%
zurück.

Edith2: Falscher Link. Der obige ist zum löschen vorgemerkt da Doppeleintrag.
http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung
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.

ritchie

Hallo,

>was spricht eigentlich gegen das Wiki? http://www.fhemwiki.de/wiki/Batterieueberwachung

Nichts, wenn man nur eine eMail bekommen will wenn ein Batterie Alarm kommt, ist es die beste Lösung.
Ich will aber einerseits

- Alarm per eMail erzeugen, wenn Batterie auf Low (Fehlt noch)
- Den Batterie-Status darstellen
- Evtl. später auf Fenster öffnen reagieren
- lernen, mit einem Notify umzugehen

Viele Grüße

R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

Puschel74

Hallo,

Zitat- Alarm per eMail erzeugen, wenn Batterie auf Low (Fehlt noch)
Sollte mit dem Wiki-Eintrag in 5 Minuten erledigt sein.

Zitat- Den Batterie-Status darstellen
Kann man im Mail-Notify verknüpfen.

Zitat- Evtl. später auf Fenster öffnen reagieren
Sollte egal sein ob das Fenster offen ist oder nicht wenn die Batterie leer wird ;-)

Zitat- lernen, mit einem Notify umzugehen
Solltest du mit Punkt 2 erledigen können um dann Punkt 3 später umsetzen zu können.

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.

ritchie

Danke für Dein Vertrauen.

Irgendwie habe ich aber noch nicht ganz verstanden,
wann man die folgenden Zeichen setzt.


Die Script geht:

.*:[Bb]attery.* {\
  fhem "set @Battery %";;}

Ich habe natürlich für jede Komponente eine Battery Dummy angelegt.

bekomme aber diese Meldung im Log file:

2013.04.20 20:17:22 3: evt_Battery return value: SCALAR(0x13f63e0)


Dieser nicht:

.*:[Bb]attery.* {\
  fhem "set @Battery %";;\
}

Bekomme dann diese Fehlermeldung:

2013.04.20 20:16:11 3: evt_Battery return value: syntax error at (eval 637) line 1, at EOF


Da ich weiter Zeilen in diesen Script einbauen will, (die eMail bei not ok.),
frage ich mich, wie man Zeilen trennt.

Da ich den Notify in der Fhem.cfg gefunden habe, ist mit klar, warum im das "\" als Zeilentrenner nehmen muss.
Zählt hier das letzte } auch dazu ?

Wo finde ich eigentlich eine gute Seite für die netten perl Kommandos, String Bearbeitung und so.
Da ich nicht weiss was sich hinter m/ok/ verbirgt, will ich das erstmal nachlesen.


IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

ritchie

Hallo,

ich habe das ganze in ein PM Module verschoben,
hier ist die ganze Sache deutlich entspannter.

hier der Notify

.*:[Bb]attery.* { evtHandlerBatterie('@','%'); }



#
# Battery handler for state and eMail Alarm
#
sub evtHandlerBatterie($$)
{
   my $Component = shift;
   my $State = shift;

  fhem("set ".$Component."Battery   ".$State);

 if($State !~  m/ok/)
    {
     DebianMail('Absender@Domain',"FHEM Meldung von ".$Component,
                "Die Battery vom ".$Component." hat den Status ".$State);
     }

  return;
}


Und jetzt weiss ich auch, wie die ganze Sache läuft.


Vielen Dank an alle, die mir geholfen haben, meinen ersten Script zu schreiben.

Gruss R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

broadway

Zitat von: ritchie schrieb am Fr, 19 April 2013 16:22Gibt es Debug Schalter ?

Nachdem man ihn anlegt schon:

define debug dummy
attr debug loglevel 6
attr debug setList state:1,0
attr debug webCmd state


und dann im code:
... if(Value("debug")){Log 1, "++ DEBUG ++ es funktioniert nicht";} ...
oder:
... if(!Value("debug")){DebianMail('xyz@@arcor.de','Stoerung',Value("Stoerung"));} ...

So kann man durch umstellen des dummys Debug funktionen aktivieren / deaktivieren.
Linksys NSLU2 debian + CUL | FHT80B, FS20, Elro

ritchie

Hallo Zusammen,

kleines Update der Routine da oben

Der Zustand der Variable dar nicht den Text "Battery" enthalten, da dies einen weiteren Event auslöst.
Daher habe ich einen Filter im Status eingefügt.

Daher alle Dummy Variablen so definieren :

define kuThermostatBatterie dummy


Hier die geänderte Routine

package main;
use strict;
use warnings;
use POSIX;
#
# Init of
#
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Perl trim function to remove whitespace from the start and end of the string
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}


sub
DebianMail
{
  my $rcpt = shift;
  my $subject = shift;
  my $text = shift;
  my $ret = "";
  my $sender = "Sender\@domain.de";
  my $konto = "Sender\@domain.de";
  my $passwrd = "SichersPassword";
  my $provider = "provider zugang";

  Log 1, "sendEmail RCP: $rcpt";
  Log 1, "sendEmail Subject: $subject";
  Log 1, "sendEmail Text: $text";
 
  $ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=no);

  $ret =~ s,[\r\n]*,,g;        # remove CR from return-string

  Log 1, "sendEmail returned: $ret";
}

#
# Battery handler for state and eMail Alarm
#
sub evtHandlerBatterie($$)
{
  my $Component = shift;
  my $State = shift;
  my $Status = " ";

  $Status = $State;
  $Status =~ s/[Bb]attery/ /;
  $Status =~ s/:/ /;
  $Status = trim( $Status) ;

  fhem("set ".$Component."Batterie   ".$Status);

  if($State !~  m/ok/)
    {
     DebianMail('MeineEMail@WEB.de',"FHEM Meldung von ".$Component,
                "Die Batterie vom ".$Component." hat den Status ".$State);
     }
  return;
}
1;


Gruss R.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv