Temperatur-Scanner für MAX-Thermostate

Begonnen von John, 12 März 2013, 09:44:59

Vorheriges Thema - Nächstes Thema

c-o-m-m-a-n-d-e-r

Ich werd mir das spätestens zum Wochenende mal ansehen und ausprobieren ... bin eh gerade noch am Heizplan austüffteln :)

Vielen Dank schon mal für die Arbeit

John

Hallo Marcel,

kannst du bitte "use Time:Local" noch einbinden und es nochmals versuchen:

package main;

use strict;
use warnings;
use POSIX;
use POSIX       qw(strftime);
use Time::Local;      # <--- neu !!!!


Ich hoffe das Packet befindet sich auf der Fritzbox.
Wenn nicht hab ich noch einen Plan B.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Marcel_R

John,

Danke für Deine Rückmeldung.

Diese habe ich wie folgt inplementiert:

package main;

use strict;
use warnings;
use POSIX;

ersetzte ich durch:
package main;

use strict;
use warnings;
use POSIX       qw(strftime);
use Time::Local;


Das Ergebnis:
FHEM ist jetzt gestartet. Ich kann dann aber nicht mit dem Browser auf FHEM zugreifen. PuTTY meldet
 
# Use of uninitialized value $datestr in pattern match (m//) at ./FHEM/99_MaxScan.pm line 24.
Use of uninitialized value $mm in subtraction (-) at ./FHEM/99_MaxScan.pm line 26.
Month '-1' out of range 0..11 at ./FHEM/99_MaxScan.pm line 26

Habe ich Deinen Hinweis falsch interpretiert; d.h. muss der ersetzte Text wie folgt sein:
use strict;
use warnings;
use POSIX;
use POSIX       qw(strftime);
use Time::Local;


Gruss
Marcel
FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /

John

Hallo Marcel,
die erste Hürde haben wir geschafft.

Time:local scheint es auch auf der Fritzbox zu geben.

Entferne bitte 99_MaxScan.pm vom Verzeichnis und starte FHEM neu, damit du die Web-Seiten siehst.
Ich brauche die Zeitstempel von der WEB-Seite zum MAX-Thermostat zu folgenden Readings

"temperature"
"msgcnt"

und beim CUL vom Reading

"credit10ms"

John

PS: Hardcopy von den Seiten ist auch OK
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Marcel_R

Sehr gerne.

temperature 17.8 2013-03-20 23:10:45
msgcnt 109 2013-03-13 16:15:31

Beim CUL gibt es leider kein Reading "credit10ms".
Deshalb gebe ich alle Readings durch:
cmds B C F i A Z E G M R T V W X e f m l t u x
2013-03-21 16:14:27
raw is0000F0000FF0 2013-03-03 15:13:58
version V 1.53 CUL868 2013-03-13 10:54:45

HTH
Gruss
Marcel
FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /

Matthias Gehre

Hab das Attribute scanTemp hinzugefügt.

John

ZitatBeim CUL gibt es leider kein Reading "credit10ms".

Das ist unser Problem.

Ohne Credit-Informationen kann das Skript nicht arbeiten.
Die Version vom CUL ist ok.

Versuch rauszufinden warum es fehlt.

John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Marcel_R

Im Nachtrag übermittle ich noch den Auszug aus dem Logfile, bevor es zum Abbruch kam (mit 99_99_MaxScan.pm):

