Temperature group chart

Hi,

I’m struggling with the configuration of a simple example where the sitemap presents a chart of a group of temperature sensors, two specifically. I am using rrd4j to store values, and set the everyMinute to the group as read over multiple tutorials/examples, but when I open the webpage the chart is empty and the log (in debug mode) shows:

18:20:08.503 [INFO ] [ui.internal.chart.ChartServlet:251  ] - Illegal argument in chart: {}
java.lang.IllegalArgumentException: Series name >Temperature < has already been used. Use unique names for each series!!!
	at com.xeiam.xchart.internal.chartpart.AxisPair.addSeries(AxisPair.java:123) ~[na:na]
	at com.xeiam.xchart.Chart.addSeries(Chart.java:115) ~[na:na]
	at org.openhab.ui.internal.chart.DefaultChartProvider.addItem(DefaultChartProvider.java:354) ~[na:na]
	at org.openhab.ui.internal.chart.DefaultChartProvider.createChart(DefaultChartProvider.java:197) ~[na:na]
	at org.openhab.ui.internal.chart.ChartServlet.doGet(ChartServlet.java:245) ~[na:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) [javax.servlet_3.0.0.v201112011016.jar:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) [javax.servlet_3.0.0.v201112011016.jar:na]
	at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) [org.eclipse.equinox.http.servlet_1.1.300.v20120522-1841.jar:na]
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) [org.eclipse.equinox.http.servlet_1.1.300.v20120522-1841.jar:na]
	at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60) [org.eclipse.equinox.http.servlet_1.1.300.v20120522-1841.jar:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) [javax.servlet_3.0.0.v201112011016.jar:na]
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:598) [org.eclipse.jetty.servlet_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:486) [org.eclipse.jetty.servlet_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413) [org.eclipse.jetty.servlet_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.Server.handle(Server.java:350) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:890) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:944) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:630) [org.eclipse.jetty.http_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230) [org.eclipse.jetty.http_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77) [org.eclipse.jetty.server_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.io.nio.SslConnection.handle(SslConnection.java:191) [org.eclipse.jetty.io_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:606) [org.eclipse.jetty.io_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46) [org.eclipse.jetty.io_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) [org.eclipse.jetty.util_8.1.3.v20120522.jar:8.1.3.v20120522]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) [org.eclipse.jetty.util_8.1.3.v20120522.jar:8.1.3.v20120522]
	at java.lang.Thread.run(Thread.java:744) [na:1.8.0]

Could anyone throw any light? My version is 1.7.1 and my config files are like this:

default.items

Group							gCasaML			"CasaML"							<groundfloor>

/* summaries */
Group:Number:AVG				TempIndoor		"Avg indoor Temperature [%.1f °C]" 	<temperature>	(gCasaML)
Group:Switch:OR(ON,OFF)		Heating			"Active heatings [(%d)]"			<heating>		(gCasaML)
Group:Switch:OR(ON,OFF)		AC				"Air conditioning [(%s)]"			<climate>		(gCasaML)
Group							HumIndoor															(gCasaML)

/* PASILLO */
Group							gCorridor		"Pasillo" 							 				(gCasaML)
Number							tempCorridor 	"Temperature [%.1f °C]"				<temperature>	(TempIndoor, gCorridor)			{mqtt="<[cc:SnS/1/1/V_TEMP:state:default]"}
Number							humCorridor		"Humidity [%.1f]"					<temperature>	(Humidities)					{mqtt="<[cc:SnS/1/0/V_HUM:state:default]"}

