Gelöst: Ofensteuerung Drooff fire+
-
- Beiträge: 296
- Registriert: 22. Sep 2018 10:38
Gelöst: Ofensteuerung Drooff fire+
Moin Gemeinde,
ich habe einen Kaminofen mit einer Abbrandsteuerung, die sich per WLAN / Browser steuern lässt:
https://www.drooff-kaminofen.de/de/umwe ... steuerung/
Hiermit lassen sich die Temperatur, Öffnung des Luftschiebers und der Feinzug auslesen, sowie der Ofen steuern.
Das müsste sich doch auch in OpenHAB einbinden lassen? Nur wie......??
ich habe einen Kaminofen mit einer Abbrandsteuerung, die sich per WLAN / Browser steuern lässt:
https://www.drooff-kaminofen.de/de/umwe ... steuerung/
Hiermit lassen sich die Temperatur, Öffnung des Luftschiebers und der Feinzug auslesen, sowie der Ofen steuern.
Das müsste sich doch auch in OpenHAB einbinden lassen? Nur wie......??
Zuletzt geändert von nw378 am 5. Dez 2024 11:36, insgesamt 2-mal geändert.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: eigenes Binding
Wenn es eine Webschnittstelle gibt, sollte das Auslesen kein Problem sein, ob Du steuern kannst, kommt vermutlich etwas darauf an, wie offen das System dafür ist (also wie die konkreten Steuerbefehle aussehen, ob man sie von openHAB aus leicht generieren kann).
Gesendet von iPad mit Tapatalk
Gesendet von iPad mit Tapatalk
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 296
- Registriert: 22. Sep 2018 10:38
Re: Drooff fire+
Ich greife das Thema nochmal auf, das meiste andere läuft inzwischen.
Der Ofen zeigt die Leistungsdaten per Web-App an, siehe Anhang.
Gerne möchte ich diese Daten (in diesem Bsp 23°C, 2% und -1,7 Pa) in OpenHAB integrieren.
Wie tun? mit dem HTTP Binding?
Der Quellcode der Seite sieht wie folgt aus:
Der Ofen zeigt die Leistungsdaten per Web-App an, siehe Anhang.
Gerne möchte ich diese Daten (in diesem Bsp 23°C, 2% und -1,7 Pa) in OpenHAB integrieren.
Wie tun? mit dem HTTP Binding?
Der Quellcode der Seite sieht wie folgt aus:
Code: Alles auswählen
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="IEP GmbH">
<meta name="description" content="">
<title>fire+</title>
<link rel="icon" type="image/png" sizes="32x32" href="favicon.ico">
<link rel="apple-touch-icon" sizes="57x57" href="icon/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="icon/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="icon/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="icon/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="icon/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="icon/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="icon/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="icon/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="icon/apple-icon-180x180.png">
<meta name="apple-mobile-web-app-title" content="fire+">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="css/my_eas.css" />
<link rel="stylesheet" href="css/eas.css" />
<link rel="stylesheet" href="css/jquery.mobile.icons-1.4.5.min.css" />
<link rel="stylesheet" href="css/jquery.mobile.structure-1.4.5.min.css" />
<link rel="stylesheet" href="css/jQMProgressBar.css" />
<link rel="manifest" href="manifest.json">
<meta name="msapplication-config" content="browserconfig.xml" />
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
<script language="javascript" type="text/javascript" src="js/jquery.mobile-1.4.5.min.js"></script>
<script language="javascript" type="text/javascript" src="js/sprache.js"></script>
<script language="javascript" type="text/javascript" src="js/raphael-2.1.4.min.js"></script>
<script language="javascript" type="text/javascript" src="js/justgage.js"></script>
<script language="javascript" type="text/javascript" src="js/jQMProgressBar.js"></script>
<script type="text/javascript">
/*
* Ofensteuerung fire+
*
* All rights reserved (C) IEP GmbH
*
* Kiefel Unternehmensgruppe GmbH & Co. KG
* Frankenberger Landstraße 4
* 09661 Rossau OT Seifersbach
*
*/
var SoftwareVersion = "1.3" ;
var Tmax ;
var g1 ;
var g2 ;
var g3 ;
var strPanelAlt ;
var ofs = 0 ;
var LEDcolor = 'rgba(8,8,8,1)' ;
var LEDblinkDone = false ;
var nIntervID ;
var refreshId ;
var FeinZugDa = true ;
var pbar ;
var pbarValue = 0 ;
var pbarValueMax = 900 ;
var AnheizenAktiv = false ;
// Wenn das Dokument geladen ist, werden alle 10 s neue Werte geholt
$(document).ready(function() {
SpracheUmschalten( "ger" ) ;
// Konfig Daten holen
LeseKonfig() ;
if ( strKonfig.length > 6 ) {
intKonfig = strKonfig.split("\n") ;
Tmax = parseInt( intKonfig[ 1 ] ) ;
pbarValueMax = parseInt( intKonfig[ 6 ] ) ;
}
if ( intKonfig[ 4 ] == 0) {
FeinZugDa = false
var breitePX = $( window ).width() ;
var breiteEM = $( breitePX ).toEm() ;
if ( breiteEM > 40 ) {
$('.ui-block-a.elem1').css( 'width', '49.9%' ) ;
$('.ui-block-b.elem1').css( 'width', '49.9%' ) ;
$('.ui-block-c.elem1').css( 'width', '0%' ) ;
}
}
g1 = new JustGage({
id: 'g1',
value: 20,
min: 0,
max: Tmax + 100,
title: "Temperatur",
symbol: '°C',
pointer: true,
gaugeWidthScale: 0.6,
customSectors: [{
color: '#b1200f',
lo: 0,
hi: Tmax-50
}, {
color: '#eb2a14',
lo: Tmax-50,
hi: Tmax
},
{
color: '#ff0000',
lo: Tmax,
hi: Tmax+100
}],
relativeGaugeSize: true,
counter: true
});
g2 = new JustGage({
id: 'g2',
value: 0,
min: 0,
max: 100,
title: "Luftschieber",
symbol: '%',
pointer: true,
gaugeWidthScale: 0.6,
customSectors: [{
color: '#3abd8d',
lo: 0,
hi: 100
}],
relativeGaugeSize: true,
counter: true
});
if ( FeinZugDa == true ) {
g3 = new JustGage({
id: 'g3',
value: 0,
min: -100,
max: 100,
decimals: 1,
title: "Feinzug",
symbol: ' Pa',
pointer: true,
gaugeWidthScale: 0.6,
customSectors: [{
color: '#bb9944',
lo: -100,
hi: 100
}],
relativeGaugeSize: true,
counter: true
});
}
// einmal am Anfang aufrufen, dann alle 1s
aktualisierePanel();
// Änderung des Sliderswertes, Daten an EAS senden
$("#Helligkeit").on("slidestop", function(e){
DataChange();
});
// alle 1 s die Daten per Ajax neu laden
refreshId = setInterval(function() {
aktualisierePanel();
}, 1000);
$.ajaxSetup({ cache: false });
});
function LeseKonfig() {
$.ajax({ type: "GET",
dataType: "json",
url: "php/easkonfig.php",
async: false,
success : function(konfigAntwort)
{
strKonfig = konfigAntwort ;
},
error: function( text ) {
alert( "Kommunikationsproblem Konfig zum Server!" );
}
});
}
function aktualisierePanel() {
$.ajax({ type: "GET",
dataType: "json",
url: "php/easpanel.php",
async: false,
success : function(panelAntwort)
{
strPanel = panelAntwort ;
},
error: function( text ) {
alert( "Kommunikationsproblem Panel zum Server!" );
}
});
SetzeButton();
}
function Ausschalten() {
if ( strled[0] == "aus" ) {
$.ajax({
type: "POST",
url: "php/Ausschalten.php",
cache: false,
data: {Ausschalten: "1"},
error: function( text ) {alert( "Ausschalten konnte nicht geschrieben werden!" );}
});
clearInterval( refreshId ) ;
clearInterval( nIntervID ) ;
/* Mauszeiger als Loader anzeigen */
var $this = $( this ),
theme = $this.jqmData( "theme" ) || $.mobile.loader.prototype.options.theme,
msgText = $this.jqmData( "msgtext" ) || $.mobile.loader.prototype.options.text,
textVisible = $this.jqmData( "textvisible" ) || $.mobile.loader.prototype.options.textVisible,
textonly = !!$this.jqmData( "textonly" );
html = $this.jqmData( "html" ) || "";
$.mobile.loading( "show", {
text: "Strom erst nach 20 Sekunden ausschalten!",
textVisible: true,
theme: theme,
textonly: false,
html: html
});
setTimeout(function (){
// nach 1 Minute weiter
$.mobile.loading( "hide" );
}, 60000);
}
else {
//create the popup markup
var html = CreatePopup("<i>fire+</i> ausschalten", "Die <i>fire+</i> kann nur im Standby ausgeschaltet werden!");
//append popup to DOM, tell jqm to enhance and initialize the popup
// and to remove the popup from DOM on close
$("#LEDAnzeige").append(html).find("#mypDialog").enhanceWithin().popup({
afterclose: function (event, ui) {
//remove from DOM on close
$("#mypDialog").remove();
}
}).popup("open", {
transition: "flip",
positionTo: "window"
});
//Add click handler for button in popup
$("#mypDialog").on("click", "#btnPopOK", function(){
$("#mypDialog").popup("close");
});
}
}
function CreatePopup(title, content){
var html = '<div data-role="popup" id="mypDialog" data-overlay-theme="b" data-theme="a" >';
html += '<div data-role="header"><h1>' + title + '</h1></div>';
html += '<div role="main" class="ui-content"> <h3 class="ui-title">' + content + '</h3><a id="btnPopOK" href="#" class="ui-btn ui-corner-all ui-shadow" data-transition="flip">OK</a></div>';
html += '</div>';
return html;
}
function SetzeButton() {
if ( strPanel.length > 13 ) {
if ( strPanel != strPanelAlt ) { // Nur bei Änderung neu schreiben
strPanelAlt = strPanel ;
intPanel = strPanel.split("\n") ;
intPanel.pop() ; // letzte Element ist leer, löschen
g1.refresh( parseFloat( intPanel[5] ) ) ;
g2.refresh( parseFloat( intPanel[6] ) ) ;
if ( FeinZugDa == true ) {
g3.refresh( parseFloat( intPanel[7] ) ) ;
}
showLED(intPanel[8], intPanel[9]) ;
pbarValue = parseInt( intPanel[12] );
pbar.setValue(pbarValue);
}
}
}
function showError(error) {
LEDcolor = 'rgba(230,0,0,';
switch (error) {
case "1" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 1: Temperaturfühler defekt? <a href="#popupErr1" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "2" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 2: Feinzugmessung defekt? <a href="#popupErr2" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "3" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 3: Luftschieber defekt? <a href="#popupErr3" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "4" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 4: Wahlschalter? <a href="#popupErr4" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "5" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 5: Kaminzug? <a href="#popupErr5" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "6" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 6: Luftschieber klemmt? <a href="#popupErr6" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "7" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 7: Temperaturfühler defekt? <a href="#popupErr7" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "8" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 8: Temperaturfühler defekt? <a href="#popupErr8" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "9" :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err 9: Kein Zug im Kamin! <a href="#popupErr9" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
default :
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Err ' + error + ': Unbekannter Fehler <a href="#popupErr99" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
}
if ( LEDblinkDone == false ){
LEDblinkDone = true ;
nIntervID = setInterval(function() {
$('#LEDAnzeige').css('background', LEDcolor + Math.abs( Math.sin(ofs) )+')' ) ;
ofs += 0.01 ;
}, 15 );
}
}
function showLED(led, error) {
var anzeige = document.getElementById("LEDAnzeige");
if ( error != 0 ){
showError( error ) ;
}
else {
strled = led.split(" ") ;
if ( strled[1] == "blinkt" ) {
switch ( strled[0] ){
case "Rot" :
case "Gruen": LEDcolor = 'rgba(51,153,51,';
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Anheizen <a href="#popupAnheizen" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
if ( strled[0] == "Gruen" && AnheizenAktiv == false ) {
pbar = jQMProgressBar('progressbar')
.setOuterTheme('a')
.setInnerTheme('a')
.isMini(false)
.setMax(pbarValueMax)
.setStartFrom(0)
.setInterval(10)
.showCounter(true)
.build();
pbarValue = 0;
AnheizenAktiv = true ;
$('#fortschritt').show();
}
break ;
case "Gelb" : LEDcolor = 'rgba(240,240,0,';
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Letzte Möglichkeit Nachlegen <a href="#popupNachlegenLast" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
}
if ( LEDblinkDone == false ){
LEDblinkDone = true ;
nIntervID = setInterval(function() {
$('#LEDAnzeige').css('background', LEDcolor + Math.abs( Math.sin(ofs) )+')' ) ;
ofs += 0.01 ;
}, 15 );
}
}
else {
AnheizenAktiv = false ;
$('#fortschritt').hide();
if ( LEDblinkDone == true ) {
LEDblinkDone = false ;
clearInterval( nIntervID ) ; // Timer stoppen
}
switch ( strled[0] ){
case "Gruen" : $('#LEDAnzeige').css('background', 'rgba(51,153,51,0.8)');
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Regelbetrieb <a href="#popupRegeln" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "Gelb" : $('#LEDAnzeige').css('background', 'rgba(240,240,0,0.8)');
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Holz nachlegen <a href="#popupNachlegen" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "Violett": $('#LEDAnzeige').css('background', 'rgba(204,0,204,0.6)');
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Gluterhaltung <a href="#popupGlut" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "Orange": $('#LEDAnzeige').css('background', 'rgba(255,165,0,0.8)');
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Glutabbrand <a href="#popupNachBrennen" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
case "aus" : $('#LEDAnzeige').css('background', 'rgba(233,233,233,1)');
$('#LEDAnzeige').html('<h1 class="ui-title" role="heading" aria-level="1">Standby <a href="#popupStandby" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>');
break ;
}
}
}
}
// aus der Breite in px einen EM-Wert berechnen
$.fn.toEm = function(settings){
settings = jQuery.extend({
scope: 'body'
}, settings);
var that = parseInt(this[0],10),
scopeTest = jQuery('<div style="display: none; font-size: 1em; margin: 0; padding:0; height: auto; line-height: 1; border:0;"> </div>').appendTo(settings.scope),
scopeVal = scopeTest.height();
scopeTest.remove();
return (that / scopeVal).toFixed(8) ;
};
$(window).resize( function() {
if ( FeinZugDa == false ) {
var breitePX = $( window ).width() ;
var breiteEM = $( breitePX ).toEm() ;
if ( breiteEM > 40 ) {
$('.ui-block-a.elem1').css( 'width', '49.9%' ) ;
$('.ui-block-b.elem1').css( 'width', '49.9%' ) ;
$('.ui-block-c.elem1').css( 'width', '0%' ) ;
}
else {
$('.ui-block-a.elem1').css( 'width', '100%' ) ;
$('.ui-block-b.elem1').css( 'width', '100%' ) ;
}
}
});
$(document)
.on('pageinit', "#home-page", function () {
pbar = jQMProgressBar('progressbar')
.setOuterTheme('a')
.setInnerTheme('a')
.isMini(false)
.setMax(300)
.setStartFrom(0)
.setInterval(10)
.showCounter(true)
.build();
$('#fortschritt').hide();
AnheizenAktiv = false ;
});
$(document)
.on('complete', '#progressbar', function () {
pbar.destroy();
$('#fortschritt').hide();
AnheizenAktiv = false ;
});
function DatenSchutz() {
window.location = "fireplus8.php" ;
}
function English() {
SpracheUmschalten('gb') ;
document.images["1"].src = "images/de-middle.gif" ;
document.images["2"].src = "images/gb-middle-grau.gif" ;
}
function Deutsch() {
SpracheUmschalten('ger') ;
document.images["1"].src = "images/de-middle-grau.gif" ;
document.images["2"].src = "images/gb-middle.gif" ;
}
</script>
</head>
<body>
<div data-role="page" id="home-page" data-theme="a" style="min-width:22em">
<div data-role="header">
<h1><i>fire</i>+</h1>
</div>
<div class="ui-grid-a" id="Sprache">
<div style="width:20%" class="ui-block-a">
<div class="ui-body" id="Logo">
<a href=https://www.drooff-kaminofen.de/ rel="external" target="_blank"><img src="images/DROOFF_Logo50.png" alt="Drooff Logo"/></a>
</div>
</div>
<div style="width:80%" class="ui-block-b">
<div class="ui-body">
<a style="float:right;margin-top:0.2em; margin-left:1em;padding: 0.2em;font-size:12.5px" href="#" onclick="DatenSchutz()" class="ui-btn">Datenschutz</a>
<a style="float:right;margin:4px" href="#" onclick="English()" id="English"><img src="images/gb-middle.gif" alt="english version"></a>
<a style="float:right;margin:4px" href="#" onclick="Deutsch()" id="Deutsch"><img src="images/de-middle-grau.gif" alt="deutsche Version"></a>
</div>
</div>
</div>
<div data-role="navbar" data-iconpos="top">
<ul>
<li><a href="#" data-icon="home" class="ui-btn-active" data-ajax="false">Home</a></li>
<li><a href="fireplus2.php" data-icon="edit" data-ajax="false">Bedienung</a></li>
<li><a href="fireplus1.php" data-icon="action" data-ajax="false">History</a></li>
<li><a href="fireplus3.php" data-icon="gear" data-ajax="false">Service</a></li>
</ul>
</div>
<div class="my-change3">
<div class="ui-block-a elem1">
<div class="ui-body">
<div id="g1" class="gauge"></div>
</div>
</div>
<div class="ui-block-b elem1">
<div class="ui-body">
<div id="g2" class="gauge"></div>
</div>
</div>
<div class="ui-block-c elem1">
<div class="ui-body">
<div id="g3" class="gauge"></div>
</div>
</div>
</div>
<div data-role="footer" id="LEDAnzeige">
<h1>Standby <a href="#popupStandby" data-rel="popup" data-transition="pop" class="my-tooltip-btn ui-corner-all ui-btn ui-alt-icon ui-nodisc-icon ui-btn-inline ui-icon-info ui-btn-icon-notext" title="Hilfe">Hilfe</a></h1>
<div data-role="popup" id="popupStandby" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Der Ofen ist aus und die <i>fire</i>+ Steuerung im Standby. Zum Anheizen bitte Holz auflegen, anzünden und die Ofentür schliessen.</p>
</div>
<div data-role="popup" id="popupRegeln" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Der Ofen ist im Regelbetreib, die <i>fire</i>+ Steuerung überwacht und optimiert den Abbrand entsprechend Ihren Vorgaben.</p>
</div>
<div data-role="popup" id="popupAnheizen" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Der Ofen heizt an. Die <i>fire</i>+ Steuerung überwacht das Anheizen.</p>
</div>
<div data-role="popup" id="popupNachlegen" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Sie sollten jetzt Holz nachlegen oder der Ofen geht aus.</p>
</div>
<div data-role="popup" id="popupNachlegenLast" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Wenn Sie jetzt kein Holz nachlegen, geht der Ofen aus.</p>
</div>
<div data-role="popup" id="popupGlut" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Der Ofen geht langsam aus, aber die Abgas-Temperatur beträgt noch über 100°C. Es bleibt Holzkohle zurück.</p>
</div>
<div data-role="popup" id="popupNachBrennen" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Der Ofen geht schnell aus, die Abgas-Temperatur beträgt noch über 100°C. Es bleibt nur wenig Asche zurück.</p>
</div>
<div data-role="popup" id="popupErr1" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Bitte prüfen Sie, ob der Temperaturfühler richtig eingesteckt ist. Wenn ja, ziehen Sie ihn einmal ab und stecken ihn wieder auf. Sollte der Fehler weiter anstehen, kontaktieren Sie bitte den Service.</p>
</div>
<div data-role="popup" id="popupErr2" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Bitte prüfen Sie, ob die Schläuche für die Druckmessung an der <i>fire</i>+ richtig aufgesteckt sind. Ist dies der Fall und der Fehler bleibt bestehen, kontaktieren Sie bitte den Service.</p>
</div>
<div data-role="popup" id="popupErr3" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Bitte bewegen Sie den Luftschieber einmal in jede Richtung. Bleibt der Fehler bestehen, kontaktieren Sie bitte den Service.</p>
</div>
<div data-role="popup" id="popupErr4" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Steht der Wahlschalter auf Service? Wenn ja, stellen Sie ihn auf ECO, Normal oder Power. Steht der Wahlschalter nicht auf Service,
überprüfen Sie die Verbindung zur <i>fire</i>+. Bleibt der Fehler bestehen, kontaktieren Sie bitte den Service.</p>
</div>
<div data-role="popup" id="popupErr5" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Kaminzug nicht mehr gegeben! <b>Es besteht die Gefahr, dass Abgas in die Wohnung strömt!</b> Dies kann mehrere Ursachen haben,
z.B.: <br/>- die Dunstabzugshaube läuft<br/>- die Lüftungsanlage hat einen Defekt<br/>- der Schornstein ist verstopft<br/>
- die Schläuche zum Messen des Drucks sind nicht richtig angeschlossen<br/>
Benutzen Sie den Ofen nicht mehr und kontaktieren Sie bitte den Service.</p>
</div>
<div data-role="popup" id="popupErr6" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Der Luftschieber klemmt, <i>fire</i>+ vom Stromnetz trennen und den Ofen von Hand fahren.<br>
Wenn der Ofen abgekühlt ist, den Luftschieber auf Leichtgängigkeit prüfen und die <i>fire</i>+ wieder einschalten.
Wenn das Problem weiterhin besteht, kontaktieren Sie bitte den Service.</p>
</div>
<div data-role="popup" id="popupErr7" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Bitte prüfen Sie, ob der Temperaturfühler richtig eingesteckt ist. Wenn ja, ziehen Sie ihn einmal ab und stecken ihn wieder auf. Sollte der Fehler weiter anstehen, kontaktieren Sie bitte den Service, die Regelung läuft nicht.</p>
</div>
<div data-role="popup" id="popupErr8" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Bitte prüfen Sie, ob der Temperaturfühler richtig eingesteckt ist. Wenn ja, ziehen Sie ihn einmal ab und stecken ihn wieder auf. Sollte der Fehler weiter anstehen, kontaktieren Sie bitte den Service.</p>
</div>
<div data-role="popup" id="popupErr9" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Es ist kein Zug im Kamin, oder die Druckmessung ist defekt. Bitte prüfen Sie, ob die Schläuche für die Zugmessung
an der <i>fire</i>+ richtig aufgesteckt sind. Wenn Sie den Kamin in Betrieb nehmen, obwohl kein ausreichender Zug
im Kamin herscht, <b>können Abgase in den Wohnraum strömen!</b> Beseitigen Sie bitte die Ursache, dies könnte z.B. sein:
<br/>- die Dunstabzugshaube läuft<br/>- die Lüftungsanlage hat einen Defekt<br/>- der Schornstein ist verstopft<br/>
oder setzen Sie sich mit dem Service in Verbindung!</p>
</div>
<div data-role="popup" id="popupErr99" class="ui-content" data-theme="a" style="max-width:400px;">
<p>Bitte kontaktieren Sie den Service unter Angabe der Fehlernummer.</p>
</div>
</div>
<div style="margin-top:40px" id="fortschritt">
<div >
<button style="background:rgba(233,233,233,1); border-color:rgba(233,233,233,1); margin-bottom:-10px" class="ui-btn">Anheizen fertig zu:</button>
</div>
<div id="progressbar"></div>
</div>
<div style="margin-top:40px" id="AusSchalten">
<button class="ui-btn ui-icon-power ui-btn-icon-top ui-nodisk-icon ui-alt-icon" onclick="Ausschalten();"><i>fire+</i> Ausschalten</button>
</div>
</div>
</body>
</html>
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Ofensteuerung Drooff fire+
Also, wie ich das sehe, ruft die Web-App im Wesentlichen einmal pro Sekunde eine URL auf, und zwar php/easpanel.php (davor fehlt natürlich noch die Adresse, über die das System erreichbar ist).
Versuch bitte mal, was ein Browser liefert, wenn Du das als Adresse angibst: http://192.168.x.y/php/easpanel.php. wobei x. und y von Deinem Netz abhängen... letztlich also die IP der Heizungssteuerung...
Bekommst Du eine Ausgabe, die ein JSON Objekt beinhaltet? (Kannst Du daran erkennen, dass es mit { anfängt und mit } endet).
Dann wäre das Auslesen eine reine Fingerübung.
Es kann natürlich sein, dass da noch mehr im Hintergrund passiert, was im Code der Seite nicht sichtbar ist (Zugangsbeschränkung usw.) das kann man mit entsprechendem Aufwand heraus finden, falls es mit der einfachen Variante kein Ergebnis gibt.
Gbit es ein JSON-Ergebnis, kannst Du es gerne mal als Beispiel posten, dann können wir die Daten extrahieren und diesen Vorgang anschließend mit openHAB automatisieren.
Versuch bitte mal, was ein Browser liefert, wenn Du das als Adresse angibst: http://192.168.x.y/php/easpanel.php. wobei x. und y von Deinem Netz abhängen... letztlich also die IP der Heizungssteuerung...
Bekommst Du eine Ausgabe, die ein JSON Objekt beinhaltet? (Kannst Du daran erkennen, dass es mit { anfängt und mit } endet).
Dann wäre das Auslesen eine reine Fingerübung.
Es kann natürlich sein, dass da noch mehr im Hintergrund passiert, was im Code der Seite nicht sichtbar ist (Zugangsbeschränkung usw.) das kann man mit entsprechendem Aufwand heraus finden, falls es mit der einfachen Variante kein Ergebnis gibt.
Gbit es ein JSON-Ergebnis, kannst Du es gerne mal als Beispiel posten, dann können wir die Daten extrahieren und diesen Vorgang anschließend mit openHAB automatisieren.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 296
- Registriert: 22. Sep 2018 10:38
Re: Ofensteuerung Drooff fire+
Ich glaube, so kommen wir der Sache näher.
Der .php Aufruf gibt folgendes zurück: "0\n1\n2\n4\n50\n24\n1.6\n-1.1\naus\n0\n1\n0\n0\n"
n24 dürfte die Temp sein, n2 der Luftschieber und n-1.1 der Unterdruck.
Der .php Aufruf gibt folgendes zurück: "0\n1\n2\n4\n50\n24\n1.6\n-1.1\naus\n0\n1\n0\n0\n"
n24 dürfte die Temp sein, n2 der Luftschieber und n-1.1 der Unterdruck.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Ofensteuerung Drooff fire+
Also, das \n dürfte ein Zeilenumbruch sein. Leider ist das kein JSON, aber immerhin.
Die einfachste Variante dürfte sein, das als String zu übernehmen. Du legst also ein http Thing an, mit der base URL bis inklusive dem ersten / nach der ip, dann legst Du einen String Channel an, bei dem Du die state url extension auf php/easpanel.php setzt. (Die Option ist unter show advanced zu finden). Als Aktualisierungszyklus möchte ich empfehlen, zunächst eher einen langen Wert zu nehmen, z.B. 60 Sekunden.
Nun brauchst Du zum Einen ein String Item, welches direkt mit dem Channel gekoppelt ist. Zum Anderen brauchst Du für jeden Wert, der Dich interessiert ein weiteres Item, welches im Idealfall zum Typ des Werts passt.
Und dann brauchst Du noch eine Rule, welche die Werte aus dem String extrahiert und in die passenden Items schreibt. Das ist nicht weiter schwer.
Ein erster Test:
Die einfachste Variante dürfte sein, das als String zu übernehmen. Du legst also ein http Thing an, mit der base URL bis inklusive dem ersten / nach der ip, dann legst Du einen String Channel an, bei dem Du die state url extension auf php/easpanel.php setzt. (Die Option ist unter show advanced zu finden). Als Aktualisierungszyklus möchte ich empfehlen, zunächst eher einen langen Wert zu nehmen, z.B. 60 Sekunden.
Nun brauchst Du zum Einen ein String Item, welches direkt mit dem Channel gekoppelt ist. Zum Anderen brauchst Du für jeden Wert, der Dich interessiert ein weiteres Item, welches im Idealfall zum Typ des Werts passt.
Und dann brauchst Du noch eine Rule, welche die Werte aus dem String extrahiert und in die passenden Items schreibt. Das ist nicht weiter schwer.
Ein erster Test:
Code: Alles auswählen
rule "fire plus"
when
Item firePlusInput received update
then
val String strData = firePlusInput.state.toString.split("\n") // eventuell muss der \ escaped werden, dann "\\n"
if(strData.size < 13) {
logWarn("firePlus","Ups! Da ist was schief gegangen! {}",firePlusInput.state.toString)
}
firePlus_Out1.postUpdate(strData.get(0))
firePlus_Out2.postUpdate(strData.get(1))
firePlus_Out3.postUpdate(strData.get(2))
firePlus_Out4.postUpdate(strData.get(3))
firePlus_Out5.postUpdate(strData.get(4))
firePlus_Out6.postUpdate(strData.get(5))
firePlus_Out7.postUpdate(strData.get(6))
firePlus_Out8.postUpdate(strData.get(7))
firePlus_Out9.postUpdate(strData.get(8))
firePlus_Out10.postUpdate(strData.get(9))
firePlus_Out11.postUpdate(strData.get(10))
firePlus_Out12.postUpdate(strData.get(11))
firePlus_Out13.postUpdate(strData.get(12))
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 296
- Registriert: 22. Sep 2018 10:38
Re: Ofensteuerung Drooff fire+
Wow, der erste Teil funktioniert perfekt, vielen lieben Dank!
Ich habe nun also ein String item "firePlusInput", dass "0\n1...." enthält.
Leider verursacht der split-Befehl noch einen Fehler:
Ich habe nun also ein String item "firePlusInput", dass "0\n1...." enthält.
Leider verursacht der split-Befehl noch einen Fehler:
Code: Alles auswählen
Type mismatch: cannot convert from String[] to String(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Ofensteuerung Drooff fire+
Es kann sein, dass die Definition da zu viel ist. Ändere mal bitte die Zeile ab:
dann sollte es passen... strData ist ja, streng genommen, ein Array...
Ach so... Natürlich müssen die Items alle definiert sein, zunächst einmal als String. Später kann man das dann umbauen
. Die Namen der Items müsste man natürlich auch noch anpassen.
Code: Alles auswählen
val strData = firePlusInput.state.toString.split("\n")
Ach so... Natürlich müssen die Items alle definiert sein, zunächst einmal als String. Später kann man das dann umbauen

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 296
- Registriert: 22. Sep 2018 10:38
Re: Ofensteuerung Drooff fire+
Es läuft! Die letzte Hürde war der Backslash, mit folgendem Workaround hat's geklappt:
Code: Alles auswählen
val strData = firePlusInput.state.toString.replace("\\","#").split("#n")
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Ofensteuerung Drooff fire+
Ja, replace ist natürlich auch eine Option.
Weiteres Vorgehen in meinen Augen wäre, die Zahlen als Zahlen in die Items zu schreiben. Dazu braucht es dann ein Int::parseInt(string) bzw. für die Kommawerte ein Float::parseFloat(string), damit das postUpdate den Wert auch als Zahl übergeben kann.
Bei dem einen Schaltwert (aus) könntest Du ein Switch Item nehmen und den Zustand mit einem ternären Operator if(string = "aus")OFF else ON zuweisen.
Es gibt auch noch eine weitere interessante Adresse im Code von oben, das ist php/easconfig.php, die vermutlich die Konfiguration herunterlädt. Wahrscheinlich wird aber auch da Ratespiel angesagt sein, um die Werte zuzuordnen.
Weiteres Vorgehen in meinen Augen wäre, die Zahlen als Zahlen in die Items zu schreiben. Dazu braucht es dann ein Int::parseInt(string) bzw. für die Kommawerte ein Float::parseFloat(string), damit das postUpdate den Wert auch als Zahl übergeben kann.
Bei dem einen Schaltwert (aus) könntest Du ein Switch Item nehmen und den Zustand mit einem ternären Operator if(string = "aus")OFF else ON zuweisen.
Es gibt auch noch eine weitere interessante Adresse im Code von oben, das ist php/easconfig.php, die vermutlich die Konfiguration herunterlädt. Wahrscheinlich wird aber auch da Ratespiel angesagt sein, um die Werte zuzuordnen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet