Start in die Welt CCU2 und homeputer Studio - Version CL 4.0

Programmierung der HomeMatic CCU mittels contronics homeputer CL

Moderator: Co-Administratoren

AFi
Beiträge: 166
Registriert: 14.12.2016, 20:44

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von AFi » 28.06.2017, 21:42

Hi,

besten Dank, Makroauftrennung war die Lösung.

Gruß Axel

AFi
Beiträge: 166
Registriert: 14.12.2016, 20:44

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von AFi » 08.07.2017, 19:56

Hi,

steh mal wieder auf dem Schlauch.

Habe soeben die WebUI von von 2.25.X auf 2.27.8 upgedatet und jetzt geht nichts mehr, sämtliche Gerätekommunikationen sind
gestört (Hilfe), keine Änderungen an Software.

Gruß Axel

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von Familienvater » 08.07.2017, 20:06

Hi,

überwachst Du deinen Dutycycle? Der könnte beim Neustart gelitten haben, das sollte sich dann nach ca. 1h wieder einpendeln.
Ansonsten gab es mit nicht ganz aktuellen EE-Versionen Probleme, weil der Webserver auf der CCU "schärfer" gemacht wurde, und nicht mehr jeden fast richtigen Request beantwortet, das ist aber seit Monaten in den aktuellen EE gefixt.

Du hast glaube ich viele von den 8fach Batterie-Empfängern, die Kosten halt in solchen Situationen wertvolle Sendezeit, erstmal wenn die CCU startet, und dann nochmal, wenn die EE das gleiche Spiel macht, und alle anpingt. Und wahrscheinlich hast Du einfach nur ein Firmwareupdate gemacht, oder hast Du vorher bewusst die EE per Kontrolle-EE beendet? Ohne bewusstes Beenden der EE ist ein "geplanter" Neustart der CCU für die EE wie ein Stromausfall, die wird einfach aus dem Speicher gekickt, ohne vorher Variablen/Stati zu sichern, und funtk deshalb beim nächsten Neustart umso freudiger durch die Gegend.

Der Familienvater

AFi
Beiträge: 166
Registriert: 14.12.2016, 20:44

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von AFi » 08.07.2017, 21:12

Hi,

Familienvater, habe leider keine Überwachung des Dutycycle, gibt's da eine fertige Software (möchte nicht alles programmieren).

Wie richtig erkannt, ich habe diese blöden 8-fach Empfänger, dies wird eventuell das nächste Projekt für den Arduino um die Sendezeiten besser in Griff zu bekommen.

Falls ich morgen mit dem Arduino nicht weiter komme (derzeit kommt die Einbindung in CCU und HPCL) melde ich mich auf dem
anderen Thread.

Danke und Gruß
Axel

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von Familienvater » 08.07.2017, 22:36

Hi,

es gibt ganz einfache Scripte für die WebUI-Welt, um den Dutycycle abzufragen, aber auch die brutalst-einfache Möglichkeit, das einfach per per shell-Script zu machen gibt es, alles ist im Forum beschrieben, Suchwort: listBidcosInterfaces

Die einfachste Methode auf der CCU-Shell:

Code: Alles auswählen

echo 'load tclrpc.so; puts [xmlrpc http://127.0.0.1:2001/ listBidcosInterfaces ]'|tclsh| sed 's/{A/\nA/g'
Der Familienvater

Daimler
Beiträge: 9115
Registriert: 17.11.2012, 10:47
System: Alternative CCU (auf Basis OCCU)
Wohnort: Köln
Hat sich bedankt: 37 Mal
Danksagung erhalten: 283 Mal

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von Daimler » 09.07.2017, 10:02

Hi,

ausserdem solltest du in HPCL diese Einstellungen setzen, damit dir nicht jeder Projektneustart den DC nach oben haut - Sekunden musst du nach deinen Bedürfnissen anpassen.
HPCL_1.JPG
HPCL_1.JPG (23.35 KiB) 2469 mal betrachtet
Gruß Günter