2013.03.21 14:29:07 5: Cmd: >define HC_1_Buero Heating_Control HKT_1_Buero 07:00:19_22:00:16<
2013.03.21 14:29:07 5: Loading ./FHEM/98_Heating_Control.pm
2013.03.21 14:29:07 1: Including ./log/fhem.save
2013.03.21 14:29:07 5: Cmd: >setstate CUL0 2013-03-20 23:35:22 cmds  B C F i A Z E G M R T V W X e f m l t u x<
2013.03.21 14:29:07 5: Cmd: >setstate CUL0 2013-03-03 15:13:58 raw is0000F0000FF0<
2013.03.21 14:29:07 5: Cmd: >setstate CUL0 2013-03-13 10:54:45 version V 1.53 CUL868<
2013.03.21 14:29:07 5: Cmd: >setstate EG EG<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box opened<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 22:01:03 call_duration 56<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 22:01:03 call_id 1<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 22:01:03 event disconnect<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 21:59:45 external_connection SIP6<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 21:59:45 external_name Rottermann, Judith und Johnsen Jennifer Marie<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 21:59:45 external_number 0522328643<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 22:00:08 internal_connection DECT_5<
2013.03.21 14:29:07 5: Cmd: >setstate F_Box 2013-03-20 21:59:45 internal_number 0041446871000<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_1_Buero active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_1_Douche active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_1_Gang active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_Eltern active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_K_Douche active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_K_SZimm active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_Kueche active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_Naomi active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_WZ_Nord active<
2013.03.21 14:29:07 5: Cmd: >setstate FileLog_HKT_WZ_Ost active<
2013.03.21 14:29:07 5: Cmd: >setstate HC_1_Buero 01.01.1970 01:00:00: 0°C<
2013.03.21 14:29:07 5: Cmd: >setstate HC_1_Buero 2013-03-20 23:37:39 nextUpdate 01.01.1970 01:00:00<
2013.03.21 14:29:07 5: Cmd: >setstate HC_1_Buero 2013-03-20 23:37:39 nextValue 0°C<
2013.03.21 14:29:07 5: Cmd: >setstate HC_1_Buero 2013-03-20 23:37:39 state 01.01.1970 01:00:00: 0°C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 17.5 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 .weekProfile 3c005508452045204520452045204520452045204520452045203c005508452045204520452045204520452045204520452045203c00546c44cc55144520452045204520452045204520452045203c00546c44cc55144520452045204520452045204520452045203c00546c44cc55144520452045204520452045204520452045203c00546c44cc55144520452045204520452045204520452045203c00546c44cc5514452045204520452045204520452045204520<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:23:18 battery ok<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:23:18 desiredTemperature 17.5<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:23:18 mode manual<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-13 16:15:31 msgcnt 108<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:23:18 state 17.5 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:10:45 temperature 17.8<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:23:18 valveposition 25<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-0-Sat-temp 15.0 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-0-Sat-time 00:00-00:00<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-1-Sun-temp 15.0 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-1-Sun-time 00:00-00:00<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-2-Mon-temp 15.0 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-2-Mon-time 00:00-00:00<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-3-Tue-temp 15.0 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-3-Tue-time 00:00-00:00<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-4-Wed-temp 15.0 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-4-Wed-time 00:00-00:00<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-5-Thu-temp 15.0 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-5-Thu-time 00:00-00:00<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-6-Fri-temp 15.0 °C<
2013.03.21 14:29:07 5: Cmd: >setstate HKT_1_Buero 2013-03-20 23:22:59 weekprofile-6-Fri-time 00:00-00:00<

Nachdem alle anderen Heizkörperthermostate gestartet sind:
2013.03.21 14:29:09 5: Cmd: >setstate ImageAnchor initial<
2013.03.21 14:29:09 5: Cmd: >setstate Logfile active<
2013.03.21 14:29:09 5: Cmd: >setstate autocreate active<
2013.03.21 14:29:09 5: Cmd: >setstate cm Defined<
2013.03.21 14:29:09 5: Cmd: >setstate cm 2013-03-20 23:36:24 packetsLost 556<
2013.03.21 14:29:09 5: Cmd: >setstate global <no definition><
2013.03.21 14:29:09 5: Cmd: >setstate initialUsbCheck active<
2013.03.21 14:29:09 5: Cmd: >setstate w_WertListe1 initial<
2013.03.21 14:29:09 5: Interface "interface": readings "", getters "", setters ""
2013.03.21 14:29:09 5: Interface "switch": readings "onoff", getters "onoff", setters ""
2013.03.21 14:29:09 5: Interface "switch_active": readings "onoff", getters "onoff", setters ""
2013.03.21 14:29:09 5: Interface "switch_passive": readings "onoff", getters "onoff", setters "on:off"
2013.03.21 14:29:09 5: Interface "dimmer": readings "onoff:level", getters "onoff:level", setters "on:off:dimto:dimup:dimdown"
2013.03.21 14:29:09 5: Interface "temperature": readings "temperature", getters "temperature", setters ""
2013.03.21 14:29:09 5: Interface "humidity": readings "humidity", getters "humidity", setters ""
2013.03.21 14:29:09 5: Interface "wind": readings "wind", getters "wind", setters ""
2013.03.21 14:29:09 5: Interface "power": readings "power:maxPower:energy", getters "power:maxPower:energy", setters ""
2013.03.21 14:29:09 5: Triggering global (1 changes)
2013.03.21 14:29:09 5: Notify loop for global INITIALIZED
2013.03.21 14:29:09 5: Triggering initialUsbCheck
2013.03.21 14:29:09 5: Cmd: >usb create<
2013.03.21 14:29:09 1: usb create starting
2013.03.21 14:29:10 4: ### ttyACM0: checking if it is a CUL
2013.03.21 14:29:10 4: already used by the CUL0 fhem device
2013.03.21 14:29:10 1: usb create end
2013.03.21 14:29:10 0: Server started with 38 defined entities (version Fhem 5.3 (DEVELOPMENT), $Id: fhem.pl 2707 2013-02-12 12:56:55Z rudolfkoenig $, pid 17040)
2013.03.21 14:29:10 2: FB_CALLMONITOR: loading cache file /var/flash/phonecache


Dann habe ich noch den Logfile-Teil durchgesehen, der beim neuerlichen Aufstarten (ohne 99_MaxScan.pm) gebildet wurde. Dabei ist mir folgendes "komische" Datum aufgefallen:
2013.03.21 16:23:19 4: HTTP FHEMWEB:192.168.178.29:54986 GET /fhem/icons/fhemicon.png
2013.03.21 16:23:20 5: Triggering HC_1_Buero (3 changes)
2013.03.21 16:23:20 5: Notify loop for HC_1_Buero nextUpdate: 01.01.1970 01:00:00

Vielleicht sagt Dir dies etwas.

Gruss

Marcel
FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /

Marcel_R

FHEM / Fritz!Box 7490 / CULv3 / Raspi / COC / MAX! / HomeMatic /

f.reddy

Moin John,

erstmal besten Dank für das Script. Fand ich so genial, dass ich es direkt nach dem Anlernen erstmal einbinden musste. Arbeite mich grade in das Thema ein. Mit den Änderungen klappts auf der FB 7390 auf Anhieb.
Hab den Loglevel etwas hochgedreht und mal per telnet das Log laufen - er checkt alle 10 Sek und bekommt alle 3 Min Daten gemeldet.
Somit seh ich das mal als Erfolg an :-)

So jetzt geh ich mal auf die Suche, wo ich den tollen Graphen herbekomme für den ich die Daten sammle und wie ich die Temperatursteuerung verwirkliche ;-)

Stehe dir übrigens für alle Tests gern zur Verfügung - wenns schnell gehn soll einfach eine pm oder Mail reinschicken. Hardware steht in der Sig.

Kurze Frage noch: Die 10sekündigen Tests scheinen die FB doch kurzzeitig zu belasten. Die durchschnittliche Last geht mit aktivem Script hoch. Könnte man das ohne negative Auswirkungen hochsetzen?

Gruß und weiter so!
Stefan

John

Hallo Stefan,
da bin ich aber froh, dass sich nun doch noch eine Fritzbox gefunden hat, die mein Skript verträgt.

Besten Dank für die Rückmeldung.

zu deiner Frage:

ZitatKurze Frage noch: Die 10sekündigen Tests scheinen die FB doch kurzzeitig zu belasten. Die durchschnittliche Last geht mit aktivem Script hoch.
Könnte man das ohne negative Auswirkungen hochsetzen?

Nachdem mein Raspberry stur seine 700 Mhz und damit den kleinsten Takt fährt, hab ich mir darüber noch keine Gedanken gemacht.
Das kann man sicher noch intelligenter gestalten, indem man das Zeitintervall zum nächsten Scanzeitpunkt ermittelt und den Timer entsprechend einstellt.
Ich nehme es in meine ToDo-List auf.

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Zwer2k

Hallo John,

neue Version von deinem Script läuft mit kleinen Änderung auch auf meiner FB7390 (mit Freetz).

Ich musste "use Date::Parse;" ergänzen und folgendes anpassen

# credits zeitlich anpassen,
# die aus dem CUL ausgelesenen Credits müssen korrigert werden um die seit der Aktualisierung verg. Sekunden
my $strCreditTime=$defs{CUL}{READINGS}{credit10ms}{TIME};
my $sdCreditTime=DateStr2Serial($strCreditTime);

#Log 3,"$modul.$therm DEBUG strCreditTime:$strCreditTime strCurTime:$strCurTime sdCreditTime:$sdCreditTime  sdCurTime:$sdCurTime";  # debug

my $strName=$defs{$therm}{IODev}{IODev}{NAME};                   # name des io devices bestimmen
my $numCulCredits = $defs{$strName}{READINGS}{credit10ms}{VAL};       # credit vom CUL


in

my $strName=$defs{$therm}{IODev}{IODev}{NAME};                   # name des io devices bestimmen
my $numCulCredits = $defs{$strName}{READINGS}{credit10ms}{VAL};       # credit vom CUL

# credits zeitlich anpassen,.
# die aus dem CUL ausgelesenen Credits müssen korrigert werden um die seit der Aktualisierung verg. Sekunden.
my $strCreditTime=$defs{$strName}{READINGS}{credit10ms}{TIME};
my $sdCreditTime=DateStr2Serial($strCreditTime);


