@glasfaser Danke, scheint es gewesen zu sein. Setup von der Web Instanz sieht aber jetzt anders aus
Checkbox Reine Web Sockets verwenden habe ich gesetzt, damit geht es jetzt.
Mit Websocket sieht es so aus und geht auch
@glasfaser Danke, scheint es gewesen zu sein. Setup von der Web Instanz sieht aber jetzt anders aus
Checkbox Reine Web Sockets verwenden habe ich gesetzt, damit geht es jetzt.
Mit Websocket sieht es so aus und geht auch
Es gibt zwar den Adapter ShutterControl, der war mir aber für meine Zwecke nicht geeignet.
Ich will je nach Sonnen-Azimuth verschiedene Sektoren vom Haus mit den Rollo abschatten.
Für die Ermittlung der Sektionen gibt es www.sonnenverlauf.de.
Man sucht sein Haus und verändert auf der Zeitachse dann die Position der Sonne. Dann die Anfangs und Endwerte des Azimuth notieren und in die Konstanten der Sektionen eintragen.
Außerdem wird der Adapter Weatherunderground benötigt sowie suncalc.
Um den Sonnenstand zuberechen :
function today () {
var d = new Date();
return (formatDate(d, "TT.MM.JJJJ SS:mm:ss"));
}
function Sonnenstand_berechnen () {
var now = new Date();
var sunpos = suncalc.getPosition(now, lat, long);
var h = sunpos.altitude * 180 / Math.PI;
var a = sunpos.azimuth * 180 / Math.PI + 180;
setState(idEle, Math.round(10 * h) / 10, true);
setState(idAzi, Math.round(a), true);
var heute = today(); // aktuelles Datum und aktuelle Zeit
setState(idTime,heute);
}
schedule("* * * * *", Sonnenstand_berechnen); // jede Minute
Shutter Control Script :
Das Script verwendet eine Liste der Sektionen, in der Begin und Ende des Azimuth deklariert wird.
Die Sektionenliste kann erweitert oder verkleinert werden, je nach Bedarf.
Die Funktion ScheduleOneSection berechnet dann ob die Rollos runtergefahren werden :
Wenn Temperatur größer als die Min Temperatur ist.
Wenn die Sektion innerhalb der Grenzen liegt
Wenn die Bewölkung in den nächsten 4 Stunden unter der definierten Mindestgrenze liegt.
Rollo wieder rauf, wenn Sonnenstand außerhalb der Sektion oder Bewölkung über der max. Grenze.
Wenn kein Aussentemperatur Sensor vorhanden ist, kann auch die Temperatur von der Wettervorhersage verwendet werden.
Das Script bewegt die Rollo nur einmal, man kann also manuell auch die Rollo verdunkeln oder rauffahren.
// Sonnenstand
// Ost = 100° bis 210° (ca. 9:00 bis 14:00)
// Süd = Dach 150° bis 270° (ca. 12:00 bis 18:00)
// Wand 180° bis 270° (ca. 13:00 bis 18:00)
// schedule nach Sonnenstand Azimuth
// wenn Ost, dann alle Rollos auf Ostseite runterfahren auf Abschattung
// wenn Süd, dann alle Rollos auf Südseite runterfahren auf Abschattung
// Sonnenstand wurde mit www.sonnenverlauf.de ermittelt
// Script benötigt noch die Adapter Weatherunderground sowie suncalc
const idAzi = 'javascript.0.Sonnenstand.Azimut';
const AussenTemp = 'hm-rega.0.8536';
const cAziOstBegin = 100;
const cAziOstEnd = 210;
const cAziSuedDachBegin = 150;
const cAziSuedDachEnd = 270;
const cAziSuedWandBegin = 180;
const cAziSuedWandEnd = 270;
const idOstActive = "SonnenRollo.Ost.Active";
const idOstEnabled = "SonnenRollo.Ost.Enabled";
const idOstBeginAzi = "SonnenRollo.Ost.BeginAzi";
const idOstEndAzi = "SonnenRollo.Ost.MaxAzi";
const idSuedDachActive = "SonnenRollo.Sued.Dach.Active";
const idSuedDachEnabled = "SonnenRollo.Sued.Dach.Enabled";
const idSuedDachBeginAzi = "SonnenRollo.Sued.Dach.BeginAzi";
const idSuedDachEndAzi = "SonnenRollo.Sued.Dach.EndAzi";
const idSuedWandActive = "SonnenRollo.Sued.Wand.Active";
const idSuedWandEnabled = "SonnenRollo.Sued.Wand.Enabled";
const idSuedWandBeginAzi = "SonnenRollo.Sued.Wand.BeginAzi";
const idSuedWandEndAzi = "SonnenRollo.Sued.Wand.EndAzi";
const idCloudp = "SonnenRollo.Cloudp";
const idMaxCloudp = "SonnenRollo.MaxCloudp";
const idAussenTempMin = "SonnenRollo.MinAussenTemp";
const cAussenTempMin = 20.0;
const cMaxCloudp = 30;
const idCloud0h = 'weatherunderground.0.forecastHourly.0h.sky';
const idCloud1h = 'weatherunderground.0.forecastHourly.1h.sky';
const idCloud2h = 'weatherunderground.0.forecastHourly.2h.sky';
const idCloud3h = 'weatherunderground.0.forecastHourly.3h.sky';
const creatStateList = [
{name :idOstEnabled, initial:false, type:"boolean", role : "value"},
{name :idOstActive, initial:false, type:"boolean", role : "value"},
{name :idOstBeginAzi, initial:cAziOstBegin, type:"number", role : "value"},
{name :idOstEndAzi, initial:cAziOstEnd, type:"number", role : "value"},
{name :idSuedDachEnabled, initial:false, type:"boolean", role : "value"},
{name :idSuedDachActive, initial:false, type:"boolean", role : "value"},
{name :idSuedDachBeginAzi, initial:cAziSuedDachBegin, type:"number", role : "value"},
{name :idSuedDachEndAzi, initial:cAziSuedDachEnd, type:"number", role : "value"},
{name :idSuedWandEnabled, initial:false, type:"boolean", role : "value"},
{name :idSuedWandActive, initial:false, type:"boolean", role : "value"},
{name :idSuedWandBeginAzi, initial:cAziSuedWandBegin, type:"number", role : "value"},
{name :idSuedWandEndAzi, initial:cAziSuedWandEnd, type:"number", role : "value"},
{name :idCloudp, initial:0, type:"number", role : "value"},
{name :idMaxCloudp, initial:cMaxCloudp, type:"number", role : "value"},
{name :idAussenTempMin, initial:cAussenTempMin, type:"number", role : "value"},
]
creatStateList.forEach (function(item) {
createState(item.name, item.initial, {
type: item.type,
min: 0,
def: 0,
role: item.role
});
});
// Liste aller Rollos in den Sektionen
// Ost
const idRolloWohn1 = 'hm-rpc.0.HEQ0226186.1.LEVEL';
const idRolloWohn2 = 'hm-rpc.0.HEQ0226973.1.LEVEL';
const idRolloTuerGast = 'hm-rpc.1.LEQ0474520.3.LEVEL';
const idRolloTuerBibliothek = 'hm-rpc.1.LEQ0474515.3.LEVEL';
const OstRolloRunterList = [
{name :idRolloWohn1, value:65},
{name :idRolloWohn2, value:65},
{name :idRolloTuerGast, value:65},
{name :idRolloTuerBibliothek, value:47}
]
const OstRolloRaufList = [
{name :idRolloWohn1, value:100},
{name :idRolloWohn2, value:100},
{name :idRolloTuerGast, value:100},
{name :idRolloTuerBibliothek, value:100}
]
// Sued
// Dach
const idRolloDFFBibliothek = 'hm-rpc.1.EEQ0049007.3.LEVEL';
const idRolloDFFBibliothekState = 'hm-rpc.0.LEQ0173556.1.STATE';
const idRolloDFFWernerBuero = 'hm-rpc.1.EEQ0048996.3.LEVEL';
const idRolloDFFWernerBueroState = 'hm-rpc.0.LEQ0174059.1.STATE';
const idRolloDFFAngelikaBuero = 'hm-rpc.1.EEQ0048971.3.LEVEL';
const idRolloDFFAngelikaBueroState = 'hm-rpc.0.LEQ0173973.1.STATE';
const SuedDachRolloRunterList = [
{name :idRolloDFFBibliothek, value:30, state:idRolloDFFBibliothekState},
{name :idRolloDFFWernerBuero, value:30, state:idRolloDFFWernerBueroState},
{name :idRolloDFFAngelikaBuero, value:30, state:idRolloDFFAngelikaBueroState}
]
const SuedDachRolloRaufList = [
{name :idRolloDFFBibliothek, value:100, state:idRolloDFFBibliothekState},
{name :idRolloDFFWernerBuero, value:100, state:idRolloDFFWernerBueroState},
{name :idRolloDFFAngelikaBuero, value:100, state:idRolloDFFAngelikaBueroState}
]
// Wand
const idRolloKueche = 'hm-rpc.0.IEQ0018796.1.LEVEL';
const idRolloSchlaf = 'hm-rpc.0.HEQ0226866.1.LEVEL';
const SuedWandRolloRunterList = [
{name :idRolloKueche, value:40},
{name :idRolloSchlaf, value:25}
]
const SuedWandRolloRaufList = [
{name :idRolloKueche, value:100},
{name :idRolloSchlaf, value:100}
]
// Rollo bewegen, je nach ActionList
// Bei Kipp-Fenster wird der Fenstersensor ausgewertet (wenn state vorhanden) ->
// keine Bewegung wenn Fenster offen
function RolloAction (ActionList) {
ActionList.forEach (function(item) {
let doIt = true;
if (item.state) {
doIt = !getState(item.state).val;
}
if (doIt==true) setState (item.name,item.value);
});
};
// Mittelwert der Bewölkung für die nächsten 4 Stunden
function getCloudPercent() {
let c = getState (idCloud0h).val+getState (idCloud1h).val+getState (idCloud2h).val+getState (idCloud3h).val;
c /=4;
return (c);
}
const SectionList = [
{name:'Ost',Enabled:idOstEnabled,Active:idOstActive,RolloRunterList:OstRolloRunterList,
RolloRaufList:OstRolloRaufList,AziBegin:idOstBeginAzi,AziEnd:idOstEndAzi},
{name:'SuedDach',Enabled:idSuedDachEnabled,Active:idSuedDachActive,RolloRunterList:SuedDachRolloRunterList,
RolloRaufList:SuedDachRolloRaufList,AziBegin:idSuedDachBeginAzi,AziEnd:idSuedDachEndAzi},
{name:'SuedWand',Enabled:idSuedWandEnabled,Active:idSuedWandActive,RolloRunterList:SuedWandRolloRunterList,
RolloRaufList:SuedWandRolloRaufList,AziBegin:idSuedWandBeginAzi,AziEnd:idSuedWandEndAzi}
];
function ScheduleOneSection(ThisSection) {
let Azi=getState (idAzi).val;
let Temp=getState (AussenTemp).val;
let cloudp = getCloudPercent();
let maxCloudp = getState (idMaxCloudp).val;
let AussenTempMin = getState (idAussenTempMin).val;
let AziBegin =getState(ThisSection.AziBegin).val;
let AziEnd =getState(ThisSection.AziEnd).val;
let Enabled = getState (ThisSection.Enabled).val;
setState (idCloudp,cloudp);
let Active=getState (ThisSection.Active).val;
if (Enabled) {
if ((Azi>=AziBegin) && (Azi<AziEnd))
{
if (cloudp<maxCloudp) {
if ((Temp>=AussenTempMin) && (Active == false)) {
Active = true;
setState(ThisSection.Active,Active);
// Rollo runter
RolloAction(ThisSection.RolloRunterList);
}
}
}
if (Active==true) {
if ((Azi>AziEnd) || (cloudp>maxCloudp)) {
// Rollo rauf
Active = false;
setState(ThisSection.Active,Active);
RolloAction(ThisSection.RolloRaufList);
}
}
}
}
function ScheduleAllSections() {
SectionList.forEach (function(item) {
ScheduleOneSection(item);
});
}
on({id: idAzi , change:'ne'}, function (obj) {
ScheduleAllSections();
});
Hier kann ich die einzelnen Sektionen enablen/disablen
@haselchen Ich habe ein Issue erstellt unter :
https://github.com/ioBroker/ioBroker.ws/issues/14#issuecomment-1182780282
Apollon77 hat dies gestern als Bug gekennzeichnet.
Hier stelle ich euch einen neu entwickelten Heizungs-Controller vor.
Dieser Controller kann bis zu 12 HmIP-VDMot (ELV) Heizungssteller ansteuern.
Dies sind Motoren, keine thermo-elektrische Ventile.
Vorteil: wenig Stromverbrauch, da nur dann Strom benötigt wird, wenn sich der Motor bewegt.
Wer basteln mag : es können auch Eqiva_Modell_N verwendet werden, dann müssen die Kabel aber verlötet werden.
Die Platine hat die Westernbuchsen, die direkt für HmIP-VDMot passen.
Das Design verwendet ein back EMF circuit, um die Umdrehungen des Motors zu zählen.
Dadurch wird eine genaue Stellposition erreicht, im Gegensatz zu einer Zeitmessung.
Ausserdem sind bis zu 35 1-Wire Temperatur Sensoren (DS18B20) anschließbar.
Zwei Sensoren können jeweils einem Ventil zugeordnet werden (je nach dem Anwendungsfall) ,
die anderen sind frei verfügbar. also max. 35 frei verfügbare Sensoren.
Der Controller besteht aus einem WTH-32 Modul (LAN und WLAN, Autodetect) für die UI und einem STM32 Blackpill für
die Hardware-Ansteuerung. Die Platine passt in das Hutschienen Leergehäuse APRA DB9 OBK.
Das Modul kann sowohl für Fussboden-Heizung , wie auch für Radiatoren verwendet werden.
Gesteuert kann das Ganze über MQTT oder JSON - Api.
Wer es ganz rudimentär mag, der STM32 kann auch über serielle Schnittstelle gesteuert werden, ohne WTH-32.
Dann entfallen aber die meisten Einstellmöglichkeiten.
Software Update vom WTH-32 und STM32 wird über die Website des WTH-32 gemacht.
Entwickelt hat es Lenti84 (Hardware und Software für den STM32) und ich (Software für WTH-32 und die UI)
Weitere Infos unter :
https://github.com/Lenti84/VdMot_Controller
(Branch developer)
Hardware Modul:
Hier zwei Webseiten, es gibt noch die Home, Network, About, WTH-32 Update und STM32 Update
Statusseite :
Konfiguration:
Anleitung zur Installation :
https://github.com/Lenti84/VdMot_Controller/wiki/FAQ#installation
Telegram Chat Gruppe auf :
https://t.me/+P0_VMEDQ8NMzZTUy
<10.11.2024>
Neue Version : Es gibt für den WTH und für den STM eine neue Version V1.4.4 (WTH) , die V1.4.0 vom STM bleibt.
Ihr könnt Euch die neue Versionen von meinem Git runterladen :
https://github.com/SurfGargano/VdMot_Controller/releases/tag/1.4.4
(Unter Assets einfach auf die Files klicken, dann werden diese in den Download Ordner runtergeladen)
Änderungen :
@andreas-kerzel Bin grad drüber gestolpert, weil ich das auch brauchte. Im Editor bleibt es immer grün, jedoch in der Vis Anzeige ist es dann richtig
@xelarep Starte mal die js-Instanz neu unter Instanzen
@mick70 Wer mag , kann in Zeile 127 vom main.js den error log in warn ändern.
this.log.error(`Connection issue occurred ${error}`);
this.log.warn(`Connection issue occurred ${error}`);
Die Datei befindet sich hier :
/opt/iobroker/node_modules/iobroker.bambulab
Dann die Log Stufe auf error stellen . Fehlermeldungen kommen dann immer noch durch aber nicht mehr Connection Fehler.
Ich habe mal dazu ein Issue erstellt.
@jayjojayson Mein Lieblingsthema : Javascript Adapter wird immer restriktiver und was früher durchging, wirft jetzt einen Fehler. Bitte auf die neueste Version vom NSPanel mit Lovelace UI updaten.
@ahnungsbefreit Du musst es anlernen. Dazu den _Learn Datenpunkt auf true setzen und dann an der Fernbedienung die entsprechenden Tasten drücken , die Du haben willst.
Unter dem Datenpunkt "L" erscheinen dann die Codes.
Setzen dieser Codes schickt dann der Broadlink das Telegramm
@armilar so habe ich es auch mit den Indicator für Fenster/Garage/Mähroboter/PV/Wetteralarm.
Zusätzlich komme ich mit einem Klick auf den Indikator Icon auf die entsprechende Seite. Ohne viel Blättern .
Wenn sich das Chart aktualisiert, wird oben ein laufender Balken eingeblendet. Dadurch verschiebt sich das Chart kurz ein Stück nach unten. Also ein Zucken nach unten.
Kann ich diese Zucken unterbinden ?
Hast Du die Files als Raw Files runtergeladen? Wenn nicht, dann sind die Files größer. Unter Relases/Latest sind immer die aktuellen bin Files
@ckhx78 Hi,
ich habe inzwischen Antwort vom Daniel :
Mit
"valueId": "Relaismodus5",
"valueIndex": 501,
"value": 2
sollte das Relais 5 in den Handbetrieb gehen.
Daniel hat sich einen COSMO Multi geliehen, auf der eine Firmware-Version 1.05 und damit probiert.
Re: ioBroker App 2023 [Android & iOS] - jetzt erhältlich Aktuelle Test Version | x.x.x |
---|---|
Veröffentlichungsdatum | xx.xx.xxxx |
Github Link | https://github.com/xxx |
In der Android IoBroker Visu kann man ja mit 3 Finger Tippen in die Konfiguration gehen.
Geht das auch mit dem Android Emulator Bluestacks ? Wenn ja, wie.
Viele Grüße
@axel-koeneke von welchem Git? Das was ich angegeben hab ? Ich habs mit normalem Esp32 Einstellung geflasht
@axel-koeneke Habs gerade probiert :
Aus dem Git :
für Bootloader etc.
https://github.com/SurfGargano/VdMot_Controller/tree/developer/software_esp32
Für Firmware
https://github.com/SurfGargano/VdMot_Controller/tree/developer/releases/WTH32/1.4.2_Dev
Wo hast Du die Files her ?
@axel-koeneke sagte in Neu entwickelter Heizungs-Controller für ELV HmIP-VDMot:
Patitions.bin
Liegt auf meinem Git
@sevensworld sagte in Neu entwickelter Heizungs-Controller für ELV HmIP-VDMot:
HA mit separatem Mosquitto
Dann bitte unbedingt in der Konfig 'strict seperate topics' einstellen.
Mosquito kommt mit gleichem Topic für Lesen und Schreiben nicht zurecht.
https://github.com/Lenti84/VdMot_Controller/wiki/MQTT
Ich empfehle auch Dir ins Telegram zu schauen. Link ist ganz oben
@sevensworld sagte in Neu entwickelter Heizungs-Controller für ELV HmIP-VDMot:
Aber was ist mit den beiden angesprochenen Punkten? Das mit dem Target ist mir eigentlich egal aber die aktuelle Ventilstellung wird nicht mehr gesendet?
Die aktuelle Ventilstellung ist auf
StationName.valves.ValveName.target (lesen und schreiben)
actual ist entfallen.
Hast Du IOBroker oder HA mit Mosquito ?