/* SALON */
Group							gLiving 		"Salón" 							 				(gCasaML)
Number							tempLiving 		"Temperature [%.1f °C]"				<temperature>	(TempIndoor, gLiving)			{mqtt="<[cc:tmp/msr/TS00:state:default]"}
Switch							socket0Living	"Socket 0"							<socket>		(gLiving)						{mqtt=">[cc:pm/act/WS00/0:command:*:default],<[cc:pm/adv/WS00/0:state:default]", autoupdate="false"}
Switch							socket1Living	"Socket 1"							<socket>		(gLiving)						{mqtt=">[cc:pm/act/WS00/1:command:*:default],<[cc:pm/adv/WS00/1:state:default]", autoupdate="false"}
Switch							socket2Living	"Socket 2"							<socket>		(gLiving)						{mqtt=">[cc:pm/act/WS00/2:command:*:default],<[cc:pm/adv/WS00/2:state:default]", autoupdate="false"}
Switch							socket3Living	"Socket 3"							<socket>		(gLiving)						{mqtt=">[cc:pm/act/WS00/3:command:*:default],<[cc:pm/adv/WS00/3:state:default]", autoupdate="false"}

/* COCINA */
Group							gKitchen 		"Cocina" 							 				(gCasaML)

/* BAÑO */
Group							gToilet 		"Baño" 								 				(gCasaML)

/* HABITACION */
Group							gRoom			"Habitación"										(gCasaML)

/* BAÑO DORMITORIO */
Group							gBathroom		"Baño dormitorio"									(gCasaML)

/* DORMITORIO */
Group							gBedroom		"Dormitorio"										(gCasaML)

/* SIN LUGAR ESPECIFICO */
Switch							boiler			"Boiler"							<heating>		(Heating)						{mqtt=">[cc:boiler/act/BO00:command:*:default],<[cc:boiler/adv/BO00:state:default]", autoupdate="false"}
Switch							airConditioner	"Air conditioning"					<climate>		(AC)							{mqtt=">[cc:ac/act/AC00:command:*:default],<[cc:ac/adv/AC00:state:default]", autoupdate="false"}

default.sitemap

sitemap default label="CasaML"
{
	Frame label="TempIndoor" {
		Chart item=TempIndoor period=4h refresh=60000
	}
	
	Frame label="HumIndoor" {
		Chart item=HumIndoor period=4h refresh=60000
	}

	Frame label="Heating" {
		Switch item=boiler label="Boiler"
	}

	Frame label="Air conditioning" {
		Switch item=airConditioner label="Air conditioner"
	}

	Frame label="Wall sockets" {
		Switch item=socket0Living label="Socket 0"
		Switch item=socket1Living label="Socket 1"
		Switch item=socket2Living label="Socket 2"
		Switch item=socket3Living label="Socket 3"
	}
}

rrd4j.persist

// persistence strategies have a name and a definition and are referred to in the "Items" section
Strategies {
    everyDay  : "0 0 0 * * ?"
    everyHour : "0 0 * * * ?"
    everyMinute : "0 * * * * ?"

    // if no strategy is specified for an item entry below, the default list will be used
    default = everyChange
}

/* 
 * Each line in this section defines for which item(s) which strategy(ies) should be applied.
 * You can list single items, use "*" for all items or "groupitem*" for all members of a group
 * item (excl. the group item itself).
 */
Items {
    // persist all items once a day and on every change and restore them from the db at startup
    * : strategy = everyChange, everyDay, restoreOnStartup

    // additionally, persist all temperature and weather values every hour
    TempIndoor* : strategy = everyMinute
}

Found the issue. The string identification cannot be the same.

Number	tempCorridor 	"Temperature [%.1f °C]"	<temperature>	(TempIndoor, gCorridor)	{mqtt="<[cc:SnS/1/1/V_TEMP:state:default]"}
Number	tempLiving 	"Temperature [%.1f °C]"	<temperature>	(TempIndoor, gLiving)	{mqtt="<[cc:tmp/msr/TS00:state:default]"}

Changed to:

Number	tempCorridor 	"Corridor [%.1f °C]"	<temperature>	(TempIndoor, gCorridor)	{mqtt="<[cc:SnS/1/1/V_TEMP:state:default]"}
Number	tempLiving 	"Living [%.1f °C]"	<temperature>	(TempIndoor, gLiving)	{mqtt="<[cc:tmp/msr/TS00:state:default]"}
1 Like