$defs{CUL}{READINGS}{credit10ms}{TIME} gibt es bei mir nicht. War ja bei Marcel zuerst auch so.


Dein Skript verwaltet auch Wandthermostate und Heizkörperthermostate die an den Wandthermostaten hängen. Das sollte der nicht,
da die Wandthermostate ihre Temperatur selbst in 3 Minutentakt liefern und Heizkörperthermostate die an den Wandthermostaten hängen keine Temperatur liefern können.

Daher noch folgende Änderung
next if $defs{$strName}{type} !~ m/.*Thermostat.*/;   # uns interessieren nur thermostate
in
next if $defs{$strName}{type} ne "HeatingThermostat";   # uns interessieren nur Heizkoerperthermostate
fhem("set ".$strName." wakeUp"); # Thermostate die von CUL set-Befehler empfangen koennen sind nicht mit Wandthermostat gekoppelt
-- sleep --
next if !defined($defs{$strName}{backend});   # Heizkoerperthermostate die mit Wadthermostat gekoppelt sind interessieren uns nicht


Bei mir ist es so, dass nicht mit dem Wandthermostat gekoppelte Thermostate backend=CULMAX0 als Parameter haben. Leider wird "backend" erst nach ersten "set" an den Thermostat bekannt, daher das wakeUp.
Das Sleep muss noch mit Credits gelöst werden.


Gruß
Jurij

John

Hallo Jurij
vielen Dank für deine Unterstützung.
Ich selbst habe keinen Wandthermostat, daher waren mir die von dir geschilderten Zusammenhänge nicht klar.

zu den einzelnen Punkten:

CUL-Bezeichnung dynamisch
Werde ich wie vorgeschlagen übernehmen.

Präzisere Einschränkung der MAX-Komponenten.
Würde ich wie folgt realisieren (es gibt noch HeatingThermostatPlus)
   next if $defs{$strName}{type} !~ m/^HeatingThermostat.*/;  

Keine Thermostate, die mit Wandthermostat gekoppelt sind
Matthias Gehre hat zugesagt im Modul 10_MAX.pm das Attribute scanTemp hinzuzufügen.
Dies ist derzeit im Skript noch auskommentiert. Sobald der Update von 10_MAX.pm vorliegt, kann man dies wieder aktivieren.
   # erst einbinden, wenn Attribut scanTemp im MAX Modul integriert ist
    #next if (AttrVal($strName,"scanTemp","?") eq "?");

Dann kann man diejenigen Thermostate auswählen, die über den Scanner laufen sollen.

use Date::Parse
eigentlich sollte ein
use Time::Local qw(timelocal);
reichen, kannst du das bitte nochmals testen.



John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

f.reddy

Hallo zusammen,

ich glaube ich brauch nochmal etwas Input - nachdem es Anfangs bei mir wohl mal gefunzt hat (bin mir da jetzt nicht mehr so sicher) bekomme ich mittlerweile keine Temperaturwerte mehr.
Im ersten Post steht, dass man keinen Wocheplan im  Automatikprogramm drin haben soll (reduziert auf eine Regelung am Tag).
Kann es daran schon liegen? Ich hab aktuell einen Wochenplan drin, der 3x am Tag regelt (0 Uhr, Nachmittags bzw. Morgens und Abends)

Bei mir meldet sich aktuell zwar das Thermostat alle 3 Minuten, jedoch fehlt die aktuelle Temperatur. Die kommt nur bei Ventiländerung...

Ich hab mal die Logs mit entsprechend niedrigem Level anbei...

Danke!
Gruß
Stefan



John

Hallo Stefan

das Attribut "keepAuto" darf auf keinen Fall gesetzt sein.

Wenn es aktiv ist, wird nämlich der Modus nicht mehr gewechselt.
Das ist das "AUS" für den Scanner der genau davon "lebt".

Ich schlage folgendes vor:

a. entferne 99_MaxScan.pm und starte FHEM neu

b. nun ändere den Modus an einem Thermostat von Auto->Manu oder umgekehrt um von Manu in den Auto Modus zu gelangen


set VT_WOZI desiredTemperature auto 20.0

oder umgekehrt via

set VT_WOZI desiredTemperature 20.0


Innerhalb von 3 Minuten sollte die Temperatur  vom Thermostat geschickt werden.
Nichts anderes macht im Prinzip der Scanner.

Erst wenn das funktioniert, kann auch der Scanner seine Arbeit tun.

John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP