Autor Thema: Modul HourCounter - Betriebsstundenzähler mit einem Fensterkontakt  (Gelesen 145249 mal)

Offline Harald

  • Sr. Member
  • ****
  • Beiträge: 633
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #15 am: 04 Juni 2013, 13:19:51 »
Hallo John,

herzlichen Dank, dass Du bereit bis, mir zu helfen und entschuldige bitte, wenn ich nerve.

Im GasZaehler-LogFile steht

2013-06-05_16:16:06 GasZaehler on
2013-06-05_16:16:10 GasZaehler off
2013-06-05_16:21:47 GasZaehler on
2013-06-05_16:21:52 GasZaehler off
2013-06-05_16:22:01 GasZaehler on
2013-06-05_16:22:04 GasZaehler off


Ich habe dachte, ich hätte es mittels Deiner Tipps, Event-Monitor und Logfile (verbost auf 5) soweit hinbekommen, aber ich glaube, das ist nicht richtig.

Hier ein Auszug aus meiner fhem.cfg


#
# GasZaehler
#
define GasZaehler FS20 7e7e 02
define GasZaehler.event notify GasZaehler:(on|off).* { CounterNotify("%NAME","onoff","%EVTPART0");;}
#define FileLog_GasZaehler FileLog ./log/GasZaehler-%m.log GasZaehler:(onoff|cntOntimePerDayHours|cntPerDay|cntOntimeIncrement|cntPerDayLast|cntOntimeHours).*
define FileLog_GasZaehler FileLog ./log/GasZaehler-%m.log GasZaehler:(onoff|cntPerDay).*
attr FileLog_GasZaehler alias GasZaehler
attr FileLog_GasZaehler logtype text
attr FileLog_GasZaehler room Diagramm.log
#


Und hier der Inhalt des Logfiles:

2013.06.04 13:09:19 5: CUL/RAW: /F7E7E02112D
2013.06.04 13:09:19 5: CUL: F7E7E0211 -51.5
2013.06.04 13:09:19 5: CUL dispatch 810b04xx0101a0017e7e020011
2013.06.04 13:09:19 4: FS20 GasZaehler on
2013.06.04 13:09:19 5: Triggering GasZaehler (1 changes)
2013.06.04 13:09:19 5: Notify loop for GasZaehler on
2013.06.04 13:09:19 5: Triggering GasZaehler.event
2013.06.04 13:09:19 5: Cmd: >{ CounterNotify("GasZaehler","onoff","on");}<

2013.06.04 13:09:26 5: CUL/RAW: /F7E7E02002F
2013.06.04 13:09:26 5: CUL: F7E7E0200 -50.5
2013.06.04 13:09:26 5: CUL dispatch 810b04xx0101a0017e7e020000
2013.06.04 13:09:26 4: FS20 GasZaehler off
2013.06.04 13:09:26 5: Triggering GasZaehler (1 changes)
2013.06.04 13:09:26 5: Notify loop for GasZaehler off
2013.06.04 13:09:26 5: Triggering GasZaehler.event
2013.06.04 13:09:26 5: Cmd: >{ CounterNotify("GasZaehler","onoff","off");}<


Wäre toll, wenn Du mir weiter helfen könntest.

Viele Grüße

Harald
Router:AVM7490 1&1 FW:FRITZ!OS 06.51 Anbindung:1&1 16/50 Mb/s, WLAN-Repeater 300E OS 6.04
ELV MAX!Cube, 7xThermostat, ECO, Raspberry Pi B mit Wheezy auf Festplatte,
CUL-V3_1.61, JeeLink v3_10.1c, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA
ELV MAX!1.4.5, MAX!Buddy, -Backup, FHEM 5.7 auf RasPi

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1397
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #16 am: 05 Juni 2013, 23:15:24 »
Hallo Harald,

muss mich nochmal korrigieren:

sub CounterNotify($$$) {
  my $modul="CounterNotify";
  my ($strShutter,$strOnOff,$strState)=@_;
  InternalTimer(gettimeofday()+1,$MaxTimerID, $strShutter, 0);
}

