Erste Schritte mit Scripts ...

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

Vorheriges Thema - Nächstes Thema

ritchie

Hallo Zusammen,

ich würde gerne eine kleine Anwendung in FHEM schreiben/konfiguieren,
welche mir folgende Funktion realisiert, jedoch fehlt mir derzeit der erste Einstieg.

- Batteriestatus im Floorplan anzeigen
- eMail senden, wenn eine Batterie Status auf Low steht.

Ich will lernen, wie ich auf Ereignisse mit einem Script reagiere.
Ähnliche Beispiele wären auch o.k.

Gruss R.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

Rohan

Hi,

als 1. Anlaufstelle könnte evtl. das Wiki geeignet sein:

Code-Beispiele

HowTos

Wenn dann Probleme / spezielle Fragen auftauchen... immer her damit.

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,

irgendwie bekomme ich den Dreh nicht hin, den simplen Batteriestatus in Floorplan darzustellen.

Ich habe die Batterie Wiki's gelesen. Hier wird ja eine eMail versendet. Installiert habe ich die eMailzusätze,
nur Testen muss ich die eMail noch. Das aber erst später.

Ich will aber als Anfänger erst mal den simple Batterie Status in meinem Floorplan darstellen.
Derzeit habe ich das mit den ReadingVals() noch nicht ganz verstanden.

Gruss R.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

Ralph

Zu obigen Vorhaben kann ich nichts beitragen.


Geht es aber darum, dass Du benachrichtigt werden möchtest, wenn ein FHTTK-2 sich nicht mehr meldet
- z. B. wenn dessen Batterie leer ist - oder er defekt ist,
dann mache es doch so:
http://forum.fhem.de/index.php?t=msg&goto=65102&rid=932&srch=checkalive#msg_65102
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

jhohn

Ich habe das so realisiert, hatte allerdings noch keine leere Batterie und kann deshalb nicht sagen ob das so funktioniert wie ich mir das gedacht habe:

ein Dummy für den allgemeinen Batteriestatus
- das webCmd attribut OK ist zum zurücksetzen
- wenn der Status des Dummy auf "NotOK" wechselt muss ich im Log nachsehen welches Gerät das ausgelöst hat, könnte man natürlich auch anders lösen, z.B. den Status auf den Gerätenamen setzen der nicht ok gemeldet hat


define Batteriestatus dummy
attr Batteriestatus group System
attr Batteriestatus room z_Uebersicht
attr Batteriestatus webCmd OK

ein Notify zum Setzen des Dummystatus:

define n_batt_chk notify .*:[Bb]attery.* { if("%" !~ m/ok/) {\
    set Batteristatus "NotOK";;\
    Log 3, "@: Batteriewarnung %";;\
    }\
}

Im Floorplan den Dummy aufnehmen:

(siehe Anhang / see attachement)

sieht dann so aus:

(siehe Anhang / see attachement)
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

ritchie

Hi,

ich dachte eigentlich eher an sowas wie:

attr mybattery userReadings Battery1 { ReadingsVal("mybattery","BatteryState",0); }


Würde sowas gehen, wenn ich das für jede Komponente machen würde. Die Daten sind doch schon im System,
ich müßte doch deswegen kein Notify machen, oder ?

Später dachte ich somit auch Messwerte der Thermostate darzustellen, der Batterie-Status sollte eigentlich
ein einfaches Beispiel sein.

Den notify dachte ich zentral für die eMail, was das nächste Thema wäre, wenn das läuft.

Gruss R.



IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

ritchie

Ok,

ich vermute mal, das eine Dummy Variable nur über den Set Befehl aufgesetzt werden kann.

Daher versuche ich es derzeit mit dem folgenden Code:


define bdFensterkontaktBattery dummy


define bdFensterkontaktBat_Chk notify bdFensterkontakt.battery
    { if("%" !~ m/ok/)
       {\
       set bdFensterkontaktBattery "NotOk";;\
       }\
else
       {\
       set bdFensterkontaktBattery "Ok";;\
       }\
     }


Im Logfile steht folgende Meldung:

2013-04-18_18:47:12 bdFensterkontakt battery: ok
2013-04-18_18:47:12 bdFensterkontakt onoff: 0
2013-04-18_18:47:12 bdFensterkontakt closed


Aber der Status der Variable bleibt bei "???".

Wo liegt mein Fehler .

Gruss R.

IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

Puschel74

Hallo,

sollte das

Zitatdefine bdFensterkontaktBat_Chk notify bdFensterkontakt.battery

nicht eher so

define bdFensterkontaktBat_Chk notify bdFensterkontakt:.battery

aussehen?

Ungetestet da ich nicht weiß ob der auch wirklich battery ok sendet.

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

Ich habe jetzt einige Probiert und komme immer noch nicht zum Ergebnis.

Anbei einfach mal ein Screenshoot vom Notify.


bdFensterkontakt:.battery*
{
 if("%" eq "ok")        
    {
    fhem set bdFensterkontaktBattery "NotOk";
    }
else
   {
   fhem set bdFensterkontaktBattery "Ok";
   }
}


Ist perl nicht ähnlich C ?

Muss ich hier nicht das Codewort fhem im Script verwenden ?

Ist die Änderung sofort active. Ich speichere den Script ab und öffne dann das Fenster für ein
neue Telegram.

Gruss R.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

Puschel74

Hallo,

sorry.

Das

ZitatbdFensterkontakt:.battery*

sollte eher so aussehen:

bdFensterkontakt:battery.*

Sorry. Mein Fehler.

Ich hab aber auch dieses im Einsatz:

Keller_Gaestezimmer_Heizung:actuator:.* {

Da das Event des FHT z.B.
Keller_Gaestezimmer_Heizung actuator: 0%
so heisst.

Grüße

P.S.: Etwaige Fehlermeldungen würde das stochern erleichtern ;-)
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

Hi,

danke für den Tip mit der Fehlermeldung. Bin noch neu in FHEM, aber nicht im Programmieren ;-)


2013.04.18 18:38:55 3: bdFensterkontaktBat_Chk return value: syntax error at (eval 159) line 1, at EOF
syntax error at (eval 159) line 1, at EOF


Was sagt mir das jetzt ? Nur die Uhrzeit scheint nicht zu stimmen ! Es ist die letzte Meldung im Log File.

Gruss R.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

Puschel74

Hallo,

ich bin auch blind.

Das

Zitatfhem set bdFensterkontaktBattery "NotOk";

schreib ich eigentlich immer so.

fhem ("set bdFensterkontaktBattery NotOk");

Nicht schön aber funktioniert.
Setzt aber voraus das du einen Dummy oder Aktor/Empfänger hast der bdFensterkontaktBattery heisst und mit dem Status NotOk etwas
anzufangen weiß.

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

So,

ich habe ein neuen Sensor genommen, welcher noch nicht montiert ist. Sonst bekomme ich noch Turnschuh-Geld.

Irgendwie geht das immer noch nicht.

kuFensterkontaktKl:battery:.*
{ if("%" eq "ok")
   {
   fhem("set kuFensterkontaktKlBattery NotOk");
   }
else
   {
   fhem("set kuFensterkontaktKlBattery Ok");
   }
}


Der Logfile zeigt:


2013-04-18_21:14:16 kuFensterkontaktKl onoff: 0
2013-04-18_21:14:16 kuFensterkontaktKl closed
2013-04-18_21:14:17 kuFensterkontaktKl battery: ok
2013-04-18_21:14:17 kuFensterkontaktKl onoff: 1
2013-04-18_21:14:17 kuFensterkontaktKl opened


Was bedeutet den das ":" und das Zeichen "." im pattern ?


Doku sagt:
ZitatMan kann auch mit Platzhaltern arbeiten.

    Rollo. => das notify reagiert auf alles was mit Rollo und ein weiteres Zeichen anfängt. Also auf Rollo1 wie auch auf RolloG, aber nicht auf Rollo_wischundweg
    Rollo.* => das notify reagiert auf alles das mit Rollo...... beginnt.
    *isch => Reagiere auf alles das mit isch aufhört (Tisch, Fisch)

Selber dieser Script gibt kein Wert:

kuFensterkontaktKl:battery.*
{
   fhem("set kuFensterkontaktKlBattery NotOk");
}


Es scheint also am Pattern zu liegen. Den State habe ich mit set auf den Wert "Unkown" gesetzt.

Gruss R.

IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv

Rohan

Hi,

was passiert, wenn du

set kuFensterkontaktKlBattery NotOk

in der Fhem-Eingabezeile "enterst"?

Edith lässt noch fragen: Mit welchem Befehl (bitte vollständige und genaue Sequenz posten) triggerst du dein define?

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,

dann erscheint der korrekt Status "NotOk".

Derzeit teste ich das Beispiel auf der Funktionsbescheibung "notify"


define evt_kuFensterkontaktKl notify kuFensterkontaktKl { fhem "set kuFensterkontaktKlBattery NotOk" }


Es sollte mir doch eigentlich bei irgendeinem Event den Status setzen oder ?

So, seit 2013-04-18_21:37:18 ist meine Datenmenge für die Stunde erreicht. Der Empfänger blinkt und ich bekomme keine
Statusmeldungen mehr im Logfile des Sensors.

Daher weiss nicht nicht, ob die obere Zeile korrekt arbeiten würde.

Gruss R.
IPU662  IPFIRE & Fhem (Homematic + MAX) - Produktiv
Intel iCore 3 / 16GBRAM / 500GB SSD  (1Wire - USB) - Produktiv