pivccx mit 3.xx in Produktiv und Testsystem mit HM-, HM-W, HMIP- und HMIP-W Geräten, HPCx Studio 4.1,
L-Gateways, RS-L-Gateways, HAP, Drap, FHZ200x, vereinzelt noch FS2x-Komponenten.
HM / HM-IP: Zur Zeit knapp 300 Komponenten mit ??? Kanälen .

Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

AFi
Beiträge: 166
Registriert: 14.12.2016, 20:44

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von AFi » 09.07.2017, 10:18

Hi,

besten Dank für eure Antworten, bin gestern erst mal wieder auf die alte Firmware.

Die Einstellungen waren so eingestellt, bis auf den Zeitwert, der lag bei 120 s.

Werde erst das Arduino-Projekt beenden und dann die Firmware aktualisieren.

Gruß Axel

AFi
Beiträge: 166
Registriert: 14.12.2016, 20:44

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von AFi » 14.08.2017, 21:27

Hi,

das Arduino Projekt läuft inzwischen.

Ich beabsichtige nun das gesamte Projekt (Haussteuerung) in eine Form zu bringen, sodass es übersichtlicher wird. Dies bedeutet auch eine komplette Neuprogrammierung. Die Übersicht des derzeitigen Aufbaus lässt zu wünschen übrig, lernbedingt.

Ich beabsichtige das Projekt parallel auf einem 2ten Rechner aufzubauen um bis zur Beendigung immer wieder zurück auf die alte Programmierung zu gehen.

Nun zu meinen Fragen:
- ist es möglich eine Simulation durchzuführen ohne laufend Life zu arbeiten?
- welche Ratschläge gibt es?

Gruß Axel

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von Familienvater » 15.08.2017, 00:09

Hi,

ich weiß nicht, ob Deine Lernkurve schon am "abflachen" ist, oder ob Du nicht lieber noch ein paar weitere Erfahrungen sammeln solltest (ich weiß aber nicht, wie schlimm Deine jetzige Lösung ist).

Aus meiner jahrelangen Erfahrung mit Homeputer Studio für FS20 habe ich viel gelernt, und dann vor Jahren mit Homeputer CL neu "angefangen", wobei ich das besser machen wollte, was in meinem Erstlingswerk gestört hat, und das war vor allem die fehlende "Modularisierung" (und die Erfahrung, das Contronics irgendwann bei einem integrierten Befehl, den ich seeehr Häufig genutzt habe, was an den Parametern geändert hat, was mir damals sehr viel Umstände bereitet hat, weil ich in fast jedem Objekt zig Stellen anpassen musste...), heute habe ich alle wichtigen Funktionen "gekapselt", ich nutze mein eigenes mail-Makro von allen Objekten aus, und wenn z.B. Contronics irgendwann die Parameter von der HPCL-Mail-Funktion ändert, muss ich das genau an einer Stelle ändern.

Für mich mit das wichtigste ist die Erkenntnis gewesen, das es die SPG-Tools gibt, und das man sich nicht unbedingt im HPCL-Editor die Finger wund Klicken muss, allerdings haben auch die SPG-Tools so ihre Stolpersteine... Damit einhergehend gibt es auch die Möglichkeit, "gescheite" Editoren einzusetzen, die einem ggf. viel lästige Standard-Arbeit abnehmen.

Und auch wichtig für mich ist ein zuverlässiges, flexibles Logging, nur so ist im Fall der Fälle nachvollziehbar, warum etwas nicht so läuft, wie man sich das vorgestellt hat. In Verbindung mit den SPG-Tools und einem gescheiten (gepimpten) Editor gebe ich z.B. einfach nur dsysl<LEERTASTE> ein, und folgender Codeblock erscheint:

Code: Alles auswählen

if lngDebug > 0 then
  // ins Syslog schreiben
  syslog.optNoWrite := 1
  syslog.strMessage := ""
  syslog.strMessage := syslog.strMessage  + ""
  call syslog