hier wird beim Aufruf von InternalTimer nur $strShutter als der Name des devices uebergeben.
Alles andere spielt keine Rolle.

Ein Eingriff wäre an anderer Stelle nötig:

sub MaxCounterAtDo()
{

  Log 2,"MaxCounterAtDo" if ($DEBUG == 1);
  my $strShutter="SHUTTER.BRENNER";  # fix festlegen
  my $hash = $defs{$strShutter};
  my $cntPerDay =ReadingsVal($strShutter,"cntPerDay","0");
  my $strState = ReadingsVal($strShutter,"onoff","0");


mit  my $strState = ReadingsVal($strShutter,"onoff","0") lese ich den onoff Parameter direkt aus den Readings.
Dieses Reading liefert 0 oder 1.

Also such nach den passenden Reading für dein on, off.
Wenn du on,off zu 0 / 1 konvertieren willst kannst du das so machen:

 if ($strState eq "on")
  {
    $strState=1;
  }
 
  if ($strState eq "off")
  {
    $strState=0;
  }
   Log 3,"strOnOff:$strOnOff";  # wert im logfile ausgeben, zur kontrolle


Ich hoffe das hilft weiter.

John
CubieTruck/ CULV3
MAX Thermostat, MAX Thermostat+, MAX Fensterkontakt, MAX ECO-Taster
HMS100-TF, Sonos, PID20, HourCounter, MaxScanner

Offline Harald

  • Sr. Member
  • ****
  • Beiträge: 633
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #17 am: 07 Juni 2013, 14:34:45 »
HAusführungallo John,

hezlichen Dank für Deine Ausführungen. Dank Deiner Hilfe, div. Literatur (Heimautomation mit fhem, Perl kurz und gut, Einführung in Perl, suchen und probieren) ist ein winziges Licht am Ende des langen Tunnels zu sehen.

Leider habe ich noch keine Erklärung gefunden, die mir klar macht, wie FHEM überhaupt funktioniert. Weißt Du, ob die div. Module (z.B. 99_UtilsMaxCounter.pm zyklisch aufgerufen werden oder wird das durch Aufruf von Subroutinen wie CounterNotify bzw. MaxConterAtDo bewerkstelligt? Werden die Werte mittels z.B. %NAME,%EVTPART0 usw. und wie an das Modul übergeben und wie schickt das Modul die ermittelten Parameter (Readings) an FHEM bzw. ins entsprechende Logfile?

Fragen über Fragen ???

Weißt Du, wo ich da was nachlesen kann, wenn möglich in deutsch, da meine Englischkenntnisse nicht zum Verstehen der Materie ausreichen.

Vielen Dank nochmal und schönes Wochenende

Harald

Nachtrag: Es wird langsam heller! Bin gerade beim Kapitel "Subroutinen ...", da werden einige meiner Fragen beantwortet
Router:AVM7490 1&1 FW:FRITZ!OS 06.51 Anbindung:1&1 16/50 Mb/s, WLAN-Repeater 300E OS 6.04
ELV MAX!Cube, 7xThermostat, ECO, Raspberry Pi B mit Wheezy auf Festplatte,
CUL-V3_1.61, JeeLink v3_10.1c, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA
ELV MAX!1.4.5, MAX!Buddy, -Backup, FHEM 5.7 auf RasPi

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1397
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #18 am: 07 Juni 2013, 20:32:16 »
Hallo Harald,

ich kann dir natürlich zu 99_UtilsMaxCounter.pm  Fragen beantworten, da ich das Modul erstellt habe.

Sub CounterNotify wird zunächst über den Event aufgerufen, den man in FHEM.cfg definiert.
define SHUTTER.BRENNER.event notify SHUTTER.BRENNER:onoff.*  { CounterNotify("%NAME","%EVTPART0","%EVTPART1");;}

Hier angekommen wird ein interner Timer angestossen, der innerhalb der nächsten Sekunde aufgerufen wird.
 InternalTimer(gettimeofday()+1,$MaxTimerID, $strShutter, 0);
Dieser ruft über indirekt die Variable $MaxTimerID  die Sub "CounterTimer" auf.
Ich musste diesen Trick anwenden, da innerhalb eines Notify-Aufrufs kein Readings angelegt werden können.

Der Timer ruft nun seinerseits mit 1 Sek. Verzögerung die Sub CounterTimer auf, die als Parameter via $strShutter
den Namen des auslösenden Objektes mitbekommt.

Die eigentliche Arbeit verrichtet Sub CounterTimer.

Das ist so der grobe Ablauf der Ereignisse.

Sub UtilsMaxCounter_Initialize($$) wird beim Laden des Moduls aufgerufen (also z.B. beim Start vom FHEM) und initialisiert
via
 fhem("define MaxCounterAT at *00:00:00 {MaxCounterAtDo();;}");
ein AT-Commando, so dass um 00:00 Uhr die Sub MaxCounterAtDo aufgerufen wird.

Diese aktualisiert die Readings die tagesbezogen zu berechnen sind.

John

 
CubieTruck/ CULV3
MAX Thermostat, MAX Thermostat+, MAX Fensterkontakt, MAX ECO-Taster
HMS100-TF, Sonos, PID20, HourCounter, MaxScanner

Offline Harald

  • Sr. Member
  • ****
  • Beiträge: 633
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #19 am: 09 Juni 2013, 19:38:09 »
Hallo John,

vielen Dank für Deine Erklärungen. Damit blicke ich schon etwas besser durch ;-)

Ich habe jetzt folgendes gemacht:

fhem.cfg:

define GasZaehler.event notify GasZaehler:(on|off).* { CounterNotify("%NAME","%EVTPART1","%EVTPART0");;}

define FileLog_GasZaehler FileLog ./log/GasZaehler-%m.log GasZaehler:(on|off|onoff|cntOntimePerDayHours|cntPerDay|cntOntimeIncrement|cntPerDayLast|cntOntimeHours).*


In der 99_UtilsMaxCounter.pm:

sub CounterNotify($$$) {
  my $modul="CounterNotify";
  my ($strShutter,$strOnOff,$strState)=@_;
  {if ($strState eq "on") {$strState="0";} else {$strState="1";}};
  $strOnOff="onoff";
Log 3, "strShutter:$strShutter";
Log 3, "strOnOff:$strOnOff";
Log 3, "strState:$strState";
  InternalTimer(gettimeofday()+1,$MaxTimerID, $strShutter, 0);
}


Das habe ich hier gemacht, weil in MaxCounterAtDo() (wie Du vorgeschlagen hattes) Readings eingelesen werden, die ja noch nicht da sind.

Das ergibt im Logfile:

2013.06.09 19:22:23 5: CUL: F7E7E0211 -53
2013.06.09 19:22:23 5: CUL dispatch 810b04xx0101a0017e7e020011
2013.06.09 19:22:24 4: FS20 GasZaehler on
2013.06.09 19:22:24 5: Triggering GasZaehler (1 changes)
2013.06.09 19:22:24 5: Notify loop for GasZaehler on
2013.06.09 19:22:24 5: Triggering GasZaehler.event
2013.06.09 19:22:24 5: Cmd: >{ CounterNotify("GasZaehler","%EVTPART1","on");}<
2013.06.09 19:22:24 3: strShutter:GasZaehler
2013.06.09 19:22:24 3: strOnOff:onoff
2013.06.09 19:22:24 3: strState:0
2013.06.09 19:22:24 5: CUL/RAW: /F7E7E031128

2013.06.09 19:22:31 5: CUL: F7E7E0200 -51.5
2013.06.09 19:22:31 5: CUL dispatch 810b04xx0101a0017e7e020000
2013.06.09 19:22:31 4: FS20 GasZaehler off
2013.06.09 19:22:31 5: Triggering GasZaehler (1 changes)
2013.06.09 19:22:31 5: Notify loop for GasZaehler off
2013.06.09 19:22:31 5: Triggering GasZaehler.event
2013.06.09 19:22:31 5: Cmd: >{ CounterNotify("GasZaehler","%EVTPART1","off");}<
2013.06.09 19:22:31 3: strShutter:GasZaehler
2013.06.09 19:22:31 3: strOnOff:onoff
2013.06.09 19:22:31 3: strState:1
2013.06.09 19:22:31 5: CUL/RAW: /F7E7E03002C


Ich finde, das sieht schon ganz gut aus, oder?

Die Readings des GasZaehlers sehen so aus:

Readings
cntOntimeHoursLast     0 2013-06-09 18:53:18
cntOntimeIncrement     0 2013-06-09 18:53:18
cntOntimePerDay        0 2013-06-09 18:53:18
cntOntimePerDayHours   0 2013-06-09 18:53:18
cntOntimePerDaySeconds 0 2013-06-09 18:53:18
cntPerDay              0 2013-06-09 18:53:18
cntPerDayLast          0 2013-06-09 18:53:18
cntStateOld            0 2013-06-09 18:53:18
state                 on 2013-06-09 19:41:52


Es ändert sich aber nur state von on auf off und umgekehrt. Die anderen Werte bleiben auf 0.

Allerdings werden in das GasZaehler-Logfile auch nur on und off geschrieben, aber keine Readings wie onoff (mit nachfolgender 1 oder 0), cntPerDay usw. die ja für die Plotts gebraucht werden.

Irgendwo muss ich da noch was ändern, aber ich habe noch nicht gefunden wo.

Kannst Du mir nochmal helfen?

Besten Dank für alles, viele Grüße und noch einen schönen Sonntagabend

Harald
Router:AVM7490 1&1 FW:FRITZ!OS 06.51 Anbindung:1&1 16/50 Mb/s, WLAN-Repeater 300E OS 6.04
ELV MAX!Cube, 7xThermostat, ECO, Raspberry Pi B mit Wheezy auf Festplatte,
CUL-V3_1.61, JeeLink v3_10.1c, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA
ELV MAX!1.4.5, MAX!Buddy, -Backup, FHEM 5.7 auf RasPi

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1397
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #20 am: 09 Juni 2013, 22:50:05 »
Hallo Harald
hier hakt es noch
sub CounterNotify($$$) {
  my $modul="CounterNotify";
  my ($strShutter,$strOnOff,$strState)=@_;
  {if ($strState eq "on") {$strState="0";} else {$strState="1";}};
  $strOnOff="onoff";
Log 3, "strShutter:$strShutter";
Log 3, "strOnOff:$strOnOff";
Log 3, "strState:$strState";
  InternalTimer(gettimeofday()+1,$MaxTimerID, $strShutter, 0);
}


Alle Variable die innerhalb einer Sub definiert sind, haben auch nur hier ihre Gültigkeit.
Du kannst von aussen nicht auf diese zugreifen, sie sind sozusagen privat.
Das gilt für z.B. $strOnoff oder $strState und alle anderen.
Im Gegensatz dazu ist  $MaxTimerID global sichtbar und kann an jeder Stelle referenziert werden.

Der Sub InternalTimer werden 4 Parameter übergeben:
a. Startzeitpunkt für die übergebene Sub des Folgeparameters
b. mit MaxTimerID welche Sub nach 1 Sek. aufzurufen ist (nämlich CounterTimer)
c. Parameter für CounterTimer (hier der Objektname der den Event ausgelöst hat)
d. ??

CounterTimer bekommt als nur den Objektnamen "GasZaehler" mit und muss sich alle anderen Informationen,
von anderer Stelle besorgen.

Du wirst dich also mit sub CounterTimer befassen müssen:
hier steht die Anweisung:
 my $strState = ReadingsVal($strShutter,"onoff","0");

Diese liest direkt aus den Reading "onoff" des übergebenen Objektes  aus.
Such dir also das passende Reading von deinem Gaszähler aus und korrigiere onoff entsprechend.

Und dann eben noch wie von dir schon umgesetzt, den wert ON zu 1 und OFF zu 0 konvertieren.

John
CubieTruck/ CULV3
MAX Thermostat, MAX Thermostat+, MAX Fensterkontakt, MAX ECO-Taster
HMS100-TF, Sonos, PID20, HourCounter, MaxScanner

Offline Harald

  • Sr. Member
  • ****
  • Beiträge: 633
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #21 am: 10 Juni 2013, 10:18:58 »
Hallo John,

besten Dank für Deine Hilfe.

Wie Du oben sehen kannst, habe ich kein Reading onoff. Der FS20 KSE liefert nur on und off, der MAX-Kontakt aber onoff mit einem Wert von 0 oder 1. Das muss ich erst erzeugen, um dann in Dein Modul einsteigen zu können.

Es ist doch so, dass die aufrufende Routine die zu übergebenden Parameter in das Hash-Array @_ übergibt.
In sub CounterTimer ($) holst Du $strShutter dort heraus. Ich habe noch nicht verstanden, was Du in der nächsten Zeile machst:
my $hash = $defs{$strShutter};  -- was ist $defs für eine Variable?

Wenn ich in sub CounterNotify($$$) schreibe
 
InternalTimer(gettimeofday()+1,$MaxTimerID, $strShutter, $strState, 0);

und dafür

my (strShutter, $strState) = $defs{$strShutter}; dann my $strState = ReadingsVal ...... weglasse,

würde das gehen?

Viele Grüße

Harald

PS: Wenn es mir gelänge, bei einem Ereignis von on bzw. off in mein GasZaehler-Log abhängig vom Zustand "GasZaehler onoff: 0" bzw. "GasZaehler onoff: 1" zu schreiben, dann könnte ich Dein Modul ohne Änderungen nutzen, oder? Leider habe ich noch nicht gefunden, wie ich das bewerkstelligen könnte.

Router:AVM7490 1&1 FW:FRITZ!OS 06.51 Anbindung:1&1 16/50 Mb/s, WLAN-Repeater 300E OS 6.04
ELV MAX!Cube, 7xThermostat, ECO, Raspberry Pi B mit Wheezy auf Festplatte,
CUL-V3_1.61, JeeLink v3_10.1c, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA
ELV MAX!1.4.5, MAX!Buddy, -Backup, FHEM 5.7 auf RasPi

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1397
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #22 am: 11 Juni 2013, 23:41:37 »
Hallo Harald,
ich möchte dich nicht in die Code-Wüste schicken, daher eine einfache Lösung, wie du deinem Gaszähler ein
onoff Reading verpassen kannst.

Um deinen Gaszähler zu simulieren habe ich einen dummy definiert, der ON und OFF liefert
define GasZaehler dummy
attr GasZaehler setList state:OFF,ON
attr GasZaehler userReadings onoff {(ReadingsVal("GasZaehler","state",0) eq "ON")?1:0;; }
attr GasZaehler room System

Mit der 3. Zeile wird das Reading onoff angelegt, sobald sich state ändert.

Dann sieht man das neue Reading onoff.

(siehe Anhang / see attachement)


Nun noch wie gehabt den notify definieren:
define GasZaehler.event notify GasZaehler:onoff.*  { CounterNotify("%NAME","%EVTPART0","%EVTPART1");;}
attr GasZaehler.event room System

Nach dem dem Wechsel von  ON auf OFF sind auch die übrigen Readings zu sehen:

(siehe Anhang / see attachement)


Die Lösung für dich ist also die Zeile
attr GasZaehler userReadings onoff {(ReadingsVal("GasZaehler","state",0) eq "ON")?1:0;; }

John
CubieTruck/ CULV3
MAX Thermostat, MAX Thermostat+, MAX Fensterkontakt, MAX ECO-Taster
HMS100-TF, Sonos, PID20, HourCounter, MaxScanner

Offline Harald

  • Sr. Member
  • ****
  • Beiträge: 633
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #23 am: 12 Juni 2013, 11:36:44 »
Hallo John,

herzlichen Dank dafür, dass Du Dir so viel Mühe machst, um mir zu helfen.

Ich habe Deinen Vorschlag eingegeben, aber leider erhalte ich folgende Fehlermeldung:

GasZaehler already defined, delete it first GasZaehler: unknown attribute setList, .....

Hier ist der Auszug aus meiner fhem.cfg:
# GasZaehler neu
#
define GasZaehler FS20 7e7e 02
#
define GasZaehler dummy
attr GasZaehler setList state:ON,OFF
attr GasZaehler userReadings onoff {(ReadingsVal("GasZaehler",state,0) eq "ON")?1:0;; }
attr GasZaehler room MAX
#
define GasZaehler.event notify GasZaehler:(onoff).* { CounterNotify("%NAME","%EVTPART0","%EVTPART1");;}
#


Da hab' ich was angefangen! Es ist -zumindest für mich- nicht so einfach (trotz lesen, lesen, lesen ... probieren, probieren ...) fhem bzw. perl zu überreden, das zu tun, was ich möchte.

Ohne Deine Hilfe hätte ich (glaube ich) schon das Handtuch geworfen. Nochmals besten Dank für Deine Geduld.

VIele Grüße

Harald
Router:AVM7490 1&1 FW:FRITZ!OS 06.51 Anbindung:1&1 16/50 Mb/s, WLAN-Repeater 300E OS 6.04
ELV MAX!Cube, 7xThermostat, ECO, Raspberry Pi B mit Wheezy auf Festplatte,
CUL-V3_1.61, JeeLink v3_10.1c, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA
ELV MAX!1.4.5, MAX!Buddy, -Backup, FHEM 5.7 auf RasPi

Offline Puschel74

  • Hero Member
  • *****
  • Beiträge: 9791
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #24 am: 12 Juni 2013, 12:05:37 »
Hallo,

das
Zitat
GasZaehler already defined, delete it first

kommt daher das du GasZaehler zweimal definieren willst.

Einmal so
Zitat
define GasZaehler FS20 7e7e 02

und dann nochmal als Dummy
Zitat
define GasZaehler dummy


Das geht so nicht da Namen nur einmal vergeben werden dürfen.
Bei einem musst du dich entscheiden wie du diesen umbennen willst - und auch den Code dann entsprechend anpassen.

Hier
Zitat
unknown attribute setList, .....

musst du FHEM erst das attribute setList schmackhaft machen.
In der fhem.cfg hast du eine Zeile die so anfängt
Zitat
attr global userattr ...

... stellen dann die Attribute dar die du verwenden möchtest.
Hier einfach ein setList anhängen, speichern und die Fehlermeldung ist verschwunden.
Also so:
attr global userattr setList webCmd <usw.>

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.

Offline Harald

  • Sr. Member
  • ****
  • Beiträge: 633
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #25 am: 12 Juni 2013, 14:55:07 »
Danke Puschel74 für die Hinweise. Nachdem ich diese Änderungen durchgeführt habe, klappt es, wenn ich im Webinterface über den Button "Set GasZaehler state on" bzw. off die Impulse aktiviere.
Leider geht es noch nicht, wenn ich den FS20 KSE betätige. Dann ändert sich zwar der Status des 2. KSE-Kanals aber nicht der des 1., auf den der Zähler reagieren soll. Auch im FileLog wird kein Ereignis angezeigt. Aus irgend einem Grund wird der Kontakt nicht erkannt sondern nur bei Änderung übers WEB-Interface.

Aber ich bin dank Eurer Hilfe schon so weit gekommen, dann werde ich den Rest auch noch schaffen.

Viele Grüße

Harald
Router:AVM7490 1&1 FW:FRITZ!OS 06.51 Anbindung:1&1 16/50 Mb/s, WLAN-Repeater 300E OS 6.04
ELV MAX!Cube, 7xThermostat, ECO, Raspberry Pi B mit Wheezy auf Festplatte,
CUL-V3_1.61, JeeLink v3_10.1c, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA
ELV MAX!1.4.5, MAX!Buddy, -Backup, FHEM 5.7 auf RasPi

Offline Puschel74

  • Hero Member
  • *****
  • Beiträge: 9791
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #26 am: 12 Juni 2013, 16:37:27 »
Hallo,

ich kenn den KSE zwar nocht hab aber mal schnell die Produktseite überflogen.

Zitat
Dann ändert sich zwar der Status des 2. KSE-Kanals aber nicht der des 1., auf den der Zähler reagieren soll.


Dann sendet dein KSE nur auf Kanal 2 oder in FHEM ist Kanal 1 nicht definiert würde ich mal so ins Blaue raten.

Grüße

Edith: Oder der Jumper für Kanal 1 ist nicht gesteckt und der Ein- und Ausschaltbefehl werden recht knapp hinter einander gesendet (wobei das aber eher nichts ausmachen dürfte).
evtl. mal den Jumper für Kanal 1 stecken - dann sollte lt. Bedienungsanleitung zwischen Ein- und Ausschaltbefehl min. 3 Sekunden liegen.
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.

Offline Harald

  • Sr. Member
  • ****
  • Beiträge: 633
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #27 am: 12 Juni 2013, 17:47:54 »
Hallo Puschel74,

der KSE ist schon richtig eingestellt. Wenn ich den 1. Kanal wie den 2. programmiere, funktionieren beide gleich und die Logs sind auch gleich. Daran kann es nicht liegen.

Ich vermute, es liegt daran, dass in der fhem.cfg das "define GasZaehler FS20 7e7e 02" fehlt (wegen define GasZaehler dummy) und fhem m.E. nicht weiß, dass es auf den "FS20 7e7e 02" (das ist Kanal 1) reagieren soll, oder liege ich da falsch?
Ich benötige (glaube ich) beides ...GasZaehler FS20... und ...GasZaehler dummy. Wenn ja, wie bekomme ich das hin, ohne dass die sich beißen?

Viele Grüße

Harald
Router:AVM7490 1&1 FW:FRITZ!OS 06.51 Anbindung:1&1 16/50 Mb/s, WLAN-Repeater 300E OS 6.04
ELV MAX!Cube, 7xThermostat, ECO, Raspberry Pi B mit Wheezy auf Festplatte,
CUL-V3_1.61, JeeLink v3_10.1c, 1xS300TH, 4xHMS100T, 4xELRO, 1xTFA
ELV MAX!1.4.5, MAX!Buddy, -Backup, FHEM 5.7 auf RasPi

Offline Puschel74

  • Hero Member
  • *****
  • Beiträge: 9791
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #28 am: 12 Juni 2013, 18:06:34 »
Hallo,

Zitat
Wenn ja, wie bekomme ich das hin, ohne dass die sich beißen?


Indem du beiden unterschiedliche Namen gibst ;-)

FHEM sind die Namen erstmal egal - sie dienen ja nur uns zur besseren Lesbarkeit.
Du kannst den Dummy ja evtl. GasZaehler_dummy nennen (nur als Vorschlag).

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.

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1397
Aw: Betriebsstundenzähler mit Max-Fensterkontakt
« Antwort #29 am: 12 Juni 2013, 23:31:17 »
Hallo Harald,

dein Skript sollte so aussehen

define GasZaehler FS20 7e7e 02
attr GasZaehler userReadings onoff {(ReadingsVal("GasZaehler",state,0) eq "ON")?1:0;; }
define GasZaehler.event notify GasZaehler:(onoff).* { CounterNotify("%NAME","%EVTPART0","%EVTPART1");;}


Die 2. Zeile liefert dir das gewünschte onoff-Reading für deinen GasZaehler.

Ich habe den Dummy verwendet, weil ich ja keinen FS20 Zähler besitze.
Zitat

Um deinen Gaszähler zu simulieren habe ich einen dummy definiert, der ON und OFF liefert


John
CubieTruck/ CULV3
MAX Thermostat, MAX Thermostat+, MAX Fensterkontakt, MAX ECO-Taster
HMS100-TF, Sonos, PID20, HourCounter, MaxScanner

 

decade-submarginal