Fenstersymbol mit Anzahl offener Fenster als Kreis

Begonnen von zap, 31 Januar 2016, 15:10:17

Vorheriges Thema - Nächstes Thema

PingPong

Oh je... da bin ich wohl ein hoffnungsloser Fall :-(

Meine Fensterdevices haben alle eine einheitliche Benennung und beginnen mit "Fensterkontakte...".
Da ich diverse unterschiedliche Fenstersensoren verwende, die alle eine andere Schreibweise im Status haben, muss ich vermutlich noch das Event "(open|tilted|closed)" anpassen, aber das im zweiten Schritt.
Konkret bekomme ich es leider noch immer nicht hin :-(

Also ich hab jetzt folgendes eingestellt:

Dummy Device
Internals:
   CFGFN
   NAME         offeneFenster
   NR             498
   STATE        ???
   TYPE          dummy
Attributes:


notify
Internals:
    DEF                         Fensterkontakt.*:(open|tilted|closed) { CommandSet(undef, ' offeneFenster ' . numberOfOpenWindows()) }
    NAME                      notifyAnzahlFenster
    NR                          305
    NTFY_ORDER          50-notifyAnzahlFenster
    REGEXP                   Fensterkontakt.*:(open|tilted|closed)
    STATE                     active
    TYPE                       notify
    READINGS:             2018-03-27 12:50:47 state active
Attributes:


hier noch ein List von einem Beispiel-Fenstersensor
Internals:
    CHANGED
    DEF        158d0001daefe8 sensor_magnet.aq2 XiaomiGateway
    IODev XiaomiGateway
    LASTInputDev XiaomiGateway
    MODEL sensor_magnet.aq2
    MSGCNT 2
    NAME XMI_158d0001daefe8
    NR 139
    SID     158d0001daefe8
    STATE Status: close<br>Batterie: ok<br>last Change: (2018-02-22 21:42:06)
    TYPE XiaomiSmartHome_Device
    VERSION 1.20
    XiaomiGateway_MSGCNT 2
    XiaomiGateway_TIME 2018-03-27 12:56:13
READINGS: 2018-03-27 12:56:13
     battery ok 2018-03-27 12:56:13
     battery_level 3 2018-03-27 12:56:13
     heartbeat 158d0001daefe8 2018-03-27 12:56:13
     no_close 0 2018-02-22 21:42:06
     state close 2018-03-27 12:56:13
     windowState closed
Attributes: IODev XiaomiGateway
     alarmDevice Sensor alarmSettings alarm4,|XMI_158d0001daefe8:open|Fenstersensor_SchlafzimmerKeller|on
     alias Fensterkontakt_SchlafzimmerKeller
     devStateIcon open:fts_door_open@red close:fts_door@green
     event-on-change-reading .*
     group Fenstersensoren
     icon fts_window_1w
     room 02_Untergeschoss->01_Schlafzimmer,10_Sonstiges->07_Fenstersensoren,20_DeviceGroups->03_Xiaomi
     stateFormat { sprintf( "Status: %s<br>Batterie: %s<br>last Change: (%s)", ReadingsVal("XMI_158d0001daefe8", "state","?"), ReadingsVal("XMI_158d0001daefe8", "battery","?"), ReadingsTimestamp("XMI_158d0001daefe8", "state", "0000-00-00 00:00:00") ) } timestamp-on-change-reading state userReadings windowState {if(ReadingsVal("XMI_158d0001daefe8","state","?") eq "close") {return "closed"} elsif (ReadingsVal("XMI_158d0001daefe8","state","?") eq "tilted") {return "tilted"} elsif (ReadingsVal("XMI_158d0001daefe8","state","?") eq "open") {return "open"} else {return "unknown"}}


Dazu dann noch den Code in der Utils:
sub numberOfOpenWindows() {

      return devspec2array("group=Fensterkontakt:FILTER=STATE!=closed")
}


Magst Du mich nochmal ein Stück an die Hand nehmen?

CoolTux

Das Problem ist das die Namen Deiner Devices nicht Fensterkontakt sind sondern die Aliase.

NAME XMI_158d0001daefe8
alias Fensterkontakt_SchlafzimmerKeller


Ich empfehle alle mit rename vernünftig um zu benennen. Dann schauen wir weiter.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PingPong

Hi nochmal,

also erst nochmal ganz lieben Dank für Deine Geduld und Mühe.
Ich habe die Fenstersensoren jetzt umbenannt.

Beispiel
Internals:
    CHANGED
    DEF                             158d0001daefe8 sensor_magnet.aq2 XiaomiGateway
    IODev                          XiaomiGateway
    LASTInputDev             XiaomiGateway
    MODEL                        sensor_magnet.aq2
    MSGCNT                      6
    NAME                          Fensterkontakt_SchlafzimmerKeller
    NR                              139
    SID                            158d0001daefe8
    STATE                        Status: close<br>Batterie: ok<br>last Change: (2018-02-22 21:42:06)
    TYPE                          XiaomiSmartHome_Device
    VERSION                   1.20
    XiaomiGateway_MSGCNT 6
    XiaomiGateway_TIME 2018-03-27 12:56:13
READINGS: 2018-03-27 12:56:13
     battery ok 2018-03-27 12:56:13
     battery_level 3 2018-03-27 12:56:13
     heartbeat 158d0001daefe8 2018-03-27 12:56:13
     no_close 0 2018-02-22 21:42:06
     state close 2018-03-27 12:56:13
     windowState closed
Attributes: IODev XiaomiGateway
     devStateIcon open:fts_door_open@red close:fts_door@green
     event-on-change-reading .*
     group Fenstersensoren
     icon fts_window_1w
     room 02_Untergeschoss->01_Schlafzimmer,10_Sonstiges->07_Fenstersensoren,20_DeviceGroups->03_Xiaomi
     stateFormat { sprintf( "Status: %s<br>Batterie: %s<br>last Change: (%s)", ReadingsVal("Fensterkontakt_SchlafzimmerKeller", "state","?"), ReadingsVal("Fensterkontakt_SchlafzimmerKeller", "battery","?"), ReadingsTimestamp("Fensterkontakt_SchlafzimmerKeller", "state", "0000-00-00 00:00:00") ) } timestamp-on-change-reading state userReadings windowState {if(ReadingsVal("Fensterkontakt_SchlafzimmerKeller","state","?") eq "close") {return "closed"} elsif (ReadingsVal("Fensterkontakt_SchlafzimmerKeller","state","?") eq "tilted") {return "tilted"} elsif (ReadingsVal("Fensterkontakt_SchlafzimmerKeller","state","?") eq "open") {return "open"} else {return "unknown"}}


Zudem hatte ich noch einen falschen Code für die 99_myUtils gepostet. Hier jetzt wirklich vorhandene:
sub numberOfOpenWindows() {

      return devspec2array("group=Fenstersensoren:FILTER=STATE!=closed")
}

CoolTux

Sieht schon mal gut aus. Jetzt zeigt Dein state aber close nicht closed. Das bitte im Notify Regex und bei der myUtils beim Filter ändern.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PingPong

ok... da hätte ich jetzt auch selbst drauf kommen können...   ::)

Ist angepasst... aber leider weiterhin ohne Erfolg. Der Wert landet nicht im Dummy.

Zudem stellt sich jetzt natürlich auch wieder die Frage von vorhin:
ZitatDa ich diverse unterschiedliche Fenstersensoren verwende, die alle eine andere Schreibweise im Status haben, muss ich vermutlich noch das Event "(open|tilted|closed)" anpassen, aber das im zweiten Schritt.
Ich müsste also auf verschiedene Schreibweisen - sowohl im Notify als auch in der myUtils reagieren (Bsp. close/closed/Close).

CoolTux

Das kommt noch. Lass uns erstmal eine generelle Funktion herstellen.
triggert denn das Notify? Gib mal bitte ein list vom Notify
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PingPong

Ok, danke und gerne :-)
Internals:
   DEF        Fensterkontakt.*:(open|tilted|close) { CommandSet(undef, ' offeneFenster ' . numberOfOpenWindows()) }
   NAME       notifyAnzahlFenster
   NR         304
   NTFY_ORDER 50-notifyAnzahlFenster
   REGEXP     Fensterkontakt.*:(open|tilted|close)
   STATE      active
   TYPE       notify
   READINGS:
     2018-03-27 17:21:08   state           active
Attributes:

CoolTux

triggert nicht.

Mach mal bitte den Eventmonitor auf. Im FHEMWEB ganz unten ganz links

Bei Filter vor dem .* eingeben

Fensterkontakt

so das dann da steht

Fensterkontakt.*

und dann das Fenster mal auf machen und die Ausgabe des Eventmonitors hier posten
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PingPong

2018-03-27 19:16:56 XiaomiSmartHome_Device Fensterkontakt_SchlafzimmerKeller open
2018-03-27 19:16:56 XiaomiSmartHome_Device Fensterkontakt_SchlafzimmerKeller windowState: open
2018-03-27 19:16:59 XiaomiSmartHome_Device Fensterkontakt_SchlafzimmerKeller close
2018-03-27 19:16:59 XiaomiSmartHome_Device Fensterkontakt_SchlafzimmerKeller windowState: closed


gerne

CoolTux


Fensterkontakt.*(open|tilted|close) {  }


Ändere die DEF des Notify bitte so. Ausgeführt wird dann noch nichts aber wir sehen ob er triggert.
Im Internal STATE vom Notify muss dann der Timestamp vom Trigger drin stehen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PingPong

jawohl, STATE wird dann mit dem Timestamp befüllt.

CoolTux

Sehr schön. Nun zwischen { }