endif
Fast jedes Modul/Makro/Objekt bei mir hat eine Variable lngDebug, und damit kann man fein Steuern, wieviel nachher im (eigenen) Log auftaucht, ggf. nutze ich in Makros, die um ein "HM-Gerät" herum nötig sind, dann auch das lngDebug vom eigentlichen Gerät.

Nach dem Logging kommt das "Stageing" (hochlauf) des Projekts, zu CCU1-Zeiten habe ich da noch viel mehr HokusPokus gemacht, weil z.B. bei/nach einem Stromausfall der CCU1 (die selbst Batteriegepuffert ist) die Netzwerkverbindung unwiderbringlich verloren ist, erst ein Neustart der CCU1 bringt das Netzwerk zurück, und damit z.B. meine NFS-Shares, auf der das Logging passiert und auch, auf der meine eigene zyklische Sicherung der Zustände von Objekten/Variablen erfolgt, außerdem war mein Projekt ursprünglich dafür ausgelegt, sowohl als PC-Version zu laufen oder auch auf der CCU1, alles über globale Settings, die dynamisch beim Start in Variablen eingelesen werden, immer berücksichtigend, ob der letzte Shutdown des Projekts ins Flash der CCU1 oder auf das NFS ging.
Die EE setzt soweit ich weiß erst die Variablen auf die optional angebenen STartwerte, dann wird ggf. die globale Variablensicherung von HPCL eingelesen, und dann kommt das erste Init-Makro, da startet mein Stageing, und es müssen eben globale Dinge wie z.B. das Logging "konfiguriert" werden, es werden einige globale Variablen die bei mir für die externe Kommunikation notwendig sind initialisiert, dann werden die eigenen gesicherten Zustände aus unterschiedlichen Dateien eingelesen, inkl. eines "ini-Files", es werden ggf. wieder Objekte auf Wait-Befehle gehängt, und evtl. fängt die EE im Hintergrund an, und liefert nach und nach die ersten Stati von Aktoren, die freiwillig senden, oder die nach ihrem Befinden gefragt wurden.

Das muss jeder für sich selbst entscheiden, wie viel Hokus-Pokus er da betreiben will, ich bin das von der täglichen Programmier-Arbeit gewohnt, das eine Software sich Stück für Stück initialisiert, und habe das halt so nachgebildet.

Über die lesewertdatei()-Funktion kann man ja wunderbar Objekt-Werte und auch Variablen-Vorbelegungen einlesen, und damit z.B. seine Debug-Variablen Modulabhängig initialisieren (hier mal Beispielhaft ein Teil meiner Ini):

Code: Alles auswählen

//**************************************************************************
// Globale Settings 
settings.CCUHostName=ccu2
settings.EMail=xyz@local.test
settings.SMS=888@vodafone.de
settings.Email2=zyx@local.test


//
const.strZahlen=Ein|Zwei|Drei|Vier|Fünf|Sechs|Sieben|Acht|Neun|Zehn|Elf|Zwölf

// Host-Name für GetCcuSysVar/SetCcuSysVar
// 2016-03-12: Achtung, auf CCU2: localhost ist unbekannter host! 
// http://homematic-forum.de/forum/viewtopic.php?f=19&t=17766&start=50#p145714
settings.SysVarHost=127.0.0.1

// curl von cuxd nehmen, ist eh drauf...
settings.CURL=LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl

// 0= KEIN Zeilenumbruch, 1=Unix, 2=Windows
settings.lngCrLfModus=1


// Syslog optional mit Zeilennummern
syslog.lngWithLineNumber=0
syslog.lngSysLogActive=1
syslog.lngFileActive=1


const.doubleQuote="
// const.strHTMLPfeilHoch="&uArr;"
// const.strHTMLPfeilRunter="&dArr;"
const.strHTMLPfeilHoch="&#8599;"
const.strHTMLPfeilRunter="&#8600;"

