The issue might be a difference in the two existing influxDB persistence services
conversions for org.openhab.persistence.influxdb
/**
* Converts {@link State} to objects fitting into influxdb values.
*
* @param state to be converted
* @return integer or double value for DecimalType, 0 or 1 for OnOffType and OpenClosedType,
* integer for DateTimeType, String for all others
*/
private Object stateToObject(State state) {
Object value;
if (state instanceof HSBType) {
value = ((HSBType) state).toString();
logger.debug("got HSBType value {}", value);
} else if (state instanceof PointType) {
value = point2String((PointType) state);
logger.debug("got PointType value {}", value);
} else if (state instanceof DecimalType) {
value = convertBigDecimalToNum(((DecimalType) state).toBigDecimal());
logger.debug("got DecimalType value {}", value);
} else if (state instanceof OnOffType) {
value = (OnOffType) state == OnOffType.ON ? 1 : 0;
logger.debug("got OnOffType value {}", value);
} else if (state instanceof OpenClosedType) {
value = (OpenClosedType) state == OpenClosedType.OPEN ? 1 : 0;
logger.debug("got OpenClosedType value {}", value);
} else if (state instanceof DateTimeType) {
value = ((DateTimeType) state).getCalendar().getTime().getTime();
logger.debug("got DateTimeType value {}", value);
} else {
value = state.toString();
logger.debug("got String value {}", value);
}
return value;
}
and for org.openhab.persistence.influxdb08
/**
* Converts {@link State} to objects fitting into influxdb values.
*
* @param state to be converted
* @return integer or double value for DecimalType,
* 0 or 1 for OnOffType and OpenClosedType,
* integer for DateTimeType,
* String for all others
*/
private Object stateToObject(State state) {
Object value;
if (state instanceof DecimalType) {
value = convertBigDecimalToNum(((DecimalType) state).toBigDecimal());
} else if (state instanceof OnOffType) {
value = (OnOffType) state == OnOffType.ON ? 1 : 0;
} else if (state instanceof OpenClosedType) {
value = (OpenClosedType) state == OpenClosedType.OPEN ? 1 : 0;
} else if (state instanceof HSBType) {
value = ((HSBType) state).toString();
} else if (state instanceof DateTimeType) {
value = ((DateTimeType) state).getCalendar().getTime().getTime();
} else {
value = state.toString();
}
return value;
}
I believe that youâre right, and given this I think that something should be fixed, but at least the workaround posted by @MartinKo seems to push to influxDB the location.
Hi, I got the following error on Mqsql, how can I solve it.
2020-11-21 14:36:04.052 [ERROR] [sql.internal.MysqlPersistenceService] - mySQL: Could not create table for item âiPhone5_LocStringâ with statement âCREATE TABLE Item4875 (Time DATETIME, Value VARCHAR(20000), PRIMARY KEY(Time));â: Column length too big for column âValueâ (max = 16383); use BLOB or TEXT instead
2020-11-21 14:36:04.054 [ERROR] [sql.internal.MysqlPersistenceService] - mySQL: Item âiPhone5_LocStringâ was not added to the table - removing index
2020-11-21 14:36:04.113 [ERROR] [sql.internal.MysqlPersistenceService] - mySQL: Could not store item âiPhone5_LocStringâ in database with statement âINSERT INTO Item4875 (TIME, VALUE) VALUES(NOW(),?) ON DUPLICATE KEY UPDATE VALUE=?;â: Table âOpenHAB.Item4875â doesnât exist
Iâm sorry I donât have a solution as it seems to be the way OpenHAB tries to create the table. Itâs trying to make a column with the length on 20000 characters but MySQL is limited to 16383.
I donât think thereâs much you can do. Unless of course you create the table yourself.
Youâd need to run â CREATE TABLE Item4875 (Time DATETIME, Value VARCHAR(16383), PRIMARY KEY(Time));â into MySQL.