Modul weekprofile + FHEMWEB widget

Begonnen von Risiko, 23 Dezember 2015, 20:16:54

Vorheriges Thema - Nächstes Thema

Risiko

Zitat von: JoeALLb am 16 November 2016, 16:59:17
Hm, habs gerade nochmal mit einem DoIF versucht, damit klappts.. hab den Fehler aber noch nicht gefunden.. Sorry, sollte es eine Falschmeldung sein!
Also, ich kann keinen Fehler finden. Bei mir funktionieren die notfies.
z.B.

define NTF.saveweekprofile notify .*PROFILES_SAVED.* {Log3 $NAME, 1, "$NAME $EVENT";;}

hulzer

Zitat von: Risiko am 17 November 2016, 20:10:54
OK. Könntest du das als Patch anhängen (Datei)?
Wieso bei 4.5 und 30.5°C ?

Den Patch habe ich angehängt.

Bei MAX bedeutet 4.5°C = off und 30.5°C = on (Ventilöffnung bis maxValveSetting, also i.d.R. 100%).

YellowBall

Zitat von: Risiko am 25 Januar 2016, 18:28:22
Was meinst du bei "Schaltakturen von HomeMatic"??
Zu den DECT200 Thermostaten von AVM -  unterstützt das FHEM-Modul denn Wochenprofile? Konnte in den CommandRef (FBDECT?) nichts dahingehend finden.

Ich verwende Aktoren von Homematic um Garagentor, Alarmsirene usw. zu steuern und die AVM DECT 200 für die Steckdosen.
Kann das Modul Weekprofile mittlerweile auch diese Aktoren verwalten?
Raspi 0,1,2,3,4 | HMUART | Broadlink | Harmony | Xiaomi | Milight | Homematic | Somfy | Sonos | Meross  | Sonoff  | Shelly | Comet DECT  | ioBroker

JoeALLb

Ich habe mir ein Script geschrieben, das die Konfigurationsdatei für Homematic Thermostate erstellt und dann ganz normal über
die hm-module verwaltet und verteilt werden können. Mir ist die Verwaltung über das HM-Tool lieber und es läuft bei mir stabiler, als das direkte Senden der Werte an ein Device.

Am Schönsten wäre es natürlich, wenn dieses Script in das Modul direkt eingebunde werden würde, im Moment behelfe ich mir damit über ein notify.
Das Notify schreibt praktisch be jeder Änderung an einem Wochenprofil die ganze Template-Datei.

@Risiko: Wäre das denkbar, so etwas einzubauen? Ich denke dabei an 2 Attribute:
1. hmTemplatefile   #speichert den Pfad zur Datei
2. hmWriteTemplate # oder ähnlich, aktiviert das Script zum Schreiben der Datei beim klicken auf "Speichern" in einem Wochenprofil.

Wenn soetwas möglich ist, kann ich mein Script  (dessen Stil jedoch nicht allzu hübsch ist, das auch nicht allzu komplizier ist), gerne zur Verfügung stellen.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Risiko

#259
Zitat von: hulzer am 20 November 2016, 15:46:26
Den Patch habe ich angehängt.

Bei MAX bedeutet 4.5°C = off und 30.5°C = on (Ventilöffnung bis maxValveSetting, also i.d.R. 100%).
Also der patch\diff ist falsch herum. Habe es aber trotzdem mal zum Test eingebaut.
Es wird dann on\off aber in das Profil geschrieben und nicht 4.5 bzw 30.5. Somit würde bei Homematic on\off auch an das Device gesendet werden.
Ich habe in der Doku zu HM aber auf die Schnelle erstmal nix dazu gefunden. Daher würde ich es so erstmal noch nicht einbauen wollen. Sehe schon die Fehlermeldungen  ;)
Ich mach mir dazu nochmal Gedanke. Evtl. kann man es über ein Attribut im Modul aktivieren. Mal schauen.
Gibt es hier kein HM-User, der mal was dazu sagen könnte ?

Risiko

#260
Zitat von: JoeALLb am 21 November 2016, 09:44:20
Ich habe mir ein Script geschrieben, das die Konfigurationsdatei für Homematic Thermostate erstellt und dann ganz normal über
die hm-module verwaltet und verteilt werden können. Mir ist die Verwaltung über das HM-Tool lieber und es läuft bei mir stabiler, als das direkte Senden der Werte an ein Device.

Am Schönsten wäre es natürlich, wenn dieses Script in das Modul direkt eingebunde werden würde, im Moment behelfe ich mir damit über ein notify.
Das Notify schreibt praktisch be jeder Änderung an einem Wochenprofil die ganze Template-Datei.

@Risiko: Wäre das denkbar, so etwas einzubauen? Ich denke dabei an 2 Attribute:
1. hmTemplatefile   #speichert den Pfad zur Datei
2. hmWriteTemplate # oder ähnlich, aktiviert das Script zum Schreiben der Datei beim klicken auf "Speichern" in einem Wochenprofil.

Wenn soetwas möglich ist, kann ich mein Script  (dessen Stil jedoch nicht allzu hübsch ist, das auch nicht allzu komplizier ist), gerne zur Verfügung stellen.
Hallo.
Prinzipiell wäre da schon was machbar. Gefällt mir persönlich leider nicht so richtig.
Leider sind meine Bemühungen, mit martinp876 eine Lösung direkt mit HMInfo kommunizieren zu können, im Sand verlaufen. Das wäre für mich der richtigere Weg.
Was ist denn so schlecht an der notify-Lösung, gerade seit dem es das Event 'PROFILES_SAVED' gibt. Somit ist dies doch eine flexible Lösung!?




JoeALLb

Danke Risiko, mir wäre es integriert lieber, abe rnatürlich geht es auch so ohne Schwierigkeiten,

Anbei das Script, mit dem sich die Homematik-Templatefiles für HM-CC-RT-DN generieren lassen.

Sollte jemand einen schöneren Perl-Code daraus machen... immer her damit ;-)

Code für die 99_myUtils, hier bitte die Config-Datei anpassen: weekprofile-tempList.cfg

use JSON;

sub weekTemp($) { 
my ($DEVI) = @_;
my $entit = fhem("get $DEVI profile_names");;
my $ret="\#                  bis   Soll bis   Soll bis   Soll bis   Soll\n";;
my @lines = split /,/, $entit;;

foreach my $Raum (@lines)  {
    my $tmp = fhem("get $DEVI profile_data $Raum");;
    my $text = decode_json($tmp);;
    Log 1, "Heizmodus $Raum $tmp";
    $ret.="entities:".$Raum."\n".
    jpars($text,'Mon').jpars($text,'Tue').jpars($text,'Wed').jpars($text,'Thu').jpars($text,'Fri').jpars($text,'Sat').jpars($text,'Sun');;
  }

  open IMGFILE, '>'.'/opt/fhem/FHEM/weekprofile-tempList.cfg';;
    print IMGFILE $ret;;
  close IMGFILE;;
  return 0
}

sub jpars(%){
  my ($text,$Day) = @_;
  my $ret="tempList".$Day.">".
  $text->{$Day}{'time'}[0]." ".$text->{$Day}{'temp'}[0]." ".
  $text->{$Day}{'time'}[1]." ".$text->{$Day}{'temp'}[1]." ".
  $text->{$Day}{'time'}[2]." ".$text->{$Day}{'temp'}[2]." ".
  $text->{$Day}{'time'}[3]." ".$text->{$Day}{'temp'}[3]." ".
  $text->{$Day}{'time'}[4]." ".$text->{$Day}{'temp'}[4]." ".
  $text->{$Day}{'time'}[5]." ".$text->{$Day}{'temp'}[5]." ".
  $text->{$Day}{'time'}[6]." ".$text->{$Day}{'temp'}[6]." ".
  $text->{$Day}{'time'}[7]." ".$text->{$Day}{'temp'}[7]."\n";;
  return $ret;
}


Das Doif, das das Template generiert: (natürlich auch als notify möglich)
define Heizmodus DOIF ([HeizungWochenplan:"PROFILES_SAVED"])\
  ({weekTemp('HeizungWochenplan')})\
  ## Zeile zum Aktualisieren der Einträge im HM-Device\
(attr hm configTempFile FHEM/weekprofile-tempList.cfg)


Jede Änderung im Wochenprofil wird damit automatisch in die Datei geschrieben und kann mit
set hm tempList verify
kontrolliert bzw mit
set hm tempList restore
aktualisiert werden.
Das lässt sich dann auch schön in eine RG bringen um dort das Profil auszuwählen.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

hulzer

Zitat von: Risiko am 21 November 2016, 22:38:59
Also der patch\diff ist falsch herum. Habe es aber trotzdem mal zum Test eingebaut.
Es wird dann on\off aber in das Profil geschrieben und nicht 4.5 bzw 30.5.


Hallo Risiko,

danke, es funktioniert auch wenn man 4.5 bzw. 30.5 ins das Profil schreibt, wäre eventuell auch sauberer.

Allerdings ist mir noch aufgefallen, dass bei Kopieren von Profilen zu anderen Devices ein "Invalid temperature" vom 10_MAX gemeldet wird. Grund ist, dass vor dem send_to_device das Profil wieder ausgelesen wird und dort die beiden Werte nicht wieder modifiziert werden.

Ich habe einen Patch angehängt.

Gruß
Hulzer

Risiko

Ok. Sehe es mir nach meinem Urlaub mal an.

JoeALLb

Wie kopiere ich das Topic "default" in ein Wintertopic?
Habe keine Masterdevices definiert, und arbeitete bisher mit useTopics=0.
Nun möchte ich gerne mit den Topics spielen, und wollte dahei ein neues anlegen.
set xx copy_profile default Winter

--> Error unknown profile default

Was hab ich da falsch verstanden?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Risiko

Also wenn useTopics=0 ist, gibt es keine Topics.
Ansonsten:
set xx copy_profile default:default Winter:test
Kopiert das Default profile aus Topic default nach Topic Winter mit namen test
Also für für Quelle und Ziel immer topicname:profilname angeben.
Wenn useTopics=0 gesetzt ist, dann kann man den topicnamen weglassen.

Hoffe das hilft dir. ;)

JoeALLb

#266
Zitat von: Risiko am 20 Dezember 2016, 20:46:05
Also wenn useTopics=0 ist, gibt es keine Topics.
useTopics hatte ich zuerst auf 0, nun ist es 1.
Wenn ich
set xx copy_profile default:default Winter:test
eingebe, erhalte ich dennoch:
Error unknown profile default

und genau das verstehe ich eben nicht....


Edit1: Sorry, ziehe zurück:
Es heißt natürlich
set xx copy_profile default:Bad Winter:Bad
... alles ok, sorry!!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

kadettilac89

Hallo Risiko,

besten Dank für das schöne Modul. Ich bin umgestiegen da die Heizpläne schöne online im Browser editiert werden können. Ich habe dazu Fragen bzw. eine Bitte um Unterstützung.

Mein Setup ... mehrere HM-Thermostate. Ich sende die Wochenpläne an jedes Thermostat einzeln. Ich habe zwei Dinge die ich gerne hätte bzw. wissen möchte ob es irgendwie geht. Ich sende mit "set wp_wohnzimmer send_to_device Wohnzimmer_Urlaub" den Wochenplan "Urlaub" an den Heizkörper im Wohnzimmer.

1) Ich würde gerne in einem Reading oder im state sehen welches weekprofile gerade aktiv ist oder welches zuletzt mit "set" gesetzt wurde.
2) Zusätzlich wäre es gut, wenn im Widget das gesetzte weekprofile angezeigt wird anstatt "master". Mir wäre schon geholfen, wenn ich per Befehl sagen könnte, welches weekprofile im Widget angezeigt wird. Ich setze das sowieso schon per "set", ein weiterer Befehl wäre kein Problem.

Ich habe mehrere Bedingungen die meine weekprofile an die unterschiedlichen Heizkörper sendet. Zum Prüfen, welches aktuell im Heizkörper ist muss ich aktuell im Heizkörper selber lesen.

Wenn es (noch) nicht möglich ist und ich eine Änderung testen soll kannst du mir das auch so zukommen lassen bevor du etwas eincheckst.

Danke schon mal!

Risiko

Zitat von: kadettilac89 am 20 Dezember 2016, 21:28:03
1) Ich würde gerne in einem Reading oder im state sehen welches weekprofile gerade aktiv ist oder welches zuletzt mit "set" gesetzt wurde.
Was gerade aktiv ist, ist bei einem assoziierten Gerät immer das master Profil. Man kann ja das Profil vom assoziierten Device auch anderweitig verstellen und master passt sich an. Ich könnte mir nur ein Reading 'last_sended_profile' oder so vorstellen. Dieses muss aber nicht mehr aktiv sein, z.B. wenn man das Profil mit HMInfo verstellt hat.
Wenn du mit Topics arbeiten würdest, gibt es jetzt schon ein Reading 'active_topic'

Zitat von: kadettilac89 am 20 Dezember 2016, 21:28:03
2) Zusätzlich wäre es gut, wenn im Widget das gesetzte weekprofile angezeigt wird anstatt "master". Mir wäre schon geholfen, wenn ich per Befehl sagen könnte, welches weekprofile im Widget angezeigt wird. Ich setze das sowieso schon per "set", ein weiterer Befehl wäre kein Problem.
Siehe auch Punkt 1. Du kannst natürlich auch andere Profile anlegen.

Zitat von: kadettilac89 am 20 Dezember 2016, 21:28:03
Wenn es (noch) nicht möglich ist und ich eine Änderung testen soll kannst du mir das auch so zukommen lassen bevor du etwas eincheckst.
Danke fürs Angebot. Dazu müssen wir aber erstmal eine Lösung haben\diskutieren.

Risiko

Zitat von: hulzer am 06 Dezember 2016, 23:24:12

Hallo Risiko,

danke, es funktioniert auch wenn man 4.5 bzw. 30.5 ins das Profil schreibt, wäre eventuell auch sauberer.

Allerdings ist mir noch aufgefallen, dass bei Kopieren von Profilen zu anderen Devices ein "Invalid temperature" vom 10_MAX gemeldet wird. Grund ist, dass vor dem send_to_device das Profil wieder ausgelesen wird und dort die beiden Werte nicht wieder modifiziert werden.

Ich habe einen Patch angehängt.

Gruß
Hulzer
Hallo. Ich komme erst nächstes Jahr dazu. Würde das Ganze gern optional einbauen. Weiter sollte man die Temperaturen für on,off über Attribute statt fest im Code verstellen können.