// Default für HPCL-Syslog (Wert auch in startup-vars)
v_SysLogLevelCL=3

// Default für History-Level (Wert auch in startup-vars)
v_HistoryLevelCL=2

// MasterPath kann alternativ auch ../../usr/local/homeputer/CL-2012.ini/ sein
settings.MasterPath=./CL-2012.ini/
settings.MasterPathUSB=./CL-2012.ini/
settings.MasterPathFlash=../../usr/local/homeputer/CL-2012.ini/

m_saveVariables.strFileName=saveVariables.txt
m_saveWiredTimer.strFileName=saveWiredTimer.txt
m_saveMinRecvDelta.strFileName=MinRecvDelta.txt
m_saveRolloSlider.strFileName=RolloSlider.txt
m_saveSwitches.strFileName=saveSwitches.txt
m_SaveBetriebsstunden.strFileName=saveBetriebStunden.txt
m_SaveStartUpVars.strFileName=saveStartUpVars.txt

// Array-Related
settings.DefaultArrayDelimiter=|
fArrAddElementFirst.lngDebug=0
fArrAddElementLast.lngDebug=0
fArrDelElement.lngDebug=0
fArrGetElement.lngDebug=0
fArrLimitSizeTo.lngDebug=0
fArrTextPos.lngDebug=0

//**************************************************************************
// Rolläden Global
fktCalcRolloZeit.lngDebugModule=0

//**************************************************************************
// Bewegungsmelder und Helligkeitssensoren Schaltschwellen

// Schwelle für anschalten ST_EG_GRILL
BW_Terrasse_West.lngDebug=0
BW_Terrasse_West.lngHelligkeit=90

// Schwelle für anschalten Deckenleuchte/Wandleuchte bei Bewegung
BW_Haustuer.lngDebug=0
BW_Haustuer.lngHelligkeit=100

// Helligkeitsschwelle für Einschalten Deckenleuchte Haustüre bis 22:30/23:00 Uhr
HS_Haustuer.lngSchwelle=100

// Helligkeitsschwelle für Einschalten Licht Briefkasten, Ausschalten Leuchten Haustür
HS_Terrasse_West.lngSchwelleBriefk=100
HS_Terrasse_West.lngSchwelleHaustuer=100

// default-Einstellung für Neustarts
swPumpeHeizkreis=auto
swPumpeHeizkreis.lngDebug=5


//**************************************************************************
// Erinnerung, das Holz nachgelegt werden könnte... mit 00:00:00 abschaltbar
PK_UG_Kamin.uhrWaitAfterLast=00:15:00
In die Datei kommt alles rein, was wichtig ist, die liegt auf einem NFS-Share im Netzwerk, die kann ich einfach über die Freigabe vom PC aus ändern, und beim nächsten Start der EE holt sich das Projekt die Basis-Einstellungen daraus.

Und dann gibt es eben andere Dateien, die "zyklisch" von der EE geschrieben werden, entweder nach Zeit (aufgelaufene Verbräuche/Werte bei Tageswechsel/usw), oder Eventgetriggert (Änderung an globalen Schaltern, Einstellungen), eben alles das, was bei einem unvorhergesehenen Neustart der EE so nah wie möglich am Zustand vor dem Neustart sein sollte.

Ich habe viel Aufwand reingesteckt, damit ich aus "Templates" automatisch Code-Files erstellen kann, z.B. für einen Rolladen-Aktor eines Fensters/Türe, der auch einen Drehgriff-Sensor hat, habe ich 13 Templates, die teilweise Code-Files für ein eigenständiges Objekt erstellen, oder Code an vorhandene Dateien zufügen
2017-08-14_23h44_44.png
2017-08-14_23h44_44.png (13.96 KiB) 2382 mal betrachtet
Wenn ich eine neue Funktion bei so einem "Device" brauche, dann muss ich einmal das/die Templates anpassen, auf den Knopf drücken, und nachher kommt 90% meines Projekts als Quellcodes für die SPG-Tools raus, 10% sind halt die einmaligen Dinge, die sich nicht "objektorientiert" abhandeln lassen, die werden aber auch nicht Template-basiert erstellt.
Ein zusätzliches WT ins Projekt einzubinden heißt nur, Gerät anlernen, in HPCL importieren, in HPCL ggfs. ein paar neue (hilfs-) Objekte erstellen (neue Objekte anlegen geht nur mit HPCL, nicht mit den SPG-Tools), und das WT entsprechend in meiner Templateverwaltung einbinden, ein paar Eigenschaften definieren, und dann auf den Magic-Button drücken, dann werden die Code-Files erzeugt, und die muss ich nur noch mit den SPG-Tools ins Projekt importieren, dann in HPCL compilieren, und übertragen, fertig. (ggf. halt noch die Visualisierung anpassen und evtl. die WebServer-CL Seiten erweitern).

Damit bin ich jetzt sehr schnell, wenn es darum geht, ein bereits vorhandenes "Device" zu kopieren, und entsprechend die Makros für Batterie-Leer, Kommunikationsstörung, Variablen/zustände sicherrn usw. werden automatisch mit erweitert. Es hat aber vorher unendlich viel Zeit gefressen, das Programm zu erstellen, was die Templates entsprechend umbaut. Und wenn ich einen Fehler in einem Template behebe, dann wird die Änderung automatisch an alle abhängigen Objekte weitergegeben (könnte HPCL selbst mehr "objektorientiert", dann bräuchte ich das nicht extern neu erfinden).

Genug geschockt für heute, wie gesagt, ich habe ca. 10 Jahre Erfahrung mit Homeputer Studio für FS20 gesammelt, und dann mein Wissen in das Homeputer CL Projekt geworfen, und ich habe auch gewisse Dinge schon im HPCL-Projekt in den letzten Jahren "komplett" geändert und neu/anders gemacht, so ist das halt.
Und mehr oder weniger verfolgt mich Programmieren jeden Tag auch auf der Arbeit, damit verdiene ich das Geld, um mir das Hobby leisten zu können.

Der Familienvater

AFi
Beiträge: 166
Registriert: 14.12.2016, 20:44

Re: Start in die Welt CCU2 und homeputer Studio - Version CL

Beitrag von AFi » 15.08.2017, 21:03

Hi Familienvater,

vielen Dank für die ausführliche Inspiration, wenn ich den letzten Satz lese, wird mir auch klar warum ich nicht immer alles verstehe, da Du in einer anderen Sprachsphäre lebst. Man möge mir verzeihen, aber ich bin kein Programmierer.

So, nun zu einer möglichen Vereinfachung über objektorientierte Programmierung. Für meine Rollos verwende ich immer wieder diesen Programmiercode:

Code: Alles auswählen

	wenn K_012EG_WZ_RolloFe_z_Ga_AM = 1 dann
		Setzewert(K_012EG_WZ_RolloFe_z_Ga_ab,"EINSCHALTZEIT",2)
		K_012EG_WZ_RolloFe_z_Ga_ab einschalten für "00:00:02"
		warte("00:00:05")
	endewenn
Zur Erinnerung, jeder Rollo hat einen Gurtwickler GW60 mit hm-mod-re8 (ein pin für auf und einer für ab).
K_012..........._AM Schalter (Objekt) zu Einschaltung von AUTO und MANUELL (bedeutet in Steuerung, morgens auf, abends ab, Sonnenschutz etc)
K_012..........._ab Schalter (Objekt) für ab (da gibt es noch das Gegenobjekt ......._auf)

Wenn ich jetzt diese Wenn-Abfrage als Objekt für alle Rollos machen möchte, so müsste ich die Möglichkeit haben alle Rollos damit anzusprechen über z.B. :
Do ....while
For i=.... to ....
und bräuchte ein Array für die Objektnamen der Rollo.

Geht dies in HPCL überhaupt?

Gruß Axel

Antworten

Zurück zu „homeputer CL“