CommandSet(undef, ' offeneFenster ' . numberOfOpenWindows())

Fügen.

Und die Funktion erstmal so und die myUtils mit reload neu laden


sub numberOfOpenWindows() {
      return devspec2array("group=Fenstersensoren:FILTER=STATE!=close")
}
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PingPong


CoolTux

Welcher STATE. Von Deinem Fensterzähler Dummy?

Wenn der nicht dann bitte ins Log von FHEM schauen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

PingPong

Nee, nur der des notify - so wie vorher auch.

Der Dummy scheint unbeeindruckt :-(

Hab das Loglevel mal hochgesetzt:
2018.03.27 20:17:15 5: XiaomiGateway: Read> Read start
2018.03.27 20:17:15 5: XiaomiGateway: Read> {"cmd":"report","model":"sensor_magnet.aq2","sid":"158d0001daefe8","short_id":52743,"data":"{\"status\":\"close\"}"}
2018.03.27 20:17:15 5: XiaomiGateway: Read> Dispatch {"cmd":"report","model":"sensor_magnet.aq2","sid":"158d0001daefe8","short_id":52743,"data":"{\"status\":\"close\"}"}
2018.03.27 20:17:15 5: XiaomiGateway: dispatch {"cmd":"report","model":"sensor_magnet.aq2","sid":"158d0001daefe8","short_id":52743,"data":"{\\"status\\":\\"close\\"}"}
2018.03.27 20:17:15 4: XiaomiGateway: DEV_Parse> IS DEFINED sensor_magnet.aq2 : 158d0001daefe8
2018.03.27 20:17:15 5: XiaomiGateway: DEV_Read> SID: 158d0001daefe8 XiaomiSmartHome_Device
2018.03.27 20:17:15 3: XiaomiGateway: DEV_Read> Name: Fensterkontakt_SchlafzimmerKeller SID: 158d0001daefe8 Type: sensor_magnet.aq2 Status: close
2018.03.27 20:17:15 5: Starting notify loop for Fensterkontakt_SchlafzimmerKeller, 2 event(s), first is close
2018.03.27 20:17:15 5: Triggering notifyAnzahlFenster
2018.03.27 20:17:15 4: notifyAnzahlFenster exec { CommandSet(undef, ' offeneFenster ' . numberOfOpenWindows()) }

2018.03.27 20:17:15 5: Cmd: >{ CommandSet(undef, ' offeneFenster ' . numberOfOpenWindows()) }
<
2018.03.27 20:17:15 3: notifyAnzahlFenster return value: Please define  first
2018.03.27 20:17:15 5: End notify loop for Fensterkontakt_SchlafzimmerKeller


Sagt Dir das irgendwas?
Vor allem das hier ist vermutlich ein Hinweis:
2018.03.27 20:17:15 3: notifyAnzahlFenster return value: Please define  first